Changelog

New features, bug fixes, performances and security improvements.

2.26.1
2025-06-06

Conflict Resolution

Hey UX'ers!

Just a small release to fix a Live Component composer conflict.

Live Components

  • Fix conflict with symfony/type-info by @Kocal in #2828

Miscellaneous

Full Changelog: v2.26.0 -> v2.26.1

2.26.0
2025-06-05

Package Deprecations

Hey UX'ers!

This release deprecates 3 packages: symfony/ux-typed, symfony/ux-lazy-image and symfony/ux-swup. These will be removed in 3.0. Their respective README files have migration guides to help you move to alternatives.

Also included are many bug fixes and improvements, including multipolygon support in symfony/ux-map!

Twig Components

Live Components

  • Add missing DefaultActionTrait in a LiveComponent code example by @welcoMattic in #2758
  • Key is more reliable with child components by @weaverryan in #2699
  • LiveProp: Pass the property name as second parameter of the modifier callback by @jannes-io in #2744
  • Improve misleading smart render algorithm docs by @norkunas in #2741
  • Fix PropertyTypeExtractorInterface::getTypes() deprecation, use TypeInfo ^7.2 Type by @mtarld in #2607

Map

Icons

StimulusBundle

  • Skip mapping .ts controller if .js version is available by @phasdev in #2702
  • Replace chart examples by hello to avoid confusion with the ChartJS component by @welcoMattic in #2707

React

  • Improve error handling in resolveReactComponent by @teklakct in #2006

Turbo

  • Fix Turbo CI (PHPStan & Functional tests) by @Kocal in #2766

🚧 Toolkit 🚧

  • Add components metadata (for dependencies) by @Kocal in #2726
  • Remove FileType by @Kocal in #2800
  • Remove old FileType references by @Kocal in #2802
  • Add myself to Toolkit code-owners by @Kocal in #2804
  • Remove Kit::$uxIcon, make icons internal to the website by @Kocal in #2807

Typed

LazyImage

Swup

Miscellaneous

  • Configure Git username/email to github-actions(bot) when committing version updates by @Kocal in #2759
  • Rework tests-php job matrix, better covers different PHP/SF versions, test all components in a single job by @Kocal in #2734
  • Re-organize workflows: split unit/functional/app tests, split code quality workflow by @Kocal in #2764
  • Remove oldest versionadded by @smnandre in #2706
  • Homogenize PHP-CS-Fixer configuration with symfony/symfony, and run it by @Kocal in #2768
  • Replace ramsey/composer-install by composer install in app-tests workflow by @Kocal in #2780
  • Re-add PHP-CS-Fixer by @Kocal in #2803

New Contributors

Full Changelog: v2.25.2 -> v2.26.0

2.25.2
2025-05-20

StimulusAttribute fix

Hey UX'ers!

Just a small bug fix release to fix using StimulusAttributes with Twig Components.

Twig Components

  • Fix ComponentAttributes rendering when using StimulusAttributes as default attributes by @Kocal in #2757

Map

  • Remove test for render_map deprecation by @Kocal in #2755

Toolkit

  • Enforce symfony/ux-twig-component:^2.25.1 by @Kocal in #2753

Full Changelog: v2.25.1 -> v2.25.2

2.25.0
2025-05-19

Squash Deprecations

Hey UX'ers!

This release fixes Twig deprecations, improves the DX of Icons, adds UID support and fixes hydration issues in Live Components. This also includes an initial preview of the new UX Toolkit. This package isn't yet installable via Composer as it's still in heavy development, but you can check it out in the src/Toolkit.

Autocomplete

Map

  • Downgrade PHP requirement from 8.3 to 8.1 by @Kocal in #2695

Twig Components

Live Components

StimulusBundle

Toolkit

  • Introduce the UX Toolkit ✨ by @Halleck45 in #2539
  • Add missing Interface suffixes by @smnandre in #2717
  • Fix deprecation Kernel > 7.3 by @smnandre in #2714
  • Remove redundant code in Shadcn kit components by @Kocal in #2711
  • Add functional tests to render all Kit components usage codes (from their documentation), with a snapshot system by @Kocal in #2720
  • Minor adjustments on Kit creation command (reword questions, fix doc format) by @Kocal in #2724
  • Remove Kit "authors" by @Kocal in #2725
  • Improve descriptions of Shadcn components by @Kocal in #2728
  • Update snapshots & fix tests, following #2728 by @Kocal in #2735

