<?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, 05 Nov 2026 22:18:20 +0100</pubDate>
        <lastBuildDate>Thu, 05 Nov 2026 14:30:00 +0100</lastBuildDate>
        <language>en</language>
                        <item>
            <title>SymfonyCon Warsaw 2026: Pedal to the Metal: Compiling PHP to Native Code</title>
            <link>https://symfony.com/blog/symfonycon-warsaw-2026-pedal-to-the-metal-compiling-php-to-native-code?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


Save the date for SymfonyCon Warsaw 2026 on November 26-27! An open, welcoming event featuring 3 parallel tracks and space to connect with fellow PHP enthusiasts.



🎤 Speaker announcement

We are honored to have Guillaume Loulier, Technical Expert,…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-warsaw-con" title="Nl Blog Banner">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner.png" alt="Nl Blog Banner">
</a></p>

<p>Save the date for <strong><a href="https://live.symfony.com/2026-warsaw-con/">SymfonyCon Warsaw 2026</a></strong> on November 26-27! An open, welcoming event featuring 3 parallel tracks and space to connect with fellow PHP enthusiasts.</p>

<hr />

<h3>🎤 Speaker announcement</h3>

<p>We are honored to have <strong><a href="https://connect.symfony.com/profile/guikingone">Guillaume Loulier</a></strong>, Technical Expert, SensioLabs, presenting <strong><a href="https://live.symfony.com/2026-warsaw-con/schedule/pedal-to-the-metal-compiling-php-to-native-code">Pedal to the Metal: Compiling PHP to Native Code</a></strong>. Expect valuable insights and top-tier expertise!</p>

<p>"For nearly thirty years, writing PHP has meant writing for an interpreter. When that one Symfony endpoint that won't go faster becomes performance-critical, you reach for a C extension or a rewrite in Go or Rust and leave PHP behind.</p>

<p>Elephc does the opposite. Written in Rust, it compiles a static subset of PHP straight to native machine code: no Zend engine, no fallback interpreter. Your project stays in PHP, only the critical modules go through Elephc.</p>

<p>It's the same wall that stalled a recent generics RFC: monomorphization is free in Rust but too costly in a dynamic engine like PHP. As always, the interpreter is the constraint, not the language.</p>

<p>After a tour of the tool, I'll take you from an everyday example to a Doom-style demo, limitations included. You'll leave with a clear mental model of AOT compilation."</p>

<p>A special thanks to <strong><a href="https://smile.eu/en/smile-group/open-source">Smile</a></strong> for sponsoring this 3rd track on November 26th.</p>

<p>Click here to see more <strong><a href="https://live.symfony.com/2026-warsaw-con/schedule">talks</a></strong>. The full schedule will be unveiled step-by-step over the coming weeks. Stay tuned!</p>

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

<h3>🏨 Accommodation</h3>

<p>The official conference hotel offers special preferential rates and flexible conditions for our attendees. Make sure to use our <strong><a href="https://www.hilton.com/en/book/reservation/rooms/?ctyhocn=WAWHIHI&amp;arrivalDate=2026-11-23&amp;departureDate=2026-11-29&amp;groupCode=GSYMDP&amp;room1NumAdults=1">dedicated link</a></strong> to book your room and stay right where the action happens!</p>

<h3>🥳 Save the date for the Community Party!</h3>

<p>Because SymfonyCon isn't just about code, we are happy to confirm that our traditional Community Party will take place on the evening of <strong>Thursday, November 26</strong>. Get ready for a great night of networking, fun, and connecting with peers!</p>

<h3>💻 Hackday</h3>

<p>Ready to contribute? The Hackday on <strong>Saturday, November 28</strong> (free and open to all!) will take place at "The Brain Embassy - Czackiego" thanks to the support of <a href="https://baksla.sh/">Baksla.sh</a>. Bring your laptop and your good mood!</p>

<h3>🎟️ Get your tickets</h3>

<p>Tickets are available here: <strong><a href="https://live.symfony.com/2026-warsaw-con/registration">Secure your ticket today!</a></strong></p>

<hr />

<h3>Join 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/symfonycon-warsaw-2026-pedal-to-the-metal-compiling-php-to-native-code?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Mélyne FREUZE ]]></dc:creator>
            <pubDate>Thu, 05 Nov 2026 14:30:00 +0100</pubDate>
            <comments>https://symfony.com/blog/symfonycon-warsaw-2026-pedal-to-the-metal-compiling-php-to-native-code?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>Symfony UX 3.7 released</title>
            <link>https://symfony.com/blog/symfony-ux-3-7-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony UX 3.7 is out, with more than 100 pull requests merged since 3.6. It
adds UX CSS, an experimental package that turns design tokens into atomic CSS,
two self-hosted image servers to UX Image, and takes the UX Toolkit out of
experimental. LiveComponent…</description>
            <content:encoded><![CDATA[
                                <p>Symfony UX 3.7 is out, with more than 100 pull requests merged since 3.6. It
adds UX CSS, an experimental package that turns design tokens into atomic CSS,
two self-hosted image servers to UX Image, and takes the UX Toolkit out of
experimental. LiveComponent gets 13 bug fixes, Dropzone a round of new
features, and pages with many components render faster.</p>
<div class="section">
<h2 id="ux-css"><a class="headerlink" href="#ux-css" title="Permalink to this headline">UX CSS</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/3933">#3933</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4183">#4183</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4186">#4186</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4195">#4195</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4196">#4196</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4197">#4197</a>
                                                </span>
            </div>
</div>
<p>Utility classes written as strings, like the ones of <a href="https://tailwindcss.com/" class="reference external" rel="external noopener noreferrer" target="_blank">Tailwind CSS</a>, are
plain text: a misspelled class gets no CSS, and nothing reports it. UX CSS
gives Twig a <code translate="no" class="notranslate">css()</code> function inspired by <a href="https://panda-css.com/" class="reference external" rel="external noopener noreferrer" target="_blank">Panda CSS</a>: you pass it style
properties and design tokens, and it returns class names.</p>
<p>Every <code translate="no" class="notranslate">css()</code> call is validated. A misspelled property or token name is
reported as an error on the page in debug mode, by <code translate="no" class="notranslate">lint:twig</code> in CI, and by
<code translate="no" class="notranslate">cache:clear</code> at deploy, where it makes the command fail in prod. A <code translate="no" class="notranslate">css()</code>
call without dynamic values <strong>has no cost at runtime</strong>: the compiled template
already holds its class names as a plain string, so nothing is computed when the
page renders.</p>
<p>PHP reads your templates and writes one stylesheet, without Node.js. It works
with <a href="https://symfony.com/doc/current/frontend/asset_mapper.html" class="reference external">AssetMapper</a>, <a href="https://symfony.com/bundles/reprise/current/index.html" class="reference external">Symfony Reprise</a> and <a href="https://symfony.com/doc/current/frontend/encore/index.html" class="reference external">Webpack Encore</a>. On
ux.symfony.com, <a href="https://ux.symfony.com/css#demo" class="reference external">this card</a>:</p>
<div translate="no" data-loc="19" 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">article</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ css({
    p: <span class="hljs-string">'lg'</span>,
    rounded: <span class="hljs-string">'md'</span>,
    bg: <span class="hljs-string">'surface'</span>,
    color: <span class="hljs-string">'fg'</span>,
}) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h3</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ css({color: <span class="hljs-string">'fg'</span>}) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span>symfony/ux-css<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ css({mt: <span class="hljs-string">'sm'</span>}) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span>Typed atomic CSS for Twig.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://github.com/symfony/ux-css"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ css({
        display: <span class="hljs-string">'inline-block'</span>,
        mt: <span class="hljs-string">'md'</span>,
        px: <span class="hljs-string">'md'</span>,
        py: <span class="hljs-string">'sm'</span>,
        rounded: <span class="hljs-string">'md'</span>,
        bg: <span class="hljs-string">'blue.600'</span>,
        color: <span class="hljs-string">'white'</span>,
        _hover: {bg: <span class="hljs-string">'blue.700'</span>},
    }) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span>View on GitHub<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">article</span>&gt;</span></span></code></pre>
    </div>
</div>
<p>renders <code translate="no" class="notranslate">&lt;article class="p_lg bdr_md bg_surface c_fg"&gt;</code>, and the bundle
writes the matching rules, with every token as a CSS variable (reformatted for
readability):</p>
<div translate="no" data-loc="22" class="notranslate codeblock codeblock-length-md codeblock-css">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">@layer</span> tokens, utilities;

<span class="hljs-keyword">@layer</span> tokens {
    <span class="hljs-selector-pseudo">:where(</span><span class="hljs-selector-pseudo">:root</span>, <span class="hljs-selector-pseudo">:host)</span> {
        <span class="hljs-attribute">--colors-blue-600</span>: <span class="hljs-number">#1572b6</span>;
        <span class="hljs-comment">/* ... */</span>
        <span class="hljs-attribute">--colors-fg</span>: <span class="hljs-built_in">var</span>(--colors-gray-<span class="hljs-number">900</span>);
        <span class="hljs-attribute">--colors-surface</span>: <span class="hljs-built_in">var</span>(--colors-white);
    }

    <span class="hljs-selector-class">.dark</span> {
        <span class="hljs-attribute">--colors-fg</span>: <span class="hljs-built_in">var</span>(--colors-gray-<span class="hljs-number">50</span>);
        <span class="hljs-attribute">--colors-surface</span>: <span class="hljs-built_in">var</span>(--colors-gray-<span class="hljs-number">800</span>);
    }
}

<span class="hljs-keyword">@layer</span> utilities {
    <span class="hljs-selector-class">.p_lg</span> { <span class="hljs-attribute">padding</span>: <span class="hljs-built_in">var</span>(--spacing-lg); }
    <span class="hljs-selector-class">.bg_surface</span> { <span class="hljs-attribute">background</span>: <span class="hljs-built_in">var</span>(--colors-surface); }
    <span class="hljs-comment">/* ... */</span>
    <span class="hljs-selector-class">.hover</span>\<span class="hljs-selector-pseudo">:bg_blue</span>\<span class="hljs-selector-class">.700</span><span class="hljs-selector-pseudo">:is(</span><span class="hljs-selector-pseudo">:hover</span>, <span class="hljs-selector-attr">[data-hover]</span>) { <span class="hljs-attribute">background</span>: <span class="hljs-built_in">var</span>(--colors-blue-<span class="hljs-number">700</span>); }
}</code></pre>
    </div>
</div>
<p>UX CSS supports every token category of Panda CSS, and the same optional CSS
reset (<code translate="no" class="notranslate">preflight: true</code>).</p>
<p>Editor support is still partial. The <a href="https://plugins.jetbrains.com/plugin/7219-symfony-support" class="reference external" rel="external noopener noreferrer" target="_blank">Symfony plugin for PhpStorm</a> and
<a href="https://github.com/symfony/language-tools" class="reference external" rel="external noopener noreferrer" target="_blank">Symfony Language Tools</a> already complete the properties and token names of
<code translate="no" class="notranslate">css()</code>. Pull requests <a href="https://github.com/Haehnchen/idea-php-symfony2-plugin/pulls?q=is%3Apr+ux-css" class="reference external" rel="external noopener noreferrer" target="_blank">in review</a> for the PhpStorm plugin add the value of
each token to the completion (<code translate="no" class="notranslate">1rem</code> next to the spacing token <code translate="no" class="notranslate">md</code> for the
<code translate="no" class="notranslate">p</code> property), a preview of the color of color tokens, and Ctrl+click to go
from a token to its declaration. Language Tools is getting the same features.</p>
<p>In March 2026, for <a href="https://symfony.com/blog/a-week-of-symfony-1000-february-23-march-1-2026" class="reference external">its 1,000th issue</a>, A Week of Symfony listed wishes for the
next 1,000 weeks of Symfony UX, and one was an integration with Panda CSS. UX
CSS is inspired by Panda CSS rather than built on it. It ships 35 weeks later,
and it runs without Node.js.</p>
</div>
<div class="section">
<h2 id="ux-image-two-self-hosted-image-servers"><a class="headerlink" href="#ux-image-two-self-hosted-image-servers" title="Permalink to this headline">UX Image: Two Self-Hosted Image Servers</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/tacman">
                <img src="https://github.com/tacman.png" alt="Tac Tacelosky">
            </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/tacman">Tac Tacelosky</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/4151">#4151</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4091">#4091</a>
                                                </span>
            </div>
</div>
<p>The four bridges of UX Image 3.6 send every variant to an image CDN:
Cloudflare, Cloudinary, imgix or KeyCDN. 3.7 adds two bridges for image servers
you run yourself, <a href="https://github.com/cshum/imagor" class="reference external" rel="external noopener noreferrer" target="_blank">Imagor</a> and <a href="https://github.com/unjs/ipx" class="reference external" rel="external noopener noreferrer" target="_blank">IPX</a>. Templates stay the same: switching
provider only changes the DSN.</p>
<p>Imagor fetches the original image from your site, and signs every URL with the
key of the server:</p>
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-bash">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># .env</span>
UX_IMAGE_DSN=imagor://images.example.com?origin=https%3A%2F%2Fexample.com&amp;sign_key=your-secret</code></pre>
    </div>
</div>
<p>IPX, built on <a href="https://sharp.pixelplumbing.com/" class="reference external" rel="external noopener noreferrer" target="_blank">sharp</a>, reads the images from your <code translate="no" class="notranslate">public/</code> directory:</p>
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-bash">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># .env</span>
UX_IMAGE_DSN=ipx://images.example.com</code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="ux-toolkit-is-no-longer-experimental"><a class="headerlink" href="#ux-toolkit-is-no-longer-experimental" title="Permalink to this headline">UX Toolkit Is No Longer Experimental</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/4205">#4205</a>
                                                </span>
            </div>
</div>
<p>The UX Toolkit now follows the Symfony <a href="https://symfony.com/doc/current/contributing/code/bc.html" class="reference external">backward compatibility promise</a>. It
covers the <code translate="no" class="notranslate">ux:install</code> command and its options, the <code translate="no" class="notranslate">ux_toolkit</code>
configuration, and the format of the kit and recipe <code translate="no" class="notranslate">manifest.json</code> files.</p>
<p>It does not cover the content of the recipes. A recipe can change from one
version to the next, and installing it again gives you the new one. A recipe
you already installed is your own code, and nothing updates it behind your back.</p>
</div>
<div class="section">
<h2 id="ux-toolkit-choose-where-recipes-are-installed"><a class="headerlink" href="#ux-toolkit-choose-where-recipes-are-installed" title="Permalink to this headline">UX Toolkit: Choose Where Recipes Are Installed</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/4135">#4135</a>
                                                </span>
            </div>
</div>
<p><code translate="no" class="notranslate">ux:install</code> always wrote Twig components to <code translate="no" class="notranslate">templates/components/</code> and
Stimulus controllers to <code translate="no" class="notranslate">assets/controllers/</code>, so kit files ended up mixed
with the components of your application.</p>
<p>The new <code translate="no" class="notranslate">components</code> and <code translate="no" class="notranslate">controllers</code> options each take a <code translate="no" class="notranslate">dir</code>, which
must match where your application already loads files from, and an optional
<code translate="no" class="notranslate">subdirectory</code>. With a subdirectory, <code translate="no" class="notranslate">ux:install</code> rewrites the copied files
so the names keep working: <code translate="no" class="notranslate">&lt;twig:Button&gt;</code> becomes <code translate="no" class="notranslate">&lt;twig:ui:Button&gt;</code>, and
the <code translate="no" class="notranslate">dialog</code> controller becomes <code translate="no" class="notranslate">ui--dialog</code>.</p>
<div translate="no" data-loc="6" class="notranslate codeblock codeblock-length-sm codeblock-yaml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># config/packages/ux_toolkit.yaml</span>
<span class="hljs-attr">ux_toolkit:</span>
    <span class="hljs-attr">components:</span>
        <span class="hljs-attr">subdirectory:</span> <span class="hljs-string">'ui'</span>
    <span class="hljs-attr">controllers:</span>
        <span class="hljs-attr">subdirectory:</span> <span class="hljs-string">'ui'</span></code></pre>
    </div>
</div>
<p>Kits opt in with the <code translate="no" class="notranslate">%COMPONENTS_DIR%</code> and <code translate="no" class="notranslate">%CONTROLLERS_DIR%</code> placeholders
in the <code translate="no" class="notranslate">copy-files</code> destinations of their recipes. Every kit shipped with the
Toolkit uses them.</p>
</div>
<div class="section">
<h2 id="missing-the-togglepassword-package"><a class="headerlink" href="#missing-the-togglepassword-package" title="Permalink to this headline">Missing the TogglePassword Package?</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/seb-jean">
                <img src="https://github.com/seb-jean.png" alt="Sébastien Jean">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/seb-jean">Sébastien Jean</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/4125">#4125</a>
                                                </span>
            </div>
</div>
<p>UX TogglePassword was contributed by <a href="https://github.com/feymo" class="reference external" rel="external noopener noreferrer" target="_blank">Félix Eymonot</a> in UX 2.11
(<a href="https://github.com/symfony/ux/pull/1000" class="reference external" rel="external noopener noreferrer" target="_blank">#1000</a>), then deprecated in 2.29 and removed in 3.0. To keep the feature,
its migration guide had you copy a Stimulus controller and a form type
extension into your application.</p>
<p>If you only need the button, the Common kit of the UX Toolkit now has a
<code translate="no" class="notranslate">password-visibility</code> recipe. Its Stimulus controller switches a field between
<code translate="no" class="notranslate">password</code> and <code translate="no" class="notranslate">text</code> from a toggle button, and hides the password again
when the form is submitted or reset, and when the page is left:</p>
<div translate="no" data-loc="7" class="notranslate codeblock codeblock-length-sm codeblock-html">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-controller</span>=<span class="hljs-string">"password-visibility"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">data-password-visibility-target</span>=<span class="hljs-string">"input"</span> <span class="hljs-attr">spellcheck</span>=<span class="hljs-string">"false"</span> <span class="hljs-attr">autocapitalize</span>=<span class="hljs-string">"off"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">aria-controls</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">data-action</span>=<span class="hljs-string">"password-visibility#toggle"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">data-password-visibility-target</span>=<span class="hljs-string">"show"</span>&gt;</span>Show<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">data-password-visibility-target</span>=<span class="hljs-string">"hide"</span> <span class="hljs-attr">hidden</span>&gt;</span>Hide<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
    </div>
</div>
<p>There is no <code translate="no" class="notranslate">toggle</code> form option: the button lives in your template. The
<a href="https://ux.symfony.com/toolkit/kits/common/components/password-visibility" class="reference external">Password Visibility recipe</a> has a live preview.</p>
</div>
<div class="section">
<h2 id="ux-toolkit-new-recipes-blocks-and-fixes"><a class="headerlink" href="#ux-toolkit-new-recipes-blocks-and-fixes" title="Permalink to this headline">UX Toolkit: New Recipes, Blocks and Fixes</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/seb-jean">
                <img src="https://github.com/seb-jean.png" alt="Sébastien Jean">
            </a>
                    <a target="_blank" href="https://github.com/Enz000">
                <img src="https://github.com/Enz000.png" alt="Enzo Santamaria">
            </a>
                    <a target="_blank" href="https://github.com/ker0x">
                <img src="https://github.com/ker0x.png" alt="Romain Monteil">
            </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/seb-jean">Sébastien Jean</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Enz000">Enzo Santamaria</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/ker0x">Romain Monteil</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/4116">#4116</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4101">#4101</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4100">#4100</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4099">#4099</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4118">#4118</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4121">#4121</a>
                                                </span>
            </div>
</div>
<p>Besides <code translate="no" class="notranslate">password-visibility</code>, the kits gained four recipes:</p>
<ul>
    <li><code translate="no" class="notranslate">sortable</code> (Common) reorders a list, a table body or a grid with
drag-and-drop, powered by <a href="https://sortablejs.github.io/Sortable/" class="reference external" rel="external noopener noreferrer" target="_blank">SortableJS</a>, and can save the new position of
each moved item to your server;</li>
<li><code translate="no" class="notranslate">message-scroller</code> (Shadcn) is the scroll container of a chat: it follows
streamed responses, loads history without jumping and jumps to any message;</li>
<li><code translate="no" class="notranslate">code-block</code> (Shadcn) displays code, terminal output and diffs, with line
numbers and a copy button;</li>
<li><code translate="no" class="notranslate">trace</code> (Shadcn) shows the steps of an AI response, such as reasoning, tool
calls and sources, each with its status.</li>
</ul>
<p>The Shadcn kit also has the <a href="https://ux.symfony.com/toolkit/kits/shadcn/blocks" class="reference external">blocks</a> it was missing: <code translate="no" class="notranslate">login-03</code> to
<code translate="no" class="notranslate">login-05</code>, <code translate="no" class="notranslate">signup-01</code> to <code translate="no" class="notranslate">signup-05</code> and <code translate="no" class="notranslate">sidebar-01</code> to
<code translate="no" class="notranslate">sidebar-16</code>. Porting them exposed bugs in the recipes they use, now fixed:</p>
<ul>
    <li>the content of <code translate="no" class="notranslate">sidebar</code> not scrolling when it is taller than the sidebar,
which left the last entries of a long menu out of reach;</li>
<li>the gap of floating and inset sidebars being 16px too wide, and nested
sidebars exposing several landmarks with the same name;</li>
<li><code translate="no" class="notranslate">dropdown-menu</code> ignoring <code translate="no" class="notranslate">align</code> when it opens on the left or the right
of its trigger, so a menu in a sidebar footer could leave the screen.</li>
</ul>
<p>The rich color toasts of <code translate="no" class="notranslate">sonner</code> are now opaque in dark mode, and its empty
toast list no longer catches clicks when a Content Security Policy blocks
inline styles.</p>
</div>
<div class="section">
<h2 id="twigcomponent-a-shorthand-for-dynamic-props"><a class="headerlink" href="#twigcomponent-a-shorthand-for-dynamic-props" title="Permalink to this headline">TwigComponent: A Shorthand for Dynamic Props</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/4207">#4207</a>
                                                </span>
            </div>
</div>
<p>Passing a variable to a prop of the same name meant writing the name twice:
<code translate="no" class="notranslate">:message="message"</code>. In the HTML syntax, <code translate="no" class="notranslate">:message</code> alone is now a
shorthand for it, like the <a href="https://vuejs.org/guide/essentials/template-syntax.html#same-name-shorthand" class="reference external" rel="external noopener noreferrer" target="_blank">same-name shorthand</a> of Vue 3.4:</p>
<div translate="no" data-loc="4" 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:Alert</span> <span class="hljs-attr">:message</span> <span class="hljs-attr">:type</span>=<span class="hljs-string">"level"</span> /&gt;</span>

</span><span class="hljs-comment">{# same as #}</span><span class="xml">
<span class="hljs-tag">&lt;<span class="hljs-name">twig:Alert</span> <span class="hljs-attr">:message</span>=<span class="hljs-string">"message"</span> <span class="hljs-attr">:type</span>=<span class="hljs-string">"level"</span> /&gt;</span></span></code></pre>
    </div>
</div>
<p>The name must be a valid Twig variable name, so <code translate="no" class="notranslate">:data-message</code> still needs a
value. A bare <code translate="no" class="notranslate">:message</code> used to be a syntax error, so existing templates are
not affected.</p>
</div>
<div class="section">
<h2 id="livecomponent-13-bug-fixes"><a class="headerlink" href="#livecomponent-13-bug-fixes" title="Permalink to this headline">LiveComponent: 13 Bug Fixes</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Amoifr">
                <img src="https://github.com/Amoifr.png" alt="Pascal CESCON">
            </a>
                    <a target="_blank" href="https://github.com/HawkForge">
                <img src="https://github.com/HawkForge.png" alt="HawkForge">
            </a>
                    <a target="_blank" href="https://github.com/0xABCD01">
                <img src="https://github.com/0xABCD01.png" alt="0xABCD01">
            </a>
                    <a target="_blank" href="https://github.com/Mlucas44">
                <img src="https://github.com/Mlucas44.png" alt="Mlucas44">
            </a>
                    <a target="_blank" href="https://github.com/KevinMartinsDev">
                <img src="https://github.com/KevinMartinsDev.png" alt="Kévin Martins">
            </a>
                    <a target="_blank" href="https://github.com/arrabiata-asanz">
                <img src="https://github.com/arrabiata-asanz.png" alt="Andres Sanz">
            </a>
                    <a target="_blank" href="https://github.com/Pechynho">
                <img src="https://github.com/Pechynho.png" alt="Jan Pech">
            </a>
                    <a target="_blank" href="https://github.com/abp002">
                <img src="https://github.com/abp002.png" alt="Alejandro Borrego">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Amoifr">Pascal CESCON</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/HawkForge">HawkForge</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/0xABCD01">0xABCD01</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Mlucas44">Mlucas44</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/KevinMartinsDev">Kévin Martins</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/arrabiata-asanz">Andres Sanz</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Pechynho">Jan Pech</a>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/abp002">Alejandro Borrego</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/3537">#3537</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3465">#3465</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3501">#3501</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3792">#3792</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4169">#4169</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4170">#4170</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4194">#4194</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4159">#4159</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4098">#4098</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/2767">#2767</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3923">#3923</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4024">#4024</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4044">#4044</a>
                                                </span>
            </div>
</div>
<p>LiveComponent has no new feature in this release, but <strong>13 bug fixes</strong>, sent by
eight contributors. Among them:</p>
<ul>
    <li>a <code translate="no" class="notranslate">#[LiveProp]</code> array of entities with a <code translate="no" class="notranslate">Uuid</code> identifier failing to
dehydrate, and a <code translate="no" class="notranslate">LiveProp</code> typed with a <code translate="no" class="notranslate">resolve_target_entities</code>
interface failing to hydrate;</li>
<li><code translate="no" class="notranslate">LiveCollectionTrait</code> reusing the index of a removed item, which brought
the removed Doctrine entity back, and a collection of DTOs failing to
dehydrate as soon as a row was added;</li>
<li>the queued request never being sent after an error response, which left the
promise of <code translate="no" class="notranslate">action()</code>, <code translate="no" class="notranslate">set()</code> or <code translate="no" class="notranslate">render()</code> pending forever;</li>
<li>a child component with an explicit <code translate="no" class="notranslate">id</code> failing to re-render when its props
changed;</li>
<li>live form updates submitting disabled choices, which browsers never submit,
so validation failed on a live update but passed on a real submit;</li>
<li>the events emitted by an action that returns a redirect leaking into the next
request of a long-running process, such as FrankenPHP in worker mode;</li>
<li>overflown dates such as <code translate="no" class="notranslate">2026-02-31</code> being rolled over to another date
instead of rejected.</li>
</ul>
</div>
<div class="section">
<h2 id="dropzone-filter-transform-and-restyle-files"><a class="headerlink" href="#dropzone-filter-transform-and-restyle-files" title="Permalink to this headline">Dropzone: Filter, Transform and Restyle Files</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/ker0x">
                <img src="https://github.com/ker0x.png" alt="Romain Monteil">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/ker0x">Romain Monteil</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/4143">#4143</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4144">#4144</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4145">#4145</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4146">#4146</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4148">#4148</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4149">#4149</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4153">#4153</a>
                                                </span>
            </div>
</div>
<p>The file picker only shows the files that match the <code translate="no" class="notranslate">accept</code> attribute of the
input, but drag and drop ignored it. Dropzone now leaves out the dropped files
that do not match <code translate="no" class="notranslate">accept</code>, and the files over the new <code translate="no" class="notranslate">max_files</code> option,
and dispatches <code translate="no" class="notranslate">dropzone:reject</code> so you can tell the user. With the Validator
component, <code translate="no" class="notranslate">max_files</code> also adds a <code translate="no" class="notranslate">Count</code> constraint on the server:</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-variable"><span class="hljs-variable-other-marker">$</span>builder</span>-&gt;<span class="hljs-title invoke__">add</span>(<span class="hljs-string">'photos'</span>, DropzoneType::<span class="hljs-variable language_">class</span>, [
    <span class="hljs-string">'multiple'</span> =&gt; <span class="hljs-keyword">true</span>,
    <span class="hljs-string">'max_files'</span> =&gt; <span class="hljs-number">5</span>,
    <span class="hljs-string">'attr'</span> =&gt; [<span class="hljs-string">'accept'</span> =&gt; <span class="hljs-string">'image/*'</span>],
]);</code></pre>
    </div>
