<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
>
    <channel>
        <title>Symfony Blog</title>
        <atom:link href="https://feeds.feedburner.com/symfony/blog" rel="self" type="application/rss+xml" />
        <link>https://symfony.com/blog/</link>
        <description>Most recent posts published on the Symfony project blog</description>
        <pubDate>Thu, 16 Apr 2026 08:49:43 +0200</pubDate>
        <lastBuildDate>Tue, 14 Apr 2026 16:20:00 +0200</lastBuildDate>
        <language>en</language>
                        <item>
            <title><![CDATA[Symfony_Live Berlin: "Build Applications that Welcome Change"]]></title>
            <link>https://symfony.com/blog/symfony-live-berlin-build-applications-that-welcome-change?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


We’re excited to announce that SymfonyLive Berlin 2026 will take place April 23–24, 2026 at CineStar CUBIX Alexanderplatz, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.



🎤 New talk announcement!…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T160133-169.png" alt="Nl Blog Banner 2026 04 07T160133 169">
</a></p>

<p>We’re excited to announce that <strong>SymfonyLive Berlin 2026</strong> will take place April 23–24, 2026 at <a href="https://live.symfony.com/2026-berlin/venue"><strong>CineStar CUBIX Alexanderplatz</strong></a>, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.</p>

<hr />

<h3>🎤 New talk announcement!</h3>

<p>At SymfonyLive Berlin 2026: <a href="https://connect.symfony.com/profile/derrabus"><strong>Alexander M. Turek</strong></a>, taff Engineer, easybill GmbH,  will present <a href="https://live.symfony.com/2026-berlin/schedule/build-applications-that-welcome-change"><strong>“Build Applications that Welcome Change.”</strong></a></p>

<p>During this talk, Alexander explores architectural approaches that help keep your core business logic stable, even as the surrounding technology changes.</p>

<p>You’ll learn how to design Symfony applications that enable smoother upgrades, safer refactoring, and long-term resilience, making change something you can embrace rather than fear.</p>

<p>Because while change is inevitable… pain doesn’t have to be! 💡</p>

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-10T122214-179.png" alt="Nl Blog Banner 2026 04 10T122214 179">
</a></p>

<h3>🎟️ Ready to join us?</h3>

<h3>Choose the option that suits you best:</h3>

<p><strong>Conference Ticket</strong> – Access to the conference on April 23–24 with 15 inspiring speakers, plus replays, lunches, and coffee breaks.</p>

<p><strong>Workshop Ticket</strong> – Access to 2 days of workshops on April 21–22, including lunches and coffee breaks. Workshops are now available—choose yours soon!</p>

<p><strong>Combo Ticket</strong> – The full experience: workshops + conference (April 21–24), with all meals, breaks, and the conference party included.</p>

<p>👉 <strong><a href="https://live.symfony.com/2026-berlin/registration/">Get your ticket for SymfonyLive Berlin 2026</a></strong>💛</p>

<hr />

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T154640-801.png" alt="Nl Blog Banner 2026 04 07T154640 801">
</a></p>

<hr />

<h3>Joins us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-live-berlin-build-applications-that-welcome-change?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Paola Suárez ]]></dc:creator>
            <pubDate>Tue, 14 Apr 2026 16:20:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-live-berlin-build-applications-that-welcome-change?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[SymfonyLive Berlin 2026: "Specing out teamwork”]]></title>
            <link>https://symfony.com/blog/symfonylive-berlin-2026-specing-out-teamwork?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


We’re excited to announce that SymfonyLive Berlin 2026 will take place April 23–24, 2026 at CineStar CUBIX Alexanderplatz, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.



🎤 New talk at SymfonyLive…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T160133-169.png" alt="Nl Blog Banner 2026 04 07T160133 169">
</a></p>

<p>We’re excited to announce that <strong>SymfonyLive Berlin 2026</strong> will take place April 23–24, 2026 at <a href="https://live.symfony.com/2026-berlin/venue"><strong>CineStar CUBIX Alexanderplatz</strong></a>, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.</p>

<hr />

<h3>🎤 New talk at SymfonyLive Berlin 2026!</h3>

<p>Next up in the SymfonyLive Berlin 2026 lineup: <a href="https://connect.symfony.com/profile/sllupa"><strong>Stiven Llupa</strong></a>, Solutions Architect, SensioLabs Deutschland, with <a href="https://live.symfony.com/2026-berlin/schedule/specing-out-teamwork"><strong>“Specing out teamwork.”</strong></a>.</p>

<p>In this talk, Stiven will share three key strategies to help Symfony teams build strong development practices, improving collaboration, streamlining contributions, and accelerating delivery.</p>

<p>Drawing from over a decade of experience on Symfony projects, he’ll show how well-defined team processes can make a real difference in project success.</p>

<p>A practical session for teams looking to work smarter, together 🤝</p>

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-10T122214-179.png" alt="Nl Blog Banner 2026 04 10T122214 179">
</a></p>

<h3>🎟️ Ready to join us?</h3>

<h3>Choose the option that suits you best:</h3>

<p><strong>Conference Ticket</strong> – Access to the conference on April 23–24 with 15 inspiring speakers, plus replays, lunches, and coffee breaks.</p>

<p><strong>Workshop Ticket</strong> – Access to 2 days of workshops on April 21–22, including lunches and coffee breaks. Workshops are now available—choose yours soon!</p>

<p><strong>Combo Ticket</strong> – The full experience: workshops + conference (April 21–24), with all meals, breaks, and the conference party included.</p>

<p>👉 <strong><a href="https://live.symfony.com/2026-berlin/registration/">Get your ticket for SymfonyLive Berlin 2026</a></strong>💛</p>

<hr />

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T154640-801.png" alt="Nl Blog Banner 2026 04 07T154640 801">
</a></p>

<hr />

<h3>Joins us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfonylive-berlin-2026-specing-out-teamwork?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Paola Suárez ]]></dc:creator>
            <pubDate>Tue, 14 Apr 2026 14:54:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfonylive-berlin-2026-specing-out-teamwork?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony UX 3.0.0 Released]]></title>
            <link>https://symfony.com/blog/symfony-ux-3-0-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony UX 3.0 is a new major release. Following Symfony&#039;s release
