Changelog

New features, bug fixes, performances and security improvements.

3.1.0
2026-05-29

Changelog (v3.0.0 -> v3.1.0)

  • security #557 [LiveComponent] Require X-Requested-With header to prevent CSRF (@Kocal)
  • security #cve-2026-49216 [Autocomplete] Fix XSS via unescaped AJAX response data (@Kocal)
  • security #cve-2026-49208 [LiveComponent] Parse format-less date LiveProps strictly with RFC 3339 (@Kocal)
  • security #cve-2026-49209 [LiveComponent] Cap the number of actions per _batch request (@Kocal)
  • security #cve-2026-49210 [LiveComponent] Reject malicious child component tags (@Kocal)
  • security #cve-2026-49212 [LiveComponent] Bind HMAC checksum to component name and slot (@Kocal)
  • security #cve-2026-49211 [Autocomplete] Escape LIKE wildcards in the search query (@Amoifr)
  • feature #3601 [Translator] Add ux:translator:warm-cache command (@Kocal)
  • feature #3432 [LiveComponent] Improve form validation error messages in exceptions (@PierreCapel)
  • feature #3455 Use twig.safe_class tag and move setLexer to TwigComponentPass (@GromNaN)
  • feature #3586 [Toolkit][Shadcn] Align button-group with shadcn reference (@seb-jean)
  • feature #3589 [Toolkit][Shadcn] Align toggle-group with shadcn reference (@seb-jean)
  • feature #3587 [Toolkit][Shadcn] Align hover-card with shadcn reference (@seb-jean)
  • feature #3584 [Toolkit][Shadcn] Align collapsible with shadcn reference (@seb-jean)
  • feature #3561 [Toolkit][Shadcn] Align table with shadcn reference (@seb-jean)
  • feature #3563 [Toolkit][Shadcn] Align skeleton with shadcn reference (@seb-jean)
  • feature #3583 [Toolkit][Shadcn] Align dialog with shadcn reference (@seb-jean)
  • feature #3585 [Toolkit][Shadcn] Align empty with shadcn reference (@seb-jean)
  • bug #3566 [LiveComponent] Make LiveComponentSubscriber safe-by-default (@Kocal)
  • feature #3591 [Toolkit][Shadcn] Align switch with shadcn reference (@seb-jean)
  • feature #3592 [Toolkit][Shadcn] Align field with shadcn reference (@seb-jean)
  • feature #3593 [Toolkit][Shadcn] Align radio-group with shadcn reference (@seb-jean)
  • feature #3594 [Toolkit][Shadcn] Align input-group with shadcn reference (@seb-jean)
  • feature #3590 [Toolkit][Shadcn] Align input with shadcn reference (@seb-jean)
  • feature #3559 [Toolkit][Shadcn] Align item with shadcn reference (@seb-jean)
  • feature #3574 [Toolkit][Shadcn] Align label with shadcn reference (@seb-jean)
  • feature #3573 [Toolkit][Shadcn] Align spinner with shadcn reference (@seb-jean)
  • feature #3576 [Toolkit][Shadcn] Align checkbox with shadcn reference (@seb-jean)
  • feature #3577 [Toolkit][Shadcn] Align progress with shadcn reference (@seb-jean)
  • feature #3581 [Toolkit][Shadcn] Align kbd with shadcn reference (@seb-jean)
  • feature #3553 [Toolkit][Shadcn] Align alert-dialog with shadcn reference (@seb-jean)
  • feature #3551 [Toolkit][Shadcn] Align accordion with shadcn reference (@seb-jean)
  • feature #3539 [Toolkit][Shadcn] Align separator with shadcn reference (@seb-jean)
  • feature #3552 [Toolkit][Shadcn] Align alert with shadcn reference (@seb-jean)
  • feature #3554 [Toolkit][Shadcn] Align aspect-ratio with shadcn reference (@seb-jean)
  • feature #3555 [Toolkit][Shadcn] Align avatar with shadcn reference (@seb-jean)
  • feature #3556 [Toolkit][Shadcn] Align badge with shadcn reference (@seb-jean)
  • feature #3557 [Toolkit][Shadcn] Align breadcrumb with shadcn reference (@seb-jean)
  • feature #3558 [Toolkit][Shadcn] Align button with shadcn reference (@seb-jean)
  • feature #3564 [Toolkit][Shadcn] Align pagination with shadcn reference (@seb-jean)
  • feature #3567 [Toolkit][Shadcn] Align tabs with shadcn reference (@seb-jean)
  • feature #3568 [Toolkit][Shadcn] Align tooltip with shadcn reference (@seb-jean)
  • feature #3569 [Toolkit][Shadcn] Align textarea with shadcn reference (@seb-jean)
  • feature #3570 [Toolkit][Shadcn] Align resizable with shadcn reference (@seb-jean)
  • bug #3565 [Autocomplete] Use hash_equals() to compare the extra_options checksum (@Amoifr)
  • feature #3560 [Toolkit][Shadcn] Align toggle with shadcn reference (@seb-jean)
  • feature #3538 [Toolkit][Shadcn] Align card with shadcn reference (@seb-jean)
  • feature #3505 [Turbo] Add <turbo-mercure-stream-source> custom element (@seb-jean)
  • feature #3531 [Toolkit] Add version-added key in toolkit manifest (@MrYamous)
  • feature #3460 [CalendarLink] Add component (@zairigimad)
  • bug #3508 [LiveComponent] Fix dynamic template resolution when using "loading" attribute (@xDeSwa)
  • bug #3500 [TwigComponent] Include attribute name in null value error message (@IndraGunawan)
  • feature #3527 [Toolkit][Shadcn] Rework collapsible recipe to use provide()/inject() (@Kocal)
  • feature #3526 [Toolkit][Shadcn] Rework tooltip recipe to use provide()/inject() (@Kocal)
  • feature #3525 [Toolkit][Shadcn] Rework alert-dialog recipe to use provide()/inject() (@Kocal)
  • feature #3524 [Toolkit][Shadcn] Rework dialog recipe to use provide()/inject() (@Kocal)
  • feature #3523 [Toolkit][Shadcn] Rework accordion recipe to use provide()/inject() (@Kocal)
  • feature #3528 [Toolkit][Shadcn] Rework toggle-group recipe to use provide()/inject() (@Kocal)
  • feature #3521 [Toolkit][Shadcn] Rework tabs recipe to use provide()/inject() (@Kocal)
  • feature #3512 [TwigComponent] Add provide() and inject() Twig functions (@Kocal)
  • feature #3478 [Toolkit][Shadcn] Add hover-card recipe (@Amoifr)
  • feature #3485 [Toolkit][Shadcn] Add resizable recipe (@Amoifr)
  • feature #3462 [Turbo] Add TurboFrame service to detect Turbo Frame requests (@seb-jean)
  • feature #3439 [Turbo] Add minimal frame layout template (@seb-jean)
  • feature #3464 [Toolkit][Shadcn] Add radio-group, collapsible, typography and toggle-group recipes (@Amoifr)
  • feature #3442 [LiveComponent] Use aria-busy attribute during component re-render (@Amoifr)
  • feature #3459 [Toolkit][Flowbite] add Dropdown and Avatar component (@DcgRG)