Icons

  • Improve DX when symfony/http-client is not installed by @kbond in #2678

Turbo

Miscellaneous

  • Fix version bump for npm packages by @Kocal in #2679
  • Use git diff instead of git status by @smnandre in #2687
  • Add .editorconfig, enforce LF line-ending style by @Kocal in #2691
  • Adjust tags to v2.*.* for NPM auto-releases by @Kocal in #2685
  • Add step to disable package.json synchronization while upgrading PHP package by @Kocal in #2698
  • Replace workspace:* dependencies before publishing on npm by @Kocal in #2739
  • Fix Doctor RST warning about quotes by @smnandre in #2745

Site

  • Add manual installation steps for Component installation (and some website tweaks) by @Kocal in #2716

New Contributors

Full Changelog: v2.24.0 -> v2.25.0

2.24.0
2025-04-05

NPM Packages

Hey UX'ers!

UX packages that require JS have their JS published on NPM. This installation method is reserved for advanced users who want to decouple their JavaScript dependencies from their PHP dependencies. Symfony Flex is still the method recommended for most users.

Autocomplete

  • Fix invalid createQueryBuilder code example by @tacman in #2470
  • Rethrow BadRequestHttpException in case of malformed extra_options by @norkunas in #2600
  • Add EnumType precision by @Huluti in #2640

Map

  • Add Marker Icon customization capability by @sblondeau in #2605
  • Markers, polygons and polylines removal by @sblondeau in #2547
  • JavaScript package should not be added in user's package.json by @Kocal in #2611
  • Add missing README/LICENSE files for Map Bridges JS packages by @Kocal in #2616
  • Improve "Interact with the map" section by @Kocal in #2638
  • Make renderer tests way easier to maintain, use snapshots by @Kocal in #2658
  • Fix 2.23/2.24 changelog by @zak39 in #2674

Twig Components

Live Components

  • Move symfony/property-info to the require section by @mtarld in #2608
  • Fix default select value with preferred choices by @1ed in #2587
  • Document how to pass a value to an event listener from Twig by @Artusamak in #2610
  • Remove mention of deprecated annotation in docs by @smnandre in #2631

Turbo

StimulusBundle

Icons

Notify

Miscellaneous

  • Add workflow to automatically publish JS packages on npm by @Kocal in #2615
  • Fix links to changed dist files by @Kocal in #2563
  • Fix dist files base/head information by @Kocal in #2564
  • Ensure TypeScript code is valid by @Kocal in #2562
  • Run tests on minimum-stability=dev too by @Kocal in #2594
  • Normalize package.json files, to prepare publication on NPM by @Kocal in #2595
  • Document src/**/assets/README.md files about direct installation and recommended alternatives. by @Kocal in #2612
  • Ensure JS packages (either from vendor/ or npm versions) can be installed/used inside an Encore App by @Kocal in #2613
  • Refactor some steps in test-app-encore-app job by @Kocal in #2614
  • Document about alternative JS assets installation with npm packages by @Kocal in #2617
  • Add documentation check to PR template by @kbond in #2630
  • Document and update CI for Corepack manual installation by @Kocal in #2649

Site

New Contributors

Full Changelog: v2.23.0 -> v2.24.0

2.23.0
2025-02-10

Minor Improvements & Fixes

Hey UXer's!

Not a ground-breaking release, but some nice minor improvements and fixes.

Autocomplete

Twig Components

Live Components

  • Update CSRF docs by @smnandre in #2443
  • "Hooks: Handle Component Behavior" spacing issue in docs by @nehalgajjar in #2435
  • Check secret is not empty + add [SensitiveParameter] by @smnandre in #2461
  • Allow configuring secret for fingerprints and checksums by @smnandre in #2462
  • Use container.build_hash instead of kernel.secret in CacheWarmer by @dkarlovi in #2451
  • Remove form property in live component docs by @jannes-io in #2474
  • Document make:twig-component by @seb-jean in #2480
  • Add a link label in doc by @MrYamous in #2476
  • Update doc on how to use submitForm() by @yalit in #2510
  • Fix ComponentWithFormTrait::extractFormValues() with edge cases by @smnandre in #2491
  • Add very simple download files docs by @zefyx in #2513
  • Prevent __component property to be serialized when called JSON.stringify() by @Kocal in #2537
  • Add Documentation for testing with LiveCollectionType by @yalit in #2517
  • Fix formatting of the inline code for the text RedirectResponse by @zefyx in #2530
  • Fix ComponentWithFormTrait not working in batch actions by @smnandre in #2553