process, this version removes all features deprecated during the 2.x
cycle and raises the minimum requirements to PHP 8.4 and Symfony 7.4.
If your application runs without deprecation notices…</description>
            <content:encoded><![CDATA[
                                <p>Symfony UX 3.0 is a new major release. Following Symfony's release
process, this version removes all features deprecated during the 2.x
cycle and raises the minimum requirements to PHP 8.4 and Symfony 7.4.
If your application runs without deprecation notices on Symfony UX 2.x,
upgrading should be straightforward.</p>
<div class="section">
<h2 id="removed-packages-swup-lazyimage-typed-togglepassword"><a class="headerlink" href="#removed-packages-swup-lazyimage-typed-togglepassword" title="Permalink to this headline">Removed Packages: Swup, LazyImage, Typed, TogglePassword</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/smnandre">
                <img src="https://github.com/smnandre.png" alt="Simon André">
            </a>
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/smnandre">Simon André</a>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/2985">#2985</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/2993">#2993</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/2994">#2994</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/2995">#2995</a>
                                                </span>
            </div>
</div>
<p>Four packages have been removed from the Symfony UX ecosystem. These
packages provided thin wrappers around third-party JavaScript libraries
with minimal PHP integration, and their functionality can be reproduced
in a few lines of application code:</p>
<ul>
    <li><strong>Swup</strong>: install Swup via npm or <code translate="no" class="notranslate">importmap:require</code> and
import it directly in your application</li>
<li><strong>LazyImage</strong>: native browser lazy loading (<code translate="no" class="notranslate">loading="lazy"</code>)
has made this package obsolete</li>
<li><strong>Typed</strong>: install Typed.js via npm or <code translate="no" class="notranslate">importmap:require</code> and
create a small Stimulus controller</li>
<li><strong>TogglePassword</strong>: a candidate for migration to UX Toolkit as a
reusable component</li>
</ul>
<p>If you rely on any of these packages, check the
<a href="https://github.com/symfony/ux/blob/3.x/UPGRADE-3.0.md" class="reference external" rel="external noopener noreferrer" target="_blank">UPGRADE-3.0.md</a> file for migration steps.</p>
</div>
<div class="section">
<h2 id="deprecation-removals-across-all-packages"><a class="headerlink" href="#deprecation-removals-across-all-packages" title="Permalink to this headline">Deprecation Removals Across All Packages</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/smnandre">
                <img src="https://github.com/smnandre.png" alt="Simon André">
            </a>
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/smnandre">Simon André</a>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3040">#3040</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3051">#3051</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3054">#3054</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3100">#3100</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3101">#3101</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3102">#3102</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3103">#3103</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3179">#3179</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3180">#3180</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3186">#3186</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3452">#3452</a>
                                                </span>
            </div>
</div>
<p>All code deprecated during the 2.x cycle has been removed. Here are the
most notable changes:</p>
<p><strong>Autocomplete</strong>: the <code translate="no" class="notranslate">ParentEntityAutocompleteType</code> class has been
replaced by <code translate="no" class="notranslate">BaseEntityAutocompleteType</code>, and <code translate="no" class="notranslate">ExtraLazyChoiceLoader</code>
has been removed in favor of Symfony Form's built-in
<code translate="no" class="notranslate">LazyChoiceLoader</code> (available since Symfony 7.2).</p>
<p><strong>LiveComponent</strong>: the <code translate="no" class="notranslate">csrf</code> argument on <code translate="no" class="notranslate">#[AsLiveComponent]</code> has
been removed; same-origin/CORS protection is now the default.</p>
<p><strong>TwigComponent</strong>: the <code translate="no" class="notranslate">twig_component.defaults</code> configuration is now
mandatory, the <code translate="no" class="notranslate">cva</code> Twig function has been replaced by <code translate="no" class="notranslate">html_cva</code>
from <code translate="no" class="notranslate">twig/html-extra:^3.12</code>, and
<code translate="no" class="notranslate">PreCreateForRenderEvent::getProps()</code> has been renamed to
<code translate="no" class="notranslate">getInputProps()</code>.</p>
<p><strong>Map</strong>: the <code translate="no" class="notranslate">render_map()</code> Twig function has been replaced by
<code translate="no" class="notranslate">ux_map()</code>, and the <code translate="no" class="notranslate">title</code> option on shapes (Polygon, Polyline,
Rectangle, Circle) has been replaced by <code translate="no" class="notranslate">infoWindow</code>.</p>
<p><strong>StimulusBundle</strong>: the <code translate="no" class="notranslate">ux_controller_link_tags()</code> Twig function has
been removed, which requires Symfony AssetMapper 6.4 or higher.</p>
<p><strong>Turbo, Vue, Chartjs, Notify, React, Svelte</strong>: various internal
backward-compatibility layers and deprecated method signatures have been
cleaned up.</p>
<p>Consult the full <a href="https://github.com/symfony/ux/blob/3.x/UPGRADE-3.0.md" class="reference external" rel="external noopener noreferrer" target="_blank">UPGRADE-3.0.md</a> for detailed migration
instructions and code diffs.</p>
</div>
<div class="section">
<h2 id="cropper-rotation-always-applied"><a class="headerlink" href="#cropper-rotation-always-applied" title="Permalink to this headline">Cropper: Rotation Always Applied</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/MrYamous">
                <img src="https://github.com/MrYamous.png" alt="Matthieu Lempereur">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/MrYamous">Matthieu Lempereur</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3433">#3433</a>
                                                </span>
            </div>
</div>
<p>The <code translate="no" class="notranslate">Crop::getCroppedImage()</code> and <code translate="no" class="notranslate">Crop::getCroppedThumbnail()</code>
methods now apply rotation automatically when the crop data includes a
rotation angle. The <code translate="no" class="notranslate">$applyRotation</code> parameter has been removed:</p>
<div translate="no" data-loc="7" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment">// Before (2.x)</span>
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>crop</span>-&gt;<span class="hljs-title invoke__">getCroppedImage</span>(<span class="hljs-attr">applyRotation</span>: <span class="hljs-keyword">true</span>);
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>crop</span>-&gt;<span class="hljs-title invoke__">getCroppedThumbnail</span>(<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-attr">applyRotation</span>: <span class="hljs-keyword">true</span>);

<span class="hljs-comment">// After (3.0): rotation is always applied</span>
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>crop</span>-&gt;<span class="hljs-title invoke__">getCroppedImage</span>();
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>crop</span>-&gt;<span class="hljs-title invoke__">getCroppedThumbnail</span>(<span class="hljs-number">200</span>, <span class="hljs-number">200</span>);</code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="google-maps-upgraded-to-googlemaps-js-api-loader-2-0"><a class="headerlink" href="#google-maps-upgraded-to-googlemaps-js-api-loader-2-0" title="Permalink to this headline">Google Maps: Upgraded to @googlemaps/js-api-loader 2.0</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3115">#3115</a>
                                                </span>
            </div>
</div>
<p>The Google Map bridge now uses <code translate="no" class="notranslate">@googlemaps/js-api-loader</code> version
<code translate="no" class="notranslate">^2.0</code>. If you use Symfony AssetMapper without Symfony Flex, update
your import map:</p>
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-terminal codeblock-bash">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-prompt">$ </span>php bin/console importmap:require @googlemaps/js-api-loader@^2.0</code></pre>
    </div>
</div>
<p>Some <code translate="no" class="notranslate">UX_MAP_DSN</code> query parameters have changed: the
<code translate="no" class="notranslate">version</code> option has been renamed to <code translate="no" class="notranslate">v</code>, and options
<code translate="no" class="notranslate">id</code>, <code translate="no" class="notranslate">nonce</code>, <code translate="no" class="notranslate">retries</code>, <code translate="no" class="notranslate">url</code> have been removed.
See the <a href="https://github.com/symfony/ux/blob/3.x/UPGRADE-3.0.md" class="reference external" rel="external noopener noreferrer" target="_blank">UPGRADE-3.0.md</a> for the full list of DSN option
changes.</p>
</div>
<div class="section">
<h2 id="phpunit-11-replaces-symfony-phpunit-bridge"><a class="headerlink" href="#phpunit-11-replaces-symfony-phpunit-bridge" title="Permalink to this headline">PHPUnit 11 Replaces Symfony PHPUnit Bridge</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3182">#3182</a>
                                                </span>
            </div>
</div>
<p>The test infrastructure has been modernized: all packages now use
PHPUnit 11 directly instead of the Symfony PHPUnit Bridge. This does not
affect application code, but if you run the Symfony UX test suites
locally, make sure you have PHPUnit 11 or higher installed.</p>
</div>
<div class="section">
<h2 id="full-changelog"><a class="headerlink" href="#full-changelog" title="Permalink to this headline">Full Changelog</a></h2>
<ul>
    <li><a href="https://github.com/symfony/ux/pull/3452" class="reference external" rel="external noopener noreferrer" target="_blank">#3452</a> [LiveComponent] Remove compatibility layer with Symfony PropertyInfo &lt;7.1 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3453" class="reference external" rel="external noopener noreferrer" target="_blank">#3453</a> Update minimum required Symfony version to 7.4 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3450" class="reference external" rel="external noopener noreferrer" target="_blank">#3450</a> Upgrade minimum required PHP version to 8.4 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3433" class="reference external" rel="external noopener noreferrer" target="_blank">#3433</a> [Cropper] Always apply rotation in <code translate="no" class="notranslate">Crop::getCroppedImage()</code> and <code translate="no" class="notranslate">Crop::getCroppedThumbnail()</code> (@MrYamous)</li>
<li><a href="https://github.com/symfony/ux/pull/3398" class="reference external" rel="external noopener noreferrer" target="_blank">#3398</a> Post-merge fixes for 3.x (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3186" class="reference external" rel="external noopener noreferrer" target="_blank">#3186</a> [Autocomplete][Turbo] Remove BC layers for methods and parameters (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3191" class="reference external" rel="external noopener noreferrer" target="_blank">#3191</a> Fix 2.x -&gt; 3.x merge (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3187" class="reference external" rel="external noopener noreferrer" target="_blank">#3187</a> Add phpunit.dist.xml in .gitattributes (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3182" class="reference external" rel="external noopener noreferrer" target="_blank">#3182</a> Drop Symfony PHPUnit Bridge in favor of PHPUnit &gt;= 11.0 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3180" class="reference external" rel="external noopener noreferrer" target="_blank">#3180</a> [StimulusBundle] Remove deprecations for 3.0 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3179" class="reference external" rel="external noopener noreferrer" target="_blank">#3179</a> [Vue] Remove deprecations for 3.0 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3115" class="reference external" rel="external noopener noreferrer" target="_blank">#3115</a> [Map][Google] Upgrade <code translate="no" class="notranslate">@googlemaps</code>/js-api-loader to ^2.0 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3105" class="reference external" rel="external noopener noreferrer" target="_blank">#3105</a> [TwigComponent] Remove dev-dependency on WebpackEncoreBundle (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3103" class="reference external" rel="external noopener noreferrer" target="_blank">#3103</a> [Autocomplete] Remove deprecated code for 3.0 (@smnandre)</li>
<li><a href="https://github.com/symfony/ux/pull/3102" class="reference external" rel="external noopener noreferrer" target="_blank">#3102</a> [Chartjs][Notify][React][Svelte] Remove StimulusHelper deprecation for 3.0 (@smnandre)</li>
<li><a href="https://github.com/symfony/ux/pull/3101" class="reference external" rel="external noopener noreferrer" target="_blank">#3101</a> [Vue] Remove deprecations for 3.0 (@smnandre)</li>
<li><a href="https://github.com/symfony/ux/pull/3100" class="reference external" rel="external noopener noreferrer" target="_blank">#3100</a> [Turbo] Remove deprecations for 3.0 (@smnandre)</li>
<li><a href="https://github.com/symfony/ux/pull/3054" class="reference external" rel="external noopener noreferrer" target="_blank">#3054</a> [Map] Remove deprecations from Map (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3051" class="reference external" rel="external noopener noreferrer" target="_blank">#3051</a> [LiveComponent][UX3] Remove deprecations (@smnandre)</li>
<li><a href="https://github.com/symfony/ux/pull/3040" class="reference external" rel="external noopener noreferrer" target="_blank">#3040</a> [TwigComponent][UX3] Remove deprecations (@smnandre)</li>
<li><a href="https://github.com/symfony/ux/pull/2998" class="reference external" rel="external noopener noreferrer" target="_blank">#2998</a> Upgrade minimum required PHP version to 8.2 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/2996" class="reference external" rel="external noopener noreferrer" target="_blank">#2996</a> Update minimum required Symfony version to ^6.4 (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/2995" class="reference external" rel="external noopener noreferrer" target="_blank">#2995</a> [TogglePassword] Remove package (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/2994" class="reference external" rel="external noopener noreferrer" target="_blank">#2994</a> [LazyImage] Remove package (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/2993" class="reference external" rel="external noopener noreferrer" target="_blank">#2993</a> [Typed] Remove package (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/2985" class="reference external" rel="external noopener noreferrer" target="_blank">#2985</a> [Swup] Remove package (@smnandre)</li>
</ul>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-ux-3-0-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Mon, 13 Apr 2026 21:44:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-ux-3-0-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony UX 2.35 Released]]></title>
            <link>https://symfony.com/blog/symfony-ux-2-35-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony UX 2.35 is out with smarter HTML attribute merging for Twig
components, a new reset_on_focus option for Autocomplete, a brand
new Flowbite 4.0 kit, and more.

Smart HTML Attribute Merging in Twig Components…</description>
            <content:encoded><![CDATA[
                                <p>Symfony UX 2.35 is out with smarter HTML attribute merging for Twig
components, a new <code translate="no" class="notranslate">reset_on_focus</code> option for Autocomplete, a brand
new Flowbite 4.0 kit, and more.</p>
<div class="section">
<h2 id="smart-html-attribute-merging-in-twig-components"><a class="headerlink" href="#smart-html-attribute-merging-in-twig-components" title="Permalink to this headline">Smart HTML Attribute Merging in Twig Components</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3408">#3408</a>
                                                </span>
            </div>
</div>
<p>When spreading multiple attribute sets onto a Twig component, conflicting
keys would silently overwrite each other. This was especially problematic
with Stimulus <code translate="no" class="notranslate">data-action</code> attributes: if a button needed to trigger
both a Dialog and a Tooltip, only the last <code translate="no" class="notranslate">data-action</code> survived.</p>
<p><code translate="no" class="notranslate">ComponentAttributes</code> now supports the <code translate="no" class="notranslate">AttributeValueInterface</code>
introduced in <code translate="no" class="notranslate">twig/html-extra</code> 3.24. Combined with the
<code translate="no" class="notranslate">html_attr_type</code> and <code translate="no" class="notranslate">html_attr_merge</code> Twig filters, you can
declare how attribute values should be merged. For example, using the
<code translate="no" class="notranslate">sst</code> (space-separated tokens) strategy:</p>
<div translate="no" data-loc="13" class="notranslate codeblock codeblock-length-md codeblock-twig">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment">{# Both data-action values will be concatenated #}</span><span class="xml">
</span><span class="hljs-template-tag">{%- <span class="hljs-name"><span class="hljs-keyword">set</span></span> dialog_attrs = {
    <span class="hljs-string">'data-action'</span>: <span class="hljs-string">'click-&gt;dialog#open'</span>|html_attr_type(<span class="hljs-string">'sst'</span>),
} -%}</span><span class="xml">
</span><span class="hljs-template-tag">{%- <span class="hljs-name"><span class="hljs-keyword">set</span></span> tooltip_attrs = {
    <span class="hljs-string">'data-action'</span>:
        <span class="hljs-string">'mouseenter-&gt;tooltip#show mouseleave-&gt;tooltip#hide'</span>
        |html_attr_type(<span class="hljs-string">'sst'</span>),
} -%}</span><span class="xml">

<span class="hljs-tag">&lt;<span class="hljs-name">twig:Button</span> </span></span><span class="hljs-template-variable">{{ ...{}|html_attr_merge(dialog_attrs, tooltip_attrs) }}</span><span class="xml"><span class="hljs-tag">&gt;</span>
    Edit Profile
<span class="hljs-tag">&lt;/<span class="hljs-name">twig:Button</span>&gt;</span></span></code></pre>
    </div>
</div>
<p>The rendered <code translate="no" class="notranslate">data-action</code> will contain all three Stimulus
descriptors instead of only the last set.</p>
</div>
<div class="section">
<h2 id="toolkit-triggers-now-merge-attributes-correctly"><a class="headerlink" href="#toolkit-triggers-now-merge-attributes-correctly" title="Permalink to this headline">Toolkit Triggers Now Merge Attributes Correctly</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3409">#3409</a>
                                                </span>
            </div>
</div>
<p>Building on the new attribute merging support, the Shadcn Dialog,
AlertDialog and Tooltip trigger components now use
<code translate="no" class="notranslate">html_attr_type('sst')</code> for their <code translate="no" class="notranslate">data-action</code> attributes. This
means you can nest a Button inside both a Dialog trigger and a Tooltip
trigger, and all Stimulus actions will be preserved automatically:</p>
<div translate="no" data-loc="20" class="notranslate codeblock codeblock-length-md codeblock-twig">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">twig:Dialog</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"edit_profile"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">twig:Dialog:Trigger</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">twig:Tooltip</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"tooltip_edit"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">twig:Tooltip:Trigger</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">twig:Button</span>
                    <span class="hljs-attr">variant</span>=<span class="hljs-string">"outline"</span>
                    </span></span><span class="hljs-template-variable">{{ ...dialog_trigger_attrs
                        |html_attr_merge(tooltip_trigger_attrs)
                    }}</span><span class="xml"><span class="hljs-tag">
                &gt;</span>
                    Edit Profile
                <span class="hljs-tag">&lt;/<span class="hljs-name">twig:Button</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">twig:Tooltip:Trigger</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">twig:Tooltip:Content</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Click to edit your profile<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">twig:Tooltip:Content</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">twig:Tooltip</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">twig:Dialog:Trigger</span>&gt;</span>
    </span><span class="hljs-comment">{# ... #}</span><span class="xml">
<span class="hljs-tag">&lt;/<span class="hljs-name">twig:Dialog</span>&gt;</span></span></code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="autocomplete-new-reset-on-focus-option"><a class="headerlink" href="#autocomplete-new-reset-on-focus-option" title="Permalink to this headline">Autocomplete: New <code translate="no" class="notranslate">reset_on_focus</code> Option</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/zairigimad">
                <img src="https://github.com/zairigimad.png" alt="Zairig Imad">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/zairigimad">Zairig Imad</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3422">#3422</a>
                                                </span>
            </div>
</div>
<p>By default, Tom Select caches the results fetched via AJAX. When a user
searches, selects an option, then clears the selection and refocuses the
field, the dropdown still shows the stale search results instead of the
full default list.</p>
<p>The new <code translate="no" class="notranslate">reset_on_focus</code> option clears the cached options and
refetches the default list every time the field receives focus:</p>
<div translate="no" data-loc="5" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment">// src/Form/OrderType.php</span>
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>builder</span>-&gt;<span class="hljs-title invoke__">add</span>(<span class="hljs-string">'customer'</span>, AutocompleteChoiceType::<span class="hljs-variable language_">class</span>, [
    <span class="hljs-string">'autocomplete_url'</span> =&gt; <span class="hljs-string">'/api/customers'</span>,
    <span class="hljs-string">'reset_on_focus'</span> =&gt; <span class="hljs-keyword">true</span>,
]);</code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="flowbite-4-0-kit-for-toolkit"><a class="headerlink" href="#flowbite-4-0-kit-for-toolkit" title="Permalink to this headline">Flowbite 4.0 Kit for Toolkit</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/DcgRG">
                <img src="https://github.com/DcgRG.png" alt="Dubois Callens Gregoire">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/DcgRG">Dubois Callens Gregoire</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3368">#3368</a>
                                                </span>
            </div>
</div>
<p>A new <code translate="no" class="notranslate">flowbite-4</code> kit joins the existing Shadcn kit in Symfony UX
Toolkit. This first batch includes the Alert, Badge and ButtonGroup
components, styled with Flowbite 4.0 and Tailwind CSS.</p>
</div>
<div class="section">
<h2 id="toggle-component-for-the-shadcn-kit"><a class="headerlink" href="#toggle-component-for-the-shadcn-kit" title="Permalink to this headline">Toggle Component for the Shadcn Kit</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/zairigimad">
                <img src="https://github.com/zairigimad.png" alt="Zairig Imad">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/zairigimad">Zairig Imad</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3421">#3421</a>
                                                </span>
            </div>
</div>
<p>The Shadcn kit gains a new Toggle component with <code translate="no" class="notranslate">variant</code>
(<code translate="no" class="notranslate">default</code> or <code translate="no" class="notranslate">outline</code>), <code translate="no" class="notranslate">size</code> (<code translate="no" class="notranslate">sm</code>, <code translate="no" class="notranslate">default</code>, <code translate="no" class="notranslate">lg</code>)
and <code translate="no" class="notranslate">pressed</code> props:</p>
<div translate="no" data-loc="3" class="notranslate codeblock codeblock-length-sm codeblock-twig">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">twig:Toggle</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"outline"</span> <span class="hljs-attr">pressed</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">twig:ux:icon</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"lucide:bold"</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">twig:Toggle</span>&gt;</span></span></code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="svelte-package-deprecated"><a class="headerlink" href="#svelte-package-deprecated" title="Permalink to this headline">Svelte Package Deprecated</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3444">#3444</a>
                                                </span>
            </div>
</div>
<p>The <code translate="no" class="notranslate">symfony/ux-svelte</code> package is now deprecated and will be removed
in Symfony UX 3.0. Usage numbers have been declining steadily, and the
Svelte ecosystem makes deep Symfony integration difficult compared to
other frontend frameworks. If you are currently using UX Svelte,
consider migrating to UX React, UX Vue, or Twig Components.</p>
</div>
<div class="section">
<h2 id="easier-js-dependency-installation-for-ux-native"><a class="headerlink" href="#easier-js-dependency-installation-for-ux-native" title="Permalink to this headline">Easier JS Dependency Installation for UX Native</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Kocal">Hugo Alliaume</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3414">#3414</a>
                                                </span>
            </div>
</div>
<p>UX Native now ships an <code translate="no" class="notranslate">assets/</code> directory with a <code translate="no" class="notranslate">package.json</code>,
allowing Symfony Flex to automatically register the
<code translate="no" class="notranslate">@hotwired/hotwire-native-bridge</code> JavaScript dependency in your
<code translate="no" class="notranslate">package.json</code> or <code translate="no" class="notranslate">importmap.php</code>. Previously, the Maker command
tried to check for the dependency at runtime, but the check was broken.
This fix makes the installation seamless.</p>
</div>
<div class="section">
<h2 id="full-changelog"><a class="headerlink" href="#full-changelog" title="Permalink to this headline">Full Changelog</a></h2>
<ul>
    <li><a href="https://github.com/symfony/ux/pull/3444" class="reference external" rel="external noopener noreferrer" target="_blank">#3444</a> [Svelte] Deprecate the package (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3422" class="reference external" rel="external noopener noreferrer" target="_blank">#3422</a> [Autocomplete] Add option <code translate="no" class="notranslate">clear_on_focus</code> (@zairigimad)</li>
<li><a href="https://github.com/symfony/ux/pull/3368" class="reference external" rel="external noopener noreferrer" target="_blank">#3368</a> [Toolkit][Flowbite] Add kit Flowbite 4.0 base (@DcgRG)</li>
<li><a href="https://github.com/symfony/ux/pull/3421" class="reference external" rel="external noopener noreferrer" target="_blank">#3421</a> [Toolkit][Shadcn] Add Toggle (@zairigimad)</li>
<li><a href="https://github.com/symfony/ux/pull/3407" class="reference external" rel="external noopener noreferrer" target="_blank">#3407</a> [Chartjs][Icons][Map][Notify][React][Svelte][Toolkit][Turbo][TwigComponent][Vue][Native] Allow Symfony UX 3.x packages (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3414" class="reference external" rel="external noopener noreferrer" target="_blank">#3414</a> [Native] Introduce <code translate="no" class="notranslate">assets/</code> to ease installation of <code translate="no" class="notranslate">@hotwired/hotwire-native-bridge</code> JS dependency (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3409" class="reference external" rel="external noopener noreferrer" target="_blank">#3409</a> [Toolkit] Embrace <code translate="no" class="notranslate">html_attr_type</code> from <code translate="no" class="notranslate">twig/html-extra:^3.24</code> to correctly merge trigger's attributes (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3408" class="reference external" rel="external noopener noreferrer" target="_blank">#3408</a> [TwigComponent] Add support for <code translate="no" class="notranslate">AttributeValueInterface</code> from <code translate="no" class="notranslate">twig/html-extra:^3.24.0</code> in <code translate="no" class="notranslate">ComponentAttributes</code> (@Kocal)</li>
</ul>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-ux-2-35-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Mon, 13 Apr 2026 21:35:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-ux-2-35-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[SymfonyLive Berlin 2026: "AI Culture in Open Source — The Sylius Way"]]></title>
            <link>https://symfony.com/blog/s?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


We’re excited to announce that SymfonyLive Berlin 2026 will take place April 23–24, 2026 at CineStar CUBIX Alexanderplatz, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.



🎤 New talk at SymfonyLive…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T160133-169.png" alt="Nl Blog Banner 2026 04 07T160133 169">
</a></p>

<p>We’re excited to announce that <strong>SymfonyLive Berlin 2026</strong> will take place April 23–24, 2026 at <a href="https://live.symfony.com/2026-berlin/venue"><strong>CineStar CUBIX Alexanderplatz</strong></a>, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.</p>

<hr />

<h3>🎤 New talk at SymfonyLive Berlin 2026!</h3>

<p>Next up at SymfonyLive Berlin 2026 : <a href="https://connect.symfony.com/profile/codermaggie"><strong>Magdalena Sadowska</strong></a>, Head of Product Operations, Sylius with <a href="https://live.symfony.com/2026-berlin/schedule/ai-culture-in-open-source-the-sylius-way"><strong>“AI Culture in Open Source — The Sylius Way.”</strong></a>.</p>

<p>AI is transforming how open-source teams work — but the biggest challenge isn’t technical, it’s cultural.</p>

<p>In this talk, Magdalena will share how the Sylius team has spent the past year finding the right balance where AI truly benefits the entire community, from improving plugin updates and code reviews to staying aligned with Symfony’s evolution.</p>

<p>You’ll discover how to build an AI-friendly culture that prioritizes experimentation, context, and shared learning over automation for its own sake.</p>

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-10T122214-179.png" alt="Nl Blog Banner 2026 04 10T122214 179">
</a></p>

<h3>🎟️ Ready to join us?</h3>

<h3>Choose the option that suits you best:</h3>

<p><strong>Conference Ticket</strong> – Access to the conference on April 23–24 with 15 inspiring speakers, plus replays, lunches, and coffee breaks.</p>

<p><strong>Workshop Ticket</strong> – Access to 2 days of workshops on April 21–22, including lunches and coffee breaks. Workshops are now available—choose yours soon!</p>

<p><strong>Combo Ticket</strong> – The full experience: workshops + conference (April 21–24), with all meals, breaks, and the conference party included.</p>

<p>👉 <strong><a href="https://live.symfony.com/2026-berlin/registration/">Get your ticket for SymfonyLive Berlin 2026</a></strong>💛</p>

<hr />

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T154640-801.png" alt="Nl Blog Banner 2026 04 07T154640 801">
</a></p>

<hr />

<h3>Joins us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/s?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Paola Suárez ]]></dc:creator>
            <pubDate>Mon, 13 Apr 2026 12:15:00 +0200</pubDate>
            <comments>https://symfony.com/blog/s?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[SymfonyLive Berlin 2026: “Make your AI useful with MCP”]]></title>
            <link>https://symfony.com/blog/symfonylive-berlin-2026-make-your-ai-useful-with-mcp?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


We’re excited to announce that SymfonyLive Berlin 2026 will take place April 23–24, 2026 at CineStar CUBIX Alexanderplatz, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.

Before the conference,…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T160133-169.png" alt="Nl Blog Banner 2026 04 07T160133 169">
</a></p>

<p>We’re excited to announce that <strong>SymfonyLive Berlin 2026</strong> will take place April 23–24, 2026 at <a href="https://live.symfony.com/2026-berlin/venue"><strong>CineStar CUBIX Alexanderplatz</strong></a>, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.</p>

<p>Before the conference, <a href="https://live.symfony.com/2026-berlin/workshop"><strong>two days of pre-conference trainings will be held on April 21–22</strong></a>, giving attendees the opportunity to dive deeper into Symfony with expert-led sessions.</p>

<hr />

<h3>🎤 New talk at SymfonyLive Berlin 2026!</h3>

<p>At SymfonyLive Berlin 2026, <a href="https://connect.symfony.com/profile/tobias"><strong>Tobias Nyholm</strong></a>,Some manager, Eneba, will present <a href="https://live.symfony.com/2026-berlin/schedule/make-your-ai-useful-with-mcp"><strong>“Make your AI useful with MCP.”</strong></a></p>

<p>What if your AI could answer your specific questions instead of generic ones? 🤔</p>

<p>In this talk, Tobias will explain the MCP protocol, why it matters, and how to use it to create AI services tailored to your needs; whether it’s checking order status, calculating supplier fees, or tracking your data usage!</p>

<p>Get ready to make your AI truly helpful!</p>

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-10T122214-179.png" alt="Nl Blog Banner 2026 04 10T122214 179">
</a></p>

<h3>🎟️ Ready to join us?</h3>

<h3>Choose the option that suits you best:</h3>

<p><strong>Conference Ticket</strong> – Access to the conference on April 23–24 with 15 inspiring speakers, plus replays, lunches, and coffee breaks.</p>

<p><strong>Workshop Ticket</strong> – Access to 2 days of workshops on April 21–22, including lunches and coffee breaks. Workshops are now available—choose yours soon!</p>

<p><strong>Combo Ticket</strong> – The full experience: workshops + conference (April 21–24), with all meals, breaks, and the conference party included.</p>

<p>👉 <strong><a href="https://live.symfony.com/2026-berlin/registration/">Get your ticket for SymfonyLive Berlin 2026</a></strong>💛</p>

<hr />

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T154640-801.png" alt="Nl Blog Banner 2026 04 07T154640 801">
</a></p>

<hr />

<h3>Joins us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfonylive-berlin-2026-make-your-ai-useful-with-mcp?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Paola Suárez ]]></dc:creator>
            <pubDate>Mon, 13 Apr 2026 11:30:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfonylive-berlin-2026-make-your-ai-useful-with-mcp?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[A Week of Symfony #1006 (April 6–12, 2026)]]></title>
            <link>https://symfony.com/blog/a-week-of-symfony-1006-april-6-12-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>This week, the upcoming Symfony 8.1 version introduced ServicesBundle and ConsoleBundle as a first step in splitting FrameworkBundle into smaller, standalone bundles. In addition, we released Symfony Polyfill 1.34.0, which covers features from PHP 8.4, 8.5,…</description>
            <content:encoded><![CDATA[
                                <p>This week, the upcoming Symfony 8.1 version introduced <a href="https://github.com/symfony/symfony/commit/3acb4ac5f495a51c87c009169e147a7d7e244b0f">ServicesBundle and ConsoleBundle</a> as a first step in splitting FrameworkBundle into smaller, standalone bundles. In addition, we released <a href="https://symfony.com/blog/symfony-polyfill-1-34-0-released">Symfony Polyfill 1.34.0</a>, which covers features from PHP 8.4, 8.5, and 8.6. Lastly, we published more information about talks and workshops at the <a href="https://live.symfony.com/2026-berlin/">SymfonyLive Berlin 2026</a> conference.</p>

<h2>Symfony development highlights</h2>

<p>This week, 28 pull requests were merged (18 in code and 10 in docs) and 22 issues were closed (17 in code and 5 in docs). Excluding merges, 14 authors made additions and deletions. See details for <a href="https://github.com/symfony/symfony/pulse">code</a> and <a href="https://github.com/symfony/symfony-docs/pulse">docs</a>.</p>

<p><a href="https://github.com/symfony/symfony/commits/6.4">6.4 changelog</a>:</p>

<ul>
<li><a href="https://github.com/symfony/symfony/commit/04d03d1256a61c15188f3138ac124dde615d93e3">04d03d1</a>: &#91;DependencyInjection&#93; fix instanceof autoconfiguration for anonymous classes</li>
<li><a href="https://github.com/symfony/symfony/commit/8b44fc1dbfd414b9122e61b66d4fef3dea124638">8b44fc1</a>: &#91;Serializer&#93; fix getAllowedAttributes() when groups contain wildcard '*'</li>
<li><a href="https://github.com/symfony/symfony/commit/e7a281b812b28c56ebfd582604799daf10a4ba6e">e7a281b</a>: &#91;Dotenv&#93; fix self-referencing variable resolution with suffix/prefix</li>
<li><a href="https://github.com/symfony/symfony/commit/3fb5a40db97877ecb8df5c51581af68ba090e8eb">3fb5a40</a>: &#91;DependencyInjection&#93; fix excludeSelf not applied when using AutowireLocator</li>
<li><a href="https://github.com/symfony/symfony/commit/2dad50067ad131c5a1fdf102be2a4019a69ec103">2dad500</a>: &#91;Filesystem&#93; fix Path methods replacing backslashes on UNIX</li>
</ul>

<p><a href="https://github.com/symfony/symfony/commits/7.4">7.4 changelog</a>:</p>

<ul>
<li><a href="https://github.com/symfony/symfony/commit/99f010dbe6d7acb1494caf032fc9be761fd9f980">99f010d</a>:  set ignoreUndefinedTriggers to true in phpunit.xml.dist files</li>
<li><a href="https://github.com/symfony/symfony/commit/b0ed57c75eff3931d69078c292b3f6bc80eadc27">b0ed57c</a>: &#91;Mailer&#93; fix handling of webhook.test verification event from MailerSend webhook</li>
<li><a href="https://github.com/symfony/symfony/commit/c4192b69c67b176675db61bc366fce4db30099cc">c4192b6</a>: &#91;ObjectMapper&#93; auto-inject ObjectMapper into ObjectMapperAwareInterface transforms</li>
</ul>

<p><a href="https://github.com/symfony/symfony/commits/8.1">8.1 changelog</a>:</p>

<ul>
<li><a href="https://github.com/symfony/symfony/commit/5f848d863ab541951fcd7c888e0734d52f93e08a">5f848d8</a>:  bump PHP requirement to >= 8.4.1</li>
<li><a href="https://github.com/symfony/symfony/commit/217545b7ea2bb8e0b927e490f7900d9a600e0977">217545b</a>: &#91;HttpKernel&#93; fix cache warmers running on every kernel boot instead of only on compilation</li>
<li><a href="https://github.com/symfony/symfony/commit/1f7d4cd5251865a6251b8c25dbb344be3c5a999b">1f7d4cd</a>: &#91;Console&#93; improve Table rendering performance</li>
<li><a href="https://github.com/symfony/symfony/commit/4801411b7162e73fd3269bfd83151aa972ed2851">4801411</a>: &#91;VarExporter&#93; fix serialization of objects with __serialize/__unserialize</li>
<li><a href="https://github.com/symfony/symfony/commit/3acb4ac5f495a51c87c009169e147a7d7e244b0f">3acb4ac</a>: &#91;DependencyInjection&#93; add #[RequiredBundle], ServicesBundle and ConsoleBundle</li>
<li><a href="https://github.com/symfony/symfony/commit/1596fb2b29afa054a18b4f52a4470cd9ba5276c7">1596fb2</a>: &#91;ErrorHandler&#93; fix http_response_code() warning on PHP 8.5 for max execution time errors</li>
<li><a href="https://github.com/symfony/symfony/commit/57f65c536bb63668a2505b13b73d109a8fc5a47c">57f65c5</a>: &#91;VarExporter&#93; make DeepCloner::__serialize() return a pure array and add toArray()/fromArray()</li>
<li><a href="https://github.com/symfony/symfony/commit/d770961fca7451dd3ba99066e1abeb340fae1e7b">d770961</a>: &#91;DependencyInjection&#93; fix bundles cache freshness check</li>
<li><a href="https://github.com/symfony/symfony/commit/da9ba596f5d5f4de6bd8871bd0e3b4f94c5274b8">da9ba59</a>: &#91;VarExporter&#93; leverage ext-deepclone when available</li>
</ul>

<h2>Newest issues and pull requests</h2>

<ul>
<li><a href="https://github.com/symfony/symfony/pull/63910">[DependencyInjection] Allow inline Definition as factory and configurator</a></li>
<li><a href="https://github.com/symfony/symfony/issues/63924">[Messenger] Add ID range support for failed:retry and failed:remove</a></li>
<li><a href="https://github.com/symfony/symfony/pull/63907">[RateLimiter] Add #[RateLimit] attribute to rate limit controllers declaratively</a></li>
<li><a href="https://github.com/symfony/symfony/pull/63929">[TwigBundle] Add twig.safe_class resource tag to register safe classes for the escaper</a></li>
</ul>

<h2>Symfony CLI</h2>

<p><a href="https://github.com/symfony-cli/symfony-cli">Symfony CLI</a> is a must-have tool when developing
Symfony applications on your local machine. It includes the
<a href="https://symfony.com/doc/current/setup/symfony_server.html">Symfony Local Server</a>,
the best way to run local Symfony applications. This week Symfony CLI released
its new  version with the following changes:</p>

<ul>
<li>update tests according to cloud templates (@tucksaun)</li>
<li>Bump go to 1.26 and update deps (@tucksaun)</li>
<li>Update deps (@fabpot)</li>
<li>add a CI job to check if tests are changing any files (@tucksaun)</li>
<li>Add autocompletion support for symfony pie (@tucksaun)</li>
<li>Tweak the migration instructions (@tucksaun)</li>
<li>Consider composer.cmd when looking for Composer on Windows (@tucksaun)</li>
<li>fix: DEFAULT_URI should also be exposed locally (@tucksaun)</li>
<li>Update configuration directory name to symfony-cli and a warning if legacy directory is detected (@tucksaun)</li>
<li>prefer os specific config dirs (@tjblackheart)</li>
</ul>

<h2>Symfony Jobs</h2>

<p>These are some of the most recent Symfony job offers:</p>

<ul>
<li><strong>Symfony Developer</strong> at Design Force Marketing<br>
Full-time - $60,000 – $100,000 / year<br>
Grand Haven Michigan, United States<br>
<a href="https://symfony.com/jobs/5ad3b96">View details</a></li>
<li><strong>Backend Symfony Developer</strong> at ShipMonk<br>
Contract / Freelance - $5,000 – $8,000 / month<br>
Full remote<br>
<a href="https://symfony.com/jobs/2bb5783">View details</a></li>
<li><strong>Backend Symfony Developer</strong> at Vacatia<br>
Full-time - $150,000 – $180,000 / year<br>
Remote + part-time onsite (Portland, Oregon, United States)<br>
<a href="https://symfony.com/jobs/8844fec">View details</a></li>
<li><strong>Backend Symfony Developer</strong> at POLAVIS<br>
Full-time - €30 – €45 / hour<br>
Full remote<br>
<a href="https://symfony.com/jobs/13a5a1a">View details</a></li>
<li><strong>Backend Symfony Developer</strong> at Travis International Road Services<br>
Full-time - €3,800 – €4,500 / month<br>
Remote + part-time onsite (Tilburg, Netherlands)<br>
<a href="https://symfony.com/jobs/8f177bf">View details</a></li>
</ul>

<p>You can <a href="https://symfony.com/jobs">publish a Symfony job offer for free</a> on symfony.com.</p>

<h2>SymfonyCasts Updates</h2>

<p><a href="https://symfonycasts.com/">SymfonyCasts</a> is the official way to learn Symfony.
Select a track for a guided path through 100+ video tutorial courses about
Symfony, PHP and JavaScript.</p>

<p>This week, SymfonyCasts published the following updates:</p>

<ul>
<li>(Video) <a href="https://symfonycasts.com/screencast/doctrine-inheritance/routing">Doctrine Inheritance: Classes in the Database: Routing with Doctrine Inheritance</a></li>
</ul>

<h2>They talked about us</h2>

<ul>
<li><a href="https://dev.to/xwero/creating-a-symfony-tui-application-148e">Creating a Symfony Tui application</a></li>
<li><a href="https://nicolas-jourdan.medium.com/symfony-lock-workflow-taming-the-race-condition-that-will-hit-you-in-production-d04613e0b6a8">Symfony Lock + Workflow: Taming the Race Condition that will hit you in production</a></li>
<li><a href="https://dev.to/tito10047/how-i-turned-hundreds-of-thousands-of-dumb-svg-icons-into-a-semantic-search-engine-in-7-languages-3kal">How I turned hundreds of thousands of SVG icons into a semantic search engine in 7 languages under 20ms (using LLM and Meilisearch)</a></li>
<li><a href="https://medium.com/@mahedi.sulaco.tec/how-doppars-temporal-orm-gives-every-database-record-a-queryable-history-9dda7a17f682">How Doppar’s Temporal ORM gives every database record a queryable history</a></li>
<li><a href="https://medium.com/@vbcherepanov/i-studied-the-etcd-codebase-and-it-changed-how-i-write-php-a02dfdfffb4c">I Studied the etcd Codebase — and It Changed How I Write PHP</a></li>
<li><a href="https://medium.com/@MattLeads/10x-less-ram-the-senior-guide-to-native-json-streaming-in-symfony-0c5fcd40c750">10x Less RAM: The Senior Guide to Native JSON Streaming in Symfony</a></li>
<li><a href="https://sensiolabs.com/blog/2026/symfonylive-paris-2026-ai-revolution-and-a-peak-reunion-for-team-sensiolabs">SymfonyLive Paris 2026: AI Revolution and a Peak Reunion for Team SensioLabs</a></li>
<li><a href="https://yegorshytikov.medium.com/orocommerce-acl-rest-api-and-controller-permission-auth-architecture-0ca4dde1b9a4">OroCommerce: ACL, REST API, and Controller Permission Auth Architecture</a></li>
<li><a href="https://jolicode.com/blog/notre-retour-sur-le-symfonylive-paris-2026">Notre retour sur le SymfonyLive Paris 2026</a></li>
</ul>

<h2>Upcoming Symfony Events</h2>

<ul>
<li><a href="https://www.meetup.com/phpug-rhein-neckar/events/312782219/">Sylius Meetup &amp; Hackathon Mannheim 2026</a>: Mannheim, Germany (April 30, 2026)</li>
<li><a href="https://websummercamp.com/2026">Web Summer Camp 2026</a>: Opatija, Croatia (July 2, 2026 – July 4, 2026)</li>
</ul>

<h2>Call to Action</h2>

<ul>
<li>Follow Symfony <a href="https://x.com/symfony">on X</a>, <a href="https://mastodon.social/@symfony">on Mastodon</a>, <a href="https://bsky.app/profile/symfony.com">on Bluesky</a> and <a href="https://www.threads.net/@symfony">on Threads</a> and share this article.</li>
<li><a href="https://feeds.feedburner.com/symfony/blog">Subscribe to the Symfony blog RSS</a> and never miss a Symfony story again.</li>
</ul>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/a-week-of-symfony-1006-april-6-12-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Javier Eguiluz ]]></dc:creator>
            <pubDate>Sun, 12 Apr 2026 09:36:00 +0200</pubDate>
            <comments>https://symfony.com/blog/a-week-of-symfony-1006-april-6-12-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony Polyfill 1.34.0 released]]></title>
            <link>https://symfony.com/blog/symfony-polyfill-1-34-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony Polyfill 1.34.0 ships ten new polyfills that cover features from
PHP 8.4, 8.5, and 8.6, along with a new polyfill for the deepclone
Symfony PHP extension. This release lets you write forward-compatible
code against upcoming PHP APIs while still running…</description>
            <content:encoded><![CDATA[
                                <p>Symfony Polyfill 1.34.0 ships ten new polyfills that cover features from
PHP 8.4, 8.5, and 8.6, along with a new polyfill for the <code translate="no" class="notranslate">deepclone</code>
Symfony PHP extension. This release lets you write forward-compatible
code against upcoming PHP APIs while still running on the PHP versions
your projects support today.</p>
<div class="section">
<h2 id="pdo-driver-specific-subclasses"><a class="headerlink" href="#pdo-driver-specific-subclasses" title="Permalink to this headline">PDO driver-specific subclasses</a></h2>
<p>PHP 8.4 introduced dedicated <code translate="no" class="notranslate">Pdo\Mysql</code>, <code translate="no" class="notranslate">Pdo\Pgsql</code>, <code translate="no" class="notranslate">Pdo\Sqlite</code>,
<code translate="no" class="notranslate">Pdo\Odbc</code>, <code translate="no" class="notranslate">Pdo\Firebird</code>, and <code translate="no" class="notranslate">Pdo\Dblib</code> subclasses with their
own driver-specific constants and methods, and PHP 8.5 deprecates the
equivalents on the base <code translate="no" class="notranslate">PDO</code> class. This polyfill makes the new
classes and constants available on earlier PHP versions, so you can move
away from the deprecated API without waiting for every target runtime to
reach PHP 8.4:</p>
<div translate="no" data-loc="4" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">use</span> <span class="hljs-title">Pdo</span>\<span class="hljs-title">Mysql</span>;

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>connection</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">Mysql</span>(<span class="hljs-string">'mysql:host=localhost;dbname=shop'</span>, <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>user</span>, <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>pass</span>);
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>connection</span>-&gt;<span class="hljs-title invoke__">setAttribute</span>(Mysql::<span class="hljs-variable constant_">ATTR_MULTI_STATEMENTS</span>, <span class="hljs-keyword">false</span>);</code></pre>
    </div>
</div>
<p>Note that the <code translate="no" class="notranslate">PDO::connect()</code> static factory introduced alongside the
subclasses is not polyfilled.</p>
<p>Thanks to <a href="https://github.com/nicolas-grekas" class="reference external" rel="external noopener noreferrer" target="_blank">@nicolas-grekas</a> and <a href="https://github.com/jnoordsij" class="reference external" rel="external noopener noreferrer" target="_blank">@jnoordsij</a> for
<a href="https://github.com/symfony/polyfill/pull/549" class="reference external" rel="external noopener noreferrer" target="_blank">#549</a>.</p>
</div>
<div class="section">
<h2 id="bcmath-rounding-functions"><a class="headerlink" href="#bcmath-rounding-functions" title="Permalink to this headline">bcmath rounding functions</a></h2>
<p>PHP 8.4 added <code translate="no" class="notranslate">bcround()</code>, <code translate="no" class="notranslate">bcceil()</code>, and <code translate="no" class="notranslate">bcfloor()</code> to round
arbitrary-precision decimal numbers without ever converting them to
floats. The polyfill makes the three functions available on earlier PHP
versions, together with the <code translate="no" class="notranslate">RoundingMode</code> constants that <code translate="no" class="notranslate">bcround()</code>
expects:</p>
<div translate="no" data-loc="3" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>total</span> = <span class="hljs-title invoke__">bcround</span>(<span class="hljs-string">'19.995'</span>, <span class="hljs-number">2</span>, RoundingMode::<span class="hljs-variable constant_">HalfAwayFromZero</span>); <span class="hljs-comment">// '20.00'</span>
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>floor</span> = <span class="hljs-title invoke__">bcfloor</span>(<span class="hljs-string">'19.999'</span>);                                    <span class="hljs-comment">// '19'</span>
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>ceil</span>  = <span class="hljs-title invoke__">bcceil</span>(<span class="hljs-string">'19.001'</span>);                                     <span class="hljs-comment">// '20'</span></code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/Dean151" class="reference external" rel="external noopener noreferrer" target="_blank">@Dean151</a> for
<a href="https://github.com/symfony/polyfill/pull/546" class="reference external" rel="external noopener noreferrer" target="_blank">#546</a>.</p>
</div>
<div class="section">
<h2 id="intllistformatter"><a class="headerlink" href="#intllistformatter" title="Permalink to this headline">IntlListFormatter</a></h2>
<p>PHP 8.5 ships a new <code translate="no" class="notranslate">IntlListFormatter</code> class that joins items into a
locale-aware list, picking the correct conjunction and punctuation for
each language. The ICU polyfill provides it back to PHP 7.2 using the
CLDR list patterns:</p>
<div translate="no" data-loc="7" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>formatter</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">IntlListFormatter</span>(<span class="hljs-string">'en'</span>);
<span class="hljs-keyword">echo</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>formatter</span>-&gt;<span class="hljs-title invoke__">format</span>([<span class="hljs-string">'apples'</span>, <span class="hljs-string">'oranges'</span>, <span class="hljs-string">'pears'</span>]);
<span class="hljs-comment">// apples, oranges, and pears</span>

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>formatter</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">IntlListFormatter</span>(<span class="hljs-string">'fr'</span>);
<span class="hljs-keyword">echo</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>formatter</span>-&gt;<span class="hljs-title invoke__">format</span>([<span class="hljs-string">'pommes'</span>, <span class="hljs-string">'oranges'</span>, <span class="hljs-string">'poires'</span>]);
<span class="hljs-comment">// pommes, oranges et poires</span></code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/Ayesh" class="reference external" rel="external noopener noreferrer" target="_blank">@Ayesh</a> for
<a href="https://github.com/symfony/polyfill/pull/532" class="reference external" rel="external noopener noreferrer" target="_blank">#532</a>.</p>
</div>
<div class="section">
<h2 id="locale-is-right-to-left"><a class="headerlink" href="#locale-is-right-to-left" title="Permalink to this headline">locale_is_right_to_left()</a></h2>
<p>PHP 8.5 also exposes <code translate="no" class="notranslate">locale_is_right_to_left()</code> (along with the
<code translate="no" class="notranslate">Locale::isRightToLeft()</code> method), which returns <code translate="no" class="notranslate">true</code> for locales
written from right to left such as Arabic or Hebrew. You can use it to
flip the layout direction of a response without shipping your own list
of RTL language codes:</p>
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>direction</span> = <span class="hljs-title invoke__">locale_is_right_to_left</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>request</span>-&gt;<span class="hljs-title invoke__">getLocale</span>()) ? <span class="hljs-string">'rtl'</span> : <span class="hljs-string">'ltr'</span>;</code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/alexander-schranz" class="reference external" rel="external noopener noreferrer" target="_blank">@alexander-schranz</a> for
<a href="https://github.com/symfony/polyfill/pull/527" class="reference external" rel="external noopener noreferrer" target="_blank">#527</a>.</p>
</div>
<div class="section">
<h2 id="grapheme-levenshtein"><a class="headerlink" href="#grapheme-levenshtein" title="Permalink to this headline">grapheme_levenshtein()</a></h2>
<p>PHP's built-in <code translate="no" class="notranslate">levenshtein()</code> counts bytes, which produces incorrect
results as soon as a string contains multi-byte characters or combining
marks. PHP 8.5 adds <code translate="no" class="notranslate">grapheme_levenshtein()</code>, which operates on
grapheme clusters so that user-visible characters are counted as one
unit:</p>
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-title invoke__">grapheme_levenshtein</span>(<span class="hljs-string">'café'</span>, <span class="hljs-string">'cafe'</span>);  <span class="hljs-comment">// 1</span>
<span class="hljs-title invoke__">grapheme_levenshtein</span>(<span class="hljs-string">'Å'</span>, <span class="hljs-string">'A'</span>);        <span class="hljs-comment">// 1</span></code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/sudam802" class="reference external" rel="external noopener noreferrer" target="_blank">@sudam802</a> for
<a href="https://github.com/symfony/polyfill/pull/558" class="reference external" rel="external noopener noreferrer" target="_blank">#558</a>.</p>
</div>
<div class="section">
<h2 id="filter-exception-classes"><a class="headerlink" href="#filter-exception-classes" title="Permalink to this headline">Filter exception classes</a></h2>
<p>PHP 8.5 introduces a <code translate="no" class="notranslate">FILTER_THROW_ON_FAILURE</code> flag that makes
<code translate="no" class="notranslate">filter_var()</code> throw instead of returning <code translate="no" class="notranslate">false</code> on invalid input.
The throwing behavior itself cannot be emulated, but the new exception
classes can, which lets library authors write <code translate="no" class="notranslate">catch</code> blocks that
compile on both PHP 8.5 and earlier releases:</p>
<div translate="no" data-loc="10" class="notranslate codeblock codeblock-length-md codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">use</span> <span class="hljs-title">Filter</span>\<span class="hljs-title">FilterException</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Filter</span>\<span class="hljs-title">FilterFailedException</span>;

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>flags</span> = FILTER_THROW_ON_FAILURE;

<span class="hljs-keyword">try</span> {
    <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>email</span> = <span class="hljs-title invoke__">filter_var</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>input</span>, FILTER_VALIDATE_EMAIL, <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>flags</span>);
} <span class="hljs-keyword">catch</span> (FilterFailedException <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>e</span>) {
    <span class="hljs-comment">// ... report the invalid input</span>
}</code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/Ayesh" class="reference external" rel="external noopener noreferrer" target="_blank">@Ayesh</a> for
<a href="https://github.com/symfony/polyfill/pull/557" class="reference external" rel="external noopener noreferrer" target="_blank">#557</a>.</p>
</div>
<div class="section">
<h2 id="delayedtargetvalidation-attribute"><a class="headerlink" href="#delayedtargetvalidation-attribute" title="Permalink to this headline">DelayedTargetValidation attribute</a></h2>
<p>PHP 8.5 adds the <code translate="no" class="notranslate">#[DelayedTargetValidation]</code> attribute, which tells
the engine to defer target validation of a user attribute until
reflection actually instantiates it. This unblocks attribute authors who
need to apply an attribute to a target that the engine would otherwise
reject. The polyfill provides an empty stub so the attribute compiles
and is visible through reflection on earlier PHP versions:</p>
<div translate="no" data-loc="5" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-meta">#[DelayedTargetValidation]</span>
<span class="hljs-meta">#[Route(<span class="hljs-string">'/invoices'</span>)]</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">InvoiceController</span>
</span>{
}</code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/DanielEScherzer" class="reference external" rel="external noopener noreferrer" target="_blank">@DanielEScherzer</a> for
<a href="https://github.com/symfony/polyfill/pull/541" class="reference external" rel="external noopener noreferrer" target="_blank">#541</a>.</p>
</div>
<div class="section">
<h2 id="clamp"><a class="headerlink" href="#clamp" title="Permalink to this headline">clamp()</a></h2>
<p>Looking further ahead, the release ships a polyfill for the upcoming
PHP 8.6 <code translate="no" class="notranslate">clamp()</code> function, which constrains a numeric value between
a minimum and a maximum:</p>
<div translate="no" data-loc="3" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-title invoke__">clamp</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>volume</span>, <span class="hljs-number">0</span>, <span class="hljs-number">100</span>);  <span class="hljs-comment">// caps volume to the 0..100 range</span>
<span class="hljs-title invoke__">clamp</span>(<span class="hljs-number">-5</span>, <span class="hljs-number">1</span>, <span class="hljs-number">10</span>);        <span class="hljs-comment">// 1</span>
<span class="hljs-title invoke__">clamp</span>(<span class="hljs-number">42</span>, <span class="hljs-number">1</span>, <span class="hljs-number">10</span>);        <span class="hljs-comment">// 10</span></code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/kylekatarnls" class="reference external" rel="external noopener noreferrer" target="_blank">@kylekatarnls</a> for
<a href="https://github.com/symfony/polyfill/pull/554" class="reference external" rel="external noopener noreferrer" target="_blank">#554</a>.</p>
</div>
<div class="section">
<h2 id="polyfill-for-the-deepclone-extension"><a class="headerlink" href="#polyfill-for-the-deepclone-extension" title="Permalink to this headline">Polyfill for the deepclone extension</a></h2>
<p>Symfony now ships an optional <a href="https://github.com/symfony/php-ext-deepclone" class="reference external" rel="external noopener noreferrer" target="_blank">symfony/php-ext-deepclone</a> native
extension that round-trips arbitrary PHP value graphs through an array
representation, preserving object identity, references, cycles, and
private property state. It is several times faster than
<code translate="no" class="notranslate">unserialize(serialize(...))</code> and produces output that OPcache can map
into shared memory when dumped via <code translate="no" class="notranslate">var_export()</code>.</p>
<p>The new <code translate="no" class="notranslate">symfony/polyfill-deepclone</code> package provides the same
<code translate="no" class="notranslate">deepclone_to_array()</code> and <code translate="no" class="notranslate">deepclone_from_array()</code> functions in
pure PHP, reusing the wire format already used by
<code translate="no" class="notranslate">Symfony\Component\VarExporter\DeepCloner</code>:</p>
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>snapshot</span> = <span class="hljs-title invoke__">deepclone_from_array</span>(<span class="hljs-title invoke__">deepclone_to_array</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>order</span>));</code></pre>
    </div>