2.36.0
2026-05-29

Changelog (v2.35.0 -> v2.36.0)

  • security #557 [LiveComponent] Require X-Requested-With header to prevent CSRF (@Kocal)
  • security #cve-2026-49216 [Autocomplete] Fix XSS via unescaped AJAX response data (@Kocal)
  • security #cve-2026-49208 [LiveComponent] Parse format-less date LiveProps strictly with RFC 3339 (@Kocal)
  • security #cve-2026-49209 [LiveComponent] Cap the number of actions per _batch request (@Kocal)
  • security #cve-2026-49210 [LiveComponent] Reject malicious child component tags (@Kocal)
  • security #cve-2026-49212 [LiveComponent] Bind HMAC checksum to component name and slot (@Kocal)
  • security #cve-2026-49211 [Autocomplete] Escape LIKE wildcards in the search query (@Amoifr)
3.0.0
2026-04-13

New Major Release! 🎉

Changelog (v2.35.0 -> v3.0.0)

  • feature #3452 [LiveComponent] Remove compatibility layer with Symfony PropertyInfo <7.1 (@Kocal)
  • feature #3453 Update minimum required Symfony version to 7.4 (@Kocal)
  • feature #3450 Upgrade minimum required PHP version to 8.4 (@Kocal)
  • feature #3433 [Cropper] Always apply rotation in Crop::getCroppedImage() and Crop::getCroppedThumbnail() (@MrYamous)
  • bug #3398 Post-merge fixes for 3.x (@Kocal)
  • feature #3186 [Autocomplete][Turbo] Remove BC layers for methods and parameters (@Kocal)
  • bug #3191 Fix 2.x -> 3.x merge (@Kocal)
  • bug #3187 Add phpunit.dist.xml in .gitattributes (@Kocal)
  • bug #3182 Drop Symfony PHPUnit Bridge in favor of PHPUnit >= 11.0 (@Kocal)
  • feature #3180 [StimulusBundle] Remove deprecations for 3.0 (@Kocal)
  • feature #3179 [Vue] Remove deprecations for 3.0 (@Kocal)
  • feature #3103 [Autocomplete] Remove deprecated code for 3.0 (@smnandre)
  • feature #3115 [Map][Google] Upgrade @googlemaps/js-api-loader to ^2.0 (@Kocal)
  • bug #3105 [TwigComponent] Remove dev-dependency on WebpackEncoreBundle (@Kocal)
  • feature #3102 [Chartjs][Notify][React][Svelte] Remove StimulusHelper deprecation for 3.0 (@smnandre)
  • feature #3101 [Vue] Remove deprecations for 3.0 (@smnandre)
  • feature #3100 [Turbo] Remove deprecations for 3.0 (@smnandre)
  • feature #3040 [TwigComponent][UX3] Remove deprecations (@smnandre)
  • feature #3051 [LiveComponent][UX3] Remove deprecations (@smnandre)
  • feature #3054 [Map] Remove deprecations from Map (@Kocal)
  • feature #2998 Upgrade minimum required PHP version to 8.2 (@Kocal)
  • feature #2996 Update minimum required Symfony version to ^6.4 (@Kocal)
  • feature #2995 [TogglePassword] Remove package (@Kocal)
  • feature #2994 [LazyImage] Remove package (@Kocal)
  • feature #2993 [Typed] Remove package (@Kocal)
  • feature #2985 [Swup] Remove package (@smnandre)
