Front-end Tools: Handling CSS & JavaScript
Symfony gives you the flexibility to choose any front-end tools you want. There are generally two approaches:
- building your HTML with PHP & Twig;
- building your frontend with a JavaScript framework like React, Vue, Svelte, etc.
Both work great - and are discussed below.
Using PHP & Twig
Symfony comes with several powerful options to help you build a modern and fast frontend:
- AssetMapper (recommended for new projects) runs entirely in PHP, doesn't require any build step and leverages modern web standards.
- Symfony Reprise brings first-class Symfony integration to modern JavaScript bundlers (Vite and Rsbuild), the way Webpack Encore did for Webpack.
- Webpack Encore is built with Node.js on top of Webpack. It's the original bundler integration; for new bundler-based projects, Symfony Reprise is the more modern and faster alternative.
| AssetMapper | Reprise | Encore | |
|---|---|---|---|
| Production Ready? | yes | yes | yes |
| Stable? | yes | yes | yes |
| Requirements | none | Node.js | Node.js |
| Requires a build step? | no | yes | yes |
| Works in all browsers? | yes | yes | yes |
| Supports Stimulus/UX | yes | yes | yes |
| Supports Sass/Tailwind | yes | yes | yes |
| Supports React, Vue, Svelte? | yes [1] | yes | yes |
| Supports TypeScript | yes | yes | yes |
| Removes comments from JavaScript | yes [2] | yes | yes |
| Removes comments from CSS | yes [2] | yes | yes [4] |
| Versioned assets | always | always | optional |
| Can update 3rd party packages | yes | no [3] | no [3] |
[1] Using JSX (React), Vue, etc with AssetMapper is possible, but you'll need to use their native tools for pre-compilation. Also, some features (like Vue single-file components) cannot be compiled down to pure JavaScript that can be executed by a browser.
[2] You can install the SensioLabs Minify Bundle to minify CSS/JS code (and remove all comments) when compiling assets with AssetMapper.
[3] If you use npm, there are update checkers available (e.g. npm-check).
[4] CSS comments can be removed using CssMinimizerPlugin, which is included
in Webpack Encore and configurable via Encore.configureCssMinimizerPlugin().
AssetMapper (Recommended)
Screencast
Do you prefer video tutorials? Check out the AssetMapper screencast series.
AssetMapper is the recommended system for handling your assets. It runs entirely
in PHP with no complex build step or dependencies. It does this by leveraging
the importmap feature of your browser, which is available in all browsers thanks
to a polyfill.
Symfony Reprise
Symfony Reprise is the modern, faster alternative to Webpack Encore. Instead of wrapping Webpack, it brings first-class Symfony integration to today's JavaScript bundlers, Vite and Rsbuild, which build on much faster tooling (esbuild, Rolldown and Rspack).
Vite and Rsbuild already handle Sass/PostCSS, TypeScript, JSX/Vue/Svelte, code
splitting, minification and Hot Module Replacement on their own. Reprise adds the
Symfony-side glue those bundlers leave out: entrypoints.json and manifest.json
generation, asset versioning, the dev server wiring, Twig functions to render the
<script> and <link> tags, and Symfony UX / Stimulus integration.
Because it generates the same entrypoints.json and manifest.json as Webpack
Encore, moving from Encore is mostly a tag-for-tag swap in your templates
(encore_entry_* becomes reprise_entry_*).
Install it with Composer and npm, then pick your bundler (Vite or Rsbuild):
1 2
$ composer require symfony/reprise
$ npm install @symfony/reprise --save-dev
For the full configuration and usage, read the Symfony Reprise documentation.
Webpack Encore
Screencast
Do you prefer video tutorials? Check out the Webpack Encore screencast series.
Note
Webpack Encore is in low-maintenance mode (bug fixes, security patches and
peerDependencies updates only). For new projects, use AssetMapper or, if
you need a bundler, Symfony Reprise.
Webpack Encore is a simpler way to integrate Webpack into your application. It wraps Webpack, giving you a clean & powerful API for bundling JavaScript modules, pre-processing CSS & JS and compiling and minifying assets.
Switch from AssetMapper
By default, new Symfony webapp projects (created with symfony new --webapp myapp)
use AssetMapper. If you still need to use Webpack Encore, use the following steps to
switch. This is best done on a new project and provides the same features (Turbo/Stimulus)
as the default webapp.
1 2 3 4 5 6 7 8 9
# Remove AssetMapper & Turbo/Stimulus temporarily
$ composer remove symfony/ux-turbo symfony/asset-mapper symfony/stimulus-bundle
# Add Webpack Encore & Turbo/Stimulus back
$ composer require symfony/webpack-encore-bundle symfony/ux-turbo symfony/stimulus-bundle
# Install & Build Assets
$ npm install
$ npm run dev
Stimulus & Symfony UX Components
Once you've installed AssetMapper, Symfony Reprise or Webpack Encore, it's time to start building your front-end. You can write your JavaScript however you want, but the recommended options are Stimulus, Turbo and a set of tools called Symfony UX.
To learn about Stimulus & the UX Components, see the StimulusBundle Documentation.
Using a Front-end Framework (React, Vue, Svelte, etc)
Screencast
Do you prefer video tutorials? Check out the API Platform screencast series.
If you want to use a front-end framework (Next.js, React, Vue, Svelte, etc), we recommend using their native tools and using Symfony as a pure API. A wonderful tool to do that is API Platform. Their standard distribution comes with a Symfony-powered API backend, frontend scaffolding in Next.js (other frameworks are also supported) and a React admin interface. It comes fully Dockerized and even contains a web server.