</div>
<p>The rest of the release:</p>
<ul>
    <li>a <code translate="no" class="notranslate">dropzone:pre-add</code> event to transform, replace or reject the files before
they are added, for example to resize photos in the browser before the
upload;</li>
<li>a <code translate="no" class="notranslate">dropzone_preview_item_template</code> form theme block, to render the preview
of each file from your own <code translate="no" class="notranslate">&lt;template&gt;</code>;</li>
<li>a <code translate="no" class="notranslate">data-state</code> attribute on the container (<code translate="no" class="notranslate">empty</code>, <code translate="no" class="notranslate">filled</code>,
<code translate="no" class="notranslate">dragging</code>, <code translate="no" class="notranslate">processing</code>) to style each state;</li>
<li>a <code translate="no" class="notranslate">placeholder</code> option, which replaces the placeholder passed in <code translate="no" class="notranslate">attr</code>;</li>
<li>the same events in single-file and <code translate="no" class="notranslate">multiple</code> modes.</li>
</ul>
<p>Some of these change the behavior, for example when your own CSS sets
<code translate="no" class="notranslate">display</code> on the parts of the Dropzone, or when <code translate="no" class="notranslate">accept</code> only lists MIME
types. Read the <a href="https://github.com/symfony/ux/blob/v3.7.0/src/Dropzone/UPGRADE.md" class="reference external" rel="external noopener noreferrer" target="_blank">Dropzone UPGRADE file</a> before updating.</p>
</div>
<div class="section">
<h2 id="autocomplete-preferred-choices-in-ajax-fields"><a class="headerlink" href="#autocomplete-preferred-choices-in-ajax-fields" title="Permalink to this headline">Autocomplete: Preferred Choices in Ajax Fields</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>
                    <a target="_blank" href="https://github.com/anthovallet">
                <img src="https://github.com/anthovallet.png" alt="anthovallet">
            </a>
                    <a target="_blank" href="https://github.com/DanerSharifi-FR">
                <img src="https://github.com/DanerSharifi-FR.png" alt="Daner Sharifi">
            </a>
                    <a target="_blank" href="https://github.com/Qronicle">
                <img src="https://github.com/Qronicle.png" alt="Ruud Seberechts">
            </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>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/anthovallet">anthovallet</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/DanerSharifi-FR">Daner Sharifi</a>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/Qronicle">Ruud Seberechts</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/4204">#4204</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4126">#4126</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/3901">#3901</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4203">#4203</a>
                                                </span>
            </div>
</div>
<p>Ajax-powered fields ignored the <code translate="no" class="notranslate">preferred_choices</code> option, so the preferred
choices were mixed with the other results. The endpoint now lists them first,
on every page of results and while the user searches. Like the other options
of an Ajax field, set it in the field class:</p>
<div translate="no" data-loc="16" class="notranslate codeblock codeblock-length-md codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-meta">#[AsEntityAutocompleteField]</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FoodAutocompleteField</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractType</span>
</span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">configureOptions</span><span class="hljs-params">(OptionsResolver <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>resolver</span>)</span>: <span class="hljs-title">void</span>
    </span>{
        <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>resolver</span>-&gt;<span class="hljs-title invoke__">setDefaults</span>([
            <span class="hljs-comment">// ...</span>
            <span class="hljs-string">'preferred_choices'</span> =&gt; <span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-params">(Options <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>options</span>)</span> =&gt;</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>this</span>-&gt;foodRepository-&gt;<span class="hljs-title invoke__">findBy</span>([<span class="hljs-string">'favorite'</span> =&gt; <span class="hljs-keyword">true</span>]),
        ]);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getParent</span><span class="hljs-params">()</span>: <span class="hljs-title">string</span>
    </span>{
        <span class="hljs-keyword">return</span> BaseEntityAutocompleteType::<span class="hljs-variable language_">class</span>;
    }
}</code></pre>
    </div>
</div>
<p>In a <code translate="no" class="notranslate">multiple</code> field, the endpoint now excludes the selected options before
paginating, so a page full of selected options no longer hides the next ones.
Reopening the dropdown no longer shows the results of an old search, and the
clear button only shows on a select that has an empty option.</p>
</div>
<div class="section">
<h2 id="turbo-more-control-over-mercure-stream-sources"><a class="headerlink" href="#turbo-more-control-over-mercure-stream-sources" title="Permalink to this headline">Turbo: More Control over Mercure Stream Sources</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/ker0x">
                <img src="https://github.com/ker0x.png" alt="Romain Monteil">
            </a>
                    <a target="_blank" href="https://github.com/javiereguiluz">
                <img src="https://github.com/javiereguiluz.png" alt="Javier Eguiluz">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/ker0x">Romain Monteil</a>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/javiereguiluz">Javier Eguiluz</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/ux/pull/4174">#4174</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4175">#4175</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4176">#4176</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4177">#4177</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4160">#4160</a>
                                                </span>
            </div>
</div>
<p>A private stream source sets the Mercure authorization cookie, and the browser
keeps one such cookie per hub. So the last page rendered decided which topics
every open tab could receive. The new <code translate="no" class="notranslate">subscribe</code> option grants more topics
than the ones the page listens to:</p>
<div translate="no" data-loc="1" 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:Turbo:Stream:From</span> <span class="hljs-attr">topics</span>=<span class="hljs-string">"chat"</span> <span class="hljs-attr">private</span> <span class="hljs-attr">:subscribe</span>=<span class="hljs-string">"['chat', 'news']"</span> /&gt;</span></span></code></pre>
    </div>
</div>
<p><code translate="no" class="notranslate">&lt;twig:Turbo:Stream:From&gt;</code> now renders its other HTML attributes, and a
stream source marked with <code translate="no" class="notranslate">data-turbo-permanent</code> keeps its connection to the
hub from one page to the next. When the page and the hub do not share a domain,
the new <code translate="no" class="notranslate">turbo.mercure.ignore_cookie_domain_errors</code> option renders nothing and
logs a warning, instead of failing the whole page. Javier Eguiluz also rewrote
the start of the documentation, which now explains how Turbo works before
showing code.</p>
</div>
<div class="section">
<h2 id="faster-live-components"><a class="headerlink" href="#faster-live-components" title="Permalink to this headline">Faster Live Components</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/javiereguiluz">
                <img src="https://github.com/javiereguiluz.png" alt="Javier Eguiluz">
            </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/javiereguiluz">Javier Eguiluz</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/4164">#4164</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4165">#4165</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4166">#4166</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4167">#4167</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4168">#4168</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4105">#4105</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4106">#4106</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4107">#4107</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4109">#4109</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/ux/pull/4130">#4130</a>
                                                </span>
            </div>
</div>
<p>TwigComponent now reads the component metadata its cache warmer saved, instead
of rebuilding it with reflection on every request, and copies fewer variables
and walks the call stack less often. LiveComponent no longer runs its listeners
for the components that are not live, and no longer computes an id for each of
them during a re-render. A computed property that returns <code translate="no" class="notranslate">null</code> is now
cached too, instead of running again, query included, on every access.</p>
<p>On the admin dashboard used for 3.6, which now also holds 28 live components
among its 1,800 components, every request below takes less CPU time with 3.7,
for the same HTML. The last four re-render the posts table, a live component:</p>
<div class="table-wrapper">
<table>
            <thead>
                            <tr>
                                            <th>Request</th>
                                            <th>3.6</th>
                                            <th>3.7</th>
                                            <th>Change</th>
                                    </tr>
                    </thead>
        <tbody>
                    <tr>
                                    <td>Dashboard, 25 rows</td>
                                    <td>57.1-58.9 ms</td>
                                    <td>48.5-51.0 ms</td>
                                    <td>-15%</td>
                            </tr>
                    <tr>
                                    <td>Dashboard, 100 rows</td>
                                    <td>144.5-149.0 ms</td>
                                    <td>120.0-122.6 ms</td>
                                    <td>-18%</td>
                            </tr>
                    <tr>
                                    <td>Ticking 3 rows</td>
                                    <td>45.0-47.0 ms</td>
                                    <td>25.4-27.7 ms</td>
                                    <td>-43%</td>
                            </tr>
                    <tr>
                                    <td>Ticking 3 rows, 100 rows</td>
                                    <td>158.0-162.1 ms</td>
                                    <td>85.5-87.5 ms</td>
                                    <td>-46%</td>
                            </tr>
                    <tr>
                                    <td>Typing in the search box</td>
                                    <td>51.4-51.8 ms</td>
                                    <td>30.0-31.2 ms</td>
                                    <td>-40%</td>
                            </tr>
                    <tr>
                                    <td>Deleting the 3 ticked rows</td>
                                    <td>47.5-48.2 ms</td>
                                    <td>26.4-28.2 ms</td>
                                    <td>-42%</td>
                            </tr>
            </tbody>