2.35.0
2026-04-13

Changelog (v2.34.0 -> v2.35.0)

  • feature #3444 [Svelte] Deprecate the package (@Kocal)
  • feature #3422 [Autocomplete] Add option clear_on_focus (@zairigimad)
  • feature #3368 [Toolkit][Flowbite] Add kit Flowbite 4.0 base (@DcgRG)
  • feature #3421 [Toolkit][Shadcn] Add Toggle (@zairigimad)
  • feature #3407 [Chartjs][Icons][Map][Notify][React][Svelte][Toolkit][Turbo][TwigComponent][Vue][Native] Allow Symfony UX 3.x packages (@Kocal)
  • feature #3414 [Native] Introduce assets/ to ease installation of ``@hotwired/hotwire-native-bridge JS dependency (@Kocal)
  • feature #3409 [Toolkit] Embrace html_attr_type from twig/html-extra:^3.24 to correctly merge trigger's attributes (@Kocal)
  • feature #3408 [TwigComponent] Add support for AttributeValueInterface from twig/html-extra:^3.24.0 in ComponentAttributes (@Kocal)
2.34.0
2026-03-22

CropperJS PHP Rotations 🔄

Changelog (v2.33.0 -> v2.34.0)

  • bug #3404 [Native] Fix invalid priority for DevServerListener (@zairigimad)
  • bug #3401 [Autocomplete][Chartjs][Cropperjs][Dropzone][LazyImage][LiveComponent][Map][Notify][React][StimulusBundle][Svelte][Swup][TogglePassword][Turbo][Typed][Vue][Translator] Update package.json to 2.33.0 (@Kocal)
  • feature #3347 [Cropperjs] Add image rotation in php side (@MrYamous)
  • bug #3400 [CI] Update permissions to allow pushing changes to the repository during NPM release (@Kocal)
  • bug #3367 [LiveComponent] Allow empty values to bypass model validation modifiers (@xDeSwa)
  • bug #3389 [React] Fix internal requirement of React 19 (devDependencies) (@milanqtx)
2.33.0
2026-03-17

UX Native!

