Webpack Encore gave Symfony first-class asset integration for Webpack.
Symfony Reprise brings the same to Vite and Rsbuild.
📣 Read the announcement blog post
Warning
Experimental this bundle is experimental and is likely to change, or even change drastically.
Symfony Reprise covers only the Symfony-side glue the bundlers leave out:
- 🎯 Multiple entries: build several independent entry points from one config
- 📄
entrypoints.json: generated in both build and dev-server modes - 🗺️
manifest.json: maps each logical filename to its hashed URL - 🔖 Asset versioning: content-hash cache busting, wired into the manifest
- 📁 File copy: copy static files (images, fonts…) into the build, keyed in the manifest
- 🔥 Dev server & HMR: points Twig at the running Vite/Rsbuild server
- 🧱 Multiple builds: drive several bundles (e.g. a main app and a separately-built embeddable widget) from one Symfony app
- 🏷️ Twig tag rendering:
reprise_entry_script_tags/reprise_entry_link_tagsrender straight fromentrypoints.json - 🧩 Symfony UX / Stimulus: registers
controllers.jsonand local controllers, eager or lazy - 🌐 CDN support: serve built assets from an absolute
publicPath - 🛡️ Subresource Integrity: SRI hashes in
entrypoints.json - 🔐 Customizable tag attributes:
RenderAssetTagEventlets listeners add, change or remove attributes on every rendered tag (e.g. a CSP nonce)
Vite and Rsbuild already handle Sass/Less/PostCSS, TypeScript, JSX/Vue/Svelte, code splitting, content hashing, source maps, minification and HMR on their own, so Symfony Reprise does not reimplement any of that.
It generates the Encore-compatible entrypoints.json and manifest.json that Reprise's own Symfony bundle (RepriseBundle) reads to render the <script> and <link> tags, wires up the native dev server, and turns your Stimulus controllers into a running application.