</table>
</div>
<p>These numbers are the medians of six alternating runs of 60 requests per
version, in the prod environment, with PHP 8.4 and Twig 3.30.</p>
<p>Your templates must be recompiled to benefit, which a cache clear does.
Templates that use the HTML syntax also compile faster: the pre-lexer was
rewritten around a single scanner, and one pass over 672 real templates takes
32% less time.</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/3537" class="reference external" rel="external noopener noreferrer" target="_blank">#3537</a> [LiveComponent] Rebuild Component on reconnect when props changed in
between (@Amoifr)</li>
<li><a href="https://github.com/symfony/ux/pull/4169" class="reference external" rel="external noopener noreferrer" target="_blank">#4169</a> [LiveComponent] Fix dehydrating arrays of entities with a Uuid
identifier (@HawkForge)</li>
<li><a href="https://github.com/symfony/ux/pull/3465" class="reference external" rel="external noopener noreferrer" target="_blank">#3465</a> [LiveComponent] Prevent LiveCollectionTrait from reusing removed
indexes (@Amoifr)</li>
<li><a href="https://github.com/symfony/ux/pull/4170" class="reference external" rel="external noopener noreferrer" target="_blank">#4170</a> [LiveComponent] Fix hydrating entities typed with a
resolve_target_entities interface (@HawkForge)</li>
<li><a href="https://github.com/symfony/ux/pull/4126" class="reference external" rel="external noopener noreferrer" target="_blank">#4126</a> [Autocomplete] Exclude already selected options from remote results
(@anthovallet)</li>
<li><a href="https://github.com/symfony/ux/pull/4194" class="reference external" rel="external noopener noreferrer" target="_blank">#4194</a> [LiveComponent] Fix (de)hydration of DTO collections containing a
null item (@0xABCD01)</li>
<li><a href="https://github.com/symfony/ux/pull/4193" class="reference external" rel="external noopener noreferrer" target="_blank">#4193</a> [Pagination] Fix the Doctrine ORM count when a parameter is only
used by the SELECT or the ORDER BY (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4159" class="reference external" rel="external noopener noreferrer" target="_blank">#4159</a> [LiveComponent] Reject overflown dates during date hydration
(@Mlucas44)</li>
<li><a href="https://github.com/symfony/ux/pull/4207" class="reference external" rel="external noopener noreferrer" target="_blank">#4207</a> [TwigComponent] Add a shorthand for dynamic props named like a
variable (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3501" class="reference external" rel="external noopener noreferrer" target="_blank">#3501</a> [LiveComponent] Fix NoModificationAllowedError when closing the
error modal twice (@Amoifr)</li>
<li><a href="https://github.com/symfony/ux/pull/4204" class="reference external" rel="external noopener noreferrer" target="_blank">#4204</a> [Autocomplete] Support the <code translate="no" class="notranslate">preferred_choices</code> option in
Ajax-powered fields (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4203" class="reference external" rel="external noopener noreferrer" target="_blank">#4203</a> [Autocomplete] Only add the clear button to a select that has an
empty option (@Qronicle)</li>
<li><a href="https://github.com/symfony/ux/pull/4177" class="reference external" rel="external noopener noreferrer" target="_blank">#4177</a> [Turbo] Add an option to ignore the cookie domain errors of private
stream sources (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4176" class="reference external" rel="external noopener noreferrer" target="_blank">#4176</a> [Turbo] Add a subscribe option to turbo_stream_from() and
&lt;<a href="twig:Turbo:Stream:From" class="reference internal">twig:Turbo:Stream:From</a>&gt; (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4175" class="reference external" rel="external noopener noreferrer" target="_blank">#4175</a> [Turbo] Keep the EventSource of a permanent
&lt;turbo-mercure-stream-source&gt; open across visits (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4174" class="reference external" rel="external noopener noreferrer" target="_blank">#4174</a> [Turbo] Render the HTML attributes of &lt;<a href="twig:Turbo:Stream:From" class="reference internal">twig:Turbo:Stream:From</a>&gt;
(@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4153" class="reference external" rel="external noopener noreferrer" target="_blank">#4153</a> [Dropzone] Use one code path for the single-file and <code translate="no" class="notranslate">multiple</code>
modes (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4149" class="reference external" rel="external noopener noreferrer" target="_blank">#4149</a> [Dropzone] Leave out the dropped files that do not match <code translate="no" class="notranslate">accept</code>
and the files over <code translate="no" class="notranslate">max_files</code>, and dispatch <code translate="no" class="notranslate">dropzone:reject</code> (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4148" class="reference external" rel="external noopener noreferrer" target="_blank">#4148</a> [Dropzone] Add a <code translate="no" class="notranslate">placeholder</code> option to <code translate="no" class="notranslate">DropzoneType</code> (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4146" class="reference external" rel="external noopener noreferrer" target="_blank">#4146</a> [Dropzone] Make the clear button, file name and image preview
targets optional in single-file mode (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4144" class="reference external" rel="external noopener noreferrer" target="_blank">#4144</a> [Dropzone] Render the preview of each file from a template in
<code translate="no" class="notranslate">multiple</code> mode (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4145" class="reference external" rel="external noopener noreferrer" target="_blank">#4145</a> [Dropzone] Expose the state with <code translate="no" class="notranslate">data-state</code> and toggle the parts
with <code translate="no" class="notranslate">hidden</code> instead of inline styles (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4143" class="reference external" rel="external noopener noreferrer" target="_blank">#4143</a> [Dropzone] Add a <code translate="no" class="notranslate">dropzone:pre-add</code> event to transform files
before they are added (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4201" class="reference external" rel="external noopener noreferrer" target="_blank">#4201</a> [Css] Stop naming shared reference types after another property
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4200" class="reference external" rel="external noopener noreferrer" target="_blank">#4200</a> [Css] Accept any value for a token category with no token, like
Panda (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4196" class="reference external" rel="external noopener noreferrer" target="_blank">#4196</a> [Css] Support every Panda token category (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4197" class="reference external" rel="external noopener noreferrer" target="_blank">#4197</a> [Css] Accept CSS strings in values (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4195" class="reference external" rel="external noopener noreferrer" target="_blank">#4195</a> [Css] Add the <code translate="no" class="notranslate">preflight</code> option (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4188" class="reference external" rel="external noopener noreferrer" target="_blank">#4188</a> [Css] Link to the documentation from the generated stylesheet
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4186" class="reference external" rel="external noopener noreferrer" target="_blank">#4186</a> [Css] Write the value of every token to the reference file (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4183" class="reference external" rel="external noopener noreferrer" target="_blank">#4183</a> [Css] Write the value of each color token to the reference file
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/3933" class="reference external" rel="external noopener noreferrer" target="_blank">#3933</a> [Css] Add the CSS component (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4098" class="reference external" rel="external noopener noreferrer" target="_blank">#4098</a> [LiveComponent] Reset the LiveResponder between requests
(@KevinMartinsDev)</li>
<li><a href="https://github.com/symfony/ux/pull/4151" class="reference external" rel="external noopener noreferrer" target="_blank">#4151</a> [Image] Add the Imagor bridge (@tacman)</li>
<li><a href="https://github.com/symfony/ux/pull/4164" class="reference external" rel="external noopener noreferrer" target="_blank">#4164</a> [TwigComponent] Use the warmed component properties cache
(@javiereguiluz)</li>
<li><a href="https://github.com/symfony/ux/pull/4166" class="reference external" rel="external noopener noreferrer" target="_blank">#4166</a> [TwigComponent] Run the outer blocks backtrace once per template
method (@javiereguiluz)</li>
<li><a href="https://github.com/symfony/ux/pull/4168" class="reference external" rel="external noopener noreferrer" target="_blank">#4168</a> [TwigComponent] Set the parent template of embedded components
before the render (@javiereguiluz)</li>
<li><a href="https://github.com/symfony/ux/pull/4167" class="reference external" rel="external noopener noreferrer" target="_blank">#4167</a> [TwigComponent] Copy the context only when props override it
(@javiereguiluz)</li>
<li><a href="https://github.com/symfony/ux/pull/4165" class="reference external" rel="external noopener noreferrer" target="_blank">#4165</a> [TwigComponent] Cache null results of computed properties
(@javiereguiluz)</li>
<li><a href="https://github.com/symfony/ux/pull/4130" class="reference external" rel="external noopener noreferrer" target="_blank">#4130</a> [TwigComponent] Rewrite the pre-lexer around a single scanner
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4091" class="reference external" rel="external noopener noreferrer" target="_blank">#4091</a> [Image] Add the IPX bridge (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4161" class="reference external" rel="external noopener noreferrer" target="_blank">#4161</a> [Turbo] Keep the <code translate="no" class="notranslate">connected</code> attribute of
<code translate="no" class="notranslate">&lt;turbo-mercure-stream-source&gt;</code> when morphing (@nicolas-grekas)</li>
<li><a href="https://github.com/symfony/ux/pull/4141" class="reference external" rel="external noopener noreferrer" target="_blank">#4141</a> [Router][Translator] Don't load the routes and translations when the
container is built (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/2767" class="reference external" rel="external noopener noreferrer" target="_blank">#2767</a> [LiveComponent] Keep the route and its defaults on batch action
sub-requests (@arrabiata-asanz)</li>
<li><a href="https://github.com/symfony/ux/pull/4134" class="reference external" rel="external noopener noreferrer" target="_blank">#4134</a> [Toolkit] Fix the URL of the Flowbite kit (@hifarrer)</li>
<li><a href="https://github.com/symfony/ux/pull/4156" class="reference external" rel="external noopener noreferrer" target="_blank">#4156</a> [Pkg] Move the tooling devDependencies of the packages to the root
package.json (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4157" class="reference external" rel="external noopener noreferrer" target="_blank">#4157</a> [CI] Run the tests of the bridges once their package is done
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4155" class="reference external" rel="external noopener noreferrer" target="_blank">#4155</a> [CI] Run only the tests of the packages a pull request affects
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4106" class="reference external" rel="external noopener noreferrer" target="_blank">#4106</a> [LiveComponent] Look up the Doctrine manager of an entity class once
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4125" class="reference external" rel="external noopener noreferrer" target="_blank">#4125</a> [Toolkit][Common] Add password-visibility recipe (@seb-jean)</li>
<li><a href="https://github.com/symfony/ux/pull/4140" class="reference external" rel="external noopener noreferrer" target="_blank">#4140</a> [Toolkit] Warn about copy-files destinations that skip the
installation placeholders (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4124" class="reference external" rel="external noopener noreferrer" target="_blank">#4124</a> [Turbo] Register the stream format on the current request instead of
a new one (@nicolas-grekas)</li>
<li><a href="https://github.com/symfony/ux/pull/4116" class="reference external" rel="external noopener noreferrer" target="_blank">#4116</a> [Toolkit][Common] Add sortable recipe (@seb-jean)</li>
<li><a href="https://github.com/symfony/ux/pull/4102" class="reference external" rel="external noopener noreferrer" target="_blank">#4102</a> [Pagination] Support date columns as Doctrine ORM cursor fields
(@lyrixx)</li>
<li><a href="https://github.com/symfony/ux/pull/3901" class="reference external" rel="external noopener noreferrer" target="_blank">#3901</a> [Autocomplete] Refresh stale remote options when the dropdown
reopens (@DanerSharifi-FR)</li>
<li><a href="https://github.com/symfony/ux/pull/4135" class="reference external" rel="external noopener noreferrer" target="_blank">#4135</a> [Toolkit] Make the installation directories of recipes configurable
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4107" class="reference external" rel="external noopener noreferrer" target="_blank">#4107</a> [LiveComponent][TwigComponent] Skip live-only and <code translate="no" class="notranslate">data-model</code>
listeners for other components (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4129" class="reference external" rel="external noopener noreferrer" target="_blank">#4129</a> [TwigComponent] Fix pre-lexer only recognizing one spelling of block
and embed tags (@dbu)</li>
<li><a href="https://github.com/symfony/ux/pull/3792" class="reference external" rel="external noopener noreferrer" target="_blank">#3792</a> [LiveComponent] Fix disabled choices being submitted by live form
updates (@Amoifr)</li>
<li><a href="https://github.com/symfony/ux/pull/4111" class="reference external" rel="external noopener noreferrer" target="_blank">#4111</a> [Pagination] Support Symfony UID cursor fields (@norkunas)</li>
<li><a href="https://github.com/symfony/ux/pull/3923" class="reference external" rel="external noopener noreferrer" target="_blank">#3923</a> [LiveComponent] Send the queued request after an error response
(@Pechynho)</li>
<li><a href="https://github.com/symfony/ux/pull/4024" class="reference external" rel="external noopener noreferrer" target="_blank">#4024</a> [LiveComponent] Keep the id of a child component with an explicit id
when its props change (@Pechynho)</li>
<li><a href="https://github.com/symfony/ux/pull/4044" class="reference external" rel="external noopener noreferrer" target="_blank">#4044</a> [LiveComponent] Sync the value of selects mapped via a form after
re-render (@abp002)</li>
<li><a href="https://github.com/symfony/ux/pull/4105" class="reference external" rel="external noopener noreferrer" target="_blank">#4105</a> [LiveComponent] Only match children fingerprints against live
components (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4109" class="reference external" rel="external noopener noreferrer" target="_blank">#4109</a> [LiveComponent] Reset deterministic ids without a PostRenderEvent
listener (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4101" class="reference external" rel="external noopener noreferrer" target="_blank">#4101</a> [Toolkit][Shadcn] Add message-scroller recipe (@Enz000)</li>
<li><a href="https://github.com/symfony/ux/pull/4123" class="reference external" rel="external noopener noreferrer" target="_blank">#4123</a> [Toolkit] Fix update_toolkit_tests.sh stopping before the
screenshots of a block (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4122" class="reference external" rel="external noopener noreferrer" target="_blank">#4122</a> [Toolkit][Shadcn] Fix nested and side-by-side sidebars exposing
landmarks with the same name (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4121" class="reference external" rel="external noopener noreferrer" target="_blank">#4121</a> [Toolkit][Shadcn] Add an as prop to <a href="Sidebar:GroupLabel" class="reference internal">Sidebar:GroupLabel</a> and size
nested icons in <a href="Sidebar:MenuButton" class="reference internal">Sidebar:MenuButton</a> (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4120" class="reference external" rel="external noopener noreferrer" target="_blank">#4120</a> [Toolkit][Shadcn] Fix the gap of floating and inset sidebars being
16px too wide (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4119" class="reference external" rel="external noopener noreferrer" target="_blank">#4119</a> [Toolkit][Shadcn] Fix dropdown-menu ignoring align on the left and
right sides (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4118" class="reference external" rel="external noopener noreferrer" target="_blank">#4118</a> [Toolkit][Shadcn] Add the missing login, signup and sidebar blocks
(@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4100" class="reference external" rel="external noopener noreferrer" target="_blank">#4100</a> [Toolkit][Shadcn] Add code-block recipe (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4099" class="reference external" rel="external noopener noreferrer" target="_blank">#4099</a> [Toolkit][Shadcn] Add trace recipe (@ker0x)</li>
<li><a href="https://github.com/symfony/ux/pull/4117" class="reference external" rel="external noopener noreferrer" target="_blank">#4117</a> [Toolkit][Shadcn] Make the rich color toasts of Sonner opaque in
dark mode (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4096" class="reference external" rel="external noopener noreferrer" target="_blank">#4096</a> [Toolkit][Shadcn] Round the position of the navigation-menu panel to
a whole pixel (@Enz000)</li>
<li><a href="https://github.com/symfony/ux/pull/4112" class="reference external" rel="external noopener noreferrer" target="_blank">#4112</a> [Native] Add the historical location navigation (@feymo)</li>
<li><a href="https://github.com/symfony/ux/pull/4021" class="reference external" rel="external noopener noreferrer" target="_blank">#4021</a> [TwigComponent] Do not leave a component on the ComponentStack when
its pre-render fails (@Pechynho)</li>
<li><a href="https://github.com/symfony/ux/pull/4104" class="reference external" rel="external noopener noreferrer" target="_blank">#4104</a> [Toolkit][Shadcn] Fix the empty toast list of Sonner catching clicks
under a CSP (@abp002)</li>
<li><a href="https://github.com/symfony/ux/pull/4089" class="reference external" rel="external noopener noreferrer" target="_blank">#4089</a> [Translator] Fall back to the application default locale (@feymo)</li>
<li><a href="https://github.com/symfony/ux/pull/4115" class="reference external" rel="external noopener noreferrer" target="_blank">#4115</a> Generate the packages <code translate="no" class="notranslate">.gitignore</code>, and ignore the <code translate="no" class="notranslate">.vitest/</code>
report directory (@Kocal)</li>
<li><a href="https://github.com/symfony/ux/pull/4097" class="reference external" rel="external noopener noreferrer" target="_blank">#4097</a> [Turbo] Reset the broadcast listener between requests
(@KevinMartinsDev)</li>
<li><a href="https://github.com/symfony/ux/pull/4095" class="reference external" rel="external noopener noreferrer" target="_blank">#4095</a> [Toolkit] Fix the preview wiring tests with strict AssetMapper
imports (@Enz000)</li>
</ul>
<p>UX CSS and UX Image are experimental, so their API can still change, and now
is when your feedback is worth the most. Try them, and open an issue if
something does not fit your application.</p>
</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-7-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Hugo Alliaume ]]></dc:creator>
            <pubDate>Thu, 05 Nov 2026 10:06:00 +0100</pubDate>
            <comments>https://symfony.com/blog/symfony-ux-3-7-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>New in Symfony 8.2: HTTP Recorder</title>
            <link>https://symfony.com/blog/new-in-symfony-8-2-http-recorder?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    
                    
                
            
                    
                
            
                    
                
            
            
    
        Contributed by
                    Imen Ezzine
            ,…</description>
            <content:encoded><![CDATA[
                                <div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://connect.symfony.com/profile/imenezzine">
                <img src="https://connect.symfony.com/profile/imenezzine.picture" alt="Imen Ezzine">
            </a>
                    <a target="_blank" href="https://connect.symfony.com/profile/welcomattic">
                <img src="https://connect.symfony.com/profile/welcomattic.picture" alt="Mathieu Santostefano">
            </a>
                    <a target="_blank" href="https://connect.symfony.com/profile/nicolas-grekas">
                <img src="https://connect.symfony.com/profile/nicolas-grekas.picture" alt="Nicolas Grekas">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/imenezzine">Imen Ezzine</a>
            ,                     <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/welcomattic">Mathieu Santostefano</a>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/nicolas-grekas">Nicolas Grekas</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/symfony/pull/63781">#63781</a>
                                                </span>
            </div>
</div>
<p>When testing code that <strong>calls external APIs</strong>, you usually choose between real HTTP
calls (slow and depend on third-party services), and hand-written mocks (tedious
and often differ from what the API actually returns). Libraries like <a href="https://github.com/php-vcr/php-vcr" class="reference external" rel="external noopener noreferrer" target="_blank">php-vcr</a>
popularized a third option: <strong>record the real exchanges</strong> once and <strong>replay them</strong>
in your tests. Symfony 8.2 adds this feature natively to the <a href="https://symfony.com/http-client" class="reference external">HttpClient component</a>.</p>
<div class="section">
<h2 id="enabling-the-recorder"><a class="headerlink" href="#enabling-the-recorder" title="Permalink to this headline">Enabling the Recorder</a></h2>
<p>The new <code translate="no" class="notranslate">RecorderHttpClient</code> decorates the HTTP client transport, so it covers
both the default client and your scoped clients. It's driven by the <code translate="no" class="notranslate">SymfonyExtension</code>
of the PHPUnit Bridge, which the Symfony Flex recipe registers in <code translate="no" class="notranslate">phpunit.dist.xml</code>.
You only have to enable the recorder in the <code translate="no" class="notranslate">test</code> environment:</p>
<div class="configuration-block">
    <div role="tablist" aria-label="Configuration formats" class="configuration-tabs configuration-tabs-length-2">
                    <button role="tab" type="button" data-language="yaml" aria-controls="configuration-block-tabpanel-3b969848a07f794826228f027e7cb1a38a746039" aria-selected="true" data-active="true">
                <span>YAML</span>
            </button>
                    <button role="tab" type="button" data-language="php" aria-controls="configuration-block-tabpanel-15966c95cf9e2ab63e7cb47441354df8c716b75b" aria-selected="false" tabindex="-1">
                <span>PHP</span>
            </button>
            </div>

            <div role="tabpanel" id="configuration-block-tabpanel-3b969848a07f794826228f027e7cb1a38a746039" aria-label="YAML" class="configuration-codeblock" data-language="yaml" style="">
            <div translate="no" data-loc="4" class="notranslate codeblock codeblock-length-sm codeblock-yaml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># config/packages/http_client.yaml</span>
<span class="hljs-string">when@test:</span>
    <span class="hljs-attr">http_client:</span>
        <span class="hljs-attr">recorder:</span> <span class="hljs-literal">true</span></code></pre>
    </div>
</div>
        </div>
            <div role="tabpanel" id="configuration-block-tabpanel-15966c95cf9e2ab63e7cb47441354df8c716b75b" aria-label="PHP" class="configuration-codeblock" data-language="php" style="display: none">
            <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-comment">// config/packages/http_client.php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">DependencyInjection</span>\<span class="hljs-title">Loader</span>\<span class="hljs-title">Configurator</span>;

<span class="hljs-keyword">return</span> App::<span class="hljs-title invoke__">config</span>([
    <span class="hljs-string">'when@test'</span> =&gt; [
        <span class="hljs-string">'http_client'</span> =&gt; [
            <span class="hljs-string">'recorder'</span> =&gt; <span class="hljs-keyword">true</span>,
        ],
    ],
]);</code></pre>
    </div>
</div>
        </div>
    </div>
</div>
<div class="section">
<h2 id="recording-and-replaying-your-tests"><a class="headerlink" href="#recording-and-replaying-your-tests" title="Permalink to this headline">Recording and Replaying Your Tests</a></h2>
<p>Add the <code translate="no" class="notranslate">#[UseRecord]</code> attribute to the tests that call external APIs:</p>
<div translate="no" data-loc="17" class="notranslate codeblock codeblock-length-md codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment">// tests/Service/ExchangeRatesTest.php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">App</span>\<span class="hljs-title">Tests</span>\<span class="hljs-title">Service</span>;

<span class="hljs-keyword">use</span> <span class="hljs-title">App</span>\<span class="hljs-title">Service</span>\<span class="hljs-title">ExchangeRates</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Bridge</span>\<span class="hljs-title">PhpUnit</span>\<span class="hljs-title">Attribute</span>\<span class="hljs-title">UseRecord</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Bundle</span>\<span class="hljs-title">FrameworkBundle</span>\<span class="hljs-title">Test</span>\<span class="hljs-title">KernelTestCase</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ExchangeRatesTest</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">KernelTestCase</span>
</span>{
    <span class="hljs-meta">#[UseRecord]</span>
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">testGetRate</span><span class="hljs-params">()</span>: <span class="hljs-title">void</span>
    </span>{
        <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>exchangeRates</span> = <span class="hljs-keyword">static</span>::<span class="hljs-title invoke__">getContainer</span>()-&gt;<span class="hljs-title invoke__">get</span>(ExchangeRates::<span class="hljs-variable language_">class</span>);

        <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>this</span>-&gt;<span class="hljs-title invoke__">assertSame</span>(<span class="hljs-number">1.08</span>, <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>exchangeRates</span>-&gt;<span class="hljs-title invoke__">getRate</span>(<span class="hljs-string">'EUR'</span>, <span class="hljs-string">'USD'</span>));
    }
}</code></pre>
    </div>
</div>
<p>Run the test once with the <code translate="no" class="notranslate">SYMFONY_HTTP_RECORDER</code> environment variable to make
the real requests and record them (the <code translate="no" class="notranslate">missing</code> value is explained later):</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>SYMFONY_HTTP_RECORDER=missing vendor/bin/phpunit --filter testGetRate</code></pre>
    </div>
</div>
<p>This creates <code translate="no" class="notranslate">tests/Service/ExchangeRatesTest/testGetRate.har</code> using the standard
<a href="https://w3c.github.io/web-performance/specs/HAR/Overview.html" class="reference external" rel="external noopener noreferrer" target="_blank">HAR format</a>, which is human-readable, easy to review in pull requests and supported
by browser dev tools. Commit this file; from now on, all test runs (including CI)
replay the responses from it. If a request isn't found in the file, Symfony throws
a <code translate="no" class="notranslate">HarEntryNotFoundException</code> instead of reaching the network.</p>
</div>
<div class="section">
<h2 id="controlling-what-gets-recorded"><a class="headerlink" href="#controlling-what-gets-recorded" title="Permalink to this headline">Controlling What Gets Recorded</a></h2>
<p>The attribute only selects the file. Whether a test can reach the network is decided
when running the tests, so you can't commit a test that makes real requests by
mistake. The <code translate="no" class="notranslate">SYMFONY_HTTP_RECORDER</code> environment variable accepts these values:</p>
<ul>
    <li><code translate="no" class="notranslate">replay</code> (the default): replays the responses and fails when a request is
not in the file;</li>
<li><code translate="no" class="notranslate">missing</code>: replays the responses, and makes and records only the requests
not in the file;</li>
<li><code translate="no" class="notranslate">record</code>: always makes the real requests and rewrites the files of the tests
that run (useful to refresh them after an API change);</li>
<li><code translate="no" class="notranslate">passthrough</code>: makes the real requests without reading or writing the files
(useful to check your tests against the live services).</li>
</ul>
<p>Tests without <code translate="no" class="notranslate">#[UseRecord]</code> aren't affected: their requests are sent as usual.
Requests are matched on their method, URL and body, and repeated ones are replayed
in the order they were recorded, so sequences like polling an API until a job
finishes also work.</p>
</div>
<div class="section">
<h2 id="keeping-secrets-out-of-recordings"><a class="headerlink" href="#keeping-secrets-out-of-recordings" title="Permalink to this headline">Keeping Secrets Out of Recordings</a></h2>
<p>HAR files are committed to your repository, so they must not contain credentials.
By default, the recorder <strong>replaces secrets</strong> in requests and responses with
<code translate="no" class="notranslate">[REDACTED]</code> before writing anything to disk. This includes headers such as
<code translate="no" class="notranslate">Authorization</code>, <code translate="no" class="notranslate">Cookie</code> and <code translate="no" class="notranslate">X-Api-Key</code>, and query string, form and JSON
fields such as <code translate="no" class="notranslate">password</code>, <code translate="no" class="notranslate">api_key</code>, <code translate="no" class="notranslate">client_secret</code> and <code translate="no" class="notranslate">access_token</code>.</p>
<p>Requests are also compared with their secrets masked, so they still match when
replayed with real credentials. Use the <code translate="no" class="notranslate">redact</code> option to mask more names and
<code translate="no" class="notranslate">redact_except</code> to remove names from the built-in lists:</p>
<div class="configuration-block">
    <div role="tablist" aria-label="Configuration formats" class="configuration-tabs configuration-tabs-length-2">
                    <button role="tab" type="button" data-language="yaml" aria-controls="configuration-block-tabpanel-449b785bc348e43433cea42a19dbb1e193bcb531" aria-selected="true" data-active="true">
                <span>YAML</span>
            </button>
                    <button role="tab" type="button" data-language="php" aria-controls="configuration-block-tabpanel-054b1126963ed3aeac3098853261fe970deb16c3" aria-selected="false" tabindex="-1">
                <span>PHP</span>
            </button>
            </div>

            <div role="tabpanel" id="configuration-block-tabpanel-449b785bc348e43433cea42a19dbb1e193bcb531" aria-label="YAML" class="configuration-codeblock" data-language="yaml" style="">
            <div translate="no" data-loc="6" class="notranslate codeblock codeblock-length-sm codeblock-yaml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># config/packages/http_client.yaml</span>
<span class="hljs-string">when@test:</span>
    <span class="hljs-attr">http_client:</span>
        <span class="hljs-attr">recorder:</span>
            <span class="hljs-attr">redact:</span> <span class="hljs-string">['X-Custom-Secret',</span> <span class="hljs-string">'nonce'</span><span class="hljs-string">]</span>
            <span class="hljs-attr">redact_except:</span> <span class="hljs-string">['code']</span></code></pre>
    </div>
</div>
        </div>
            <div role="tabpanel" id="configuration-block-tabpanel-054b1126963ed3aeac3098853261fe970deb16c3" aria-label="PHP" class="configuration-codeblock" data-language="php" style="display: none">
            <div translate="no" data-loc="13" class="notranslate codeblock codeblock-length-md codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment">// config/packages/http_client.php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">DependencyInjection</span>\<span class="hljs-title">Loader</span>\<span class="hljs-title">Configurator</span>;

<span class="hljs-keyword">return</span> App::<span class="hljs-title invoke__">config</span>([
    <span class="hljs-string">'when@test'</span> =&gt; [
        <span class="hljs-string">'http_client'</span> =&gt; [
            <span class="hljs-string">'recorder'</span> =&gt; [
                <span class="hljs-string">'redact'</span> =&gt; [<span class="hljs-string">'X-Custom-Secret'</span>, <span class="hljs-string">'nonce'</span>],
                <span class="hljs-string">'redact_except'</span> =&gt; [<span class="hljs-string">'code'</span>],
            ],
        ],
    ],
]);</code></pre>
    </div>
</div>
        </div>
    </div>
<p>Masking a field that changes on every request, like <code translate="no" class="notranslate">nonce</code> here, also excludes
it from request matching. For full control, set the <code translate="no" class="notranslate">redactor</code> option to the ID
of a service that implements <code translate="no" class="notranslate">RedactorInterface</code>.</p>
<div class="admonition admonition-note ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path></svg>
                <span>Note</span>
    </p><p>Replayed responses contain the masked values, so if your code validates something
like the signature of an <code translate="no" class="notranslate">id_token</code>, you'll need a custom redactor.</p>
</div>
</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/new-in-symfony-8-2-http-recorder?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Javier Eguiluz ]]></dc:creator>
            <pubDate>Thu, 05 Nov 2026 09:12:00 +0100</pubDate>
            <comments>https://symfony.com/blog/new-in-symfony-8-2-http-recorder?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>Symfony 8.1.11 released</title>
            <link>https://symfony.com/blog/symfony-8-1-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 8.1.11 has just been released.
Read the Symfony upgrade guide to learn more about upgrading Symfony
and use the SymfonyInsight upgrade reports to detect the code you will
need to change in your project.

    
                    
                Tip…</description>
            <content:encoded><![CDATA[
                                <p><a href="https://github.com/symfony/symfony/releases/tag/v8.1.11" class="reference external" rel="external noopener noreferrer" target="_blank">Symfony 8.1.11</a> has just been released.</p>
<p>Read the <a href="https://symfony.com/doc/current/setup/upgrade_major.html" class="reference external">Symfony upgrade guide</a> to learn more about upgrading Symfony
and use the <a href="https://insight.symfony.com/" class="reference external">SymfonyInsight upgrade reports</a> to detect the code you will
need to change in your project.</p>
<div class="admonition admonition-tip ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>
                <span>Tip</span>
    </p><p>Want to be notified whenever a new Symfony release is published? Or when a
version is not maintained anymore? Or only when a security issue is fixed?
Consider <a href="https://symfony.com/account/notifications" class="reference external">subscribing to the Symfony Roadmap Notifications</a>.</p>
</div>
<div class="section">
<h2 id="changelog-since-symfony-8-1-10"><a class="headerlink" href="#changelog-since-symfony-8-1-10" title="Permalink to this headline">Changelog Since Symfony 8.1.10</a></h2>
<div class="section">
<h3 id="assetmapper"><a class="headerlink" href="#assetmapper" title="Permalink to this headline">AssetMapper</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67802" class="reference external" rel="external noopener noreferrer" target="_blank">#67802</a> [AssetMapper] Fix the resolution of relative paths in downloaded packages (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67750" class="reference external" rel="external noopener noreferrer" target="_blank">#67750</a> [AssetMapper] Decode the version of a jsDelivr import before resolving it (@mathieudz)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67621" class="reference external" rel="external noopener noreferrer" target="_blank">#67621</a> [AssetMapper] Fix <a href="importmap:remove" class="reference internal">importmap:remove</a> deleting the files of local entries (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="browserkit"><a class="headerlink" href="#browserkit" title="Permalink to this headline">BrowserKit</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67685" class="reference external" rel="external noopener noreferrer" target="_blank">#67685</a> [BrowserKit] Match cookies across equivalent IPv6 addresses (@X-Coder264)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67684" class="reference external" rel="external noopener noreferrer" target="_blank">#67684</a> [BrowserKit] Expire cookies dated at the Unix epoch (@X-Coder264)</li>
</ul>
</div>
<div class="section">
<h3 id="cache"><a class="headerlink" href="#cache" title="Permalink to this headline">Cache</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67759" class="reference external" rel="external noopener noreferrer" target="_blank">#67759</a> [Cache] Fix FilesystemTagAwareAdapter::deleteItems() returning true when some items could not be deleted (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67741" class="reference external" rel="external noopener noreferrer" target="_blank">#67741</a> [Cache] Fix Redis deleteItems() returning true when some items could not be deleted (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67736" class="reference external" rel="external noopener noreferrer" target="_blank">#67736</a> [Cache] Fix tag-aware deleteItems() returning false when the per-item retry succeeds (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67720" class="reference external" rel="external noopener noreferrer" target="_blank">#67720</a> [Cache] Retry failed early expiration callbacks (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67703" class="reference external" rel="external noopener noreferrer" target="_blank">#67703</a> [Cache] Honor the $save flag set by the callback in EarlyExpirationHandler (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67714" class="reference external" rel="external noopener noreferrer" target="_blank">#67714</a> [Cache] Preserve null results from synchronous early recomputation (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67681" class="reference external" rel="external noopener noreferrer" target="_blank">#67681</a> [Cache] Add support for relay 0.61 (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67744" class="reference external" rel="external noopener noreferrer" target="_blank">#67744</a> [Cache] Mark connection options as #[\SensitiveParameter] (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="config"><a class="headerlink" href="#config" title="Permalink to this headline">Config</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-5jff-8h8q-r5qx" class="reference external">#ghsa-5jff-8h8q-r5qx</a> [Config] Do not validate XML documents on parse (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="console"><a class="headerlink" href="#console" title="Permalink to this headline">Console</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67832" class="reference external" rel="external noopener noreferrer" target="_blank">#67832</a> [Console] Fix ProgressBar::iterate() keeping the max of a previous iterable for a non-countable one (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67831" class="reference external" rel="external noopener noreferrer" target="_blank">#67831</a> [Console] Fix ProgressBar's percent after finish() on undecorated output without a max (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67830" class="reference external" rel="external noopener noreferrer" target="_blank">#67830</a> [Console] Fix ProgressBar::finish() with a lowered max and restarting a finished bar without a max (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67823" class="reference external" rel="external noopener noreferrer" target="_blank">#67823</a> [Console] Fix ProgressBar frames on undecorated output when resuming, restarting or finishing (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67811" class="reference external" rel="external noopener noreferrer" target="_blank">#67811</a> [Console] Fix ProgressBar::setMaxSteps() not updating the percentage (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67805" class="reference external" rel="external noopener noreferrer" target="_blank">#67805</a> [Console] Fix ProgressBar::start() computing the percentage against the previous max (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67770" class="reference external" rel="external noopener noreferrer" target="_blank">#67770</a> [Console] Fix outline block lines ending with a backslash (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67769" class="reference external" rel="external noopener noreferrer" target="_blank">#67769</a> [Console] Fix text ending with a backslash escaping the closing tag that follows it (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67762" class="reference external" rel="external noopener noreferrer" target="_blank">#67762</a> [Console] Keep an escaped tag delimiter with its backslash when wrapping text (@initd-it)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67677" class="reference external" rel="external noopener noreferrer" target="_blank">#67677</a> [Console] Register service argument locators under the resolved names of commands (@kbond)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67634" class="reference external" rel="external noopener noreferrer" target="_blank">#67634</a> [Console] Fix setRow(), setColumnMaxWidth() and consecutive rowspans in Table (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67633" class="reference external" rel="external noopener noreferrer" target="_blank">#67633</a> [Console] Fix Table cells that span rows when they follow a cell that spans columns (@ybai08)</li>
</ul>
</div>
<div class="section">
<h3 id="dependencyinjection"><a class="headerlink" href="#dependencyinjection" title="Permalink to this headline">DependencyInjection</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67757" class="reference external" rel="external noopener noreferrer" target="_blank">#67757</a> [DependencyInjection] Fix #[Target] resolution when two names give the same camelCase alias (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="filesystem"><a class="headerlink" href="#filesystem" title="Permalink to this headline">Filesystem</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-6prc-h956-hxjq" class="reference external">#ghsa-6prc-h956-hxjq</a> [Filesystem] Only treat a valid URI scheme as the root of a path (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67786" class="reference external" rel="external noopener noreferrer" target="_blank">#67786</a> [Filesystem] Fix failure handling in remove() (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67778" class="reference external" rel="external noopener noreferrer" target="_blank">#67778</a> [Filesystem] Reserve temporary removal directories atomically (@X-Coder264)</li>
</ul>
</div>
<div class="section">
<h3 id="finder"><a class="headerlink" href="#finder" title="Permalink to this headline">Finder</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67785" class="reference external" rel="external noopener noreferrer" target="_blank">#67785</a> [Finder] Fix Glob::toRegex() producing an invalid regex for bracket expressions containing a slash (@0xABCD01)</li>
</ul>
</div>
<div class="section">
<h3 id="form"><a class="headerlink" href="#form" title="Permalink to this headline">Form</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67776" class="reference external" rel="external noopener noreferrer" target="_blank">#67776</a> [Form] Map data validation errors to the sibling form that has the field (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67772" class="reference external" rel="external noopener noreferrer" target="_blank">#67772</a> [Form] Keep validation errors on their originating form (@X-Coder264)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67699" class="reference external" rel="external noopener noreferrer" target="_blank">#67699</a> [Form] Validate the collection entries that keep_as_list doesn't need to renumber (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67731" class="reference external" rel="external noopener noreferrer" target="_blank">#67731</a> [Form] Fix allow_delete removing collection entries submitted as null (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67700" class="reference external" rel="external noopener noreferrer" target="_blank">#67700</a> [Form] Ignore collection entries with invalid names when allow_add is enabled (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67702" class="reference external" rel="external noopener noreferrer" target="_blank">#67702</a> [Form] Fix submitting "0" to a non-compound root form (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67713" class="reference external" rel="external noopener noreferrer" target="_blank">#67713</a> [Form] Skip unsubmitted collection entries with delete_empty (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67701" class="reference external" rel="external noopener noreferrer" target="_blank">#67701</a> [Form] Fix the post_max_size check when it is set to a negative value (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67650" class="reference external" rel="external noopener noreferrer" target="_blank">#67650</a> [Form] Preserve the Unix epoch in date string transformation (@ahbaqdadi)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67795" class="reference external" rel="external noopener noreferrer" target="_blank">#67795</a> [Form] Review Greek translations (@sogav21)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67773" class="reference external" rel="external noopener noreferrer" target="_blank">#67773</a> [Form] Review Croatian translations (@HypeMC)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67674" class="reference external" rel="external noopener noreferrer" target="_blank">#67674</a> [Form] Review Polish translations (@lukaszkrakowiak)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67660" class="reference external" rel="external noopener noreferrer" target="_blank">#67660</a> [Form] Review Japanese translations (@OTA-EITA)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67623" class="reference external" rel="external noopener noreferrer" target="_blank">#67623</a> [Form][Validator] Review Slovak (sk) translations (@tito10047)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67642" class="reference external" rel="external noopener noreferrer" target="_blank">#67642</a> [Form][Validator] Review and improve Chinese (zh_CN) translations (@siganushka)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67635" class="reference external" rel="external noopener noreferrer" target="_blank">#67635</a> [Form][Validator] Review and fix Luxembourgish (lb) translations (@mweimerskirch)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67632" class="reference external" rel="external noopener noreferrer" target="_blank">#67632</a> [Form] Fix Dutch translations for validators (@mdalikadar)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67631" class="reference external" rel="external noopener noreferrer" target="_blank">#67631</a> [Form] Fix Italian translations for validators (@mdalikadar)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67626" class="reference external" rel="external noopener noreferrer" target="_blank">#67626</a> [Form][Security][Validator] Review Vietnamese translations (@HongTin2104)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67622" class="reference external" rel="external noopener noreferrer" target="_blank">#67622</a> [Form][Validator] review translations for Ukrainian (uk) (@qconer)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67627" class="reference external" rel="external noopener noreferrer" target="_blank">#67627</a> [Form][Validator] Review translations for Chinese (zh_TW) (@HsukqiLee)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67447" class="reference external" rel="external noopener noreferrer" target="_blank">#67447</a> [Form] Review Turkish (tr) validator translations (@erenbati)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67617" class="reference external" rel="external noopener noreferrer" target="_blank">#67617</a> [Form][Validator] Review German translations (@Rommmoa)</li>
</ul>
</div>
<div class="section">
<h3 id="htmlsanitizer"><a class="headerlink" href="#htmlsanitizer" title="Permalink to this headline">HtmlSanitizer</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-q8jq-xrf4-v5j8" class="reference external">#ghsa-q8jq-xrf4-v5j8</a> [HtmlSanitizer] Apply the URL policy to srcset and imagesrcset (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/cve-2026-118517" class="reference external">#cve-2026-118517</a> [HtmlSanitizer] Require special schemes and scheme-relative URLs to carry a non-empty authority (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-wm2w-4mgj-vw33" class="reference external">#ghsa-wm2w-4mgj-vw33</a> [HtmlSanitizer] Fix meta refresh URL sanitization bypass (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="httpclient"><a class="headerlink" href="#httpclient" title="Permalink to this headline">HttpClient</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-c7hm-wqwp-f9v8" class="reference external">#ghsa-c7hm-wqwp-f9v8</a> [HttpClient] Pin the IP of cached hosts in NoPrivateNetworkHttpClient (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-gq53-v8w2-gjhj" class="reference external">#ghsa-gq53-v8w2-gjhj</a> [HttpClient] Don't send the options of the default scope to other origins in ScopingHttpClient (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67619" class="reference external" rel="external noopener noreferrer" target="_blank">#67619</a> [HttpClient] Let PHP destruct the response decorated by TraceableResponse (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67612" class="reference external" rel="external noopener noreferrer" target="_blank">#67612</a> [HttpClient] Fix AsyncResponse throwing a LogicException when it is canceled while streaming (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67610" class="reference external" rel="external noopener noreferrer" target="_blank">#67610</a> [HttpClient] Fix getContent() returning a truncated body when the response is canceled while it reads it (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67599" class="reference external" rel="external noopener noreferrer" target="_blank">#67599</a> [HttpClient] Fix reading a traced CurlResponse as a stream after its decorator is destructed (@PhilETaylor)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67609" class="reference external" rel="external noopener noreferrer" target="_blank">#67609</a> [HttpClient] Fix CurlHttpClient writing the body of a response to stdout when it is canceled during stream() (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67605" class="reference external" rel="external noopener noreferrer" target="_blank">#67605</a> [HttpClient] Fix clearing the DNS cache of pending requests when a traced response is destructed (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="httpfoundation"><a class="headerlink" href="#httpfoundation" title="Permalink to this headline">HttpFoundation</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-xg2q-4rrq-657q" class="reference external">#ghsa-xg2q-4rrq-657q</a> [HttpFoundation] Split the private ranges usable as trusted proxies from the deny list of private subnets (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-xg2q-4rrq-657q" class="reference external">#ghsa-xg2q-4rrq-657q</a> [HttpFoundation] Add the list of private ranges usable as trusted proxies (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/cve-2026-118514" class="reference external">#cve-2026-118514</a> [HttpFoundation] Match HEAD requests when GET is listed in a MethodRequestMatcher (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/cve-2026-118514" class="reference external">#cve-2026-118514</a> [HttpFoundation] Match HEAD requests when GET is listed in a RequestMatcher (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-5mx8-mwrp-5693" class="reference external">#ghsa-5mx8-mwrp-5693</a> [HttpFoundation] Don't let Request::getBaseUrl() start with a host chosen by the client (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-3h27-hjv7-fqjx" class="reference external">#ghsa-3h27-hjv7-fqjx</a> [HttpFoundation] Don't match the script name in Request::getBaseUrl() when it's only the start of a path segment (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67829" class="reference external" rel="external noopener noreferrer" target="_blank">#67829</a> [HttpFoundation] Fix Request::getBaseUrl() for a percent-encoded or wrong-case script name after a prefix, and behind an alias (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67826" class="reference external" rel="external noopener noreferrer" target="_blank">#67826</a> [HttpFoundation] Don't use the script name as Request::getBaseUrl() when it's not in the URI path (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67804" class="reference external" rel="external noopener noreferrer" target="_blank">#67804</a> [HttpFoundation] Don't match the script name in Request::getBaseUrl() when it's only the start of a path segment (@jack-worman)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67814" class="reference external" rel="external noopener noreferrer" target="_blank">#67814</a> [HttpFoundation] Fix UrlHelper for fragments behind a trusted X-Forwarded-Prefix and for an empty path (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67800" class="reference external" rel="external noopener noreferrer" target="_blank">#67800</a> [HttpFoundation] Preserve the base URL for query and fragment references (@ahbaqdadi)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67760" class="reference external" rel="external noopener noreferrer" target="_blank">#67760</a> [HttpFoundation][Lock][Semaphore] Do not expose the DSN in the exception thrown for unsupported connections (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67746" class="reference external" rel="external noopener noreferrer" target="_blank">#67746</a> [HttpFoundation] Mark the DSN and options of SessionHandlerFactory as #[\SensitiveParameter] (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="httpkernel"><a class="headerlink" href="#httpkernel" title="Permalink to this headline">HttpKernel</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-hwfg-qwvh-2wfx" class="reference external">#ghsa-hwfg-qwvh-2wfx</a> [HttpKernel] Don't decode CSV and YAML payloads unless acceptFormat lists them (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-wg5q-m2ww-f3c9" class="reference external">#ghsa-wg5q-m2ww-f3c9</a> [HttpKernel] Restore the router context of the parent request after a sub-request (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67834" class="reference external" rel="external noopener noreferrer" target="_blank">#67834</a> [HttpKernel] Accept only form, JSON and XML payloads in #[MapRequestPayload] unless acceptFormat lists other formats (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67683" class="reference external" rel="external noopener noreferrer" target="_blank">#67683</a> [HttpKernel] Compute #[Cache] durations without daylight saving time (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67607" class="reference external" rel="external noopener noreferrer" target="_blank">#67607</a> [HttpKernel] Fix searching profiles by status code 0 (@chr-hertel)</li>
</ul>
</div>
<div class="section">
<h3 id="jsonpath"><a class="headerlink" href="#jsonpath" title="Permalink to this headline">JsonPath</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-cpww-5vpx-72x7" class="reference external">#ghsa-cpww-5vpx-72x7</a> [JsonPath] Evaluate absolute queries in filters once per query instead of once per node (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-cpww-5vpx-72x7" class="reference external">#ghsa-cpww-5vpx-72x7</a> [JsonPath] Parse filter expressions once per query instead of once per node (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-cpww-5vpx-72x7" class="reference external">#ghsa-cpww-5vpx-72x7</a> [JsonPath] Bound the regex work of one find() call (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67601" class="reference external" rel="external noopener noreferrer" target="_blank">#67601</a> [JsonPath] Fix negative-step slices and reject invalid slices on objects (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67595" class="reference external" rel="external noopener noreferrer" target="_blank">#67595</a> [JsonPath] Fix open-ended slices in the path builder (@shuvroroy)</li>
</ul>
</div>
<div class="section">
<h3 id="lock"><a class="headerlink" href="#lock" title="Permalink to this headline">Lock</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67748" class="reference external" rel="external noopener noreferrer" target="_blank">#67748</a> [Lock] Fix DynamoDbStore listing the values of unknown options instead of their names (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67747" class="reference external" rel="external noopener noreferrer" target="_blank">#67747</a> [Lock] Mark the options of DynamoDbStore as #[\SensitiveParameter] (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67745" class="reference external" rel="external noopener noreferrer" target="_blank">#67745</a> [Lock] Mark the DSNs and options of the DBAL and MongoDB stores as #[\SensitiveParameter] (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="messenger"><a class="headerlink" href="#messenger" title="Permalink to this headline">Messenger</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67799" class="reference external" rel="external noopener noreferrer" target="_blank">#67799</a> [Messenger] Fix infinite retries when a serializer throws a decoding failure (@Ptraaah, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67792" class="reference external" rel="external noopener noreferrer" target="_blank">#67792</a> [Messenger] Don't reuse a serialized body after replacing the message (@dalerazimov)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67767" class="reference external" rel="external noopener noreferrer" target="_blank">#67767</a> [Messenger] Fix the Redis transport throwing "Redis server went away" when connecting fails (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67753" class="reference external" rel="external noopener noreferrer" target="_blank">#67753</a> [Messenger] Treat Beanstalkd jobs that aren't Messenger envelopes as decoding failures (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67719" class="reference external" rel="external noopener noreferrer" target="_blank">#67719</a> [Messenger] Track keepalives independently for each received envelope (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67712" class="reference external" rel="external noopener noreferrer" target="_blank">#67712</a> [Messenger] Stop keeping alive the messages that a listener prevents the worker from handling (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67724" class="reference external" rel="external noopener noreferrer" target="_blank">#67724</a> [Messenger] Fix Redis DSN credential decoding and exception traces (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67711" class="reference external" rel="external noopener noreferrer" target="_blank">#67711</a> [Messenger] Do not resend the stamp headers of a received AMQP message (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67709" class="reference external" rel="external noopener noreferrer" target="_blank">#67709</a> [Messenger] Restore the schema assets filter when the Doctrine transport setup fails (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67710" class="reference external" rel="external noopener noreferrer" target="_blank">#67710</a> [Messenger] Do not expose the Redis DSN in the invalid host query parameter exception (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67654" class="reference external" rel="external noopener noreferrer" target="_blank">#67654</a> [Messenger] Wait for all batch handlers before acknowledging a message (@andreybolonin)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67655" class="reference external" rel="external noopener noreferrer" target="_blank">#67655</a> [Messenger] Retry the messages whose batch was flushed during a failed dispatch (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67651" class="reference external" rel="external noopener noreferrer" target="_blank">#67651</a> [Messenger] Let the worker flush the batches that contain a failed message (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67647" class="reference external" rel="external noopener noreferrer" target="_blank">#67647</a> [Messenger] Don't hide handler failures when a batch handler acks the same message (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67643" class="reference external" rel="external noopener noreferrer" target="_blank">#67643</a> [Messenger] Preserve handled stamps when a batch handler nacks (@dalerazimov)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67771" class="reference external" rel="external noopener noreferrer" target="_blank">#67771</a> [Messenger] Do not expose the DSN in the exception thrown when no transport supports it (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67763" class="reference external" rel="external noopener noreferrer" target="_blank">#67763</a> [Messenger] Treat encoded envelopes whose body or type isn't a string as decoding failures (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67766" class="reference external" rel="external noopener noreferrer" target="_blank">#67766</a> [Messenger] Ignore the "X-Symfony-Messenger" attribute of an SQS message when it isn't a JSON object (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67764" class="reference external" rel="external noopener noreferrer" target="_blank">#67764</a> [Messenger] Treat a body or header that isn't a string as a decoding failure in SigningSerializer (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67754" class="reference external" rel="external noopener noreferrer" target="_blank">#67754</a> [Messenger] Treat Redis stream entries that aren't Messenger envelopes as decoding failures (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67739" class="reference external" rel="external noopener noreferrer" target="_blank">#67739</a> [Messenger] Mark transport options as #[\SensitiveParameter] (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67722" class="reference external" rel="external noopener noreferrer" target="_blank">#67722</a> [Messenger] Ignore ids that are not integers when finding a message of the Doctrine transport (@BenMacha)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67657" class="reference external" rel="external noopener noreferrer" target="_blank">#67657</a> [Messenger] Release handled envelopes without waiting for the garbage collector (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="notifier"><a class="headerlink" href="#notifier" title="Permalink to this headline">Notifier</a></h3>
<ul>
    <li>minor <a href="https://github.com/symfony/symfony/pull/67761" class="reference external" rel="external noopener noreferrer" target="_blank">#67761</a> [Notifier][Translation] Do not expose the DSN in the exception thrown when its password is missing (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="objectmapper"><a class="headerlink" href="#objectmapper" title="Permalink to this headline">ObjectMapper</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67820" class="reference external" rel="external noopener noreferrer" target="_blank">#67820</a> [ObjectMapper] Skip readonly and asymmetric visibility target properties without a property accessor (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="propertyaccess"><a class="headerlink" href="#propertyaccess" title="Permalink to this headline">PropertyAccess</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67733" class="reference external" rel="external noopener noreferrer" target="_blank">#67733</a> [PropertyAccess] Fix parsing type errors thrown by anonymous classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67682" class="reference external" rel="external noopener noreferrer" target="_blank">#67682</a> [PropertyAccess] Handle uninitialized properties of anonymous classes on PHP 8.6 (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="propertyinfo"><a class="headerlink" href="#propertyinfo" title="Permalink to this headline">PropertyInfo</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67788" class="reference external" rel="external noopener noreferrer" target="_blank">#67788</a> [PropertyInfo] Don't turn intersection types into class names in PhpDocExtractor (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67789" class="reference external" rel="external noopener noreferrer" target="_blank">#67789</a> [PropertyInfo] Return null for docblock types the extractors can't resolve (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="ratelimiter"><a class="headerlink" href="#ratelimiter" title="Permalink to this headline">RateLimiter</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67705" class="reference external" rel="external noopener noreferrer" target="_blank">#67705</a> [RateLimiter] Validate the refill amount, the fixed window interval and the sliding window limit (@BenMacha)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67603" class="reference external" rel="external noopener noreferrer" target="_blank">#67603</a> [RateLimiter] Apply a changed limit to stored calendar-aligned windows (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67598" class="reference external" rel="external noopener noreferrer" target="_blank">#67598</a> [RateLimiter] Preserve calendar-aligned reservations across periods (@shuvroroy)</li>
</ul>
</div>
<div class="section">
<h3 id="routing"><a class="headerlink" href="#routing" title="Permalink to this headline">Routing</a></h3>
<ul>
    <li>security <a href="https://symfony.com/cve-2026-118516" class="reference external">#cve-2026-118516</a> [Routing] Prevent host placeholders from matching the path in compiled matchers (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="runtime"><a class="headerlink" href="#runtime" title="Permalink to this headline">Runtime</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67679" class="reference external" rel="external noopener noreferrer" target="_blank">#67679</a> [Runtime] Terminate the kernel within the FrankenPHP request callback (@pokorny344)</li>
</ul>
</div>
<div class="section">
<h3 id="security"><a class="headerlink" href="#security" title="Permalink to this headline">Security</a></h3>
<ul>
    <li>security <a href="https://symfony.com/cve-2026-118513" class="reference external">#cve-2026-118513</a> [Security] Parse the DN into RDNs before extracting the user identifier (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-8f57-m8wj-x65w" class="reference external">#ghsa-8f57-m8wj-x65w</a> [Security] Run checkPostAuth() of user checkers on programmatic logins (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67738" class="reference external" rel="external noopener noreferrer" target="_blank">#67738</a> [Security] Fix Voter with anonymous classes and nested supports() calls (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67707" class="reference external" rel="external noopener noreferrer" target="_blank">#67707</a> [Security] Reject login links with an out of range "expires" parameter (@BenMacha)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67708" class="reference external" rel="external noopener noreferrer" target="_blank">#67708</a> [Security] Ignore target and failure paths that are neither paths nor absolute URLs (@BenMacha)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67716" class="reference external" rel="external noopener noreferrer" target="_blank">#67716</a> [Security] Reject malformed login link user identifiers (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67706" class="reference external" rel="external noopener noreferrer" target="_blank">#67706</a> [Security] Reject remember-me cookies with an invalid expiration time (@BenMacha)</li>
</ul>
</div>
<div class="section">
<h3 id="serializer"><a class="headerlink" href="#serializer" title="Permalink to this headline">Serializer</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-hqp2-7rr8-hf26" class="reference external">#ghsa-hqp2-7rr8-hf26</a> [Serializer] Ignore undeclared property paths when denormalizing (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/cve-2026-118515" class="reference external">#cve-2026-118515</a> [Serializer] Don't build UploadedFile and other file objects from denormalized data (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-pxj9-jh84-vhm5" class="reference external">#ghsa-pxj9-jh84-vhm5</a> [Serializer] Lowercase the scheme of data URIs before opening them (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67752" class="reference external" rel="external noopener noreferrer" target="_blank">#67752</a> [Serializer] Skip empty lines when decoding multi-column CSV documents (@0xABCD01)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67665" class="reference external" rel="external noopener noreferrer" target="_blank">#67665</a> [Serializer] Fix denormalizing a data URI ending with slashes to a File (@ahmed-bhs)</li>
</ul>
</div>
<div class="section">
<h3 id="translation"><a class="headerlink" href="#translation" title="Permalink to this headline">Translation</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67669" class="reference external" rel="external noopener noreferrer" target="_blank">#67669</a> [Translation] Don't read provider responses as file paths (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67625" class="reference external" rel="external noopener noreferrer" target="_blank">#67625</a> [Translation] Reviewed the Danish translation in issue #65554 (@mcardle)</li>
</ul>
</div>
<div class="section">
<h3 id="tui"><a class="headerlink" href="#tui" title="Permalink to this headline">Tui</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67809" class="reference external" rel="external noopener noreferrer" target="_blank">#67809</a> [Tui] Fix ProgressBarWidget when changing the max and with negative values (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="typeinfo"><a class="headerlink" href="#typeinfo" title="Permalink to this headline">TypeInfo</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67793" class="reference external" rel="external noopener noreferrer" target="_blank">#67793</a> [TypeInfo] Fix resolving unions and intersections that PHPStan accepts (@paulferrett, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67782" class="reference external" rel="external noopener noreferrer" target="_blank">#67782</a> [TypeInfo] Leave out type aliases that cannot be resolved (@paulferrett)</li>
</ul>
</div>
<div class="section">
<h3 id="validator"><a class="headerlink" href="#validator" title="Permalink to this headline">Validator</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-4qpf-57w4-m3wc" class="reference external">#ghsa-4qpf-57w4-m3wc</a> [Validator] Reject non-public IP addresses in the no-priv, no-res and only-public modes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67787" class="reference external" rel="external noopener noreferrer" target="_blank">#67787</a> [Validator] Only extract property types when auto-mapping applies (@paulferrett)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67644" class="reference external" rel="external noopener noreferrer" target="_blank">#67644</a> [Validator] Show the count in the word count messages of locales with a single plural form (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="webprofilerbundle"><a class="headerlink" href="#webprofilerbundle" title="Permalink to this headline">WebProfilerBundle</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67618" class="reference external" rel="external noopener noreferrer" target="_blank">#67618</a> [WebProfilerBundle] Reset the CSP handler between requests (@norkunas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67620" class="reference external" rel="external noopener noreferrer" target="_blank">#67620</a> [WebProfilerBundle] Reset the profiler Twig extension between requests (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67606" class="reference external" rel="external noopener noreferrer" target="_blank">#67606</a> [WebProfilerBundle] Return a 404 when opening the profiler file viewer without a file (@kevinsleegerslameco, @nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="yaml"><a class="headerlink" href="#yaml" title="Permalink to this headline">Yaml</a></h3>
<ul>
    <li>security <a href="https://symfony.com/ghsa-hwfg-qwvh-2wfx" class="reference external">#ghsa-hwfg-qwvh-2wfx</a> [Yaml] Fix exponential and quadratic parse times (@nicolas-grekas)</li>
<li>security <a href="https://symfony.com/ghsa-hwfg-qwvh-2wfx" class="reference external">#ghsa-hwfg-qwvh-2wfx</a> [Yaml] Fix quadratic parse times (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/67735" class="reference external" rel="external noopener noreferrer" target="_blank">#67735</a> [Yaml] Strip the byte order mark at the start of a stream (@0xABCD01)</li>
</ul>
</div>
<div class="section">
<h3 id="other"><a class="headerlink" href="#other" title="Permalink to this headline">Other</a></h3>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/67614" class="reference external" rel="external noopener noreferrer" target="_blank">#67614</a> Reject trailing newlines in Content-Disposition fallbacks (@ahbaqdadi)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67675" class="reference external" rel="external noopener noreferrer" target="_blank">#67675</a> translation: checked proposed serbian translations (@Trysha-rbrn)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67676" class="reference external" rel="external noopener noreferrer" target="_blank">#67676</a> review(translation): [#64516] reviewed and updated the translation (@mikocevar)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67695" class="reference external" rel="external noopener noreferrer" target="_blank">#67695</a> Allow symfony/mercure-bundle ^0.5 (@DavidPrevot)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/67649" class="reference external" rel="external noopener noreferrer" target="_blank">#67649</a> Review translations for Estonian (et) (@erkia)</li>
</ul>
</div>
</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-8-1-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Thu, 05 Nov 2026 09:01:25 +0100</pubDate>
            <comments>https://symfony.com/blog/symfony-8-1-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>SymfonyLive Germany 2027: 30 days left to grab your early bird ticket</title>
            <link>https://symfony.com/blog/symfonylive-germany-2027-30-days-left-to-grab-your-early-bird-ticket?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    

Every year, the German Symfony community gathers to catch up, share stories from production, and dig into what&#039;s next for PHP and Symfony. After many memorable editions in Berlin, 2027 marks the start of a whole new chapter: SymfonyLive Germany is…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://..." title="Header 1200X440Px At 4X">
    <img src="https://symfony.com/uploads/assets/blog/HEADER-1200x440px-at-4x.png" alt="Header 1200X440Px At 4X">
</a>
Every year, the German Symfony community gathers to catch up, share stories from production, and dig into what's next for PHP and Symfony. After many memorable editions in Berlin, 2027 marks the start of a whole new chapter: SymfonyLive Germany is hitting the road, and our first stop is Cologne!</p>

<p>Whether you're a long-time contributor, someone who maintains an internal bundle, or you just built your first Symfony 8 project last month, this conference has always been about one thing: the people behind the code.</p>

<p>📅 May 18–21, 2027
📍 Cologne, Germany</p>

<p>All workshops will be conducted in English, with trainers also available to take questions in German.</p>

<hr />

<h3>🧠 Workshops &amp; Conference Schedule</h3>

<p>🔍 <strong>Hands-on Pre-Conference Workshops</strong>
May 18–19, 2027 – Two days of intensive, hands-on training sessions to sharpen your skills.</p>

<p>🔍 <strong>SymfonyLive Main Conference</strong>
May 20–21, 2027 – Packed with practical talks, architectural deep dives, and hallway-track discussions.</p>

<hr />

<h3>🎟️ Early Bird Tickets: 30 Days Left</h3>

<p>If you already know you'll be joining us or want to make it easier for your company to budget your training and travel, the Early Bird registration window closes in exactly 30 days.</p>

<p>Grabbing your ticket now helps us plan venue logistics, catering, and workshop capacities well in advance, ensuring everyone gets the best experience possible on-site.</p>

<p>👉 <a href="https://live.symfony.com/2027-germany/registration/"><strong>Check ticket options &amp; details</strong></a></p>

<hr />

<h3>📢 Call for Papers (CFP)</h3>

<p>Got a talk idea or a unique case study to share? Our Call for Papers is open! First-time speakers are always welcome and supported by the community.</p>

<p>👉 <a href="https://live.symfony.com/account/call-for-papers/submit"><strong>Submit your proposal</strong></a></p>

<hr />

<p><strong>See you in Cologne!</strong></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-germany-2027-30-days-left-to-grab-your-early-bird-ticket?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Mélyne FREUZE ]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 15:30:00 +0100</pubDate>
            <comments>https://symfony.com/blog/symfonylive-germany-2027-30-days-left-to-grab-your-early-bird-ticket?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>Symfony 8.2.0-BETA1 released</title>
            <link>https://symfony.com/blog/symfony-8-2-0-beta1-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 8.2.0-BETA1 has just been released.
This is a pre-release version of Symfony 8.2. If you want to test it
in your own applications before its final release, run the following commands:

        
        1
2
3
        $ composer config minimum-stability…</description>
            <content:encoded><![CDATA[
                                <p><a href="https://github.com/symfony/symfony/releases/tag/v8.2.0-BETA1" class="reference external" rel="external noopener noreferrer" target="_blank">Symfony 8.2.0-BETA1</a> has just been released.</p>
<p>This is a pre-release version of Symfony 8.2. If you want to test it
in your own applications before its final release, run the following commands:</p>
<div translate="no" data-loc="3" class="notranslate codeblock codeblock-length-sm codeblock-terminal codeblock-bash">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-prompt">$ </span>composer config minimum-stability beta
<span class="hljs-prompt">$ </span>composer config extra.symfony.require <span class="hljs-string">"8.2.*"</span>
<span class="hljs-prompt">$ </span>composer update</code></pre>
    </div>
</div>
<p>These commands assume that all your Symfony dependencies in <code translate="no" class="notranslate">composer.json</code>
use <code translate="no" class="notranslate">*</code> as their version constraint. Otherwise, you will need to update
the version constraints of those Symfony dependencies to <code translate="no" class="notranslate">8.2.*</code>.</p>
<p>Read the <a href="https://symfony.com/doc/current/setup/upgrade_major.html" class="reference external">Symfony upgrade guide</a> to learn more about upgrading Symfony
and use the <a href="https://insight.symfony.com/" class="reference external">SymfonyInsight upgrade reports</a> to detect the code you will
need to change in your project.</p>
<div class="admonition admonition-tip ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>
                <span>Tip</span>
    </p><p>Want to be notified whenever a new Symfony release is published? Or when a
version is not maintained anymore? Or only when a security issue is fixed?
Consider <a href="https://symfony.com/account/notifications" class="reference external">subscribing to the Symfony Roadmap Notifications</a>.</p>
</div>
<div class="section">
<h2 id="changelog-since-symfony-8-1"><a class="headerlink" href="#changelog-since-symfony-8-1" title="Permalink to this headline">Changelog Since Symfony 8.1</a></h2>
<div class="section">
<h3 id="ahasend"><a class="headerlink" href="#ahasend" title="Permalink to this headline">AhaSend</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65155" class="reference external" rel="external noopener noreferrer" target="_blank">#65155</a> [AhaSend] Add support for the v2 API (@rmotaln)</li>
</ul>
</div>
<div class="section">
<h3 id="assetmapper"><a class="headerlink" href="#assetmapper" title="Permalink to this headline">AssetMapper</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65642" class="reference external" rel="external noopener noreferrer" target="_blank">#65642</a> [AssetMapper] Add an "asset_mapper.metadata_dir" option (@smnandre)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65622" class="reference external" rel="external noopener noreferrer" target="_blank">#65622</a> [AssetMapper] Add an importmap_entries option to stop exposing the other entrypoints (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65074" class="reference external" rel="external noopener noreferrer" target="_blank">#65074</a> [AssetMapper] Add a minimum release age for importmap updates (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65078" class="reference external" rel="external noopener noreferrer" target="_blank">#65078</a> [AssetMapper] Add integrity metadata to importmaps (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65075" class="reference external" rel="external noopener noreferrer" target="_blank">#65075</a> [AssetMapper] Allow requiring raw ESM packages (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64852" class="reference external" rel="external noopener noreferrer" target="_blank">#64852</a> [AssetMapper] Ignore compiled assets in debug mode (@smnandre)</li>
</ul>
</div>
<div class="section">
<h3 id="bridge"><a class="headerlink" href="#bridge" title="Permalink to this headline">Bridge</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/64767" class="reference external" rel="external noopener noreferrer" target="_blank">#64767</a> [Bridge][Monolog] Implements ProcessorInterface on our processors (@lyrixx)</li>
</ul>
</div>
<div class="section">
<h3 id="browserkit"><a class="headerlink" href="#browserkit" title="Permalink to this headline">BrowserKit</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66896" class="reference external" rel="external noopener noreferrer" target="_blank">#66896</a> [BrowserKit] Ignore cookies set for another domain and don't send host-only cookies to subdomains (@X-Coder264)</li>
</ul>
</div>
<div class="section">
<h3 id="cache"><a class="headerlink" href="#cache" title="Permalink to this headline">Cache</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66853" class="reference external" rel="external noopener noreferrer" target="_blank">#66853</a> [Cache][HttpKernel] Add the $target argument to #[Cache] for RFC 9213 targeted cache directives (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66355" class="reference external" rel="external noopener noreferrer" target="_blank">#66355</a> [Cache][Contracts][Scheduler] Report failed saves through the $metadata argument of CacheInterface::get() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65824" class="reference external" rel="external noopener noreferrer" target="_blank">#65824</a> [Cache] Add MongoDB cache adapters (@GromNaN)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65353" class="reference external" rel="external noopener noreferrer" target="_blank">#65353</a> [Cache] Implement PruneableInterface on RedisTagAwareAdapter (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65351" class="reference external" rel="external noopener noreferrer" target="_blank">#65351</a> [Cache][FrameworkBundle] Wire PdoTagAwareAdapter as cache.adapter.pdo_tag_aware (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/58296" class="reference external" rel="external noopener noreferrer" target="_blank">#58296</a> [Cache] Add PdoTagAwareAdapter (@Toflar)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65045" class="reference external" rel="external noopener noreferrer" target="_blank">#65045</a> [Cache][FrameworkBundle] Configure the app cache with a DSN (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="config"><a class="headerlink" href="#config" title="Permalink to this headline">Config</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66842" class="reference external" rel="external noopener noreferrer" target="_blank">#66842</a> [Config] Declare the elements of a node as accepted in the parent node (@GromNaN)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66033" class="reference external" rel="external noopener noreferrer" target="_blank">#66033</a> [Config][DependencyInjection] Add NodeDefinition::inlineEnvVars() to inline env vars while the container is compiled (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65884" class="reference external" rel="external noopener noreferrer" target="_blank">#65884</a> [Config][DependencyInjection][FrameworkBundle] Allow a configuration node to alias the configuration of another extension (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64876" class="reference external" rel="external noopener noreferrer" target="_blank">#64876</a> [Config][FrameworkBundle] Add a way to append multiple nodes via a callback (@HypeMC, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62125" class="reference external" rel="external noopener noreferrer" target="_blank">#62125</a> [Config] Generate JSON schema for config (@GromNaN)</li>
</ul>
</div>
<div class="section">
<h3 id="console"><a class="headerlink" href="#console" title="Permalink to this headline">Console</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67258" class="reference external" rel="external noopener noreferrer" target="_blank">#67258</a> [Console] Add suggestPaths() and suggestDirectories() to let the shell complete paths (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66950" class="reference external" rel="external noopener noreferrer" target="_blank">#66950</a> [Console] Exit with 128 + the signal number when a signal stops the application (@lyrixx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66770" class="reference external" rel="external noopener noreferrer" target="_blank">#66770</a> [Console] List the accepted values of enum arguments and options in the help (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66622" class="reference external" rel="external noopener noreferrer" target="_blank">#66622</a> [Console] Support lists of backed enums in #[Argument] and #[Option] (@KalimeroMK)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66020" class="reference external" rel="external noopener noreferrer" target="_blank">#66020</a> [Console] Autowire the lock factory named "console" in LockableTrait (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65853" class="reference external" rel="external noopener noreferrer" target="_blank">#65853</a> [Console] Register class-level #[AsCommand] groups and let the attribute list options (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65825" class="reference external" rel="external noopener noreferrer" target="_blank">#65825</a> [Console] Add docker-style sub-commands, resolved as command trees from registered names (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65616" class="reference external" rel="external noopener noreferrer" target="_blank">#65616</a> [Console] Allow dropping multiple files (@chalasr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65368" class="reference external" rel="external noopener noreferrer" target="_blank">#65368</a> [Console][DependencyInjection][HttpKernel] Support union and intersection types as controller and command arguments (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63784" class="reference external" rel="external noopener noreferrer" target="_blank">#63784</a> [Console] Auto-wrap TextDescriptor output based on terminal width (@Bellangelo)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65304" class="reference external" rel="external noopener noreferrer" target="_blank">#65304</a> [Console] Revert "Add a listedAt option to list a command only from a given verbosity" (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64117" class="reference external" rel="external noopener noreferrer" target="_blank">#64117</a> [Console][Yaml] Add a gitlab output format to the <a href="lint:yaml" class="reference internal">lint:yaml</a> command (@revoltek-daniel)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/61677" class="reference external" rel="external noopener noreferrer" target="_blank">#61677</a> [Console] Allow callables for the description and help of #[AsCommand], #[Argument] and #[Option] (@MacDada)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64723" class="reference external" rel="external noopener noreferrer" target="_blank">#64723</a> [Console] Add a listedAt option to list a command only from a given verbosity (@jprivet-dev)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/54439" class="reference external" rel="external noopener noreferrer" target="_blank">#54439</a> [Console] Add hidden and deprecated option modes (@flkasper)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64709" class="reference external" rel="external noopener noreferrer" target="_blank">#64709</a> [Console] Improve FileInputHelper paste detection read performance (@jorgsowa)</li>
</ul>
</div>
<div class="section">
<h3 id="contracts"><a class="headerlink" href="#contracts" title="Permalink to this headline">Contracts</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67018" class="reference external" rel="external noopener noreferrer" target="_blank">#67018</a> [Contracts][DependencyInjection] Pass a shutdown flag to service reset methods (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66133" class="reference external" rel="external noopener noreferrer" target="_blank">#66133</a> [Contracts][EventDispatcher] Add ListenerIntrospectionInterface (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="dependencyinjection"><a class="headerlink" href="#dependencyinjection" title="Permalink to this headline">DependencyInjection</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66667" class="reference external" rel="external noopener noreferrer" target="_blank">#66667</a> [DependencyInjection] Let a service declare one of its methods as a service (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66240" class="reference external" rel="external noopener noreferrer" target="_blank">#66240</a> [DependencyInjection] Add within and around constraints to order decorators (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66012" class="reference external" rel="external noopener noreferrer" target="_blank">#66012</a> [DependencyInjection][EventDispatcher] Order tagged services and listeners with before/after constraints (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66131" class="reference external" rel="external noopener noreferrer" target="_blank">#66131</a> [DependencyInjection] Deprecate the EventDispatcherInterface autowiring alias (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66021" class="reference external" rel="external noopener noreferrer" target="_blank">#66021</a> [DependencyInjection] Pass top-level extension values that are not arrays to the extension (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65981" class="reference external" rel="external noopener noreferrer" target="_blank">#65981</a> [DependencyInjection] Add the "container.remove_if_missing" tag (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65370" class="reference external" rel="external noopener noreferrer" target="_blank">#65370</a> [DependencyInjection][FrameworkBundle] Add #[AutowireClassMap] to inject a class map built from resource tags (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65434" class="reference external" rel="external noopener noreferrer" target="_blank">#65434</a> [DependencyInjection] Allow computing resource tag attributes per tagged class (@HypeMC, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65350" class="reference external" rel="external noopener noreferrer" target="_blank">#65350</a> [DependencyInjection] Allow ignoring classes when preloading (@eissasoubhi)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60589" class="reference external" rel="external noopener noreferrer" target="_blank">#60589</a> [DependencyInjection] add factory argument in the #[Autoconfigure] attribute and also enabled the use of factory within instanceof conditionals (@santysisi)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64704" class="reference external" rel="external noopener noreferrer" target="_blank">#64704</a> [DependencyInjection] Write a CACHEDIR.TAG file in the cache and build directories (@shyim)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65103" class="reference external" rel="external noopener noreferrer" target="_blank">#65103</a> [DependencyInjection] Allow injecting a service as a lazy proxy on a per-argument basis (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64980" class="reference external" rel="external noopener noreferrer" target="_blank">#64980</a> [DependencyInjection] Add a $priority argument to the #[Required] attribute (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64652" class="reference external" rel="external noopener noreferrer" target="_blank">#64652</a> [DependencyInjection] Allow computing #[AutoconfigureTag] attributes per tagged service (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="doctrinebridge"><a class="headerlink" href="#doctrinebridge" title="Permalink to this headline">DoctrineBridge</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66957" class="reference external" rel="external noopener noreferrer" target="_blank">#66957</a> [DoctrineBridge][Messenger] Add an inbox to skip the handlers of redelivered messages (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66714" class="reference external" rel="external noopener noreferrer" target="_blank">#66714</a> [DoctrineBridge] Order event listeners with before/after constraints (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66144" class="reference external" rel="external noopener noreferrer" target="_blank">#66144</a> [DoctrineBridge][Serializer] Denormalize into the declared Doctrine collection class (@GromNaN)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63483" class="reference external" rel="external noopener noreferrer" target="_blank">#63483</a> [DoctrineBridge] Add the EntityExists constraint (@evgenij-vy)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65437" class="reference external" rel="external noopener noreferrer" target="_blank">#65437</a> [DoctrineBridge][FrameworkBundle] Add doctrine.orm.entity tag and AttributeClassesDriver to auto-discover entities (@Nayte91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63949" class="reference external" rel="external noopener noreferrer" target="_blank">#63949</a> [DoctrineBridge] MapEntity - use findBy if argument type is array (@Brajk19)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63772" class="reference external" rel="external noopener noreferrer" target="_blank">#63772</a> [DoctrineBridge] Map the DatePoint property types for Doctrine schema tools (@wkania)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65346" class="reference external" rel="external noopener noreferrer" target="_blank">#65346</a> [DoctrineBridge] Deprecate DoctrinePingConnectionMiddleware in favor of the new DoctrineDbalPingConnectionMiddleware, add DoctrineDbalTransactionMiddleware (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65329" class="reference external" rel="external noopener noreferrer" target="_blank">#65329</a> [DoctrineBridge] Deprecate DoctrineOpenTransactionLoggerMiddleware in favor of the new DoctrineDbalOpenTransactionLoggerMiddleware (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65302" class="reference external" rel="external noopener noreferrer" target="_blank">#65302</a> [DoctrineBridge] Deprecate DoctrineCloseConnectionMiddleware in favor of the new DoctrineDbalCloseConnectionMiddleware (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63866" class="reference external" rel="external noopener noreferrer" target="_blank">#63866</a> [DoctrineBridge] Allow using \Closure in #[MapEntity] (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64469" class="reference external" rel="external noopener noreferrer" target="_blank">#64469</a> [DoctrineBridge] Store whether a query ran on a primary (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63658" class="reference external" rel="external noopener noreferrer" target="_blank">#63658</a> [DoctrineBridge] add IterableToArrayCollection transformer for Object Mapper (@rrajkomar)</li>
</ul>
</div>
<div class="section">
<h3 id="domcrawler"><a class="headerlink" href="#domcrawler" title="Permalink to this headline">DomCrawler</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/64154" class="reference external" rel="external noopener noreferrer" target="_blank">#64154</a> [DomCrawler] Add ChoiceFormField::selectByText() to select an option by its text content (@michaelthieulin)</li>
</ul>
</div>
<div class="section">
<h3 id="errorhandler"><a class="headerlink" href="#errorhandler" title="Permalink to this headline">ErrorHandler</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67201" class="reference external" rel="external noopener noreferrer" target="_blank">#67201</a> [ErrorHandler] Report attributes whose class does not exist in or below the namespace they are used in (@KalimeroMK)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67037" class="reference external" rel="external noopener noreferrer" target="_blank">#67037</a> [ErrorHandler] Add CSP nonce support to HTML error pages (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64766" class="reference external" rel="external noopener noreferrer" target="_blank">#64766</a> [ErrorHandler] Redesign the exception page (@javiereguiluz)</li>
</ul>
</div>
<div class="section">
<h3 id="eventdispatcher"><a class="headerlink" href="#eventdispatcher" title="Permalink to this headline">EventDispatcher</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66129" class="reference external" rel="external noopener noreferrer" target="_blank">#66129</a> [EventDispatcher][Messenger] Deprecate mutating the event dispatcher of the container at runtime (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66122" class="reference external" rel="external noopener noreferrer" target="_blank">#66122</a> [EventDispatcher] Add CompiledEventDispatcher (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66022" class="reference external" rel="external noopener noreferrer" target="_blank">#66022</a> [EventDispatcher] Allow getSubscribedEvents() to name its keys (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="expressionlanguage"><a class="headerlink" href="#expressionlanguage" title="Permalink to this headline">ExpressionLanguage</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66630" class="reference external" rel="external noopener noreferrer" target="_blank">#66630</a> [ExpressionLanguage] Add ConstantFunctionProvider and deprecate the unrestricted constant() and enum() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66652" class="reference external" rel="external noopener noreferrer" target="_blank">#66652</a> [ExpressionLanguage][FrameworkBundle][HttpKernel][Security][SecurityBundle] Compile expressions when warming up the cache (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64870" class="reference external" rel="external noopener noreferrer" target="_blank">#64870</a> [ExpressionLanguage] Add the native PHP count() function to the ExpressionLanguage component (@payene)</li>
</ul>
</div>
<div class="section">
<h3 id="filesystem"><a class="headerlink" href="#filesystem" title="Permalink to this headline">Filesystem</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65828" class="reference external" rel="external noopener noreferrer" target="_blank">#65828</a> [Filesystem] Deprecate passing an empty string as the base path to Path::isBasePath() (@Amoifr)</li>
</ul>
</div>
<div class="section">
<h3 id="finder"><a class="headerlink" href="#finder" title="Permalink to this headline">Finder</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/54752" class="reference external" rel="external noopener noreferrer" target="_blank">#54752</a> [Finder] Add root-relative directory excludes via / prefix in exclude() (@joshtrichards)</li>
</ul>
</div>
<div class="section">
<h3 id="form"><a class="headerlink" href="#form" title="Permalink to this headline">Form</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66731" class="reference external" rel="external noopener noreferrer" target="_blank">#66731</a> [Form] Map the fields of a form to the constructor of its data class (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66772" class="reference external" rel="external noopener noreferrer" target="_blank">#66772</a> [Form][FrameworkBundle] Add TypeInfoFormTypeGuesser to guess form fields from the declared type of their property (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66227" class="reference external" rel="external noopener noreferrer" target="_blank">#66227</a> [Form] Add the sort_choices option to ChoiceType (@seb-jean)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66217" class="reference external" rel="external noopener noreferrer" target="_blank">#66217</a> [Form] Add the entry_name option to CollectionType and PolymorphicCollectionType (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65928" class="reference external" rel="external noopener noreferrer" target="_blank">#65928</a> [Form] Add BoundsType to render a lower and an upper bound (@seb-jean)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66026" class="reference external" rel="external noopener noreferrer" target="_blank">#66026</a> [Form] Guess "empty_data" from the type of the mapped property (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65515" class="reference external" rel="external noopener noreferrer" target="_blank">#65515</a> [Form] Add an allow_array_submission option to let PRE_SUBMIT listeners transform submitted arrays (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60563" class="reference external" rel="external noopener noreferrer" target="_blank">#60563</a> [Form] Add #[AsFormType] and #[FormField] attributes to define form types on data classes (@WedgeSama)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65794" class="reference external" rel="external noopener noreferrer" target="_blank">#65794</a> [Form] Use the POST_VALIDATE event in PasswordHasherExtension (@Seb33300)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/47210" class="reference external" rel="external noopener noreferrer" target="_blank">#47210</a> [Form] Add the "form.post_validate" event (@Seb33300)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63944" class="reference external" rel="external noopener noreferrer" target="_blank">#63944</a> [Form][TwigBridge] Render the name attribute of the &lt;form&gt; element through attr (@Nayte91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65257" class="reference external" rel="external noopener noreferrer" target="_blank">#65257</a> [Form][TwigBridge] Allow the "group_by" option of ChoiceType to return translatable labels (@kira0269)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63734" class="reference external" rel="external noopener noreferrer" target="_blank">#63734</a> [Form] Add support for grouping and nested steps in FormFlowType (@yceruto)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63487" class="reference external" rel="external noopener noreferrer" target="_blank">#63487</a> [Form] Add PolymorphicCollectionType for collections whose entries do not all share the same type (@michaelKaefer)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/48013" class="reference external" rel="external noopener noreferrer" target="_blank">#48013</a> [Form][TwigBridge] Render an id on the form element so form_attr references resolve (@ker0x)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63819" class="reference external" rel="external noopener noreferrer" target="_blank">#63819</a> [Form] Add a "choice_help" option to ChoiceType (@Amoifr)</li>
</ul>
</div>
<div class="section">
<h3 id="frameworkbundle"><a class="headerlink" href="#frameworkbundle" title="Permalink to this headline">FrameworkBundle</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67237" class="reference external" rel="external noopener noreferrer" target="_blank">#67237</a> [FrameworkBundle] Add the <a href="debug:autoconfiguration" class="reference internal">debug:autoconfiguration</a> command (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66929" class="reference external" rel="external noopener noreferrer" target="_blank">#66929</a> [FrameworkBundle][JsonSchema] Add JsonSchemaBundle (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66780" class="reference external" rel="external noopener noreferrer" target="_blank">#66780</a> [FrameworkBundle][HttpKernel] Add RateLimitValueResolver to inject the rate limit consumed by the RateLimit attribute (@ayyoub-afwallah)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66820" class="reference external" rel="external noopener noreferrer" target="_blank">#66820</a> [FrameworkBundle][Webhook] Add KernelBrowser::sendWebhook() and WebhookAssertionsTrait (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66801" class="reference external" rel="external noopener noreferrer" target="_blank">#66801</a> [FrameworkBundle][RateLimiter] Reset the rate limiters between tests (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66789" class="reference external" rel="external noopener noreferrer" target="_blank">#66789</a> [FrameworkBundle][Messenger] Let MessengerAssertionsTrait see the messages queued by previous requests (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66800" class="reference external" rel="external noopener noreferrer" target="_blank">#66800</a> [FrameworkBundle][Mailer][Notifier] Let MailerAssertionsTrait and NotificationAssertionsTrait see what previous requests sent (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66839" class="reference external" rel="external noopener noreferrer" target="_blank">#66839</a> [FrameworkBundle] Add the kernel.test_state tag to keep or reset the state of a service for the duration of a test (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66804" class="reference external" rel="external noopener noreferrer" target="_blank">#66804</a> [FrameworkBundle][HttpKernel] Allow streaming the controller result as JSON in the Serialize attribute (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66805" class="reference external" rel="external noopener noreferrer" target="_blank">#66805</a> [FrameworkBundle][SecurityBundle] Make KernelBrowser::loginUser() work on stateless access_token firewalls (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66803" class="reference external" rel="external noopener noreferrer" target="_blank">#66803</a> [FrameworkBundle][HttpKernel] Allow mapping the controller result with the ObjectMapper in the Serialize attribute (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66787" class="reference external" rel="external noopener noreferrer" target="_blank">#66787</a> [FrameworkBundle] Allow consumeQueuedMessages() to consume all in-memory transports (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66788" class="reference external" rel="external noopener noreferrer" target="_blank">#66788</a> [FrameworkBundle][Yaml] Make <a href="lint:yaml" class="reference internal">lint:yaml</a> validate files against their JSON Schema by default (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66697" class="reference external" rel="external noopener noreferrer" target="_blank">#66697</a> [FrameworkBundle][HttpKernel] Add LockValueResolver to inject the lock acquired by the Lock attribute (@Brajk19)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66691" class="reference external" rel="external noopener noreferrer" target="_blank">#66691</a> [FrameworkBundle][HttpKernel][SecurityBundle][Workflow] Add the <a href="lint:expressions" class="reference internal">lint:expressions</a> command (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66599" class="reference external" rel="external noopener noreferrer" target="_blank">#66599</a> [FrameworkBundle][HttpFoundation] Deprecate saving session attributes changed without calling set() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66664" class="reference external" rel="external noopener noreferrer" target="_blank">#66664</a> [FrameworkBundle][HttpKernel][SecurityBundle][Workflow] Deprecate ExpressionCacheWarmer and fail the warmup on invalid listed expressions instead (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66644" class="reference external" rel="external noopener noreferrer" target="_blank">#66644</a> [FrameworkBundle][HttpKernel] Make #[RateLimit] reject requests before resolving controller arguments (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66506" class="reference external" rel="external noopener noreferrer" target="_blank">#66506</a> [FrameworkBundle][HttpFoundation][Messenger][Security][SecurityBundle] Allow rotating the secrets that sign URIs, remember-me cookies, login links and messages (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66189" class="reference external" rel="external noopener noreferrer" target="_blank">#66189</a> [FrameworkBundle] Allow using a named serializer for #[MapRequestPayload], #[MapQueryString] &amp; #[Serialize] (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66176" class="reference external" rel="external noopener noreferrer" target="_blank">#66176</a> [FrameworkBundle] Register the security expression functions on the controller expression language (@tomsommer)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65144" class="reference external" rel="external noopener noreferrer" target="_blank">#65144</a> [FrameworkBundle][Messenger][Scheduler] Add framework.scheduler.use_messenger_routing (@lyrixx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65900" class="reference external" rel="external noopener noreferrer" target="_blank">#65900</a> [FrameworkBundle][Messenger] Add MessengerAssertionsTrait to test in-memory transports (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65997" class="reference external" rel="external noopener noreferrer" target="_blank">#65997</a> [FrameworkBundle] Add a "configure_container" option to WebTestCase::createClient() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65948" class="reference external" rel="external noopener noreferrer" target="_blank">#65948</a> [FrameworkBundle] Move every configuration section to a bundle shipped by its own component (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65887" class="reference external" rel="external noopener noreferrer" target="_blank">#65887</a> [FrameworkBundle][JsonPath][Mime][ObjectMapper][Process] Add bundles for the components that own no configuration key (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65750" class="reference external" rel="external noopener noreferrer" target="_blank">#65750</a> [FrameworkBundle] Add "framework.webhook.no_private_network" and "framework.webhook.http_client" options (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65451" class="reference external" rel="external noopener noreferrer" target="_blank">#65451</a> [FrameworkBundle][Mailer] Add TrackingHeader for per-message open/click tracking across bridges (@Starfox64, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65427" class="reference external" rel="external noopener noreferrer" target="_blank">#65427</a> [FrameworkBundle][HttpKernel] Allow excluding requests from being profiled (@michaelthieulin)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65428" class="reference external" rel="external noopener noreferrer" target="_blank">#65428</a> [FrameworkBundle][WebLink] Add RFC 9264 link sets and the RFC 9652 Link-Template header (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64540" class="reference external" rel="external noopener noreferrer" target="_blank">#64540</a> [FrameworkBundle][Mailer][Mime] Add PGP/MIME signing and encryption support (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64541" class="reference external" rel="external noopener noreferrer" target="_blank">#64541</a> [FrameworkBundle][Mailer] Align the S/MIME listeners with the PGP/MIME design (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63719" class="reference external" rel="external noopener noreferrer" target="_blank">#63719</a> [FrameworkBundle] Add security expression functions to the validator expression language (@mp3000mp)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64071" class="reference external" rel="external noopener noreferrer" target="_blank">#64071</a> [FrameworkBundle][HttpKernel][TwigBridge] Deprecate the hinclude fragment renderer (@javiereguiluz)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63690" class="reference external" rel="external noopener noreferrer" target="_blank">#63690</a> [FrameworkBundle][HttpFoundation] Add command to purge session data (@Nayte91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/53131" class="reference external" rel="external noopener noreferrer" target="_blank">#53131</a> [FrameworkBundle][HttpClient] Add the retry_failed.base_uris option to http_client (@Tiriel)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65098" class="reference external" rel="external noopener noreferrer" target="_blank">#65098</a> [FrameworkBundle] Allow enabling advisory locks on a lock resource (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64866" class="reference external" rel="external noopener noreferrer" target="_blank">#64866</a> [FrameworkBundle][Messenger] Add option to disable the RejectRedeliveredMessageMiddleware (@lyrixx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/49161" class="reference external" rel="external noopener noreferrer" target="_blank">#49161</a> [FrameworkBundle] Report unused .env variables in <a href="debug:container" class="reference internal">debug:container</a> --env-vars (@mw3e21a)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64785" class="reference external" rel="external noopener noreferrer" target="_blank">#64785</a> [FrameworkBundle] Add support for the HttpClient max_connect_duration option (@alexandre-daubois)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64018" class="reference external" rel="external noopener noreferrer" target="_blank">#64018</a> [FrameworkBundle] Deprecate the framework.ide config option (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64592" class="reference external" rel="external noopener noreferrer" target="_blank">#64592</a> [FrameworkBundle] Add --dispatchers option to <a href="debug:event-dispatcher" class="reference internal">debug:event-dispatcher</a> command (@lyrixx)</li>
</ul>
</div>
<div class="section">
<h3 id="httpclient"><a class="headerlink" href="#httpclient" title="Permalink to this headline">HttpClient</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66923" class="reference external" rel="external noopener noreferrer" target="_blank">#66923</a> [HttpClient] Stop following redirects from https to http (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63781" class="reference external" rel="external noopener noreferrer" target="_blank">#63781</a> [HttpClient] Add RecorderHttpClient to record and replay HTTP exchanges (@imenezzine, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66557" class="reference external" rel="external noopener noreferrer" target="_blank">#66557</a> [HttpClient] Use HTTP/2 with prior knowledge when http_version is 2.0 (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66376" class="reference external" rel="external noopener noreferrer" target="_blank">#66376</a> [HttpClient] Allow repeating fields in the query and body options (@lyrixx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66263" class="reference external" rel="external noopener noreferrer" target="_blank">#66263</a> [HttpClient] Add support for the on_trailers request option to GuzzleHttpHandler (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66256" class="reference external" rel="external noopener noreferrer" target="_blank">#66256</a> [HttpClient] Expose HTTP trailers as the trailers response info (@gplanchat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66213" class="reference external" rel="external noopener noreferrer" target="_blank">#66213</a> [HttpClient][WebProfilerBundle] Show the duration and the transferred sizes of each request in the profiler (@michaelthieulin)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64874" class="reference external" rel="external noopener noreferrer" target="_blank">#64874</a> [HttpClient] Add support for the QUERY HTTP method to CachingHttpClient (@ayyoub-afwallah)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65127" class="reference external" rel="external noopener noreferrer" target="_blank">#65127</a> [HttpClient] Allow passing a stream or a closure to HttpOptions::buffer() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65123" class="reference external" rel="external noopener noreferrer" target="_blank">#65123</a> [HttpClient] Add the extra.cache_policy option to CachingHttpClient (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="httpfoundation"><a class="headerlink" href="#httpfoundation" title="Permalink to this headline">HttpFoundation</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66705" class="reference external" rel="external noopener noreferrer" target="_blank">#66705</a> [HttpFoundation][HttpKernel] Treat 308 like 301 for caching (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66624" class="reference external" rel="external noopener noreferrer" target="_blank">#66624</a> [HttpFoundation][HttpKernel] Forward incremental responses without buffering them in HttpClientKernel (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65390" class="reference external" rel="external noopener noreferrer" target="_blank">#65390</a> [HttpFoundation] Expand PRIVATE_SUBNETS with five not-globally-reachable ranges (@Synchro)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63804" class="reference external" rel="external noopener noreferrer" target="_blank">#63804</a> [HttpFoundation][HttpKernel] Handle any +json/+xml media type in #[MapRequestPayload] (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/49227" class="reference external" rel="external noopener noreferrer" target="_blank">#49227</a> [HttpFoundation] Constraint ResponseHeaderSame now shows the actual header value (@jschaedl)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65282" class="reference external" rel="external noopener noreferrer" target="_blank">#65282</a> [HttpFoundation] Add targeted cache-control support (RFC 9213) (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65162" class="reference external" rel="external noopener noreferrer" target="_blank">#65162</a> [HttpFoundation] Reject a Cookie with an invalid __Secure-/__Host- prefix (@dunglas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64169" class="reference external" rel="external noopener noreferrer" target="_blank">#64169</a> [HttpFoundation] Add ParameterBag::filterCallback() (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64408" class="reference external" rel="external noopener noreferrer" target="_blank">#64408</a> [HttpFoundation] Allow creating single-use signed urls (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64455" class="reference external" rel="external noopener noreferrer" target="_blank">#64455</a> [HttpFoundation] Deprecate not passing an expiry to UriSigner::sign() (@kbond)</li>
</ul>
</div>
<div class="section">
<h3 id="httpkernel"><a class="headerlink" href="#httpkernel" title="Permalink to this headline">HttpKernel</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67563" class="reference external" rel="external noopener noreferrer" target="_blank">#67563</a> [HttpKernel][Security] Let controllers handle the failures of their attributes (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67051" class="reference external" rel="external noopener noreferrer" target="_blank">#67051</a> [HttpKernel] Return HTTP 204 for controllers declaring void (@Koc)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66784" class="reference external" rel="external noopener noreferrer" target="_blank">#66784</a> [HttpKernel][Lock] Allow {name} placeholders in the keys of the Lock and RateLimit attributes (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66515" class="reference external" rel="external noopener noreferrer" target="_blank">#66515</a> [HttpKernel][Lock] Add #[Lock] attribute to reject or delay concurrent requests (@Brajk19)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66641" class="reference external" rel="external noopener noreferrer" target="_blank">#66641</a> [HttpKernel] Allow setting a condition when the #[RateLimit] attribute should be applied (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66595" class="reference external" rel="external noopener noreferrer" target="_blank">#66595</a> [HttpKernel] Add HttpException classes for 402, 408, 413, 416, 417, 424, 425, 451 and 501 (@bigboss86, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65600" class="reference external" rel="external noopener noreferrer" target="_blank">#65600</a> [HttpKernel][RateLimiter] Add option to expose X-RateLimit-* headers for the #[RateLimit] attribute (@ayyoub-afwallah)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65573" class="reference external" rel="external noopener noreferrer" target="_blank">#65573</a> [HttpKernel][FrameworkBundle] Add the cache_status option to emit the RFC 9211 Cache-Status header (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64368" class="reference external" rel="external noopener noreferrer" target="_blank">#64368</a> [HttpKernel] Deserialize a JSON query parameter with #[MapQueryString(key:)] (@mudassaralichouhan)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64210" class="reference external" rel="external noopener noreferrer" target="_blank">#64210</a> [HttpKernel][WebProfilerBundle] Add dump icon in result list (@MrYamous)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64447" class="reference external" rel="external noopener noreferrer" target="_blank">#64447</a> [HttpKernel] Add #[AsControllerAttributeListener] (@lyrixx)</li>
</ul>
</div>
<div class="section">
<h3 id="intl"><a class="headerlink" href="#intl" title="Permalink to this headline">Intl</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67532" class="reference external" rel="external noopener noreferrer" target="_blank">#67532</a> [Intl] Add a prune script to remove the data of unused locales (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="jsonschema"><a class="headerlink" href="#jsonschema" title="Permalink to this headline">JsonSchema</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66930" class="reference external" rel="external noopener noreferrer" target="_blank">#66930</a> [JsonSchema] Allow PHP 8.2 (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66685" class="reference external" rel="external noopener noreferrer" target="_blank">#66685</a> [JsonSchema] Add the component (@soyuka)</li>
</ul>
</div>
<div class="section">
<h3 id="jsonstreamer"><a class="headerlink" href="#jsonstreamer" title="Permalink to this headline">JsonStreamer</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66568" class="reference external" rel="external noopener noreferrer" target="_blank">#66568</a> [JsonStreamer][Mailer][Notifier][SecurityBundle][Webhook] Deprecate autowiring aliases named after implementations (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64714" class="reference external" rel="external noopener noreferrer" target="_blank">#64714</a> [JsonStreamer] Add UID value object support (@mtarld)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64190" class="reference external" rel="external noopener noreferrer" target="_blank">#64190</a> [JsonStreamer] Add a "cache_variant" option to the generated cache file name (@soyuka)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63743" class="reference external" rel="external noopener noreferrer" target="_blank">#63743</a> [JsonStreamer] Add BcMath\Number and GMP value object support (@mtarld)</li>
</ul>
</div>
<div class="section">
<h3 id="keymanagement"><a class="headerlink" href="#keymanagement" title="Permalink to this headline">KeyManagement</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67691" class="reference external" rel="external noopener noreferrer" target="_blank">#67691</a> [KeyManagement] Add AES-GCM-SIV support to KMIP (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67690" class="reference external" rel="external noopener noreferrer" target="_blank">#67690</a> [KeyManagement] Add ChaCha20-Poly1305 support to KMIP (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67689" class="reference external" rel="external noopener noreferrer" target="_blank">#67689</a> [KeyManagement] Add KMIP 2.1 support (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66637" class="reference external" rel="external noopener noreferrer" target="_blank">#66637</a> [KeyManagement] Authenticate the context of encrypted Doctrine columns (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66920" class="reference external" rel="external noopener noreferrer" target="_blank">#66920</a> [KeyManagement] Add a Scaleway Key Manager bridge (@daFish)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66918" class="reference external" rel="external noopener noreferrer" target="_blank">#66918</a> [KeyManagement] Let the HashiCorp Vault bridge get its token from a provider (@daFish)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66635" class="reference external" rel="external noopener noreferrer" target="_blank">#66635</a> [KeyManagement] Let a data key store bind its wrapping context at the backend (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66639" class="reference external" rel="external noopener noreferrer" target="_blank">#66639</a> [KeyManagement] Make reading a self-contained payload a stated choice (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66806" class="reference external" rel="external noopener noreferrer" target="_blank">#66806</a> [KeyManagement] Add the Encrypted attribute to encrypt Doctrine ORM columns (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66766" class="reference external" rel="external noopener noreferrer" target="_blank">#66766</a> [KeyManagement] Register the encrypted Doctrine DBAL types from the bundle configuration (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66368" class="reference external" rel="external noopener noreferrer" target="_blank">#66368</a> [KeyManagement] Add KMIP bridge (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66277" class="reference external" rel="external noopener noreferrer" target="_blank">#66277</a> [KeyManagement] Refresh rejected KMS tokens after 401 responses (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66229" class="reference external" rel="external noopener noreferrer" target="_blank">#66229</a> [KeyManagement] Memoize Flysystem keys with optional reset (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66165" class="reference external" rel="external noopener noreferrer" target="_blank">#66165</a> [KeyManagement] Add CompositeKms, a client wrapping under several providers (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64052" class="reference external" rel="external noopener noreferrer" target="_blank">#64052</a> [KeyManagement] Add a new component for Key Management Systems (@Spomky)</li>
</ul>
</div>
<div class="section">
<h3 id="ldap"><a class="headerlink" href="#ldap" title="Permalink to this headline">Ldap</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67803" class="reference external" rel="external noopener noreferrer" target="_blank">#67803</a> [Ldap][Security][SecurityBundle] Hash the presented password when the user is unknown, disabled or has no password (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67233" class="reference external" rel="external noopener noreferrer" target="_blank">#67233</a> [Ldap] Send only the changed attributes when updating an entry (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64976" class="reference external" rel="external noopener noreferrer" target="_blank">#64976</a> [Ldap][SecurityBundle] Add an option to check only LDAP users against the LDAP server (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="lock"><a class="headerlink" href="#lock" title="Permalink to this headline">Lock</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66526" class="reference external" rel="external noopener noreferrer" target="_blank">#66526</a> [Lock] Add flock+remove DSNs to remove the lock file on release (@GromNaN)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65787" class="reference external" rel="external noopener noreferrer" target="_blank">#65787</a> [Lock][Messenger][Notifier] Add the "ssl" DSN option to select the HTTP scheme (@MarcinOrlowski, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65021" class="reference external" rel="external noopener noreferrer" target="_blank">#65021</a> [Lock] Allow advisory locks when reusing a PDO/DBAL connection in StoreFactory (@saifulferoz)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64987" class="reference external" rel="external noopener noreferrer" target="_blank">#64987</a> [Lock] Add DoctrineDbalMysqlStore for advisory locking (@ryanpon-payjoy)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64757" class="reference external" rel="external noopener noreferrer" target="_blank">#64757</a> [Lock] Add MysqlStore for advisory locking (@ryanpon-payjoy)</li>
</ul>
</div>
<div class="section">
<h3 id="mailer"><a class="headerlink" href="#mailer" title="Permalink to this headline">Mailer</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66777" class="reference external" rel="external noopener noreferrer" target="_blank">#66777</a> [Mailer] Add Zoho CPaaS bridge (@Taldres)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66086" class="reference external" rel="external noopener noreferrer" target="_blank">#66086</a> [Mailer] Support tenant configuration via the DSN and the X-SES-TENANT header (@DjLeChuck)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65879" class="reference external" rel="external noopener noreferrer" target="_blank">#65879</a> [Mailer][Sweego] Add support for CC and BCC recipients (@lazerg)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65826" class="reference external" rel="external noopener noreferrer" target="_blank">#65826</a> [Mailer] Add PufferPost bridge (@JeroenMoonen)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65819" class="reference external" rel="external noopener noreferrer" target="_blank">#65819</a> [Mailer] Add RemoteTemplateEmail support to the remaining bridges with provider-hosted templates (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64782" class="reference external" rel="external noopener noreferrer" target="_blank">#64782</a> [Mailer] Add RemoteTemplateEmail to send emails rendered from provider-hosted templates (@Orkin)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65771" class="reference external" rel="external noopener noreferrer" target="_blank">#65771</a> [Mailer][Mime] Add RFC 6854 group support to mailbox list headers (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65791" class="reference external" rel="external noopener noreferrer" target="_blank">#65791</a> [Mailer] Support tags in the MailerSend transports (@thomas-bw)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65793" class="reference external" rel="external noopener noreferrer" target="_blank">#65793</a> [Mailer][Notifier] Deprecate reading a non-boolean value with Dsn::getBooleanOption() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65672" class="reference external" rel="external noopener noreferrer" target="_blank">#65672</a> [Mailer] Add MailKite bridge (@bucabay)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65536" class="reference external" rel="external noopener noreferrer" target="_blank">#65536</a> [Mailer][Cloudflare] Add an SMTP transport (@vadage)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65420" class="reference external" rel="external noopener noreferrer" target="_blank">#65420</a> [Mailer] Add DSN param timeout to configure the SMTP connect/read/write timeout (@anktx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64056" class="reference external" rel="external noopener noreferrer" target="_blank">#64056</a> [Mailer] Add a bridge for the Cloudflare email service (@vadage)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65355" class="reference external" rel="external noopener noreferrer" target="_blank">#65355</a> [Mailer] Add support for Scaleway webhooks (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/59985" class="reference external" rel="external noopener noreferrer" target="_blank">#59985</a> [Mailer] Add support for rate limited mailer transports (@fritzmg)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62371" class="reference external" rel="external noopener noreferrer" target="_blank">#62371</a> [Mailer][Mandrill] Add return_path_domain to payload (@andrehoong-pixieset)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63813" class="reference external" rel="external noopener noreferrer" target="_blank">#63813</a> [Mailer] Add Gmail API transport with OAuth2 service account authentication (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63802" class="reference external" rel="external noopener noreferrer" target="_blank">#63802</a> [Mailer][Azure] Add webhook support for Azure Communication Services Email events (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64916" class="reference external" rel="external noopener noreferrer" target="_blank">#64916</a> [Mailer] Add TurboSMTP bridge (@NewtTheWolf)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64839" class="reference external" rel="external noopener noreferrer" target="_blank">#64839</a> [Mailer][BrevoMailer] Allow configuring the SMTP port through the DSN (@thomas2411)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64623" class="reference external" rel="external noopener noreferrer" target="_blank">#64623</a> [Mailer] Reorder EsmtpTransport authenticators to prefer PLAIN over obsolete LOGIN (@tabascoterrier)</li>
</ul>
</div>
<div class="section">
<h3 id="messenger"><a class="headerlink" href="#messenger" title="Permalink to this headline">Messenger</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66964" class="reference external" rel="external noopener noreferrer" target="_blank">#66964</a> [Messenger] Let workers stop consuming a transport for a while after its messages fail (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66953" class="reference external" rel="external noopener noreferrer" target="_blank">#66953</a> [Messenger] Support sending messages to specific Beanstalkd tubes (@Nikolay-Kurdoglo)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66898" class="reference external" rel="external noopener noreferrer" target="_blank">#66898</a> [Messenger] Deprecate signing messages per type (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66870" class="reference external" rel="external noopener noreferrer" target="_blank">#66870</a> [Messenger] Add a --stop-when-empty option to <a href="messenger:consume" class="reference internal">messenger:consume</a> (@KalimeroMK)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66875" class="reference external" rel="external noopener noreferrer" target="_blank">#66875</a> [Messenger] Sign every header written by the decorated serializer (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66873" class="reference external" rel="external noopener noreferrer" target="_blank">#66873</a> [Messenger] Let InteropSerializer exchange stamps as plain headers (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66715" class="reference external" rel="external noopener noreferrer" target="_blank">#66715</a> [Messenger] Order handlers with before/after constraints (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66695" class="reference external" rel="external noopener noreferrer" target="_blank">#66695</a> [Messenger] Allow configuring the lock factory of the deduplication middleware (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66689" class="reference external" rel="external noopener noreferrer" target="_blank">#66689</a> [Messenger] Add WorkerRestarter and let <a href="messenger:stop-workers" class="reference internal">messenger:stop-workers</a> stop the workers of some transports only (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66574" class="reference external" rel="external noopener noreferrer" target="_blank">#66574</a> [Messenger] Add InteropSerializer to exchange messages with another application (@nikophil)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66627" class="reference external" rel="external noopener noreferrer" target="_blank">#66627</a> [Messenger] Send batches with the Redis, MongoDB, AMPHP SQL and AMQP transports, and through the outbox (@JoppeDC, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66646" class="reference external" rel="external noopener noreferrer" target="_blank">#66646</a> [Messenger] Allow specifying additional AMQP queue bindings (@wouterj)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66586" class="reference external" rel="external noopener noreferrer" target="_blank">#66586</a> [Messenger] Add the messages and unwrap_exceptions options of buses (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66590" class="reference external" rel="external noopener noreferrer" target="_blank">#66590</a> [Messenger] Add #[AsMessageMiddleware] to add middleware to a bus (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66450" class="reference external" rel="external noopener noreferrer" target="_blank">#66450</a> [Messenger][MongoDb] Listen to multiple queues in a single request (@GromNaN)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66564" class="reference external" rel="external noopener noreferrer" target="_blank">#66564</a> [Messenger] Add a --middleware option to the <a href="debug:messenger" class="reference internal">debug:messenger</a> command (@ker0x)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65917" class="reference external" rel="external noopener noreferrer" target="_blank">#65917</a> [Messenger] Add DispatchOnFailureStamp to dispatch a message when another one fails (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65903" class="reference external" rel="external noopener noreferrer" target="_blank">#65903</a> [Messenger] Add ChainStamp to dispatch messages one after another (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66505" class="reference external" rel="external noopener noreferrer" target="_blank">#66505</a> [Messenger][Scheduler] Add a sign option to transports to sign every message (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65899" class="reference external" rel="external noopener noreferrer" target="_blank">#65899</a> [Messenger] Let a flow carry its context in stamps: propagation, handler arguments and identity (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66512" class="reference external" rel="external noopener noreferrer" target="_blank">#66512</a> [Messenger][Scheduler] Replace RedispatchMessageHandler by a non-sendable RedispatchStamp (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66192" class="reference external" rel="external noopener noreferrer" target="_blank">#66192</a> [Messenger] Allow using a named serializer for messenger.transport.symfony_serializer (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65902" class="reference external" rel="external noopener noreferrer" target="_blank">#65902</a> [Messenger] Add retry and failure transport support to the sync transport (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66002" class="reference external" rel="external noopener noreferrer" target="_blank">#66002</a> [Messenger] Extract the failed-message logic out of the console commands (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65924" class="reference external" rel="external noopener noreferrer" target="_blank">#65924</a> [Messenger][Amqp] Add a prefetch_count option to consume messages instead of fetching them one by one (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65901" class="reference external" rel="external noopener noreferrer" target="_blank">#65901</a> [Messenger] Add an outbox option to transports (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65898" class="reference external" rel="external noopener noreferrer" target="_blank">#65898</a> [Messenger] Add a transport option to #[AsMessageHandler] (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64072" class="reference external" rel="external noopener noreferrer" target="_blank">#64072</a> [Messenger] Add routing information to the <a href="debug:messenger" class="reference internal">debug:messenger</a> command (@ckrack)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65633" class="reference external" rel="external noopener noreferrer" target="_blank">#65633</a> [Messenger] Force quit <a href="messenger:consume" class="reference internal">messenger:consume</a> and <a href="messenger:failed:retry" class="reference internal">messenger:failed:retry</a> on repeated SIGINT (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63517" class="reference external" rel="external noopener noreferrer" target="_blank">#63517</a> [Messenger] Add SQS system attributes of received messages to AmazonSqsReceivedStamp (@maxbaldanza)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64892" class="reference external" rel="external noopener noreferrer" target="_blank">#64892</a> [Messenger] Add AMPHP SQL messenger transport (@fabpot)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65641" class="reference external" rel="external noopener noreferrer" target="_blank">#65641</a> [Messenger] Add claim check support (@Toflar)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65760" class="reference external" rel="external noopener noreferrer" target="_blank">#65760</a> [Messenger] Support raw Redis stream messages (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65605" class="reference external" rel="external noopener noreferrer" target="_blank">#65605</a> [Messenger] Stop deduplicating the messages sent to a FIFO SQS queue on their content by default (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64829" class="reference external" rel="external noopener noreferrer" target="_blank">#64829</a> [Messenger] Add <a href="messenger:show" class="reference internal">messenger:show</a> command to inspect pending messages (@payene)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62128" class="reference external" rel="external noopener noreferrer" target="_blank">#62128</a> [Messenger] Add MongoDB bridge (@Jean85)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/52425" class="reference external" rel="external noopener noreferrer" target="_blank">#52425</a> [Messenger] Dispatch events before &amp; after each handler (@BenMorel)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64621" class="reference external" rel="external noopener noreferrer" target="_blank">#64621</a> [Messenger] Add an optional LoggingMiddleware logging processing time and memory usage (@mariecharles)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/47975" class="reference external" rel="external noopener noreferrer" target="_blank">#47975</a> [Messenger][Amqp] Pass the routing key to the serializer when decoding (@jenkoian)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/57757" class="reference external" rel="external noopener noreferrer" target="_blank">#57757</a> [Messenger] Prioritize receivers via transport configuration (Peter van der Wal)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65343" class="reference external" rel="external noopener noreferrer" target="_blank">#65343</a> [Messenger] Add --redispatch to <a href="messenger:failed:retry" class="reference internal">messenger:failed:retry</a> (@eissasoubhi)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63650" class="reference external" rel="external noopener noreferrer" target="_blank">#63650</a> [Messenger] Add a --concurrency option to the <a href="messenger:consume" class="reference internal">messenger:consume</a> command to process messages in parallel (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62080" class="reference external" rel="external noopener noreferrer" target="_blank">#62080</a> [Messenger][Sqs] Add SQS fair queues support (@Greg0)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64603" class="reference external" rel="external noopener noreferrer" target="_blank">#64603</a> [Messenger][Routing] add RequestContext::runWith() to temporarily generate URLs for another context (@Jean-Beru)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65168" class="reference external" rel="external noopener noreferrer" target="_blank">#65168</a> [Messenger][Amqp] Round delays up to bound the number of delay queues (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/58575" class="reference external" rel="external noopener noreferrer" target="_blank">#58575</a> [Messenger] Allow auto creation of sqs queue (@kevinrudde)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65143" class="reference external" rel="external noopener noreferrer" target="_blank">#65143</a> [Messenger] Use configured senders when RedispatchMessage has no transport name (@lyrixx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65096" class="reference external" rel="external noopener noreferrer" target="_blank">#65096</a> [Messenger] Filter failed messages by class and failure time (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64988" class="reference external" rel="external noopener noreferrer" target="_blank">#64988</a> [Messenger] Add AMQP transport keepalive support (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64952" class="reference external" rel="external noopener noreferrer" target="_blank">#64952</a> [Messenger] Add support for serialized type name aliases in #[AsMessage] attribute (@yceruto)</li>
</ul>
</div>
<div class="section">
<h3 id="mime"><a class="headerlink" href="#mime" title="Permalink to this headline">Mime</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66484" class="reference external" rel="external noopener noreferrer" target="_blank">#66484</a> [Mime] Keep the explicit encoding of parts in FormDataPart (@michaelthieulin)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65381" class="reference external" rel="external noopener noreferrer" target="_blank">#65381</a> [Mime] Add AbstractPart::setContentTypeParameter() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64066" class="reference external" rel="external noopener noreferrer" target="_blank">#64066</a> [Mime] Add support for binary Content-Transfer-Encoding (@ousamabenyounes)</li>
</ul>
</div>
<div class="section">
<h3 id="monologbridge"><a class="headerlink" href="#monologbridge" title="Permalink to this headline">MonologBridge</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66699" class="reference external" rel="external noopener noreferrer" target="_blank">#66699</a> [MonologBridge] Filter the logs written to the console by channel (@HypeMC)</li>
</ul>
</div>
<div class="section">
<h3 id="notifier"><a class="headerlink" href="#notifier" title="Permalink to this headline">Notifier</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66854" class="reference external" rel="external noopener noreferrer" target="_blank">#66854</a> [Notifier] Use the global From header of the mailer as the sender of the email channel (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66752" class="reference external" rel="external noopener noreferrer" target="_blank">#66752</a> [Notifier] Add an autowiring alias for AdminRecipientsProviderInterface (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65990" class="reference external" rel="external noopener noreferrer" target="_blank">#65990</a> [Notifier] Support per-message recipient in the LineBot bridge (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66018" class="reference external" rel="external noopener noreferrer" target="_blank">#66018</a> [Notifier] Deprecate the LineNotify bridge (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65581" class="reference external" rel="external noopener noreferrer" target="_blank">#65581</a> [Notifier] Add AdminRecipientsProviderInterface (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64077" class="reference external" rel="external noopener noreferrer" target="_blank">#64077</a> [Notifier][Novu] Add $context to NovuOptions and deprecate recipient-level overrides (@herman-aka-wouter)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60205" class="reference external" rel="external noopener noreferrer" target="_blank">#60205</a> [Notifier][Firebase] Add Firebase v1 API support (Vojtech Smejkal)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64003" class="reference external" rel="external noopener noreferrer" target="_blank">#64003</a> [Notifier] Add SMS Proxima bridge (@SMS-Proxima)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60310" class="reference external" rel="external noopener noreferrer" target="_blank">#60310</a> [Notifier][Slack] Add SlackPlainTextInputBlock for Slack message (@camilleislasse)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65178" class="reference external" rel="external noopener noreferrer" target="_blank">#65178</a> [Notifier] Add the Threads bridge (@matyo91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65179" class="reference external" rel="external noopener noreferrer" target="_blank">#65179</a> [Notifier] Add the Instagram bridge (@matyo91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65102" class="reference external" rel="external noopener noreferrer" target="_blank">#65102</a> [Notifier] Add the Facebook Page bridge (@matyo91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64998" class="reference external" rel="external noopener noreferrer" target="_blank">#64998</a> [Notifier][LinkedIn] Add organization author support via DSN option (@matyo91)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/59784" class="reference external" rel="external noopener noreferrer" target="_blank">#59784</a> [Notifier][Bluesky] Add support for tag facets (@romainneutron)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64883" class="reference external" rel="external noopener noreferrer" target="_blank">#64883</a> [Notifier] Add the WhatsApp bridge (@recchia)</li>
</ul>
</div>
<div class="section">
<h3 id="objectmapper"><a class="headerlink" href="#objectmapper" title="Permalink to this headline">ObjectMapper</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67578" class="reference external" rel="external noopener noreferrer" target="_blank">#67578</a> [ObjectMapper] Pass the names of the mapped properties to mapping-aware transformers (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67141" class="reference external" rel="external noopener noreferrer" target="_blank">#67141</a> [ObjectMapper] Merge the objects that repeated #[Map] attributes map to the same property (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66154" class="reference external" rel="external noopener noreferrer" target="_blank">#66154</a> [ObjectMapper] Add property metadata factories (@soyuka)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65970" class="reference external" rel="external noopener noreferrer" target="_blank">#65970</a> [ObjectMapper] Infer nested target class from destination property type (@iz-ahmad)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64220" class="reference external" rel="external noopener noreferrer" target="_blank">#64220</a> [ObjectMapper] Add MappingAwareTransformCallableInterface (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62392" class="reference external" rel="external noopener noreferrer" target="_blank">#62392</a> [ObjectMapper] Enable converting backed enums to their scalar values (@Nayte91)</li>
</ul>
</div>
<div class="section">
<h3 id="passwordhasher"><a class="headerlink" href="#passwordhasher" title="Permalink to this headline">PasswordHasher</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67025" class="reference external" rel="external noopener noreferrer" target="_blank">#67025</a> [PasswordHasher] Deprecate built-in legacy hashers as migration targets (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="phpunitbridge"><a class="headerlink" href="#phpunitbridge" title="Permalink to this headline">PhpUnitBridge</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66858" class="reference external" rel="external noopener noreferrer" target="_blank">#66858</a> [PhpUnitBridge] Make ClockMock follow the global MockClock (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66175" class="reference external" rel="external noopener noreferrer" target="_blank">#66175</a> [PhpUnitBridge] Add DebugClassLoader issue trigger resolver (@X-Coder264)</li>
</ul>
</div>
<div class="section">
<h3 id="process"><a class="headerlink" href="#process" title="Permalink to this headline">Process</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66949" class="reference external" rel="external noopener noreferrer" target="_blank">#66949</a> [Process] Add Process::inheritStdio() to run a process with the standard streams of the current process (@lyrixx)</li>
</ul>
</div>
<div class="section">
<h3 id="propertyaccess"><a class="headerlink" href="#propertyaccess" title="Permalink to this headline">PropertyAccess</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65297" class="reference external" rel="external noopener noreferrer" target="_blank">#65297</a> [PropertyAccess] Add wildcard reads (@Boulea7)</li>
</ul>
</div>
<div class="section">
<h3 id="propertyinfo"><a class="headerlink" href="#propertyinfo" title="Permalink to this headline">PropertyInfo</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/63998" class="reference external" rel="external noopener noreferrer" target="_blank">#63998</a> [PropertyInfo][Serializer] Add opt-in default groups (@BastienClement)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/59246" class="reference external" rel="external noopener noreferrer" target="_blank">#59246</a> [PropertyInfo] Gather data from property hooks in ReflectionExtractor (@xavierleune)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63864" class="reference external" rel="external noopener noreferrer" target="_blank">#63864</a> [PropertyInfo][Serializer] Enable using #[WithAccessors] with the serializer (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/59529" class="reference external" rel="external noopener noreferrer" target="_blank">#59529</a> [PropertyInfo] Allow defining accessors and mutators via an attribute (@HypeMC)</li>
</ul>
</div>
<div class="section">
<h3 id="ratelimiter"><a class="headerlink" href="#ratelimiter" title="Permalink to this headline">RateLimiter</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/63389" class="reference external" rel="external noopener noreferrer" target="_blank">#63389</a> [RateLimiter] Allow overriding the key of a compound limiter's sub-limiters (@NicolasJourdan)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60084" class="reference external" rel="external noopener noreferrer" target="_blank">#60084</a> [RateLimiter] Add RateLimiterBuilder (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65161" class="reference external" rel="external noopener noreferrer" target="_blank">#65161</a> [RateLimiter] Dispatch a RateLimitExceededEvent when the #[RateLimit] attribute rejects a request (@mariecharles)</li>
</ul>
</div>
<div class="section">
<h3 id="remoteevent"><a class="headerlink" href="#remoteevent" title="Permalink to this headline">RemoteEvent</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65038" class="reference external" rel="external noopener noreferrer" target="_blank">#65038</a> [RemoteEvent][Notifier] Add SMS engagement events (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63698" class="reference external" rel="external noopener noreferrer" target="_blank">#63698</a> [RemoteEvent] Allow repeating #[AsRemoteEventConsumer] (@ostrolucky)</li>
</ul>
</div>
<div class="section">
<h3 id="routing"><a class="headerlink" href="#routing" title="Permalink to this headline">Routing</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67247" class="reference external" rel="external noopener noreferrer" target="_blank">#67247</a> [Routing][TwigBundle][FrameworkBundle] Add shortcuts for template and redirect routes (@javiereguiluz)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66004" class="reference external" rel="external noopener noreferrer" target="_blank">#66004</a> [Routing] Add addCondition() to combine a condition with the existing ones (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63112" class="reference external" rel="external noopener noreferrer" target="_blank">#63112</a> [Routing][SecurityBundle] Add a firewall option to route definitions (@tilaven)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65073" class="reference external" rel="external noopener noreferrer" target="_blank">#65073</a> [Routing] Allow defining default query parameters (@ousamabenyounes)</li>
</ul>
</div>
<div class="section">
<h3 id="scheduler"><a class="headerlink" href="#scheduler" title="Permalink to this headline">Scheduler</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66797" class="reference external" rel="external noopener noreferrer" target="_blank">#66797</a> [Scheduler] Add ExcludeTimeOfDayTrigger to exclude a daily time window (@KalimeroMK)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66782" class="reference external" rel="external noopener noreferrer" target="_blank">#66782</a> [Scheduler] Add a "stamps" option to #[AsCronTask] and #[AsPeriodicTask] (@KalimeroMK)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66670" class="reference external" rel="external noopener noreferrer" target="_blank">#66670</a> [Scheduler] Add the schedules configuration to make a schedule stateful or locked (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65383" class="reference external" rel="external noopener noreferrer" target="_blank">#65383</a> [Scheduler] Deprecate Schedule::with() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64665" class="reference external" rel="external noopener noreferrer" target="_blank">#64665</a> [Scheduler] Add env option to #[AsCronTask] and #[AsPeriodicTask] (@lacatoire)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64238" class="reference external" rel="external noopener noreferrer" target="_blank">#64238</a> [Scheduler] Show "Next Run In" column in <a href="debug:scheduler" class="reference internal">debug:scheduler</a> command (@janklan)</li>
</ul>
</div>
<div class="section">
<h3 id="security"><a class="headerlink" href="#security" title="Permalink to this headline">Security</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67140" class="reference external" rel="external noopener noreferrer" target="_blank">#67140</a> [Security][SecurityBundle] Add the entry_point_path firewall option (@bigboss86)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/67041" class="reference external" rel="external noopener noreferrer" target="_blank">#67041</a> [Security] Retain the referer after failed authentication (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66999" class="reference external" rel="external noopener noreferrer" target="_blank">#66999</a> [Security] Start a re-authentication for remember-me users when a vote asks for it (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66786" class="reference external" rel="external noopener noreferrer" target="_blank">#66786</a> [Security][TwigBridge] Add logout_button(), impersonation_button() and impersonation_exit_button() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66718" class="reference external" rel="external noopener noreferrer" target="_blank">#66718</a> [Security][SecurityBundle] Order firewall listeners with before/after constraints (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66634" class="reference external" rel="external noopener noreferrer" target="_blank">#66634</a> [Security][SecurityBundle] Allow #[IsGranted] to vote on #[MapRequestPayload] arguments (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65628" class="reference external" rel="external noopener noreferrer" target="_blank">#65628</a> [Security] Dispatch RateLimitExceededEvent from LoginThrottlingListener (@mariecharles)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66618" class="reference external" rel="external noopener noreferrer" target="_blank">#66618</a> [Security] Let an application reach an endpoint of its OIDC provider through the client (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66196" class="reference external" rel="external noopener noreferrer" target="_blank">#66196</a> [Security][SecurityBundle] Back-Channel Logout for oidc_login (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66465" class="reference external" rel="external noopener noreferrer" target="_blank">#66465</a> [Security][SecurityBundle] Accept a DPoP-bound access token only from a request that proves its key (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66239" class="reference external" rel="external noopener noreferrer" target="_blank">#66239</a> [Security][SecurityBundle] Bind what an OIDC provider issues to a key the client holds (DPoP) (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66238" class="reference external" rel="external noopener noreferrer" target="_blank">#66238</a> [Security][SecurityBundle] Authenticate the OIDC client with its TLS certificate, per RFC 8705 (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66234" class="reference external" rel="external noopener noreferrer" target="_blank">#66234</a> [Security] Name the issuer as the audience of an OIDC client assertion (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66495" class="reference external" rel="external noopener noreferrer" target="_blank">#66495</a> [Security] Make FormLoginAuthenticator a re-authentication entry point (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66437" class="reference external" rel="external noopener noreferrer" target="_blank">#66437</a> [Security][SecurityBundle] Let the discovery endpoints of the oidc token handler be pinned to their issuer (@thomas-chauchefoin-tob)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66242" class="reference external" rel="external noopener noreferrer" target="_blank">#66242</a> [Security] Let voters tell which denials a re-authentication can cure (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66195" class="reference external" rel="external noopener noreferrer" target="_blank">#66195</a> [Security] Read an OIDC authorization response the provider posted (form_post) (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66184" class="reference external" rel="external noopener noreferrer" target="_blank">#66184</a> [Security] Record the OIDC acr claim and name the attribute that started a re-authentication (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66136" class="reference external" rel="external noopener noreferrer" target="_blank">#66136</a> [Security] Run a user checker when the user is refreshed from the session (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66069" class="reference external" rel="external noopener noreferrer" target="_blank">#66069</a> [Security] Add AuthenticationMethodBadge, for an authenticator to state which methods it verified (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66066" class="reference external" rel="external noopener noreferrer" target="_blank">#66066</a> [Security] Add IS_AUTHENTICATED_VERY_RECENTLY, decided by the trust resolver (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66065" class="reference external" rel="external noopener noreferrer" target="_blank">#66065</a> [Security] Record which authentication methods were proven, and when (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66117" class="reference external" rel="external noopener noreferrer" target="_blank">#66117</a> [Security] Add CheckRefreshedUserEvent to extend the user-change checks (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66055" class="reference external" rel="external noopener noreferrer" target="_blank">#66055</a> [Security] Let OidcLoginAuthenticator start a re-authentication (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66047" class="reference external" rel="external noopener noreferrer" target="_blank">#66047</a> [Security][SecurityBundle] Allow tailoring the OIDC authorization request per request (@yceruto)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66016" class="reference external" rel="external noopener noreferrer" target="_blank">#66016</a> [Security][SecurityBundle] Add a re-authentication entry point (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66035" class="reference external" rel="external noopener noreferrer" target="_blank">#66035</a> [Security] Decide IS_AUTHENTICATED_RECENTLY through the trust resolver (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66015" class="reference external" rel="external noopener noreferrer" target="_blank">#66015</a> [Security] Stamp auth_time from the OIDC ID token claim (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66014" class="reference external" rel="external noopener noreferrer" target="_blank">#66014</a> [Security][SecurityBundle] Add IS_AUTHENTICATED_RECENTLY to require a fresh authentication (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65916" class="reference external" rel="external noopener noreferrer" target="_blank">#65916</a> [Security][SecurityBundle] Add the private_key_jwt and client_secret_jwt client authentication methods (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65915" class="reference external" rel="external noopener noreferrer" target="_blank">#65915</a> [Security][SecurityBundle] Let the oidc token handler answer for several audiences (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65895" class="reference external" rel="external noopener noreferrer" target="_blank">#65895</a> [Security][SecurityBundle] Inject the OAuth2 client authentication into the OIDC client (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65897" class="reference external" rel="external noopener noreferrer" target="_blank">#65897</a> [Security][SecurityBundle] Read the introspection signature keys from the authorization server metadata (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65866" class="reference external" rel="external noopener noreferrer" target="_blank">#65866</a> [Security][SecurityBundle] Add RFC 9701 signed introspection responses (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65865" class="reference external" rel="external noopener noreferrer" target="_blank">#65865</a> [Security][SecurityBundle] Make the OAuth2 introspection token handler usable (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65874" class="reference external" rel="external noopener noreferrer" target="_blank">#65874</a> [Security][SecurityBundle] Require OAuth2 scopes on resources protected by an access token (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65864" class="reference external" rel="external noopener noreferrer" target="_blank">#65864</a> [Security][SecurityBundle] Serve the RFC 9728 protected resource metadata of an access_token firewall (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65875" class="reference external" rel="external noopener noreferrer" target="_blank">#65875</a> [Security] Renew the OIDC access token with the refresh token grant (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65862" class="reference external" rel="external noopener noreferrer" target="_blank">#65862</a> [Security][SecurityBundle] Check the RFC 9068 "at+jwt" type of OIDC access tokens (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65821" class="reference external" rel="external noopener noreferrer" target="_blank">#65821</a> [Security] Add a current_user() function to the expression language provider (@seb-jean)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65827" class="reference external" rel="external noopener noreferrer" target="_blank">#65827</a> [Security] Deprecate passing more than one attribute to AccessDecisionManager::decide() (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65839" class="reference external" rel="external noopener noreferrer" target="_blank">#65839</a> [Security] Tell why an authenticator did not support the request in the profiler (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/61938" class="reference external" rel="external noopener noreferrer" target="_blank">#61938</a> [Security] Allow AuthorizationChecker::isGrantedForUser to check for guest permissions (@aschempp)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65817" class="reference external" rel="external noopener noreferrer" target="_blank">#65817</a> [Security][SecurityBundle] Add OIDC claims source, user-identifier mapping and RP-Initiated Logout (@welcoMattic)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65814" class="reference external" rel="external noopener noreferrer" target="_blank">#65814</a> [Security][SecurityBundle] Add OIDC PKCE, max_age, authorization-request and start-route options (@welcoMattic)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65798" class="reference external" rel="external noopener noreferrer" target="_blank">#65798</a> [Security] Verify the OIDC ID token signature against the provider JWKS (@welcoMattic)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65799" class="reference external" rel="external noopener noreferrer" target="_blank">#65799</a> [Security] Add OIDC token-endpoint client authentication methods (@welcoMattic)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64954" class="reference external" rel="external noopener noreferrer" target="_blank">#64954</a> [Security] Add an OIDC Authorization Code Flow authenticator (@welcoMattic)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64271" class="reference external" rel="external noopener noreferrer" target="_blank">#64271</a> [Security] Allow passing extra signed parameters in the login link URL (@janklan)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/52099" class="reference external" rel="external noopener noreferrer" target="_blank">#52099</a> [Security] Allow wildcards as placeholders in the role hierarchy (@squrious)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65279" class="reference external" rel="external noopener noreferrer" target="_blank">#65279</a> [Security][SecurityBundle] Support decorating custom authentication result handlers (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64879" class="reference external" rel="external noopener noreferrer" target="_blank">#64879</a> [Security] Add path and CSRF options to switch_user (@kbond)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65137" class="reference external" rel="external noopener noreferrer" target="_blank">#65137</a> [Security] Throw the status-code-specific HttpException for #[IsGranted] (@lazerg)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65129" class="reference external" rel="external noopener noreferrer" target="_blank">#65129</a> [Security] Add a form helper for the logout (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65124" class="reference external" rel="external noopener noreferrer" target="_blank">#65124</a> [Security] Serve the CSRF token id of a firewall through the manager it configures (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63867" class="reference external" rel="external noopener noreferrer" target="_blank">#63867</a> [Security] Improve authentication debugging in the profiler (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/57622" class="reference external" rel="external noopener noreferrer" target="_blank">#57622</a> [Security] Throw a forbidden exception when the IsCsrfTokenValid attribute fails (@eltharin)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/46320" class="reference external" rel="external noopener noreferrer" target="_blank">#46320</a> [Security] Allow disabling redirect on logout (@jvasseur)</li>
</ul>
</div>
<div class="section">
<h3 id="securitybundle"><a class="headerlink" href="#securitybundle" title="Permalink to this headline">SecurityBundle</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67382" class="reference external" rel="external noopener noreferrer" target="_blank">#67382</a> [SecurityBundle] Add the discovery_uri option to the oidc_login authenticator (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66882" class="reference external" rel="external noopener noreferrer" target="_blank">#66882</a> [SecurityBundle][Validator] Lower password hashing costs and disable not_compromised_password when framework.test is enabled (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66881" class="reference external" rel="external noopener noreferrer" target="_blank">#66881</a> [SecurityBundle] Add security.route_loader to load the routes of all firewalls (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66749" class="reference external" rel="external noopener noreferrer" target="_blank">#66749</a> [SecurityBundle] Add the mermaid format to <a href="debug:roles" class="reference internal">debug:roles</a> and deprecate <a href="debug:security:role-hierarchy" class="reference internal">debug:security:role-hierarchy</a> (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66619" class="reference external" rel="external noopener noreferrer" target="_blank">#66619</a> [SecurityBundle] Make the OIDC client of an oidc_login firewall autowirable (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65910" class="reference external" rel="external noopener noreferrer" target="_blank">#65910</a> [SecurityBundle] Add an "http_client" option to the "oidc_login" authenticator (@Spomky)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65345" class="reference external" rel="external noopener noreferrer" target="_blank">#65345</a> [SecurityBundle] Add a <a href="debug:roles" class="reference internal">debug:roles</a> command to inspect the role hierarchy (@squrious)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/61786" class="reference external" rel="external noopener noreferrer" target="_blank">#61786</a> [SecurityBundle] add role hierarchy graph to profiler security panel (@damienfern)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65056" class="reference external" rel="external noopener noreferrer" target="_blank">#65056</a> [SecurityBundle] Deprecate access control rules voting on many attributes (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64875" class="reference external" rel="external noopener noreferrer" target="_blank">#64875</a> [SecurityBundle] Deprecate the unused remember_me authenticator option (@kbond)</li>
</ul>
</div>
<div class="section">
<h3 id="securityhttp"><a class="headerlink" href="#securityhttp" title="Permalink to this headline">SecurityHttp</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/64632" class="reference external" rel="external noopener noreferrer" target="_blank">#64632</a> [SecurityHttp] Make OidcTokenHandler allowedTimeDrift configurable (@jprivet-dev)</li>
</ul>
</div>
<div class="section">
<h3 id="serializer"><a class="headerlink" href="#serializer" title="Permalink to this headline">Serializer</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66254" class="reference external" rel="external noopener noreferrer" target="_blank">#66254</a> [Serializer] Deprecate denormalizing a property using its raw name when a name converter is configured (@mdalikadar)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66005" class="reference external" rel="external noopener noreferrer" target="_blank">#66005</a> [Serializer] Resolve generic template types during denormalization (@yceruto)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65393" class="reference external" rel="external noopener noreferrer" target="_blank">#65393</a> [Serializer] Support extensible discriminator map via child attribute (@mttsch)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/58604" class="reference external" rel="external noopener noreferrer" target="_blank">#58604</a> [Serializer] Add a force_collection option to XmlEncoder (Alexandre Gérault)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/58236" class="reference external" rel="external noopener noreferrer" target="_blank">#58236</a> [Serializer] Support serialized names and paths configuration per group (@daniser)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/57166" class="reference external" rel="external noopener noreferrer" target="_blank">#57166</a> [Serializer] Add AbstractNormalizer::IGNORED_GROUPS to make it possible to ignore groups during serialization (@zim32)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65071" class="reference external" rel="external noopener noreferrer" target="_blank">#65071</a> [Serializer] Add a "skip_invalid_attributes" denormalization option (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63811" class="reference external" rel="external noopener noreferrer" target="_blank">#63811</a> [Serializer] Add support for denormalizing arrays of union types (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63803" class="reference external" rel="external noopener noreferrer" target="_blank">#63803</a> [Serializer] Add XmlEncoder::BOOLEAN_REPR context option (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64089" class="reference external" rel="external noopener noreferrer" target="_blank">#64089</a> [Serializer] Use the discriminator property when several types map to the same class (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64650" class="reference external" rel="external noopener noreferrer" target="_blank">#64650</a> [Serializer] Allow associative csv_headers to map and reorder columns when encoding (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63971" class="reference external" rel="external noopener noreferrer" target="_blank">#63971</a> [Serializer] Deprecate denormalizing non-list arrays into list-typed properties (@Jean-Beru)</li>
</ul>
</div>
<div class="section">
<h3 id="string"><a class="headerlink" href="#string" title="Permalink to this headline">String</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65842" class="reference external" rel="external noopener noreferrer" target="_blank">#65842</a> [String] Add a $regexp argument to the case conversion methods (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="telegramnotifier"><a class="headerlink" href="#telegramnotifier" title="Permalink to this headline">TelegramNotifier</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/64574" class="reference external" rel="external noopener noreferrer" target="_blank">#64574</a> [TelegramNotifier] Add support for editing media messages (@michaelthieulin)</li>
</ul>
</div>
<div class="section">
<h3 id="translation"><a class="headerlink" href="#translation" title="Permalink to this headline">Translation</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66690" class="reference external" rel="external noopener noreferrer" target="_blank">#66690</a> [Translation][TwigBridge][TwigBundle] Add HtmlTranslator and the trans_html filter (@Kocal)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66284" class="reference external" rel="external noopener noreferrer" target="_blank">#66284</a> [Translation] Extract messages from match expressions, interpolated strings, variables and method return values (@guillaume-sainthillier)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66051" class="reference external" rel="external noopener noreferrer" target="_blank">#66051</a> [Translation] extract messages from ternary and null-coalescing expressions (@guillaume-sainthillier)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66028" class="reference external" rel="external noopener noreferrer" target="_blank">#66028</a> [Translation] Make CrowdinProvider::write() add the locales missing from the project (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66007" class="reference external" rel="external noopener noreferrer" target="_blank">#66007</a> [Translation] Make PhraseProvider::read() fetch every domain and locale when passed none (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65802" class="reference external" rel="external noopener noreferrer" target="_blank">#65802</a> [Translation] Add <a href="translation:update-xliff-sources" class="reference internal">translation:update-xliff-sources</a> command (@squrious)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65436" class="reference external" rel="external noopener noreferrer" target="_blank">#65436</a> [Translation] Re-add the POEditor provider bridge (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64977" class="reference external" rel="external noopener noreferrer" target="_blank">#64977</a> [Translation] Fix fuzzy translations and message context in PO files (@javiereguiluz)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65269" class="reference external" rel="external noopener noreferrer" target="_blank">#65269</a> [Translation] Make CrowdinProvider::read() fetch all domains when passed none (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64873" class="reference external" rel="external noopener noreferrer" target="_blank">#64873</a> [Translation] Make CrowdinProvider::read() fetch every locale when passed none (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64379" class="reference external" rel="external noopener noreferrer" target="_blank">#64379</a> [Translation] Allow defining a mapping between a Loco tag filter and a domain (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62023" class="reference external" rel="external noopener noreferrer" target="_blank">#62023</a> [Translation] Keep the XLIFF source element on a load and dump round trip (@mauricedefelicec24)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64660" class="reference external" rel="external noopener noreferrer" target="_blank">#64660</a> [Translation] Update CrowdinProvider HTTP client’s base URI (@MatTheCat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64594" class="reference external" rel="external noopener noreferrer" target="_blank">#64594</a> [Translation] Make LocoProvider::read() fetch every locale when passed none (@MatTheCat)</li>
</ul>
</div>
<div class="section">
<h3 id="tui"><a class="headerlink" href="#tui" title="Permalink to this headline">Tui</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67652" class="reference external" rel="external noopener noreferrer" target="_blank">#67652</a> [Tui] Add support for the Program Status Protocol (OSC 7501) (@fabpot)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66244" class="reference external" rel="external noopener noreferrer" target="_blank">#66244</a> [Tui] Add Tui::getWidgetRect() (@gplanchat)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66550" class="reference external" rel="external noopener noreferrer" target="_blank">#66550</a> [Tui] Reject a key id naming an unknown key when creating Keybindings (@phcorp)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66538" class="reference external" rel="external noopener noreferrer" target="_blank">#66538</a> [Tui] Add the super, hyper and meta modifiers to key ids (@phcorp)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65857" class="reference external" rel="external noopener noreferrer" target="_blank">#65857</a> [Tui] Support bottom and right tab headers (@fabpot)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64132" class="reference external" rel="external noopener noreferrer" target="_blank">#64132</a> [Tui] Add tab widget (@fabpot, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65418" class="reference external" rel="external noopener noreferrer" target="_blank">#65418</a> [Tui] Keep a widget's listeners across detach, and add off() to release them (@sadiqk2, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64270" class="reference external" rel="external noopener noreferrer" target="_blank">#64270</a> [Tui] Add CollapsibleWidget (@sblondeau)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64218" class="reference external" rel="external noopener noreferrer" target="_blank">#64218</a> [Tui] Add KeyBindingWidget (@sblondeau)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65384" class="reference external" rel="external noopener noreferrer" target="_blank">#65384</a> [Tui] Dispatch paste lifecycle events (@fabpot)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65424" class="reference external" rel="external noopener noreferrer" target="_blank">#65424</a> [Tui] Add AnsiUtils::walkCells(), AnsiUtils::sliceToWidth() and AbstractWidget::postRender() (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65283" class="reference external" rel="external noopener noreferrer" target="_blank">#65283</a> [Tui] Reuse unchanged lines across frames (@fabpot, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64881" class="reference external" rel="external noopener noreferrer" target="_blank">#64881</a> [Tui] Add multiselect option to SelectListWidget (@HypeMC)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65175" class="reference external" rel="external noopener noreferrer" target="_blank">#65175</a> [Tui] Add attachChild() and detachChild() to AbstractWidget (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="twigbridge"><a class="headerlink" href="#twigbridge" title="Permalink to this headline">TwigBridge</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66988" class="reference external" rel="external noopener noreferrer" target="_blank">#66988</a> [TwigBridge] Extract the labels and help messages passed to form functions (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66774" class="reference external" rel="external noopener noreferrer" target="_blank">#66774</a> [TwigBridge][TwigBundle] Add a sign_url filter to sign absolute URLs (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63986" class="reference external" rel="external noopener noreferrer" target="_blank">#63986</a> [TwigBridge] Add a "for _self" modifier to the trans_default_domain tag (@mpdude)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65040" class="reference external" rel="external noopener noreferrer" target="_blank">#65040</a> [TwigBridge] Add normalize filter (@ousamabenyounes)</li>
</ul>
</div>
<div class="section">
<h3 id="typeinfo"><a class="headerlink" href="#typeinfo" title="Permalink to this headline">TypeInfo</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66671" class="reference external" rel="external noopener noreferrer" target="_blank">#66671</a> [TypeInfo] Add Type::getMismatches() to tell where and why a value is not accepted (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66361" class="reference external" rel="external noopener noreferrer" target="_blank">#66361</a> [TypeInfo][Serializer][JsonStreamer] Add Type::map() (@mtarld)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64130" class="reference external" rel="external noopener noreferrer" target="_blank">#64130</a> [TypeInfo] Add support for covariant templates (@gsteel)</li>
</ul>
</div>
<div class="section">
<h3 id="uid"><a class="headerlink" href="#uid" title="Permalink to this headline">Uid</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/63941" class="reference external" rel="external noopener noreferrer" target="_blank">#63941</a> [Uid] Add createBoundaries() to Ulid, UuidV6 and UuidV7 (@thePanz)</li>
</ul>
</div>
<div class="section">
<h3 id="validator"><a class="headerlink" href="#validator" title="Permalink to this headline">Validator</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66301" class="reference external" rel="external noopener noreferrer" target="_blank">#66301</a> [Validator] Make Constraint objects invokable (@rela589n)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66134" class="reference external" rel="external noopener noreferrer" target="_blank">#66134</a> [Validator] Allow Valid in Sequentially (@X-Coder264)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66143" class="reference external" rel="external noopener noreferrer" target="_blank">#66143</a> [Validator] Add the Audio constraint for validating audio files (@Valmonzo, @nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66000" class="reference external" rel="external noopener noreferrer" target="_blank">#66000</a> [Validator] Add #[WithHttpStatus(422)] to ValidationFailedException (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65110" class="reference external" rel="external noopener noreferrer" target="_blank">#65110</a> [Validator] Add BcMath\Number support to comparison and Range constraints (@saifulferoz)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63557" class="reference external" rel="external noopener noreferrer" target="_blank">#63557</a> [Validator] Accept the ::class constant of the annotated class in GroupSequence (@naxvog)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/48951" class="reference external" rel="external noopener noreferrer" target="_blank">#48951</a> [Validator] Handle object properties in Unique validator (@plfort)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64779" class="reference external" rel="external noopener noreferrer" target="_blank">#64779</a> [Validator] Add a message option to the Callback constraint (@javiereguiluz)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64641" class="reference external" rel="external noopener noreferrer" target="_blank">#64641</a> [Validator] Allow cascading the current group sequence group to referenced objects (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65104" class="reference external" rel="external noopener noreferrer" target="_blank">#65104</a> [Validator] Let the groups of Valid only trigger the cascade (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64367" class="reference external" rel="external noopener noreferrer" target="_blank">#64367</a> [Validator] Allow non-string values in ConstraintViolationBuilderInterface::setParameter() (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64538" class="reference external" rel="external noopener noreferrer" target="_blank">#64538</a> [Validator] Add Cron constraint to validate cron expressions (@ErfanMomeniii)</li>
</ul>
</div>
<div class="section">
<h3 id="vardumper"><a class="headerlink" href="#vardumper" title="Permalink to this headline">VarDumper</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/64947" class="reference external" rel="external noopener noreferrer" target="_blank">#64947</a> [VarDumper] Make dump toggles keyboard accessible (@Nitram1123)</li>
</ul>
</div>
<div class="section">
<h3 id="webhook"><a class="headerlink" href="#webhook" title="Permalink to this headline">Webhook</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66753" class="reference external" rel="external noopener noreferrer" target="_blank">#66753</a> [Webhook] Make webhook.routing.*.service default to webhook.request_parser (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/62958" class="reference external" rel="external noopener noreferrer" target="_blank">#62958</a> [Webhook] Add timestamp header and Standard Webhooks signature support (@nicolas-grekas)</li>
</ul>
</div>
<div class="section">
<h3 id="webprofilerbundle"><a class="headerlink" href="#webprofilerbundle" title="Permalink to this headline">WebProfilerBundle</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/67042" class="reference external" rel="external noopener noreferrer" target="_blank">#67042</a> [WebProfilerBundle] Capture AJAX requests started before toolbar initialization (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64853" class="reference external" rel="external noopener noreferrer" target="_blank">#64853</a> [WebProfilerBundle] Make the profiler panels keyboard and screen reader accessible (@Nitram1123)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60505" class="reference external" rel="external noopener noreferrer" target="_blank">#60505</a> [WebProfilerBundle] display profiler url in logs (@jeremyFreeAgent)</li>
</ul>
</div>
<div class="section">
<h3 id="workflow"><a class="headerlink" href="#workflow" title="Permalink to this headline">Workflow</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/61935" class="reference external" rel="external noopener noreferrer" target="_blank">#61935</a> [Workflow] Allow to define workflow with PHP attributes (@lyrixx)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64221" class="reference external" rel="external noopener noreferrer" target="_blank">#64221</a> [Workflow] Add $disabledEvents to permanently silence events at the workflow level (@ousamabenyounes)</li>
</ul>
</div>
<div class="section">
<h3 id="yaml"><a class="headerlink" href="#yaml" title="Permalink to this headline">Yaml</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/66341" class="reference external" rel="external noopener noreferrer" target="_blank">#66341</a> [Yaml] Handle tags on block scalars as on other values (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/66328" class="reference external" rel="external noopener noreferrer" target="_blank">#66328</a> [Yaml] Add support for parsing a block scalar as the root node (@SulimanAbdulrazzaq)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65394" class="reference external" rel="external noopener noreferrer" target="_blank">#65394</a> [Yaml][FrameworkBundle] Add JSON Schema validation to the <a href="lint:yaml" class="reference internal">lint:yaml</a> command (@GromNaN)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/65243" class="reference external" rel="external noopener noreferrer" target="_blank">#65243</a> [Yaml] Add support for int, null, bool yaml tags including quotes (@dmitryuk)</li>
</ul>
</div>
<div class="section">
<h3 id="other"><a class="headerlink" href="#other" title="Permalink to this headline">Other</a></h3>
<ul>
    <li>feature <a href="https://github.com/symfony/symfony/pull/65386" class="reference external" rel="external noopener noreferrer" target="_blank">#65386</a>  Let source value resolvers stage a value for the resolvers that follow them (@nicolas-grekas)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64400" class="reference external" rel="external noopener noreferrer" target="_blank">#64400</a>  allow set region SweegoOptions (@qdequippe)</li>
</ul>
</div>
</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-8-2-0-beta1-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 13:41:20 +0100</pubDate>
            <comments>https://symfony.com/blog/symfony-8-2-0-beta1-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>GHSA-5mx8-mwrp-5693: Generated URLs Can Point to a Host Chosen by the Client</title>
            <link>https://symfony.com/blog/ghsa-5mx8-mwrp-5693-generated-urls-can-point-to-a-host-chosen-by-the-client?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
Affected versions
Symfony HTTP Foundation versions &amp;lt;5.4.56, &amp;gt;=6, &amp;lt;6.4.50, &amp;gt;=7, &amp;lt;7.4.23, &amp;gt;=8, &amp;lt;8.1.11 are affected by this security issue.
The issue has been fixed in Symfony HTTP Foundation 5.4.56, 6.4.50, 7.4.23, 8.1.11.


Description…</description>
            <content:encoded><![CDATA[
                                <div class="section">
<h2 id="affected-versions"><a class="headerlink" href="#affected-versions" title="Permalink to this headline">Affected versions</a></h2>
<p>Symfony HTTP Foundation versions &lt;5.4.56, &gt;=6, &lt;6.4.50, &gt;=7, &lt;7.4.23, &gt;=8, &lt;8.1.11 are affected by this security issue.</p>
<p>The issue has been fixed in Symfony HTTP Foundation 5.4.56, 6.4.50, 7.4.23, 8.1.11.</p>
</div>
<div class="section">
<h2 id="description"><a class="headerlink" href="#description" title="Permalink to this headline">Description</a></h2>
<p>When <code translate="no" class="notranslate">Request::getBaseUrl()</code> does not find the script name at the start of the request URI, it looks for it further into the path. This supports web servers that rewrite every URL to a front controller in a subdirectory. The base URL then kept everything before the script name, and the client chooses that part. A request URI starting with <code translate="no" class="notranslate">//</code> or <code translate="no" class="notranslate">/\</code> made the base URL start with a host.</p>
<p>With <code translate="no" class="notranslate">SCRIPT_NAME=/public/index.php</code>, a request for <code translate="no" class="notranslate">//evil.example/public/index.php/login</code> is routed to <code translate="no" class="notranslate">/login</code>, with the base URL <code translate="no" class="notranslate">//evil.example/public/index.php</code> and the base path <code translate="no" class="notranslate">//evil.example/public</code>. The URLs generated for that page then point to evil.example:</p>
<ul>
    <li>links built with <code translate="no" class="notranslate">path()</code> and the actions of forms, so a login form sends the credentials of the user to evil.example;</li>
<li>redirects to generated URLs, such as the ones of <code translate="no" class="notranslate">redirectToRoute()</code>;</li>
<li>assets referenced with a relative path through <code translate="no" class="notranslate">asset()</code>, so the page can load scripts from evil.example.</li>
</ul>
<p>The attacker has to make a user follow a crafted link, such as <code translate="no" class="notranslate">https://app.example//evil.example/public/index.php/login</code>. <code translate="no" class="notranslate">framework.trusted_hosts</code> does not help, since the host of the request is the real one.</p>
<p>Applications are affected when their front controller is in a subdirectory and the web server sends it URIs that do not start with that directory. A <code translate="no" class="notranslate">.htaccess</code> file at the root of the project that rewrites every URL to <code translate="no" class="notranslate">public/</code> does that, for instance.</p>
<p>Applications are also affected when the web server sets <code translate="no" class="notranslate">SCRIPT_NAME</code> to the path of the request. Some nginx configurations do that when they send every request to the front controller without <code translate="no" class="notranslate">fastcgi_split_path_info</code>. <code translate="no" class="notranslate">php -S</code> does it too, with a router script outside the document root. A request for <code translate="no" class="notranslate">/\evil.example/index.php</code> then gets the base URL <code translate="no" class="notranslate">/\evil.example/index.php</code>, which browsers read as a link to evil.example.</p>
<p>The configurations recommended in the Symfony documentation are not affected.</p>
</div>
<div class="section">
<h2 id="resolution"><a class="headerlink" href="#resolution" title="Permalink to this headline">Resolution</a></h2>
<p><code translate="no" class="notranslate">Request::getBaseUrl()</code> now returns an empty base URL when the request URI starts with <code translate="no" class="notranslate">//</code> or <code translate="no" class="notranslate">/\</code>.</p>
<p>The patches for this issue are available <a href="https://github.com/symfony/symfony/commit/7f1e183847530b7bc1bfbdae63e3f0e20051594b" class="reference external" rel="external noopener noreferrer" target="_blank">here</a> for branch 5.4 (and forward-ported to 6.4, 7.4, 8.1 and 8.2).</p>
</div>
<div class="section">
<h2 id="credits"><a class="headerlink" href="#credits" title="Permalink to this headline">Credits</a></h2>
<p>We would like to thank Nicolas Grekas for reporting the issue and providing the fix.</p>
</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/ghsa-5mx8-mwrp-5693-generated-urls-can-point-to-a-host-chosen-by-the-client?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 12:54:00 +0100</pubDate>
            <comments>https://symfony.com/blog/ghsa-5mx8-mwrp-5693-generated-urls-can-point-to-a-host-chosen-by-the-client?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title>GHSA-3h27-hjv7-fqjx: Path Rules Enforced in Front of PHP Can Be Bypassed by Appending the Path to the Script Name</title>
            <link>https://symfony.com/blog/ghsa-3h27-hjv7-fqjx-path-rules-enforced-in-front-of-php-can-be-bypassed-by-appending-the-path-to-the-script-name?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
Affected versions
Symfony HTTP Foundation versions &amp;gt;=5.4.50, &amp;lt;5.4.56, &amp;gt;=6.4.29, &amp;lt;6.4.50, &amp;gt;=7.3.7, &amp;lt;7.4.23, &amp;gt;=8, &amp;lt;8.1.11 are affected by this security issue.
The issue has been fixed in Symfony HTTP Foundation 5.4.56, 6.4.50, 7.4.23,…</description>
            <content:encoded><![CDATA[
                                <div class="section">
<h2 id="affected-versions"><a class="headerlink" href="#affected-versions" title="Permalink to this headline">Affected versions</a></h2>
<p>Symfony HTTP Foundation versions &gt;=5.4.50, &lt;5.4.56, &gt;=6.4.29, &lt;6.4.50, &gt;=7.3.7, &lt;7.4.23, &gt;=8, &lt;8.1.11 are affected by this security issue.</p>
<p>The issue has been fixed in Symfony HTTP Foundation 5.4.56, 6.4.50, 7.4.23, 8.1.11.</p>
</div>
<div class="section">
<h2 id="description"><a class="headerlink" href="#description" title="Permalink to this headline">Description</a></h2>
<p>Since the fix for CVE-2025-64500, <code translate="no" class="notranslate">Request::getPathInfo()</code> strips the script name from the start of the URL. It does so even when the script name is only the start of a longer path segment. With <code translate="no" class="notranslate">SCRIPT_NAME</code> set to <code translate="no" class="notranslate">/index.php</code>, a request to <code translate="no" class="notranslate">/index.phpadmin</code> gets the path info <code translate="no" class="notranslate">/admin</code> and is routed like <code translate="no" class="notranslate">/admin</code>. Encoded spellings such as <code translate="no" class="notranslate">/index%2Ephpadmin</code> or <code translate="no" class="notranslate">/%69ndex.phpadmin</code> work too. Before that fix, the path info was <code translate="no" class="notranslate">admin</code>, which no route matched.</p>
<p>Rules enforced by Symfony are not affected: <code translate="no" class="notranslate">access_control</code> and firewalls read the same path info as the router. Rules enforced in front of PHP are. The nginx configuration of the Symfony documentation and the <code translate="no" class="notranslate">.htaccess</code> file of <code translate="no" class="notranslate">symfony/apache-pack</code> make <code translate="no" class="notranslate">/index.php/admin</code> unreachable, but they pass <code translate="no" class="notranslate">/index.phpadmin</code> to the front controller. So a <code translate="no" class="notranslate">location /admin</code> block in nginx, a <code translate="no" class="notranslate">&lt;Location /admin&gt;</code> section in Apache, or a CDN or WAF rule on <code translate="no" class="notranslate">/admin</code> can be bypassed.</p>
</div>
<div class="section">
<h2 id="resolution"><a class="headerlink" href="#resolution" title="Permalink to this headline">Resolution</a></h2>
<p>The script name is now stripped only when it is followed by <code translate="no" class="notranslate">/</code>, <code translate="no" class="notranslate">?</code> or the end of the URL. A request to <code translate="no" class="notranslate">/index.phpadmin</code> gets the path info <code translate="no" class="notranslate">/index.phpadmin</code>.</p>
<p>The patch for this issue is available <a href="https://github.com/symfony/symfony/commit/e256536ee7b57a45d69177743c86367e51551122" class="reference external" rel="external noopener noreferrer" target="_blank">here</a> for branch 5.4 (and forward-ported to 6.4, 7.4, 8.1 and 8.2).</p>
</div>
<div class="section">
<h2 id="credits"><a class="headerlink" href="#credits" title="Permalink to this headline">Credits</a></h2>
<p>We would like to thank Nicolas Grekas for reporting the issue and Jack Worman for providing the fix.</p>
</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/ghsa-3h27-hjv7-fqjx-path-rules-enforced-in-front-of-php-can-be-bypassed-by-appending-the-path-to-the-script-name?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 12:54:00 +0100</pubDate>
            <comments>https://symfony.com/blog/ghsa-3h27-hjv7-fqjx-path-rules-enforced-in-front-of-php-can-be-bypassed-by-appending-the-path-to-the-script-name?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
            </channel>
</rss>