</div>
<p>When the native extension is loaded, the polyfill steps aside.</p>
<p>Thanks to <a href="https://github.com/nicolas-grekas" class="reference external" rel="external noopener noreferrer" target="_blank">@nicolas-grekas</a> and <a href="https://github.com/GromNaN" class="reference external" rel="external noopener noreferrer" target="_blank">@GromNaN</a> for
<a href="https://github.com/symfony/polyfill/pull/561" class="reference external" rel="external noopener noreferrer" target="_blank">#561</a>.</p>
</div>
<div class="section">
<h2 id="collator-compare-fallback"><a class="headerlink" href="#collator-compare-fallback" title="Permalink to this headline">Collator::compare() fallback</a></h2>
<p>Before this release, calling <code translate="no" class="notranslate">Collator::compare()</code> on the ICU polyfill
raised a <code translate="no" class="notranslate">MethodNotImplementedException</code>. It now falls back to a
deterministic string comparison based on the spaceship operator, so code
that needs a stable ordering (rather than full ICU collation) works out
of the box:</p>
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>collator</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">Collator</span>(<span class="hljs-string">'en'</span>);
<span class="hljs-title invoke__">usort</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>products</span>, <span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-params">(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>a</span>, <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>b</span>)</span> =&gt;</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>collator</span>-&gt;<span class="hljs-title invoke__">compare</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>a</span>-&gt;name, <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>b</span>-&gt;name));</code></pre>
    </div>