Icons

  • Fix aliases support when fetching multiples icons with Iconify by @Kocal in #2467

Map

  • Add new helpers: DistanceUnit, DistanceCalculator, CoordinateUtils by @smnandre in #2551

Chart.js

Stimulus

  • Update Stimulus Components URL by @94noni in #2495
  • Fasten lazy loading + add debug lazy:loading and lazy:loaded by @smnandre in #2463

Turbo

  • Remove obsolete Mercure configuration (docs) by @smnandre in #2524
  • Add stream format with request listener by @aleho in #2550

LazyImage

Site

Miscellaneous

  • Mention Doctor Rst in CONTRIBUTING.md by @smnandre in #2472
  • Fix and display changed dist files in the CI by @Kocal in #2503
  • Drop explicit Yarn dependencies caching steps for actions/setup-node by @Kocal in #2504

New Contributors

Full Changelog: v2.22.1 -> v2.23.0

2.22.1
2024-12-09

Bug Squashing

Hey UX'ers!

Just a small, but important bug fix release.

Autocomplete

Map

  • Fix documentations codeblocks for the LiveComponent integration by @Kocal in #2412
  • Fix default values of Stimulus Map Controller by @Kocal in #2420

Icons

StimulusBundle

Live Components

  • Update docs for PostHydrate, PreDehydrate & PreReRender by @nehalgajjar in #2431
  • Handle loose comparison with empty placeholder by @FoxCie in #2426

Twig Components

Miscellaneous

  • Apply natural import order for JS to synchronise the code base with Biome and its configuration by @chadyred in #2423
  • Drop format, lint, check-format and check-lint commands, replace them with check and ci commands by @Kocal in #2428
  • Replace CleanCSS by LightningCSS by @Kocal in #2429

Site

New Contributors

Full Changelog: v2.22.0 -> v2.22.1

2.22.0
2024-11-30

So long CSRF!

Hey UX'ers!

Here's a shiny new release for you! 🎉

Live components now rely on same-origin/CORS instead of CSRF tokens for protection. They're now stateless and the session is no longer required! In Turbo, <Turbo:Stream> and <Turbo:Frame> Twig components were added plus support for multiple Mercure topics in turbo_stream_listen. The Map component now supports polylines and have come alive with Live Components. Across the board, we've improved performance, fixed bugs, and updated documentation.

Autocomplete

Live Components

Twig Components

StimulusBundle

Turbo

Icons

Map

Svelte

React

Translator

  • Handle W3C locale format on document element by @aleho in #2390

Site

Miscellaneous

  • Add myself to code-owners by @Kocal in #2308
  • Update the issue template by @smnandre in #2320
  • Add CI workflow to compute diff between files dist files by @Kocal in #2269
  • Add per-package Yarn scripts (build, watch, test, lint, ...) by @Kocal in #2326
  • Some improvements for dependencies management when testing by @Kocal in #2349
  • Fix some misc doc issues by @javiereguiluz in #2387
  • Add PR template and auto-close PR on subtree split repositories by @Kocal in #2395
  • Add CONTRIBUTING.md by @Kocal in #2408

New Contributors

Full Changelog: v2.21.0 -> v2.22.0

2.21.0
2024-10-22

Turbo + TwigComponents = ❤️

Hey UX-er's!

In addition to many minor bug fixes and improvements across all packages, this release adds new <twig:Turbo:Stream:*> Twig components to Turbo. Also in Turbo, a newTurboStreamResponse and TurboStream helpers we added.

Map

  • Explicitly require StimulusBundle in Bridges, fix tests by @Kocal in #2207
  • Update index.rst by @ebedy in #2229

Translator

  • Many performance improvements on the cache warming by @Kocal in #2206

Twig Components

Toggle Password

React

  • Update some dependencies to fix some issues from Dependabot by @Kocal in #2219
  • Add permanent option to react_component function by @smnandre in #2283
  • Update phpunit.xml.dist by @smnandre in #2286

Swup

  • For Swup's dev dependencies exclusion from our yarn.lock by @Kocal in #2221

StimulusBundle

  • Normalize Stimulus controller name in event name by @7-zete-7 in #2159

