Symfony UX in 2025: A Year of Maturity and Innovation


2025 has been a pivotal year for Symfony UX. From the graduation of Map to stable status, to the introduction of Toolkit, major API improvements in Translator, and the deprecation of legacy packages, let's dive into what made this year special for the JavaScript initiative of Symfony.

TwigComponent: Stability and Polish

TwigComponent continued its evolution with several improvements:

LiveComponent: URL Binding and Validation

LiveComponent received significant enhancements around URL binding and form handling. However, these changes also introduced some unintended breaking changes that required multiple patch releases to fix. On the bright side, the test suite has been significantly reinforced with E2E tests.

LiveProp as Path Parameters

The most exciting addition is the ability to map LiveProp to routing path parameters:

#[AsLiveComponent]
#[Route('/posts/{slug}')]
class PostComponent
{
    #[LiveProp(writable: true, url: new UrlMapping(mapPath: true))]
    public string $slug;
}

This feature caused several BC issues that were addressed in subsequent releases (#2976, #2988, #3053, #3058).

Validation Modifiers

New validation modifiers for data-model inputs: min_length, max_length, min_value, max_value.

Other Changes

Translator: A Complete API Overhaul

The Translator package underwent a major API refactoring, moving from generated constants to string-based translation keys:

// Before (generated constants)
import { MESSAGE_WELCOME } from './translations';
trans(MESSAGE_WELCOME);

// After (string-based keys)
import { trans } from '@symfony/ux-translator';
trans('message.welcome');

New Configuration Options

ux_translator:
    dump_typescript: true  # Enable/disable TypeScript generation
    keys_patterns:         # Filter dumped translations
        - 'app.*'
        - 'forms.*'

See PRs: dump_typescript option, keys_patterns option.

Toolkit: A New Beginning

2025 saw the introduction of UX Toolkit, a collection of copy-paste UI components built with Twig Components and TailwindCSS, inspired by shadcn/ui.

Unlike traditional component libraries, Toolkit provides components as "recipes" that you copy directly into your project, giving you full ownership and customization freedom.

Available components in the Shadcn kit: Accordion, Alert, AlertDialog, AspectRatio, Avatar, Badge, Breadcrumb, Button, ButtonGroup, Card, Checkbox, Dialog, Empty, Field, Input, InputGroup, Item, Kbd, Label, Pagination, Progress, Select, Separator, Skeleton, Spinner, Switch, Table, Textarea, Tooltip.

Map: From Experimental to Stable

UX Map graduated to stable in July 2025 (v2.28.0).

Key Features Added

Deprecation

The title option was deprecated from Polygon, Polyline, Rectangle and Circle in favor of infoWindow.

Turbo: New Twig Extensions

Turbo received some useful additions:

StimulusBundle

Performance Improvements

2025 brought significant performance optimizations across multiple packages:

TwigComponent

LiveComponent

Translator

Icons

Package Deprecations

Four packages were deprecated in 2025 and will be removed in Symfony UX 3.0:

Package Version Alternative
ux-swup v2.26.0 Turbo
ux-typed v2.26.0 typed.js + Stimulus
ux-lazy-image v2.26.0 Native loading="lazy"
ux-toggle-password v2.29.0 Custom Stimulus controller

Infrastructure

Internal Tooling (for contributors)

Conclusion

2025 has been a year of consolidation for Symfony UX. The deprecation of legacy packages, combined with the introduction of Toolkit and the stabilization of Map, shows the ecosystem's commitment to modern, maintainable solutions.

If you're still using deprecated packages, now is the time to plan your migration!