</div>
<p>Thanks to <a href="https://github.com/aymericcucherousset" class="reference external" rel="external noopener noreferrer" target="_blank">@aymericcucherousset</a> for
<a href="https://github.com/symfony/polyfill/pull/560" class="reference external" rel="external noopener noreferrer" target="_blank">#560</a>.</p>
</div>
<div class="section">
<h2 id="full-changelog"><a class="headerlink" href="#full-changelog" title="Permalink to this headline">Full Changelog</a></h2>
<ul>
    <li><a href="https://github.com/symfony/polyfill/pull/565" class="reference external" rel="external noopener noreferrer" target="_blank">#565</a> Fix bcdiv handling of DivisionByZeroError (<a href="https://github.com/nicolas-grekas" class="reference external" rel="external noopener noreferrer" target="_blank">@nicolas-grekas</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/501" class="reference external" rel="external noopener noreferrer" target="_blank">#501</a> mbstring polyfills must not raise value errors in PHP 7 (<a href="https://github.com/derrabus" class="reference external" rel="external noopener noreferrer" target="_blank">@derrabus</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/527" class="reference external" rel="external noopener noreferrer" target="_blank">#527</a> [8.5] Add <code translate="no" class="notranslate">locale_is_right_to_left</code> (<a href="https://github.com/alexander-schranz" class="reference external" rel="external noopener noreferrer" target="_blank">@alexander-schranz</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/532" class="reference external" rel="external noopener noreferrer" target="_blank">#532</a> [Intl] Add PHP 8.5 <code translate="no" class="notranslate">IntlListFormatter</code> to ICU polyfill (<a href="https://github.com/Ayesh" class="reference external" rel="external noopener noreferrer" target="_blank">@Ayesh</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/549" class="reference external" rel="external noopener noreferrer" target="_blank">#549</a> Add polyfill for PDO driver specific subclasses (<a href="https://github.com/nicolas-grekas" class="reference external" rel="external noopener noreferrer" target="_blank">@nicolas-grekas</a>, <a href="https://github.com/jnoordsij" class="reference external" rel="external noopener noreferrer" target="_blank">@jnoordsij</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/558" class="reference external" rel="external noopener noreferrer" target="_blank">#558</a> Add the grapheme_levenshtein polyfill (<a href="https://github.com/sudam802" class="reference external" rel="external noopener noreferrer" target="_blank">@sudam802</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/557" class="reference external" rel="external noopener noreferrer" target="_blank">#557</a> [PHP 8.5] Add new <code translate="no" class="notranslate">\Filter\FilterException</code> and <code translate="no" class="notranslate">Filter\FilterFailedException</code> (<a href="https://github.com/Ayesh" class="reference external" rel="external noopener noreferrer" target="_blank">@Ayesh</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/560" class="reference external" rel="external noopener noreferrer" target="_blank">#560</a> Add fallback implementation for Collator::compare() (<a href="https://github.com/aymericcucherousset" class="reference external" rel="external noopener noreferrer" target="_blank">@aymericcucherousset</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/556" class="reference external" rel="external noopener noreferrer" target="_blank">#556</a> Fix PHP 7.2 compatibility for PHP 8.4 polyfill (<a href="https://github.com/Seldaek" class="reference external" rel="external noopener noreferrer" target="_blank">@Seldaek</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/561" class="reference external" rel="external noopener noreferrer" target="_blank">#561</a> Add polyfill for symfony/php-ext-deepclone (<a href="https://github.com/nicolas-grekas" class="reference external" rel="external noopener noreferrer" target="_blank">@nicolas-grekas</a>, <a href="https://github.com/GromNaN" class="reference external" rel="external noopener noreferrer" target="_blank">@GromNaN</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/554" class="reference external" rel="external noopener noreferrer" target="_blank">#554</a> [8.6] Add <code translate="no" class="notranslate">clamp</code> function (<a href="https://github.com/kylekatarnls" class="reference external" rel="external noopener noreferrer" target="_blank">@kylekatarnls</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/546" class="reference external" rel="external noopener noreferrer" target="_blank">#546</a> [8.4] implement bcround, bcceil and bcfloor (<a href="https://github.com/Dean151" class="reference external" rel="external noopener noreferrer" target="_blank">@Dean151</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/504" class="reference external" rel="external noopener noreferrer" target="_blank">#504</a> Ctype: Give the correct deprecations for PHP 8.1+ (<a href="https://github.com/BackEndTea" class="reference external" rel="external noopener noreferrer" target="_blank">@BackEndTea</a>)</li>