Autocomplete

Icons

Turbo

Dropzone

  • Enable file replacement via "drag-and-drop" by @rrr63 in #2154

Live Components

Miscellaneous

New Contributors

Full Changelog: v2.20.0 -> v2.21.0

2.20.0
2024-09-24

Performance and Optimization!

Hey UX-ers!

This release is packed full of bug fixes and new features. You can now add Polygons in Map and configure icon sets and aliases in Icons. There are also some great performance optimizations, especially in Twig/Live components and StimulusBundle.

Map

Twig Components

Live Components

Autocomplete

  • Reset form state on each request for applications that reuse the Symfony application between requests by @dotdevio in #2094
  • Translate "Add ..." text by @jmsche in #2108

Icons

Dropzone

  • Change physical link to the default style file by @chadyred in #2188

Translator

  • Option to throw an exception instead of returning the message as is when the message is not found. by @Crovitche-1623 in #2185

StimulusBundle

  • Improve StimulusAttributes rendering performances by switching to html escaping strategy by @Kocal in #2180

Miscellaneous

New Contributors

Full Changelog: v2.19.3 -> v2.20.0

2.19.2
2024-08-13

Enable Anon. Twig Components in Bundles

Another follow up to 2.19.0 that fixes UX Map plus enables a convention for providing anonymous Twig Components in 3rd-party bundles!

Map

  • Re-add keyword "symfony-ux", to fix Symfony Flex package.json resolving by @Kocal in #2052
  • [Leaflet] Fix marker icon gradients rendering, which can fails on some projects by @Kocal in #2055

Twig Components

  • Adding convention to load Anonymous components from bundles by @yceruto in #2019

Live Components

  • Update naming of stimulus controller on default attributes - index.rst by @DennisdeBest in #2046

Autocomplete

New Contributors

Full Changelog: v2.19.1 -> v2.19.2

2.19.1
2024-08-12

UX Map Improvements

Just a small follow up to 2.19.0 that adds some missing UX Map features!

Map

  • Add the possibility to not configure map zoom/center if fit bounds to markers by @Kocal in #2045
  • Add support for libraries for Google Bridge, inject provider's SDK (L or google) to dispatched events by @Kocal in #2044

Full Changelog: v2.19.0 -> v2.19.1

2.19.0
2024-08-12

New UX Map Package

Hey UX-ers!

This is a big new release with a lot of bug fixes, quality of live improvements, and a new UX Map package. A new live_action() Twig function was added to dramatically reduce the boilerplate for Live Component actions.

Translator

Turbo

Twig Components

Live Components

Dropzone

  • Remove event listeners on disconnect by @aleho in #1951

Icons

React

Lazy Image

Map

  • Create Map component by @Kocal in #1937
  • Rename "symfony/ux-map-%s" to "symfony/ux-%s-map" by @Kocal in #2031
  • Fix custom attribute "data-controller" usage by @Kocal in #2032
  • [Leaflet] Fix Marker inside-circle by @Kocal in #2036
  • [Leaflet] Fix Popup's automatic-content by @Kocal in #2035
  • Change "BeforeConnect" for "BeforeCreate" in documentation by @Kocal in #2039
  • Add "extra" data for markers and infowindows by @Kocal in #2040
  • Fix some comments in component defer part by @Nek- in #2043

Miscellaneous

New Contributors

Full Changelog: v2.18.1 -> v2.19.0

2.18.1
2024-06-12

Hotfix

👋🏻 This is a small release that fixes some issues we had in 2.18.0.

Twig Components

  • Revert throwing exception when public property is unitialized by @smnandre in #1911
  • Revert removing twig_component.controllers_json by @smnandre in #1908

Live Components

  • Accept live component Content-Type with suffix by @WebMamba in #1903

Stimulus

Translator

Full Changelog: v2.18.0 -> v2.18.1

2.18.0
2024-06-07

Mostly Maintenance

Hey UX'ers!

This is mostly a maintenance release with a lot of small fixes and improvements across all components. The most notable changes are the addition of Slovak translations for the Autocomplete component the abstraction of image content fetching in the Lazy Image component.

Lazy Image

Autocomplete

Turbo

Live Components

Twig Components

Icons

Translator

Stimulus

Chart.js

ux.symfony.com

New Contributors

Full Changelog: v2.17.0 -> v2.18.0

2.17.0
2024-04-23

New UX Icons Package

