curated by symfony

JavaScript tools you can't live without.

A set of PHP & JavaScript packages to solve every day frontend problems featuring Stimulus and Turbo.

Install it

$ composer require symfony/asset-mapper symfony/stimulus-bundle
  • assets
    • bootstrap.js
    • app.js
    • controllers.json
    • controllers
      • hello_controller.js
    • styles
      • app.css
  • package.json
  • webpack.config.js

Stimulus Controllers

Write custom JavaScript inside Stimulus Controllers

Read full Documentation
<div {{ stimulus_controller('markdown') }}>
        {{ stimulus_target('markdown', 'input') }}
    >Writing JavaScript is a **dream** with Stimulus 🤩</textarea>
        {{ stimulus_action('markdown', 'render') }}
    >Convert <twig:Icon/></button>
    <div {{ stimulus_target('markdown', 'preview') }} >
        <small>(click "Convert")</small>
import { Controller } from '@hotwired/stimulus';
import snarkdown from 'snarkdown';

export default class extends Controller {
    static targets = ['input', 'preview'];

    render(event) {
        const rendered = snarkdown(this.inputTarget.value);
        this.previewTarget.innerHTML = rendered;
(click "Convert")


Install extra Packages

Browse all Packages


Integration with Turbo for single-page-app and real-time experience

Live Components

Build dynamic interfaces with zero JavaScript


Ajax-powered, auto-completable select elements


Easy charts with Chart.js


Quickly render <React /> components & pass them props.


Quickly render <Vue /> components & pass them props.


Quickly render <Svelte /> components & pass them props.

Image Cropper

Form Type and tools for cropping images

Lazy Image

Optimize Image Loading with BlurHash

Twig Components

Create PHP classes that can render themselves

Stylized Dropzone

Form type for stylized "drop zone" for file uploads

Swup Integration

Integration with the page transition library Swup


Trigger native browser notifications from inside PHP

Toggle Password

Switch the visibility of a password field


Animated typing with Typed.js


Use Symfony's translations in JavaScript