<li><a href="https://github.com/symfony/polyfill/pull/541" class="reference external" rel="external noopener noreferrer" target="_blank">#541</a> [8.5] Add polyfill for DelayedTargetValidation (<a href="https://github.com/DanielEScherzer" class="reference external" rel="external noopener noreferrer" target="_blank">@DanielEScherzer</a>)</li>
</ul>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-polyfill-1-34-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Sat, 11 Apr 2026 10:33:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-polyfill-1-34-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[SymfonyLive Berlin 2026:  “Symfony AI-Mate.”]]></title>
            <link>https://symfony.com/blog/symfonylive-berlin-2026-symfony-ai-mate?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


We’re excited to announce that SymfonyLive Berlin 2026 will take place April 23–24, 2026 at CineStar CUBIX Alexanderplatz, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.

Before the conference,…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T160133-169.png" alt="Nl Blog Banner 2026 04 07T160133 169">
</a></p>

<p>We’re excited to announce that <strong>SymfonyLive Berlin 2026</strong> will take place April 23–24, 2026 at <a href="https://live.symfony.com/2026-berlin/venue"><strong>CineStar CUBIX Alexanderplatz</strong></a>, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.</p>

<p>Before the conference, <a href="https://live.symfony.com/2026-berlin/workshop"><strong>two days of pre-conference trainings will be held on April 21–22</strong></a>, giving attendees the opportunity to dive deeper into Symfony with expert-led sessions.</p>