Major Changes

  • UX Native: new component (again!) :rocket:
  • UX Toolkit: many changes and fixes on existing recipes from Shadcn Kit
  • UX LiveComponent: add option fetchCredentials
  • UX TwigComponent: dynamic template at runtime

Minor Changes

  • UX TwigComponent: minor performance improvement, and a fix when the components profiling was always enabled
  • UX Translator: minor performance improvement
  • UX React: support for React 19
  • UX Icons: Add support for suffixes

Documentation Changes

  • UX TwigComponent: readonly components, HoC components
  • UX Svelte: Svelte 4 support

Changelog (v2.32.0 -> v2.33.0)

  • bug #3342 [Translator] Improve performance of dumper under certain condition (@mkrauser)
  • feature #3338 [Native] Init Hotwire Native (@imad)
  • feature #3356 [Toolkit][Shadcn] Add Tabs recipe (@DcgRG)
  • bug #3372 [LiveComponent][TwigComponent] Fix reflection issues for private properties from trait and parent class (@kachnitel)
  • bug #3376 [Toolkit][Shadcn] Fix initial "open" state for AlertDialog and Dialog (Sylvain Gagnot)
  • bug #3381 [TwigComponent] Fix profiling loaded in production (@VincentChataignier)
  • feature #3364 [LiveComponent] Add debug:live-component command (Mickaël BULIARD)
  • bug #3373 [Toolkit][Shadcn] Fix Tooltip's wrapper when re-rendered by LiveComponent (Sylvain Gagnot)
  • feature #3361 [LiveComponent][TwigComponent] Add support for dynamic template resolution (@xDeSwa)
  • bug #3363 [LiveComponent] Fix preservation of !important inline style changes (@xDeSwa)
  • feature #3362 Migrate from tsup (deprecated) to tsdown (@Kocal)
  • bug #3359 Fix JS unit testing script (@Kocal)
  • bug #3355 Fix CI (@Kocal)
  • bug #3353 [TwigComponent] Fix PHPDoc types of TestLiveComponent::call() (@StevenRenaux)
  • bug #3348 [Toolkit] Fix tailwind_merge parentheses and simplify attributes … (@seb-jean)
  • bug #3345 [Toolkit] Rewrite @prop documentation to normalize Defaults to ... (@Kocal)
  • feature #3324 [Icons] Add support for suffixes (@seb-jean)
  • feature #3336 [LiveComponent] Add option fetchCredentials (@Kocal)
  • bug #3343 [Toolkit] Improve @prop and @block annotations description (@Kocal)
  • bug #3341 [TwigComponent] Minor performance improvement by caching PropertyAccessor::isWritable() calls (@Kocal)
  • bug #3340 [TwigComponent] Minor performance improvements when using { props } (@Kocal)
  • feature #3295 [TwigComponent] Add support for anonymous component name resolution in other bundle (@Phil23)
  • feature #3326 [Toolkit][Shadcn] Update Avatar component (@ker0x, @Kocal)
  • bug #3337 [LiveComponent] Fix tests with lowest dependencies, incompatibility with zenstruck/foundry and Symfony 5.4 (@GromNaN)
  • bug #3325 Fix minimum requested 6.x version of FrameworkBundle for LiveComponent (@Kocal)
  • bug #3323 [Autocomplete][Chartjs][Cropperjs][Dropzone][LazyImage][React][StimulusBundle][Svelte][Swup][TogglePassword][Turbo][Typed][Vue][Translator] Use Extension from DependencyInjection instead of HttpKernel (@Kocal)
  • feature #3318 [Toolkit][Shadcn] Update Alert CSS class, add Alert:Action component (@ker0x)
  • feature #3321 [Toolkit][Shadcn] Add Tooltip component (@Kocal)
  • feature #3292 [Toolkit][Shadcn] Add Accordion component (@daFish)
  • bug #3320 Fix Field demo code (@Kocal)
  • feature #3314 [React] Add support for React 19 (@Kocal)
  • feature #3299 [Toolkit][Shadcn] Rework recipes docs/examples (@Kocal)
  • bug #3304 Fix npm releases due to repository issue (@Kocal)
  • bug #3300 [Toolkit][Shadcn] Fix text color in dark mode for AlertDialog/Dialog components (@Kocal)
  • bug #3291 [Toolkit][Shadcn] Fix text color of Badge destructive variant (@Jibbarth)
  • feature #3282 [Toolkit] Prepare base for recipe type Block (@jeremyFreeAgent)
  • bug #3290 Update root JS dependencies (@Kocal)
  • feature #3285 [StimulusBundle] Change AssetMapper excluded_patterns from **/controllers.json to */controllers.json (@Kocal)
  • bug #3280 [CI] Fix compatibility issues with Symfony 8 and spatie/phpunit-snapshot-assertions (@Kocal)
  • bug #3279 [CI] Remove usage of framework.annotations.enabled (@Kocal)
  • bug #3278 [Toolkit] Fix recipe name display when asking for what alternative recipe to install (@jeremyFreeAgent)
  • bug #3277 [Toolkit] fix getRecipes method with type (@jeremyFreeAgent)
  • bug #3273 [Turbo] Fix SplObjectStorage::attach deprecation in Doctrine Broadcast listener (@GromNaN)