Hey UX-ers!

This is a big release - lots of new features to Twig/Live Components and the first release of UX Icons! With UX Icons, comes a beautiful icon search on ux.symfony.com!

Live Components

Twig Components

Icons

Chart.js

Autocomplete

  • Command make:autocomplete-field output a doc compliant class by @lucbu in #1699
  • Use choice_value in the WrappedEntityTypeAutocompleter in EntityAutocompleteField by @jakubtobiasz in #1723

Turbo

Lazy Image

New Contributors

Full Changelog: v2.16.0 -> v2.17.0

2.16.0
2024-02-29

Live Components is Stable 🥳

Hi UX'ers!

This release is the first that declares Live Components as stable 🎆! This means that it is now protected by our backwards compatibility promise. However, there are some BC breaks in LiveComponents that will affect most projects. See https://github.com/symfony/ux/blob/2.x/src/LiveComponent/CHANGELOG.md#2160

In addition, this release has a number of fun features & fixes.

Live Components

  • LiveComponents is now stable and no longer experimental 🥳

  • [BC BREAK] The data-action-name attribute behavior was removed in favor of using Stimulus "action parameters" and data-live-action-param. This is a breaking change if you were using the data-action-name attribute directly in your templates. #1418

    To upgrade your application, follow these changes:

    <button
        data-action="live#action"
    -     data-action-name="debounce(300)|save"
    +     data-live-action-param="debounce(300)|save"
    >Save</button>
    

    To pass arguments to an action, also use the Stimulus "action parameters" syntax:

    <button
        data-action="live#action"
    -      data-action-name="addItem(id={{ item.id }}, itemName=CustomItem)"
    +      data-live-action-param="addItem"
    +      data-live-id-param="{{ item.id }}"
    +      data-live-item-name-param="CustomItem"
    >Add Item</button>
    

    Additionally, the prevent modifier (e.g. prevent|save) was removed. Replace this with the standard Stimulus :prevent action option:

    <button
    -     data-action="live#action
    +     data-action="live#action:prevent"
    -     data-action-name="prevent|save"
    +     data-live-action-param="save"
     >Save</button>
    
  • [BC BREAK] The data-event attribute was removed in favor of using Stimulus "action parameters": rename data-event to data-live-event-param. Additionally, if you were passing arguments to the event name, use action parameter attributes for those as well - e.g. data-live-foo-param="bar". #1418

  • Reverted setting ignoreActiveValue: true in Idiomorph #1548

  • New placeholder macro to generate defer/lazy skeleton #1532

  • improve TestLiveComponent::actingAs() #1461

  • Drop Twig 2 support #1436

  • Add better error message when hydrating dates #1431

  • Store TemplateMap in build_dir #1525

Twig Component

  • Introduce CVA to style TwigComponent #1416
  • Drop Twig 2 support #1436
  • Fix full context is stored in profiler #1552

Autocomplete

Translator

  • Increase version range of intl-messageformat to ^10.5.11, in order to see a faster implementation of ICU messages parsing. #1443

New Contributors

Full Changelog: v2.15.0 -> v2.16.0

Have fun!

2.15.0
2024-02-20

LiveComponents & Autocomplete improvements & more

Hi UX'ers!

This release contains a mixture of new features and important bug fixes, especially LiveComponents & Autocomplete, which were discovered after the morphing library change in 2.14.0.

Autocomplete

Add doctrine/orm 3 support #1468

  • Allow passing extra options to the autocomplete fields #1322
  • Fix 2 bugs where TomSelect would reset when not necessary #1502
  • Add one missing German translation #1521

Chartjs

  • Remove restriction that prevented Chart.js 3.9 #1518

LiveComponent

  • [BC BREAK] The data-live-id attribute was changed to id #1484
  • Fixed child handling bug during re-rendering introduced with the new morphing library in 2.14.0 #1484
  • Fix bug where the active input would maintain its value, but lose its cursor position #1501
  • Restrict Twig 3.9 for now #1486

Turbo

  • Add Turbo 8 support #1476
  • Fix missing use statement used during broadcast #1475

TwigComponent

  • Add the ability to render specific attributes from the attributes variable #1442
  • Restrict Twig 3.9 for now #1486
  • Build reproducible TemplateMap to fix possible post-deploy breakage #1497

New Contributors

Full Changelog: v2.14.2 -> v2.15.0

Have fun!