<hr />

<h3>🎤 Next talk at SymfonyLive Berlin 2026!</h3>

<p>Next up in the SymfonyLive Berlin 2026 lineup: <a href="https://connect.symfony.com/profile/wjohannes"><strong>Johannes Wachter</strong></a> with <a href="https://live.symfony.com/2026-berlin/schedule/symfony-ai-mate"><strong>“Symfony AI-Mate.”</strong></a></p>

<p>Since December 2025, Symfony/AI version 0.1 has introduced the Mate component, opening new possibilities for integrating AI into Symfony applications.</p>

<p>In this talk, Johannes will explore how the Mate component is implemented, how to use it effectively in real-world projects, and take a closer look at its strengths and limitations.</p>

<p>A great opportunity to better understand how AI is being integrated into the Symfony ecosystem — and what it means for your future projects 🤖</p>

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-10T122214-179.png" alt="Nl Blog Banner 2026 04 10T122214 179">
</a></p>

<h3>🎟️ Ready to join us?</h3>

<h3>Book your ticket and choose the option that suits you best:</h3>

<p><strong>Conference Ticket</strong> – Access to the conference on April 23–24 with 15 inspiring speakers, plus replays, lunches, and coffee breaks.</p>

<p><strong>Workshop Ticket</strong> – Access to 2 days of workshops on April 21–22, including lunches and coffee breaks. Workshops are now available—choose yours soon!</p>