2.32.0
2026-01-05

Toolkit!

Autocomplete

Turbo

  • Fix Mercure custom transport with turbo_steam_listen by @Fan2Shrek in #3147

Twig Components

Live Components

  • Add clarification of component re-rendering vs. loading content by @Wertisdk in #3164
  • Pin phpdocumentor/reflection-docblock to non dev version by @Kocal in #3250
  • Update index.rst with MarkdownTextarea template info by @Kocal in #3267

Map

Icons

  • Fix aliases and default_attributes config types for config/reference.php by @Kocal in #3200

Toolkit

Translator

  • Refactor API to use string-based translation keys instead of generated constants by @Kocal in #3208
  • Early exit parameters extraction from Intl messages, if no { is found by @Kocal in #3219
  • Add option ux_translator.dump_typescript to enable/disable TypeScript types generation by @Kocal in #3218
  • Reword dump_typescript option description by @Kocal in #3221
  • Refactor TranslationsDumper options from __constructor and setters, to dump method by @Kocal in #3244
  • Add keys_patterns configuration option to filter dumped translations by key patterns by @Kocal in #3248

Site

Miscellaneous

New Contributors

Full Changelog: v2.31.0 -> v2.32.0

2.31.0
2025-10-23

E2E Tests with Playwright

Live Components

  • Fix new URL generation when using LiveProp with custom fieldName by @Kocal in #3058
  • Small update to explicit custom template path on components by @DocFX in #3072
  • Improve performance for LiveUrlSubscriber by @dannyvw in #3077
  • Replace the browser's URL before triggering render:finished hook by @xDeSwa in #3088
  • Add missing import to code snippet by @rgeraads in #3127
  • Add dispatch browser event assertion in InteractsWithLiveComponents by @Develog in #3136

Twig Components

Icons

Map

  • Add fitBoundsToMarkers option to Twig extension and component by @ker0x in #3114
  • Display warning when trying to define a custom icon for a Marker that already has an Icon by @ker0x in #3118

Vue

StimulusBundle

Toolkit

Translator

Site

  • Add examples listing on homepage, improve example page by @Kocal in #3078
  • Fix UX Translator demo on "price" parameter by @Kocal in #3081
  • Lock icons by @Kocal in #3084
  • Fix port to 9044 and upgrade UX dependencies by @Kocal in #3093

Miscellaneous

  • Fix highest jobs with Doctrine ^3.0 by @Kocal in #3059
  • Configure .gitattributes to ignore Vitest and Playwright config files from export by @Kocal in #3062
  • PHP CS Fixer - apply const->var annotation conversion by @keradus in #3065
  • Prevent pnpm to install new packages published the same day by @Kocal in #3083
  • Fix deprecations with zenstruck/foundry:^2.7 by @Kocal in #3089
  • Add doc for E2E steps + minor modifications by @raphael-geffroy in #3086
  • Refactor "test_package.sh" to its original purpose, add multiples checks for packages definition by @Kocal in #3090
  • Fix composer config to avoid modifying package.json automatically by @Crovitche-1623 in #3091
  • Remove explicit configuration twig.exception_controller from Kernel for testing by @Kocal in #3106
  • Remove duplicated matrix entry for Symfony version in unit-tests.yaml by @Kocal in #3108
  • Add --json flag to composer config command by @Kocal in #3139
  • Configure OIDC for trusted auto-publishing by @Kocal in #3142

New Contributors

Full Changelog: v2.30.0 -> v2.31.0

2.30.0
2025-08-27

PHP 8.5

Hey UX'ers!

This release focuses on stability and compatibility: Live Components and Maps get key bug fixes, React and Icons see small improvements, and Symfony UX is now fully compatible with PHP 8.5.

Twig Components

Live Components

  • Return empty string for data-value="" instead of falling back to null by @mercuryseries in #3031
  • Clean versionadded by @smnandre in #3049
  • Refactor and fix some edge cases on new URL generation with path + query LiveProps by @Kocal in #3053
  • Fix BC Break when defining LiveProp properties with PHPDoc type and no-native type, when using TypeInfo by @norkunas in #3043

Map

React

  • Fix importmap to require react-dom/client by @Kocal in #3030

Icons

  • Fallback to default dimensions 16/16 when Icon's dimensions on Iconify are missing by @stlgaits in #3042

Miscellaneous

New Contributors

Full Changelog: v2.29.2 -> v2.30.0

2.29.2
2025-08-19

fix LiveProp

Hey UX'ers!

This release fixes a Live Component, LiveProp URL generation bug, it now correctly re-use the previous logic with support of Serializer and custom modifiers.

Live Components

  • Fix new URL calculation with LiveProp using Serializer (and attributes), and when using custom modifier by @Kocal in #2988

Icons

ToolKit

  • Improve CI workflows for linting Kits by @Kocal in #2984
  • Rework kits architecture, change term for "recipe" by @Kocal in #2986

Miscellaneous

Full Changelog: v2.29.1 -> v2.29.2

2.29.1
2025-08-08

npm fix

Hey UX'ers!

Small bug fix release to fix installing the Map bridges with npm.

Map

  • Allows Bridges JavaScript assets to be installed with npm when using file:vendor/symfony/ux-*-map/assets by @Kocal in #2983

Full Changelog: v2.29.0 -> v2.29.1

2.29.0
2025-08-08

Symfony 8!

Hey UX'ers!

This release adds Symfony 8 support for all packages! In Map, we've added clustering support. We've also deprecated the TogglePassword package, Symfony UX 3.0 will drop this package.

Autocomplete

Map

Live Components

  • Fix #[LiveProp(writable: true, url: true)] that was not updated as a query parameter by @mbuliard in #2976
  • Fix typo on Valid constraint name by @Seb33300 in #2980

TogglePassword

Vue

Miscellaneous

New Contributors

Full Changelog: v2.28.2 -> v2.29.0

2.28.2
2025-07-30

Whoopsie 2

Hey UX'ers!

This fixes a LiveComponent regression added in 2.28.0.

Live Components

Icons

  • Change xmlns attribute of downloaded icons to http://www.w3.org/2000/svg by @roverwolf in #2959

Miscellaneous

New Contributors

Full Changelog: v2.28.1 -> v2.28.2

2.28.1
2025-07-28

Whoopsie

Hey UX'ers!

We got a little too fancy in our package.json files.

Miscellaneous

  • Fix package.json files to not use "catalog" feature from PNPM, as it breaks installation from vendor/ PHP packages by @Kocal in #2952

Full Changelog: v2.28.0 -> v2.28.1

2.28.0
2025-07-28

Map Graduates 🎓

Hey UX'ers!

Map now has minZoom/maxZoom options and has graduated from experimental to stable! 🎉 In LiveComponents, the LiveProp can now map to a routing parameter. Autocomplete now has the ability to disable plugins.

Warning

If using React with symfony/asset-mapper and NOT symfony/flex, there is a small BC break. See the CHANGELOG for mitigation details.

Autocomplete

Live Components

  • Update css to cover more data-loading use cases by @barlito in #2891
  • Fix BC break when using PropertyTypeExtractorInterface::getType() on a #[LiveProp] property x when getter getX exists by @Kocal in #2922
  • Add validation modifiers (min_length, max_length, min_value, max_value) to data-model inputs by @xDeSwa in #2926
  • Add the possibility to map LiveProp as a path parameter by @mbuliard in #2673

Icons

Map

  • Rewrite documentation about extra data by @Kocal in #2871
  • Add options minZoom and maxZoom by @Kocal in #2896
  • Mark package as non-experimental by @Kocal in #2945
  • Replace deprecation Vitest option browser.name to browser.instances by @Kocal in #2947

Translator

  • Minor fixes in tests context by @Kocal in #2870
  • Add functional test to ensure only enabled locales are dumped by @Kocal in #2946

Swup

🚧 Toolkit 🚧

Site

Miscellaneous

  • Run JS tests under multiple JS versions, define .nvmrc to 22.6 by @Kocal in #2865
  • Migrate PHPUnit configs and homogenize them by @Kocal in #2867
  • Fix functional tests Turbo (Chrome 137 & dev-tools) by @Kocal in #2873
  • Migrate bin/*.js to TypeScript, use tsx by @Kocal in #2866
  • Upgrade Rollup dependencies by @Kocal in #2876
  • Remove Babel dependencies by @Kocal in #2877
  • Remove @symfony/stimulus-testing dev dependencies by @Kocal in #2879
  • Remove useless eslint- comments by @Kocal in #2880
  • (Re-)use ramsey/composer-install action when possible by @Kocal in #2885
  • Run unit and functional tests under Windows too by @Kocal in #2816
  • Fix components assets compilation on Windows server by @Kocal in #2890
  • Fix typo CONTRIBUTING.md by @xDeSwa in #2927
  • Explicitly import Vitest APIs instead of relying on globals by @Kocal in #2931
  • Replace Yarn Berry by PNPM by @Kocal in #2932
  • Upgrade Vitest to ^3.2.4 by @Kocal in #2933
  • Modernize and simplify our packages building tools, replace Rollup by tsup by @Kocal in #2944
  • Download only Chromium browser for Vitest/Playwright tests by @Kocal in #2948

New Contributors

Full Changelog: v2.27.0 -> v2.28.0

2.27.0
2025-06-27

Map Powerup

Hey UX'ers!

This release adds a bunch of new features to Map: Circle and Rectangle support, attribution and zoom control options, and more. Fixes, improvements, and optimizations are also included in Autocomplete, Twig Components, and Live Components.

Autocomplete

  • Ensure default plugins are nicely merged with user-defined plugins by @Kocal in #2841

Twig Components

Live Components

  • Fix query string decoding with no = by @smnandre in #2829
  • Optimize LiveComponentStack::getCurrentLiveComponent() by @Kocal in #2821
  • Add events assertions in InteractsWithLiveComponents by @Arkalo2 in #2712

Map

  • Add option to configure attribution and zoom control by @dannyvw in #2792
  • Do not override fitBoundsToMarkers when using LiveComponent by @dannyvw in #2811
  • Fix missing dynamic attributes on <twig:ux:map> example by @raphael-geffroy in #2840
  • Add Circle support by @Valmonzo in #2838
  • [Google] Fix race conditions when loading Google Maps API, when rendering >=2 maps by @Kocal in #2854
  • Add Rectangle support by @Valmonzo in #2845
  • [Google] Fix InfoWindow compatibility with Circle and Rectangle by @Kocal in #2858
  • Minor improvements on TypeScript types by @Kocal in #2859
  • Deprecate property rawOptions from ux:map:*:before-create events, in favor of bridgeOptions by @Kocal in #2860
  • Allows Map options customization in ux:map:pre-connect event (e.g.: zoom, options, bridgeOptions...) by @Kocal in #2861
  • Update test to include circle and rectangle data attributes by @Valmonzo in #2862
  • Add extra data to Map by @Kocal in #2863

Icons

Site

Miscellaneous

  • Add missing return type in test Kernel by @smnandre in #2830
  • Fix link script by adding Bridges support by @Kocal in #2839
  • PHPStan: use PHP version from the matrix by @alexislefebvre in #2842
  • Configure doctrine.orm.enable_native_lazy_objects to fix deprecation in PHP 8.4+ by @Kocal in #2851
  • Reduce number of PHPStan jobs by @Kocal in #2852
  • Prevent yarn watch to exit if TypeScript plugin is unable to compile by @Kocal in #2853
  • Upgrade Biome.js to ^2 by @Kocal in #2856

New Contributors

Full Changelog: v2.26.1 -> v2.27.0

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