Changelog

New features, bug fixes, performances and security improvements.

3.3.0
2026-07-14

Changelog (v3.2.0 -> v3.3.0)

  • feature #3705 [StimulusBundle] Add support for Symfony Reprise (@Kocal)
  • feature #3702 [StimulusBundle] Support preserved /*! stimulusFetch: 'lazy' */ syntax (@IndraGunawan)
  • bug #3703 [StimulusBundle] Sort custom controllers to keep the generated loader deterministic (@Amoifr)
  • bug #3676 [LiveComponent] Avoid 500 errors on malformed hydration payloads (@Amoifr)
  • bug #3688 [LiveComponent] Fix data-loading scanner ignoring data-live-ignore subtrees (@Amoifr)
  • bug #3690 [LiveComponent] Fix support for nullable collection properties on component (@rogierknoester)
  • feature #3700 [Toolkit] Resolve ux:install recipe name case-insensitively and suggest alternatives (@Kocal)
  • feature #3696 [Toolkit][Shadcn] Dismiss the tooltip on scroll and resize, and stop it from intercepting pointer events while hidden (@Kocal)
  • feature #3694 [Toolkit] Refactor (again) but improve @prop and @block comments format (@Kocal)
  • bug #3685 [Autocomplete] Fix LIKE ESCAPE clause breaking search on PostgreSQL (@Amoifr)
  • feature #3477 [Shadcn] Add Sonner (@makraz)
  • minor #3693 [Toolkit] Make component rendering snapshots independent from the libxml version (@Kocal)
  • feature #3482 [Toolkit][Shadcn] Add Combobox (@makraz)
3.2.0
2026-06-19

Changelog (v3.1.0 -> v3.2.0)

  • security #cve-2026-55877 [Icons] Sanitize Iconify SVG output and unify icon creation (@Kocal)
  • security #cve-2026-55878 [Toolkit] Harden recipe installer against path traversal (@Kocal)
  • bug #3682 [Toolkit][Shadcn] Fix position and phantom text-node in tooltip recipe (@Kocal)
  • feature #3602 [TwigComponent] Allow standalone usage with any PSR-11 container (@guillaume-sainthillier)
  • bug #3673 [Encore] Pin vue to <3.5.36 to workaround broken upstream publish (@Kocal)
  • bug #3672 [Toolkit][Flowbite4] Fix linting issues (@Kocal)
  • feature #3671 [Toolkit] Allow declaring kit-global dependencies in kit manifest (@Kocal)
  • bug #3659 [Toolkit] Consider recipe deps in StimulusControllerChecker (@Kocal)
  • feature #3655 [Toolkit] Add lint kit command and CI lint workflow (@Kocal)
  • bug #3652 [Toolkit][Shadcn] Fix manifest dependencies (@seb-jean)
  • feature #3600 [TwigComponent] Expose pre/embedded render methods on ComponentRendererInterface (@treztreiz)
  • bug #3614 [Turbo] Conflict with Mercure >=0.7.0 <0.7.2 (@Kocal)
  • feature #3611 [Native] Rename ux-native:dump command to ux:native:build-configs (@Kocal)
2.36.1
2026-06-19

Changelog (v2.36.0 -> v2.36.1)

  • security #cve-2026-55877 [Icons] Sanitize Iconify SVG output and unify icon creation (@Kocal)
  • security #cve-2026-55878 [Toolkit] Harden recipe installer against path traversal (@Kocal)
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