<p><strong>Combo Ticket</strong> – The full experience: workshops + conference (April 21–24), with all meals, breaks, and the conference party included.</p>

<hr />

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T154640-801.png" alt="Nl Blog Banner 2026 04 07T154640 801">
</a></p>

<hr />

<h3>Joins us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfonylive-berlin-2026-symfony-ai-mate?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Paola Suárez ]]></dc:creator>
            <pubDate>Fri, 10 Apr 2026 11:25:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfonylive-berlin-2026-symfony-ai-mate?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony_Live Berlin 2026:  “Symfony AI in Action” !]]></title>
            <link>https://symfony.com/blog/xxxx?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


We’re excited to announce that SymfonyLive Berlin 2026 will take place April 23–24, 2026 at CineStar CUBIX Alexanderplatz, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.



🎤 New talk at SymfonyLive…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T160133-169.png" alt="Nl Blog Banner 2026 04 07T160133 169">
</a></p>

<p>We’re excited to announce that <strong>SymfonyLive Berlin 2026</strong> will take place April 23–24, 2026 at <a href="https://live.symfony.com/2026-berlin/venue"><strong>CineStar CUBIX Alexanderplatz</strong></a>, right in the heart of Berlin, directly on Alexanderplatz and easily accessible by public transport.</p>

<hr />

<h3>🎤 New talk at SymfonyLive Berlin 2026!</h3>

<p>Next up in the SymfonyLive Berlin 2026 lineup:  <a href="https://connect.symfony.com/profile/chertel"><strong>Christopher Hertel</strong></a>, Software Architect, Quentic, with <a href="https://live.symfony.com/2026-berlin/schedule/practical-ai-integrations-with-symfony"><strong>“Symfony AI in Action.”</strong></a></p>

<p>In this talk, Christopher will explore how Symfony AI enables developers to bring AI-powered and even agentic features into existing PHP applications and scalable architectures; going far beyond simple chatbots.</p>

<p>Whether you’re looking for practical ways to get started, inspiration for real use cases, or a clearer picture of what’s realistically achievable today, this session will help you move from hype to hands-on implementation.</p>

<p>A must-attend talk for developers ready to make AI useful, concrete, and production-ready 🚀</p>

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-10T122214-179.png" alt="Nl Blog Banner 2026 04 10T122214 179">
</a></p>

<h3>🎟️ Ready to join us?</h3>

<h3>Choose the option that suits you best:</h3>

<p><strong>Conference Ticket</strong> – Access to the conference on April 23–24 with 15 inspiring speakers, plus replays, lunches, and coffee breaks.</p>

<p><strong>Workshop Ticket</strong> – Access to 2 days of workshops on April 21–22, including lunches and coffee breaks. Workshops are now available—choose yours soon!</p>

<p><strong>Combo Ticket</strong> – The full experience: workshops + conference (April 21–24), with all meals, breaks, and the conference party included.</p>

<p>👉 <strong><a href="https://live.symfony.com/2026-berlin/registration/">Get your ticket for SymfonyLive Berlin 2026</a></strong>💛</p>

<hr />

<p><a class="block text-center" href="https://live.symfony.com/2026-berlin/">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-07T154640-801.png" alt="Nl Blog Banner 2026 04 07T154640 801">
</a></p>

<hr />

<h3>Joins us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/xxxx?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Paola Suárez ]]></dc:creator>
            <pubDate>Fri, 10 Apr 2026 11:20:00 +0200</pubDate>
            <comments>https://symfony.com/blog/xxxx?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
            </channel>
</rss>
