<?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>Mon, 07 Sep 2026 01:53:08 +0200</pubDate>
        <lastBuildDate>Sun, 06 Sep 2026 09:46:00 +0200</lastBuildDate>
        <language>en</language>
                        <item>
            <title><![CDATA[A Week of Symfony #1027 (August 31 – September 6, 2026)]]></title>
            <link>https://symfony.com/blog/a-week-of-symfony-1027-august-31-september-6-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>This week, Symfony 6.4.45, 7.4.18, and 8.1.6 were released with numerous bug fixes and hardening improvements. Meanwhile, we introduced symfony lsp:check, a new command that brings Symfony-aware diagnostics to your CI pipeline, catching unknown routes, missing…</description>
            <content:encoded><![CDATA[
                                <p>This week, Symfony <a href="https://symfony.com/blog/symfony-6-4-45-released">6.4.45</a>, <a href="https://symfony.com/blog/symfony-7-4-18-released">7.4.18</a>, and <a href="https://symfony.com/blog/symfony-8-1-6-released">8.1.6</a> were released with numerous bug fixes and hardening improvements. Meanwhile, we introduced <a href="https://symfony.com/blog/introducing-symfony-lsp-check-symfony-aware-diagnostics-in-your-ci">symfony lsp:check</a>, a new command that brings Symfony-aware diagnostics to your CI pipeline, catching unknown routes, missing templates, and configuration errors. Finally, we announced that you'll be able to meet the <a href="https://symfony.com/blog/meet-the-symfony-core-team-at-the-api-platform-conference-2026">Symfony Core Team at the API Platform Conference 2026</a> in Lille on September 17–18.</p>

<h2>Symfony development highlights</h2>

<p>This week, 191 pull requests were merged (158 in code and 33 in docs) and 44 issues were closed (25 in code and 19 in docs). Excluding merges, 58 authors made additions and deletions. See details for <a href="https://github.com/symfony/symfony/pulse">code</a> and <a href="https://github.com/symfony/symfony-docs/pulse">docs</a>.</p>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/d8f8099b4e651ba6f1796e81bedc5879f0817d41">d8f8099</a>: &#91;Form&#93; stop capturing Options in the upload_max_size_message closure</li>
<li><a href="https://github.com/symfony/symfony/commit/892055e5d9cba5ccc460356544acb8969ff1d292">892055e</a>: &#91;FrameworkBundle&#93; describe the webhook routing secret in the config reference</li>
<li><a href="https://github.com/symfony/symfony/commit/4309470d3d4d3d85f9620ad9d421baed64cb3d28">4309470</a>: &#91;Mailer&#93; mark the Sendgrid webhook secret as sensitive</li>
<li><a href="https://github.com/symfony/symfony/commit/075471fd76c1c65599dfad1e3860092277c999d9">075471f</a>: &#91;Notifier&#93; reject an empty secret in the Twilio webhook parser</li>
<li><a href="https://github.com/symfony/symfony/commit/5c090b929db63a1f95b638109c591a8320adb257">5c090b9</a>: &#91;Webhook&#93; reject a malformed request body with a 406 instead of a 500</li>
<li><a href="https://github.com/symfony/symfony/commit/9f411739ae19fd9bc514c8eb3c4fa1779944aa9e">9f41173</a>: &#91;Mime&#93; do not treat an "@" inside the domain as the addr-spec separator</li>
<li><a href="https://github.com/symfony/symfony/commit/7420a8d080fed192e07a4fc1a4bdf54338477f25">7420a8d</a>: &#91;Mailer, Sendgrid&#93; verify the webhook signature before parsing the payload</li>
<li><a href="https://github.com/symfony/symfony/commit/7a5183ef75ae7ad6060cc62b329069b4ed67f112">7a5183e</a>: &#91;HttpFoundation&#93; match paths with the DOTALL modifier</li>
<li><a href="https://github.com/symfony/symfony/commit/cb3064829369fa2c2cb758aad94f11aa84f39bbd">cb30648</a>: &#91;Notifier, Vonage&#93; verify the payload_hash claim of signed webhooks</li>
<li><a href="https://github.com/symfony/symfony/commit/26456f2782e1c16bf79ac45f16a2f7b5cb41a520">26456f2</a>: &#91;Mime&#93; never emit a raw control character in a header</li>
<li><a href="https://github.com/symfony/symfony/commit/3e261610b9b43aaba7dbb1e28c1ce41f7aa41dd1">3e26161</a>: &#91;Messenger&#93; fix a crash when a Redis stream entry is not a JSON object</li>
<li><a href="https://github.com/symfony/symfony/commit/5230b7482fedd6b57de2aaddb07c1cfa6a5fcee6">5230b74</a>: &#91;Console&#93; test the shell completion scripts and fix the escaping</li>
<li><a href="https://github.com/symfony/symfony/commit/543938113491d8dc7b14c481506e6aff152c7e05">5439381</a>: &#91;Process&#93; use an absolute path for the cmd.exe fallback on Windows</li>
<li><a href="https://github.com/symfony/symfony/commit/d5eef83f3e1e657b6fa820a66146c9af9405d8c2">d5eef83</a>: &#91;Form&#93; accept UTC-equivalent timezones for date and time model data</li>
<li><a href="https://github.com/symfony/symfony/commit/8d7540c79670ebf89d5ca6ee97ee2ddcc0380828">8d7540c</a>: &#91;Finder&#93; fix prune filters not applied to nested directories and with path excludes</li>
<li><a href="https://github.com/symfony/symfony/commit/f94fd8f643e96d0e481dc464ccfa7921205ce34f">f94fd8f</a>: &#91;Console&#93; fix the bash completion on macOS and cover more option modes</li>
<li><a href="https://github.com/symfony/symfony/commit/283abf94fe12558f2b49d633a80e510da074d4bb">283abf9</a>: &#91;Console&#93; fix the bash completion of "--option=value" and of an aliased command</li>
<li><a href="https://github.com/symfony/symfony/commit/ce4f4400b42d77c69ed295cd972eea5e1242ee17">ce4f440</a>: &#91;Console&#93; do not evaluate the command line in the zsh completion</li>
<li><a href="https://github.com/symfony/symfony/commit/4fd61ee5e03300b06276ce35b1b0d3134f345be5">4fd61ee</a>: &#91;WebProfilerBundle&#93; fix a TypeError when the ajax toolbar panel is missing from the page</li>
<li><a href="https://github.com/symfony/symfony/commit/788ace93e85f8cca48bee7606bbd5667f8943e98">788ace9</a>: &#91;String&#93; fix singularization of words ending in -ives</li>
<li><a href="https://github.com/symfony/symfony/commit/4c18bb541337b2c749dacece9bd4ca43f9152c71">4c18bb5</a>: &#91;HttpFoundation&#93; fix hitting the PCRE size limit with many trusted host patterns</li>
<li><a href="https://github.com/symfony/symfony/commit/cb0d4023548fe90bcbe5f8e0737c9ca815ce6826">cb0d402</a>: &#91;PropertyInfo&#93; do not prefer a method returning the declaring class as the property accessor</li>
<li><a href="https://github.com/symfony/symfony/commit/7ae77cadba438f0f700dc1a2d2c53efa93abe2e4">7ae77ca</a>: &#91;Mime&#93; reject header names containing non-printable or non-ASCII characters</li>
<li><a href="https://github.com/symfony/symfony/commit/701c938d0b38859418b986f1166e08c97155334e">701c938</a>: &#91;HtmlSanitizer&#93; drop relative URLs whose first path segment contains a colon instead of throwing</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/6285a433d2ade2c41e980c0fb0b7713ecf486ebd">6285a43</a>: &#91;Mailer, Notifier&#93; mark webhook secrets as sensitive</li>
<li><a href="https://github.com/symfony/symfony/commit/8c84e00a5a505d53b6833511e3576acb23234cb4">8c84e00</a>: &#91;Mailer, Notifier&#93; reject an empty secret in the AhaSend, Mailchimp and Sweego webhook parsers</li>
<li><a href="https://github.com/symfony/symfony/commit/e0f5a76e51041afad99fd13fca9b76ae07040532">e0f5a76</a>: &#91;Mailer&#93; reject an empty secret in the Mailtrap, MailerSend and Sweego webhook parsers</li>
<li><a href="https://github.com/symfony/symfony/commit/379180156a8c0ee8c081857d5dbdc73d5ef977d7">3791801</a>: &#91;Mailer, Notifier&#93; verify webhook signatures before parsing the payload</li>
<li><a href="https://github.com/symfony/symfony/commit/21241f106e647435eab51dd7730ea5ebdab7f4b8">21241f1</a>: &#91;JsonStreamer&#93; fix generator stream exhaustion on chunked file reading</li>
<li><a href="https://github.com/symfony/symfony/commit/1ebccec299a0a0dfecea0b8e35492b94d78c4371">1ebccec</a>: &#91;Notifier&#93; fix typo in Bluesky transport exception message</li>
<li><a href="https://github.com/symfony/symfony/commit/7a7cb115db9c8f3ee291b51130f33663f4ac03df">7a7cb11</a>: &#91;String&#93; fix localeTitle() titlecasing only the first word when the locale has no transliterator</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/177a6c75771cb26df6c86d37c8275fb6dcb64134">177a6c7</a>: &#91;VarDumper&#93; fix dumping class names to the dump server</li>
<li><a href="https://github.com/symfony/symfony/commit/75ee90662d0a0feb952ad63be43c15512e810fb2">75ee906</a>: &#91;Scheduler&#93; fix duplicated schedule message when multiple methods in a class use #[AsCronTask]</li>
<li><a href="https://github.com/symfony/symfony/commit/00d15052a33fe38a774b81dc28e68aa131908a6c">00d1505</a>: &#91;Console&#93; fix signal handling of invokable commands registered through the container</li>
<li><a href="https://github.com/symfony/symfony/commit/7c52a22c6dd8934ce5c4ffdfeb05d8d6e1766c37">7c52a22</a>: &#91;Console&#93; make method-level #[AsCommand] names relative to the class-level one</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/4393cdb510cd84b8ffbaedbf15fca9c8cd480f96">4393cdb</a>: &#91;Mailer&#93; reject an empty secret in the Azure webhook parser</li>
<li><a href="https://github.com/symfony/symfony/commit/647af27c727b3cf3b236943bf2cc52fa6a389376">647af27</a>: &#91;Mailer, Mime&#93; update the RFC references and document what Address validates</li>
<li><a href="https://github.com/symfony/symfony/commit/4ebe3e5333536ea23629776551978efb3c387076">4ebe3e5</a>: &#91;FrameworkBundle&#93; add "framework.webhook.no_private_network" and "framework.webhook.http_client" options</li>
<li><a href="https://github.com/symfony/symfony/commit/50b0d814101429b2d7694572bd58767a67f9a5f9">50b0d81</a>: &#91;Messenger&#93; support raw Redis stream messages</li>
<li><a href="https://github.com/symfony/symfony/commit/5605faf6997cbb60bb73da6d710d4ad90f2a2501">5605faf</a>: &#91;Mailer, Notifier&#93; deprecate reading a non-boolean value with Dsn::getBooleanOption()</li>
<li><a href="https://github.com/symfony/symfony/commit/bce08b3b6561264a2e1347dea823c97d55a08800">bce08b3</a>: &#91;Mailer&#93; support tags in the MailerSend transports</li>
<li><a href="https://github.com/symfony/symfony/commit/07709d2862ccf7960c76ea7d9651d63a8cea0d1f">07709d2</a>: &#91;Lock, Messenger, Notifier&#93; add the "ssl" DSN option to select the HTTP scheme</li>
<li><a href="https://github.com/symfony/symfony/commit/d09510b61d662f10fefe773d60338e31c83dd677">d09510b</a>: &#91;Form&#93; add the "form.post_validate" event</li>
<li><a href="https://github.com/symfony/symfony/commit/81fb59ecb10c6d2db0cc58db78906820d9be20b3">81fb59e</a>: &#91;Tui&#93; add KeyBindingWidget</li>
<li><a href="https://github.com/symfony/symfony/commit/99f824ce4e2e28e8a9d6c43288ea36680ab56898">99f824c</a>: &#91;Tui&#93; add CollapsibleWidget</li>
<li><a href="https://github.com/symfony/symfony/commit/e2fda34cd5a45776b1f1c346ae9d5fd8652ef977">e2fda34</a>: &#91;Tui&#93; keep a widget's listeners across detach, and add off() to release them</li>
<li><a href="https://github.com/symfony/symfony/commit/262451ab68c37aced5905057855d7878f0bbcad3">262451a</a>: &#91;Security&#93; add an OIDC Authorization Code Flow authenticator</li>
<li><a href="https://github.com/symfony/symfony/commit/8144a9f63c0de1140ea77b2922a522bb91919052">8144a9f</a>: &#91;Tui&#93; add tab widget</li>
<li><a href="https://github.com/symfony/symfony/commit/340586bea2522cf64d19f74c27e6bfff3f508023">340586b</a>: &#91;Serializer&#93; support extensible discriminator map via child attribute</li>
<li><a href="https://github.com/symfony/symfony/commit/57d450bcafed6f97c6b01697b5640474640ec2ad">57d450b</a>: &#91;Form&#93; use the POST_VALIDATE event in PasswordHasherExtension</li>
<li><a href="https://github.com/symfony/symfony/commit/6d46a243da07e761163b0d24008d50ac9638c69b">6d46a24</a>: &#91;Mailer, Mime&#93; add RFC 6854 group support to mailbox list headers</li>
<li><a href="https://github.com/symfony/symfony/commit/5617fa0ef9bf67658e8f1534a8c680ea7f2e453b">5617fa0</a>: &#91;Messenger&#93; add claim check support</li>
<li><a href="https://github.com/symfony/symfony/commit/0449d5ca08a0b6871ff5878c8ad53eda80c9e4d3">0449d5c</a>: &#91;Yaml, FrameworkBundle&#93; add JSON Schema validation to the lint:yaml command</li>
<li><a href="https://github.com/symfony/symfony/commit/f3c0b6a36fb15eb0b1a9022ee1a9409c0c3ecb2a">f3c0b6a</a>: &#91;HttpKernel, RateLimiter&#93; add option to expose X-RateLimit-* headers for the #[RateLimit] attribute</li>
<li><a href="https://github.com/symfony/symfony/commit/fd64a4618ae54c1cbbbf87bc8bc1359b084611e1">fd64a46</a>: &#91;Messenger&#93; add AMPHP SQL messenger transport</li>
<li><a href="https://github.com/symfony/symfony/commit/9fb98ad38bb5942b68c3233a8817b2990053eca6">9fb98ad</a>: &#91;Messenger&#93; add SQS system attributes of received messages to AmazonSqsReceivedStamp</li>
<li><a href="https://github.com/symfony/symfony/commit/4612d33d382afee84d5ce13908cacbf60f626235">4612d33</a>: &#91;Finder&#93; add root-relative directory excludes via / prefix in exclude()</li>
<li><a href="https://github.com/symfony/symfony/commit/d2be782460e0574781ead6a2bfbce2c3704b31af">d2be782</a>: &#91;FrameworkBundle&#93; remove dev requirement on symfony/amp-sql-messenger</li>
<li><a href="https://github.com/symfony/symfony/commit/a6d9bac6559739c815f2e891021c70c97048baba">a6d9bac</a>: &#91;Config, FrameworkBundle, Yaml&#93; fix schema violation lines and the list form of keyed maps</li>
<li><a href="https://github.com/symfony/symfony/commit/03097eaa517771984275b82eb52fda702d22a658">03097ea</a>: &#91;Console&#93; declare docblock types for parameters of addArgument() and addOption()</li>
<li><a href="https://github.com/symfony/symfony/commit/0f33c88384b3b6fb07a0d841438bb17eee6eff05">0f33c88</a>: &#91;Security&#93; add OIDC token-endpoint client authentication methods</li>
<li><a href="https://github.com/symfony/symfony/commit/f80cfe393c41fd0989bc8d006e21437a6238763b">f80cfe3</a>: &#91;SecurityBundle&#93; always register the OIDC login callback route loader</li>
<li><a href="https://github.com/symfony/symfony/commit/0ae9a49b58d2a997c9a06e45fa18f89cd84aa0c3">0ae9a49</a>: &#91;Yaml&#93; walk the document to resolve schema violation lines</li>
<li><a href="https://github.com/symfony/symfony/commit/7b082272faff008b454d494a136e09dbccf713a8">7b08227</a>: &#91;Translation&#93; add translation:update-xliff-sources command</li>
<li><a href="https://github.com/symfony/symfony/commit/3798b586c8ead36281569b0d188d323b89e4172c">3798b58</a>: &#91;Form&#93; add #[AsFormType] and #[FormField] attributes to define form types on data classes</li>
<li><a href="https://github.com/symfony/symfony/commit/eae2b16da32b45203781cdadf4a272f2ed125805">eae2b16</a>: &#91;Security&#93; verify the OIDC ID token signature against the provider JWKS</li>
<li><a href="https://github.com/symfony/symfony/commit/a7e7eb881382cf6faa6e2c65e9c56d870c9ebe41">a7e7eb8</a>: &#91;SecurityBundle&#93; require the OIDC ID token signature verification for public clients</li>
<li><a href="https://github.com/symfony/symfony/commit/f3509f037a6e68d9829dd8946ca79433e6c3dc96">f3509f0</a>: &#91;Security, SecurityBundle&#93; add OIDC PKCE, max_age, authorization-request and start-route options</li>
<li><a href="https://github.com/symfony/symfony/commit/3f964558364b209a01241cf33d9a16f2a266363a">3f96455</a>: &#91;Security, SecurityBundle&#93; add OIDC claims source, user-identifier mapping and RP-Initiated Logout</li>
<li><a href="https://github.com/symfony/symfony/commit/cdc6c0be09d63cbdcd637d51f468fba28474d500">cdc6c0b</a>: &#91;Messenger&#93; force quit messenger:consume and messenger:failed:retry on repeated SIGINT</li>
<li><a href="https://github.com/symfony/symfony/commit/d991fc9895fe4a52ed9f69fad6e24b11b6c0cbab">d991fc9</a>: &#91;Security&#93; allow AuthorizationChecker::isGrantedForUser to check for guest permissions</li>
<li><a href="https://github.com/symfony/symfony/commit/718e28121e5b3451a109543bfbc3efb2df2db9fc">718e281</a>: &#91;Mailer&#93; add RemoteTemplateEmail to send emails rendered from provider-hosted templates</li>
<li><a href="https://github.com/symfony/symfony/commit/7ab6d431f762c21bbd3f841ed6aa5b709d872c66">7ab6d43</a>: &#91;Mailer&#93; add RemoteTemplateEmail support to the remaining bridges with provider-hosted templates</li>
<li><a href="https://github.com/symfony/symfony/commit/3370aa2f5d23d4cddeb842cf6f3b3fa8f5d766c8">3370aa2</a>: &#91;Form&#93; add an allow_array_submission option to let PRE_SUBMIT listeners transform submitted arrays</li>
<li><a href="https://github.com/symfony/symfony/commit/68f2352bc989d673535c2a0aec06c16fbe48d9a1">68f2352</a>: &#91;Filesystem&#93; deprecate passing an empty string as the base path to Path::isBasePath()</li>
<li><a href="https://github.com/symfony/symfony/commit/c820a90678107a9f300c838341a643a979f4e666">c820a90</a>: &#91;Cache&#93; add MongoDB cache adapters</li>
<li><a href="https://github.com/symfony/symfony/commit/2f261707fc191ece40303acb82a3a674440b8eb6">2f26170</a>: &#91;Security&#93; tell why an authenticator did not support the request in the profiler</li>
<li><a href="https://github.com/symfony/symfony/commit/9f992bb022413be1feb4ec33d1db21853fff215a">9f992bb</a>: &#91;Cache, Lock, Messenger&#93; track the Symfony component in the MongoDB driver handshake</li>
<li><a href="https://github.com/symfony/symfony/commit/77eda6f94d9493d59676fa13cd8657424249bf0d">77eda6f</a>: &#91;RateLimiter&#93; stop consuming from the remaining limiters once one rejects the hit</li>
<li><a href="https://github.com/symfony/symfony/commit/4520f5e0b16ef0ef11ee6f92207a53e89f5ca135">4520f5e</a>: &#91;RateLimiter&#93; allow overriding the key of a compound limiter's sub-limiters</li>
<li><a href="https://github.com/symfony/symfony/commit/470440a590da9af1b47b6a3ef619b4896bd8bba4">470440a</a>: &#91;Mailer&#93; add PufferPost bridge</li>
<li><a href="https://github.com/symfony/symfony/commit/e74789520e3000792f5d3277eab3f39b967d8399">e747895</a>: &#91;Messenger&#93; add routing information to the debug:messenger command</li>
<li><a href="https://github.com/symfony/symfony/commit/4deeb4f12ca18610fa2d2687abca56b572c8d8d9">4deeb4f</a>: &#91;Security&#93; deprecate passing more than one attribute to AccessDecisionManager::decide()</li>
<li><a href="https://github.com/symfony/symfony/commit/ecf1cb667eafbbed6b775035a5d847f18e5d03e5">ecf1cb6</a>: &#91;String&#93; add a $regexp argument to the case conversion methods</li>
<li><a href="https://github.com/symfony/symfony/commit/e15471327f1270b3cdee6fe47fd4905bcdb56866">e154713</a>: &#91;Security&#93; add a current_user() function to the expression language provider</li>
<li><a href="https://github.com/symfony/symfony/commit/cda910271bef78cf10725bd72b39c707022fa31a">cda9102</a>: &#91;String&#93; fix ByteString::title() titlecasing only the first word of a match</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/pull/65825">[Console] Add docker-style sub-commands, resolved as command trees from registered names</a></li>
<li><a href="https://github.com/symfony/symfony/pull/65853">[Console] Register class-level #[AsCommand] groups and let the attribute list options</a></li>
</ul>

<h2>Symfony Jobs</h2>

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

<ul>
<li><strong>Symfony Developer</strong> at Steward<br>
Part-time / Temporary - $8,700 – $13,000 / month<br>
Full remote<br>
<a href="https://symfony.com/jobs/69885c2">View details</a></li>
<li><strong>Symfony Developer</strong> at ATH<br>
Contract / Freelance - €25 – €50 / hour<br>
Full remote<br>
<a href="https://symfony.com/jobs/4a82fc1">View details</a></li>
</ul>

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

<h2>SymfonyCasts Updates</h2>

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

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

<ul>
<li>New course announced: <a href="https://symfonycasts.com/screencast/symfony8-security-extra">Symfony Security: Going Further</a></li>
<li>(Video) <a href="https://symfonycasts.com/screencast/symfony8-security/registration-form">Symfony Security: The Basics: Creating a Registration Form</a></li>
<li>(Video) <a href="https://symfonycasts.com/screencast/symfony8-security/security-events">Symfony Security: The Basics: Security Events: Tracking the Last Login</a></li>
</ul>

<h2>They talked about us</h2>

<ul>
<li><a href="https://clemenskrack.com/articles/precognition-in-symfony-validating-a-request-without-running-the-controller">Precognition in Symfony: validating a request without running the controller</a></li>
<li><a href="https://medium.com/@przemyslaw.rafal.jez/blind-index-searching-an-encrypted-column-without-decrypting-it-9ea572fbcc3a">Blind Index: Searching an Encrypted Column Without Decrypting It</a></li>
<li><a href="https://dev.to/mollenthiel/postgres-rls-in-symfony-with-one-tenant-in-the-fixture-your-isolation-suite-passes-with-no-policy-3h42">Postgres RLS in Symfony: with one tenant in the fixture, your isolation suite passes with no policy at all</a></li>
<li><a href="https://dev.to/outcomer/six-months-later-the-bundle-is-still-alive-257j">Six Months Later, the Bundle Is Still Alive</a></li>
<li><a href="https://dev.to/bosun18/100-line-coverage-did-not-catch-the-one-bug-that-mattered-318a">100% line coverage did not catch the one bug that mattered</a></li>
<li><a href="https://medium.com/@alkinbg/when-http-retries-become-dangerous-idempotency-in-symfony-without-the-fairy-tales-595c9cf81c23">When HTTP Retries Become Dangerous: Idempotency in Symfony Without the Fairy Tales</a></li>
<li><a href="https://awstip.com/when-x-forwarded-for-lies-aka-the-client-ip-problem-behind-cloudfront-aws-waf-and-symfony-236fe7a409e3">When X-Forwarded-For Lies, aka the Client IP Problem Behind CloudFront, AWS WAF and Symfony</a></li>
<li><a href="https://dev.to/gromnan/lautocompletion-zsh-avec-composer-et-symfony-console-5cg">L'autocomplétion zsh avec Composer et Symfony console</a></li>
<li><a href="https://medium.com/@ahmedbhs/frankenphp-ce-que-%C3%A7a-change-et-ce-quil-ne-faut-pas-oublier-843f42c2d1a7">FrankenPHP : ce que ça change, et ce qu’il ne faut pas oublier</a></li>
</ul>

<h2>Upcoming Symfony Events</h2>

<ul>
<li><a href="https://c.sensiolabs.de/events/symfony-php-meetup-cologne-2026?lang=de">Symfony Meetup Köln</a>: Cologne, Germany (September 24, 2026)</li>
<li><a href="https://www.acseo.fr/sylius-france-community-meetup-2026-acseo/">Sylius France Community Meetup by ACSEO</a>: Aix en Provence, France (September 28, 2026)</li>
</ul>

<h2>Call to Action</h2>

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

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/a-week-of-symfony-1027-august-31-september-6-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Javier Eguiluz ]]></dc:creator>
            <pubDate>Sun, 06 Sep 2026 09:46:00 +0200</pubDate>
            <comments>https://symfony.com/blog/a-week-of-symfony-1027-august-31-september-6-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Meet the Symfony Core Team at the API Platform Conference 2026!]]></title>
            <link>https://symfony.com/blog/meet-the-symfony-core-team-at-the-api-platform-conference-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


The API Platform Conference, the international event dedicated to the API Platform framework and its ecosystem, will take place in two weeks in Lille, France, on September 17–18, 2026. Nearly 30 talks are scheduled, in both French and English, covering…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://api-platform.com/fr/con/2026/" title="Api Platform 2026 1200X800">
    <img src="https://symfony.com/uploads/assets/blog/api-platform-2026-1200x800.png" alt="Api Platform 2026 1200X800">
</a></p>

<p><strong><a href="https://api-platform.com/con/2026/">The API Platform Conference</a></strong>, the international event dedicated to the API Platform framework and its ecosystem, will take place in two weeks in Lille, France, on <strong>September 17–18, 2026</strong>. Nearly 30 talks are scheduled, in both French and English, covering case studies around API Platform as well as tools and frameworks related to this project, created in 2015 and now a leading solution for building modern and efficient APIs. This year again, Symfony is a proud community partner of the event: meet us on the exhibition floor!</p>

<p>Among all the speakers and sessions planned during these two days, seven Symfony Core Team members will once again take the stage:</p>

<ul>
<li><strong><a href="https://api-platform.com/con/2026/speakers/kevin-dunglas/">Kévin Dunglas</a></strong>, API Platform's creator, will open the conference with the <a href="https://api-platform.com/con/2026/conferences/#kevin-opening-keynote">opening keynote</a>.</li>
<li><strong><a href="https://api-platform.com/con/2026/speakers/nicolas-grekas/">Nicolas Grekas</a></strong>, Symfony's principal core team member, will deliver a talk on Thursday, right after Soyuka's Keynote. Details on his session are still to be announced.</li>
<li><strong><a href="https://api-platform.com/con/2026/speakers/robin-chalas/">Robin Chalas</a></strong> will present <a href="https://api-platform.com/con/2026/conferences/#from-zend-framework-1-to-api-platform-4-migration-recipe">From Zend Framework 1 to API Platform 4: Migration Recipe</a>, a real-world migration case study covering legacy modernization and AI-assisted tooling.</li>
<li><strong><a href="https://api-platform.com/con/2026/speakers/alexandre-daubois/">Alexandre Daubois</a></strong> will show how to <a href="https://api-platform.com/con/2026/conferences/#observer-frankenphp-la-dx-au-service-de-la-performance">observe FrankenPHP, putting DX at the service of performance</a>, live and without configuration.</li>
<li><strong><a href="https://api-platform.com/con/2026/speakers/mathieu-santostefano/">Mathieu Santostefano</a></strong> will help you keep <a href="https://api-platform.com/con/2026/conferences/#des-apis-securisees-sans-perdre-la-tete">secure APIs without losing your mind</a>, covering OAuth2, OIDC, JWT, and Keycloak.</li>
<li><strong><a href="https://api-platform.com/con/2026/speakers/mathias-arlaud/">Mathias Arlaud</a></strong> will revisit <a href="https://api-platform.com/con/2026/conferences/#ddd-x-api-platform-4-years-later">DDD x API Platform, 4 years later</a>, covering hexagonal architecture and message-oriented patterns.</li>
<li><strong><a href="https://api-platform.com/con/2026/speakers/florent-morselli/">Florent Morselli</a></strong> will cover <a href="https://api-platform.com/con/2026/conferences/#les-en-tetes-http-comme-premiere-ligne-de-defense-des-apis-et-du-front">HTTP headers as the first line of defense for APIs and the frontend</a>, with CSP, CORS, COOP, and COEP examples in Symfony and API Platform.</li>
</ul>

<p>More information about the speakers and schedule can be found on the <strong><a href="https://api-platform.com/con/2026/">event's website</a></strong>.</p>

<p>The program leans hard into where PHP is heading next: FrankenPHP performance and tooling, AI agents and MCP as new API consumers, and honest feedback from teams running API Platform in production. Don't miss your chance to attend this incredible event, and make sure to secure your seat before tickets run out.</p>

<p>Any questions about the API Platform Conference 2026? Get in touch with <strong><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;:&#101;&#x76;&#101;&#x6e;&#116;&#x73;&#64;&#x6c;e&#115;&#x2d;&#116;&#x69;&#108;&#x6c;&#101;&#x75;&#x6c;&#115;&#x2e;&#99;&#x6f;&#111;&#x70;">Les-Tilleuls.coop</a></strong>, the event organizers.</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/meet-the-symfony-core-team-at-the-api-platform-conference-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Cécile HAMEREL ]]></dc:creator>
            <pubDate>Wed, 02 Sep 2026 16:30:00 +0200</pubDate>
            <comments>https://symfony.com/blog/meet-the-symfony-core-team-at-the-api-platform-conference-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Introducing symfony lsp:check: Symfony-Aware Diagnostics in Your CI]]></title>
            <link>https://symfony.com/blog/introducing-symfony-lsp-check-symfony-aware-diagnostics-in-your-ci?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>A Symfony application is full of strings that mean something: route names,
template paths, translation keys, service ids, bundle configuration keys. To
PHP, they are strings like any others. Your CI pipeline verifies types with
PHPStan or Psalm, style with…</description>
            <content:encoded><![CDATA[
                                <p>A Symfony application is full of strings that mean something: route names,
template paths, translation keys, service ids, bundle configuration keys. To
PHP, they are strings like any others. Your CI pipeline verifies types with
PHPStan or Psalm, style with PHP-CS-Fixer and behavior with PHPUnit, but
nothing alerts you if you make a typo like
<code translate="no" class="notranslate">redirectToRoute('order_confirmaton')</code>.</p>
<p>The latest version of the Symfony Language Tools closes that gap. The new
<code translate="no" class="notranslate">check</code> command runs a headless version of the Symfony-aware diagnostics from
the editor integrations: against saved files, from the command line, in CI. It
works for every Symfony application, whether or not anyone on the team uses an
editor integration.</p>
<div class="section">
<h2 id="your-ci-doesn-t-know-symfony"><a class="headerlink" href="#your-ci-doesn-t-know-symfony" title="Permalink to this headline">Your CI Doesn't Know Symfony</a></h2>
<p>Symfony reports these mistakes late, or never: mistyped route names, missing
templates, missing translation keys. They survive static analysis and code
review because, as far as types are concerned, everything is fine. Even the
PHPStan Symfony extension, which makes PHP analysis container-aware, works at
the type level and inside PHP files; templates, translations, routes and
configuration files stay out of its reach.</p>
<p>The editor integrations catch these mistakes while you type, but an editor
does not review a pull request and is not attached when a script or a coding
agent modifies the application. These checks belong in CI, next to the tools
you already run.</p>
</div>
<div class="section">
<h2 id="one-command-in-symfony-cli"><a class="headerlink" href="#one-command-in-symfony-cli" title="Permalink to this headline">One Command in Symfony CLI</a></h2>
<p>If you use the <a href="https://symfony.com/download" class="reference external">Symfony CLI</a> (version 5.20.0 or newer), you already have the
checker. Run it from the root of your workspace:</p>
<div translate="no" data-loc="7" 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 lsp:check

Project .: runtime metadata, environment dev, complete
.:src/Controller/CheckoutController.php:14:40: error [route.not_found] Route <span class="hljs-string">"order_confirmaton"</span> does not exist <span class="hljs-keyword">in</span> the selected environment.
.:templates/checkout/confirmation.html.twig:1:8: error [translation.not_found] Translation <span class="hljs-string">"checkout.confirmed"</span> does not exist <span class="hljs-keyword">in</span> domain <span class="hljs-string">"messages"</span>.
.:templates/checkout/confirmation.html.twig:2:13: error [template.not_found] Template <span class="hljs-string">"checkout/summary.html.twig"</span> does not exist <span class="hljs-keyword">in</span> the selected environment.
Summary: 3 diagnostics, 3 active, 0 baseline matches, 0 stale baseline entries, 3 blocking</code></pre>
    </div>
</div>
<p>Symfony CLI downloads the latest stable Symfony Language Tools automatically or
you can download it from <a href="https://github.com/symfony/language-tools/releases" class="reference external" rel="external noopener noreferrer" target="_blank">GitHub Releases</a> and run <code translate="no" class="notranslate">symfony-lsp check</code>; both
invocations accept the same options.</p>
<p>Without arguments, the command discovers Symfony applications and checks all
supported project files; pass files, directories or patterns to focus the
analysis:</p>
<div translate="no" data-loc="2" 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 lsp:check src/ templates/
<span class="hljs-prompt">$ </span>symfony lsp:check <span class="hljs-string">'config/**/*.yaml'</span></code></pre>
    </div>
</div>
<p>The command reports Symfony-specific problems only, 30 diagnostic codes today
(<code translate="no" class="notranslate">symfony lsp:check --list-codes</code>):</p>
<ul>
    <li>unknown routes and missing required route parameters;</li>
<li>missing templates and Twig components;</li>
<li>unknown arguments of Twig functions and filters;</li>
<li>missing translation keys, domains and message placeholders;</li>
<li>unknown services and parameters;</li>
<li>unknown console argument and option names;</li>
<li>invalid bundle configuration keys, types and enums;</li>
<li>unknown or incompatible environment variable processors;</li>
<li>unknown Messenger buses and transports, and invalid handler signatures;</li>
<li>unknown validation constraint options;</li>
<li>unknown Stimulus controllers and importmap entrypoints;</li>
<li>unknown security firewalls and user providers;</li>
<li>unknown form options and invalid event listener methods.</li>
</ul>
<p>Runtime analysis is enabled by default: the checker boots each application in
the selected Symfony environment and loads the same routes, services, bundle
configuration and other runtime metadata as the editor integrations, so
diagnostics reflect your real application, not a guess based on conventions.
Through Symfony CLI, it also inherits the project-aware <code translate="no" class="notranslate">symfony php</code>
selection of PHP version and configuration. When a CI job must not execute
application code, use source-only mode:</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 lsp:check --<span class="hljs-built_in">source</span>-only</code></pre>
    </div>
</div>
<p>Reports say which analysis mode was used, and a runtime or indexing failure
marks the result as incomplete instead of silently falling back to source-only
analysis.</p>
</div>
<div class="section">
<h2 id="reports-built-for-ci"><a class="headerlink" href="#reports-built-for-ci" title="Permalink to this headline">Reports Built for CI</a></h2>
<p>The default report is a deterministic, human-readable list of projects,
diagnostics and summary counts; three structured formats target other tools:</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>symfony lsp:check --format=json &gt; diagnostics.json
<span class="hljs-prompt">$ </span>symfony lsp:check --format=github
<span class="hljs-prompt">$ </span>symfony lsp:check --format=sarif &gt; symfony-lsp.sarif</code></pre>
    </div>
</div>
<p>The GitHub format emits workflow annotations directly on files and lines. A
minimal GitHub Actions job:</p>
<div translate="no" data-loc="16" class="notranslate codeblock codeblock-length-md codeblock-yaml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># .github/workflows/symfony-diagnostics.yaml</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">Symfony</span> <span class="hljs-string">diagnostics</span>

<span class="hljs-attr">on:</span> <span class="hljs-string">[push,</span> <span class="hljs-string">pull_request]</span>

<span class="hljs-attr">jobs:</span>
    <span class="hljs-attr">check:</span>
        <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
        <span class="hljs-attr">steps:</span>
            <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v7</span>
            <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">shivammathur/setup-php@v2</span>
              <span class="hljs-attr">with:</span>
                  <span class="hljs-attr">php-version:</span> <span class="hljs-string">'8.4'</span>
                  <span class="hljs-attr">tools:</span> <span class="hljs-string">symfony-cli</span>
            <span class="hljs-bullet">-</span> <span class="hljs-attr">run:</span> <span class="hljs-string">composer</span> <span class="hljs-string">install</span> <span class="hljs-string">--no-progress</span>
            <span class="hljs-bullet">-</span> <span class="hljs-attr">run:</span> <span class="hljs-string">symfony</span> <span class="hljs-string">lsp:check</span> <span class="hljs-string">--format=github</span></code></pre>
    </div>
</div>
<p>The SARIF 2.1 report can be uploaded to code-scanning systems and includes
stable fingerprints, so findings can be tracked between runs.</p>
<p>Exit statuses distinguish findings from failures in the checker itself:</p>
<ul>
    <li><code translate="no" class="notranslate">0</code>: analysis completed without blocking diagnostics;</li>
<li><code translate="no" class="notranslate">10</code>: analysis completed with blocking diagnostics;</li>
<li><code translate="no" class="notranslate">11</code>: invocation, configuration, selection, code policy or
baseline is invalid;</li>
<li><code translate="no" class="notranslate">12</code>: analysis is incomplete because of an indexing, timeout,
process or internal failure.</li>
</ul>
<p>A failing diagnostic provider does not discard the other providers' findings:
the partial report remains available, but the incomplete status and exit code
<code translate="no" class="notranslate">12</code> prevent CI from treating it as clean.</p>
</div>
<div class="section">
<h2 id="adopt-the-checker-gradually"><a class="headerlink" href="#adopt-the-checker-gradually" title="Permalink to this headline">Adopt the Checker Gradually</a></h2>
<p>An existing application may already contain known diagnostics. An
occurrence-specific baseline enforces new findings without hiding the existing
ones:</p>
<div translate="no" data-loc="2" 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 lsp:check --generate-baseline
<span class="hljs-prompt">$ </span>symfony lsp:check --baseline=.symfony-lsp-baseline.json</code></pre>
    </div>
</div>
<p>Matches remain visible but do not block, survive unrelated line movement and
distinguish repeated occurrences of the same diagnostic. Refresh the baseline
explicitly with <code translate="no" class="notranslate">--refresh-baseline</code>, or add <code translate="no" class="notranslate">--strict-baseline</code> to
require stale entries to be removed.</p>
<p>You can also choose which diagnostic codes block CI without filtering the
report:</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 lsp:check --fail-on=route.not_found,translation.not_found</code></pre>
    </div>
</div>
<p>Unknown codes are rejected, so a renamed or removed code cannot silently weaken
the policy.</p>
<p>The checker and the editor integrations share the <code translate="no" class="notranslate">.symfony-lsp.json</code> project
configuration. Path exclusions are useful for embedded fixtures and generated
sources, and missing-translation diagnostics are opt-in, as in the editor:</p>
<div translate="no" data-loc="8" class="notranslate codeblock codeblock-length-sm codeblock-json">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code>{
    <span class="hljs-attr">"version"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"translationDiagnostics"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"excludePaths"</span>: [
        <span class="hljs-string">"tests/Fixtures/**"</span>,
        <span class="hljs-string">"generated/"</span>
    ]
}</code></pre>
    </div>
</div>
<p>See the <a href="https://github.com/symfony/language-tools/blob/main/docs/features/headless-diagnostics.rst" class="reference external" rel="external noopener noreferrer" target="_blank">headless diagnostics guide</a> for output schemas, baseline behavior,
privacy guarantees, caching and the complete command-line reference, and the
<a href="https://github.com/symfony/language-tools/blob/main/docs/project-configuration.rst" class="reference external" rel="external noopener noreferrer" target="_blank">project configuration</a> guide for the shared settings.</p>
</div>
<div class="section">
<h2 id="built-for-agents-too"><a class="headerlink" href="#built-for-agents-too" title="Permalink to this headline">Built for Agents Too</a></h2>
<p>Coding agents write a growing share of your Symfony code, and they work the
way CI does: no editor attached, validating their changes with command-line
tools. Give them this one. An agent that runs <code translate="no" class="notranslate">symfony lsp:check</code> after each
change catches its own invented route names, stale template references and
broken configuration before a human reviews the diff.</p>
<p>The command is designed for that loop: deterministic reports, stable exit
codes, machine-readable formats with precise positions and a discoverable
diagnostic contract. A human and an agent running the same check see exactly
the same findings.</p>
</div>
<div class="section">
<h2 id="add-it-to-your-pipeline"><a class="headerlink" href="#add-it-to-your-pipeline" title="Permalink to this headline">Add It to Your Pipeline</a></h2>
<p>Start with a local <code translate="no" class="notranslate">symfony lsp:check</code>, add a baseline if the application
needs one, then choose the output format and blocking policy that fit your
pipeline. Editor users keep the diagnostics they already have; now the rest of
the team, the CI and your agents get them too.</p>
<p>If the checker reports something it should not, misses a Symfony pattern used
by your application or cannot boot the project reliably, report it on the
<a href="https://github.com/symfony/language-tools/issues" class="reference external" rel="external noopener noreferrer" target="_blank">issue tracker</a>.</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/introducing-symfony-lsp-check-symfony-aware-diagnostics-in-your-ci?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Mon, 31 Aug 2026 14:03:00 +0200</pubDate>
            <comments>https://symfony.com/blog/introducing-symfony-lsp-check-symfony-aware-diagnostics-in-your-ci?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 8.1.6 released]]></title>
            <link>https://symfony.com/blog/symfony-8-1-6-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 8.1.6 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="#Symfony%208.1.6" class="reference internal">Symfony 8.1.6</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-5"><a class="headerlink" href="#changelog-since-symfony-8-1-5" title="Permalink to this headline">Changelog Since Symfony 8.1.5</a></h2>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/65754" class="reference external" rel="external noopener noreferrer" target="_blank">#65754</a> [PhpUnitBridge] Fix ClockMock::hrtime() when the clock is not mocked and when the nanoseconds have leading zeros (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65751" class="reference external" rel="external noopener noreferrer" target="_blank">#65751</a> [HttpClient] Reject decompression bombs (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65753" class="reference external" rel="external noopener noreferrer" target="_blank">#65753</a> [HttpFoundation] Combine trusted host patterns into a single regexp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65748" class="reference external" rel="external noopener noreferrer" target="_blank">#65748</a> [PropertyInfo] Read only the doc block of a promoted property in getTypeFromConstructor() (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65749" class="reference external" rel="external noopener noreferrer" target="_blank">#65749</a> [Serializer] Enforce the element type of nested scalar collections (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65740" class="reference external" rel="external noopener noreferrer" target="_blank">#65740</a> [HttpClient] Reject https:// proxies that curl would connect to in cleartext (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65747" class="reference external" rel="external noopener noreferrer" target="_blank">#65747</a> [RateLimiter] Cap the burst size and the duration computed from it (@cs278, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65731" class="reference external" rel="external noopener noreferrer" target="_blank">#65731</a> [HttpClient] Don't send the original Host header on cross-authority redirects (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65742" class="reference external" rel="external noopener noreferrer" target="_blank">#65742</a> [HttpClient] Reject 3xx pushed responses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65746" class="reference external" rel="external noopener noreferrer" target="_blank">#65746</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65744" class="reference external" rel="external noopener noreferrer" target="_blank">#65744</a> [Mime] Reject an unquoted "@" in the local part of an email address (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65739" class="reference external" rel="external noopener noreferrer" target="_blank">#65739</a> [Process] Ignore invalid env var names and non-scalar env values (@nicolas-grekas, @dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65738" class="reference external" rel="external noopener noreferrer" target="_blank">#65738</a> [Process] Stop leaking CGI/FastCGI request-context vars to subprocesses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65735" class="reference external" rel="external noopener noreferrer" target="_blank">#65735</a> [Security] Avoid failing when PersistentRememberMeHandler handles a malformed cookie (@Seldaek)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65734" class="reference external" rel="external noopener noreferrer" target="_blank">#65734</a> [Security] Reject malformed login link parameters instead of throwing a TypeError (@davidszkiba, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65733" class="reference external" rel="external noopener noreferrer" target="_blank">#65733</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65732" class="reference external" rel="external noopener noreferrer" target="_blank">#65732</a> [SecurityBundle] Restrict redirections to the current host when sessions are disabled (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65737" class="reference external" rel="external noopener noreferrer" target="_blank">#65737</a> [HttpKernel][Security] Add allowed_classes =&gt; false to unserialize() in CacheWarmerAggregate, LoggerDataCollector, and HttpCache Store (@XananasX7)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65736" class="reference external" rel="external noopener noreferrer" target="_blank">#65736</a> [HttpKernel] Ignore the session id that PHP kept from a previous request (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65730" class="reference external" rel="external noopener noreferrer" target="_blank">#65730</a> [HttpKernel] Fix TypeError in UriSigner when the hash parameter is not a string (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65743" class="reference external" rel="external noopener noreferrer" target="_blank">#65743</a> [HttpFoundation] Encode the path in the X-Accel-Redirect header (@Athorcis)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65729" class="reference external" rel="external noopener noreferrer" target="_blank">#65729</a> [HttpFoundation] Reject reserved characters in the cookie path and domain (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65728" class="reference external" rel="external noopener noreferrer" target="_blank">#65728</a> [Routing] Fix matching the "0" URL (@cs278)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65727" class="reference external" rel="external noopener noreferrer" target="_blank">#65727</a> [Yaml] Fix a TypeError when "!!binary" is given an unparsable value (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65745" class="reference external" rel="external noopener noreferrer" target="_blank">#65745</a> [Filesystem] Keep tempnam() files private when a suffix is given (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65726" class="reference external" rel="external noopener noreferrer" target="_blank">#65726</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65741" class="reference external" rel="external noopener noreferrer" target="_blank">#65741</a> [HttpFoundation] Reject invalid paths (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65725" class="reference external" rel="external noopener noreferrer" target="_blank">#65725</a> [HttpFoundation] Fix parsing hosts and schemes in URLs (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65724" class="reference external" rel="external noopener noreferrer" target="_blank">#65724</a>  Declare the polyfills needed by the code on PHP 7.2 (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65721" class="reference external" rel="external noopener noreferrer" target="_blank">#65721</a> [Lock] Never take the reserved "__write__" member as a Redis lock token (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65718" class="reference external" rel="external noopener noreferrer" target="_blank">#65718</a> [VarDumper] Escape UTF-8 encoded C1 control characters (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65706" class="reference external" rel="external noopener noreferrer" target="_blank">#65706</a> [Mailer][Mailchimp] Sign the webhook URL as sent and reject a non-string mandrill_events parameter (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65704" class="reference external" rel="external noopener noreferrer" target="_blank">#65704</a> [HttpClient] Drop credentials when a redirect changes the scheme (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65693" class="reference external" rel="external noopener noreferrer" target="_blank">#65693</a> [Messenger] Restrict what "X-Message-Stamp-*" headers can put in an envelope (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65692" class="reference external" rel="external noopener noreferrer" target="_blank">#65692</a> [Console][MonologBridge][VarDumper] Escape context strings written to the terminal (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65691" class="reference external" rel="external noopener noreferrer" target="_blank">#65691</a> [VarDumper] Escape context strings in HtmlDescriptor (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65690" class="reference external" rel="external noopener noreferrer" target="_blank">#65690</a> [ExpressionLanguage] Bound the nesting level of parsed expressions (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65689" class="reference external" rel="external noopener noreferrer" target="_blank">#65689</a> [SecurityBundle] Use a lock for login throttling by default (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65686" class="reference external" rel="external noopener noreferrer" target="_blank">#65686</a> [Serializer] Check the denormalized class is a Mime part in MimeMessageNormalizer (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65688" class="reference external" rel="external noopener noreferrer" target="_blank">#65688</a> [Yaml] Bound recursion depth in the inline lexer (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65687" class="reference external" rel="external noopener noreferrer" target="_blank">#65687</a> [HttpKernel] Validate the profiler token before using it as a file name (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65709" class="reference external" rel="external noopener noreferrer" target="_blank">#65709</a> [Mailer][Mailgun] Reject non-string signature fields instead of throwing a TypeError (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65710" class="reference external" rel="external noopener noreferrer" target="_blank">#65710</a> [Notifier][Twilio] Sign the query string as sent instead of the normalized one (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65716" class="reference external" rel="external noopener noreferrer" target="_blank">#65716</a> [Notifier][Lox24] Match JSON webhook requests only (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65708" class="reference external" rel="external noopener noreferrer" target="_blank">#65708</a> [Mailer][Resend] Reject a versioned signature entry without a value instead of raising a warning (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65712" class="reference external" rel="external noopener noreferrer" target="_blank">#65712</a> [Notifier][Lox24] Read the webhook payload from the JSON body (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65675" class="reference external" rel="external noopener noreferrer" target="_blank">#65675</a> [Mailer][Notifier] Reject webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65670" class="reference external" rel="external noopener noreferrer" target="_blank">#65670</a> [Serializer] Fix deep_object_to_populate for collections of objects (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65700" class="reference external" rel="external noopener noreferrer" target="_blank">#65700</a> [Mailer][Notifier] Reject Mailgun, SendGrid and Vonage webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65701" class="reference external" rel="external noopener noreferrer" target="_blank">#65701</a> [DoctrineBridge] Restore the tolerance for outdated remember-me tokens after concurrent requests (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65702" class="reference external" rel="external noopener noreferrer" target="_blank">#65702</a> [HtmlSanitizer] Compare schemes and hosts case-insensitively (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65677" class="reference external" rel="external noopener noreferrer" target="_blank">#65677</a> [Security] Reject OIDC discovery endpoints that downgrade to plain HTTP (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65705" class="reference external" rel="external noopener noreferrer" target="_blank">#65705</a> [Translation] Fix Persian (fa) translations for Form and Validator components (@amirreza-khaleghverdi)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65684" class="reference external" rel="external noopener noreferrer" target="_blank">#65684</a> [Cache][HttpFoundation] Do not unmarshall values that SodiumMarshaller cannot decrypt (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65685" class="reference external" rel="external noopener noreferrer" target="_blank">#65685</a> [Security] Narrow the race that lets a login link exceed max_uses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65699" class="reference external" rel="external noopener noreferrer" target="_blank">#65699</a> [Mailer] Reject Mailomat webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65683" class="reference external" rel="external noopener noreferrer" target="_blank">#65683</a> [HttpFoundation] Allow-list the values of the "X-Sendfile-Type" header (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65682" class="reference external" rel="external noopener noreferrer" target="_blank">#65682</a> [HttpFoundation] Ignore session ids that are not usable as file names in MockFileSessionStorage (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65681" class="reference external" rel="external noopener noreferrer" target="_blank">#65681</a> [HttpKernel] Strip cache-internal headers from backend responses in HttpCache (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65655" class="reference external" rel="external noopener noreferrer" target="_blank">#65655</a> [Security] Apply "signature_properties" when a remember-me token provider is used (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65664" class="reference external" rel="external noopener noreferrer" target="_blank">#65664</a> [HtmlSanitizer] Keep rejecting denied URL characters when percent-decoding yields malformed UTF-8 (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65679" class="reference external" rel="external noopener noreferrer" target="_blank">#65679</a> [Messenger] Cover the headers that describe the message with the SigningSerializer signature (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65678" class="reference external" rel="external noopener noreferrer" target="_blank">#65678</a> [SecurityBundle] Make the remember-me cookie follow the session cookie defaults (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65676" class="reference external" rel="external noopener noreferrer" target="_blank">#65676</a> [Lock] Delete a DynamoDb lock only when the caller holds it (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65674" class="reference external" rel="external noopener noreferrer" target="_blank">#65674</a> [Mailer] Use the configured secret to authenticate Postmark webhooks (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65666" class="reference external" rel="external noopener noreferrer" target="_blank">#65666</a> [VarDumper] Account for PHP 8.6 deprecating SplFileObject::getCsvControl() (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65697" class="reference external" rel="external noopener noreferrer" target="_blank">#65697</a> [VarExporter] Fix fatal error when loading code exported by versions &lt; 8.1 (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65695" class="reference external" rel="external noopener noreferrer" target="_blank">#65695</a> [Validator] Review and finalize Indonesian (id) translation messages (@VernSG)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65671" class="reference external" rel="external noopener noreferrer" target="_blank">#65671</a> [Form][Validator] Review Dutch (nl) translations (@andrewo0)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65680" class="reference external" rel="external noopener noreferrer" target="_blank">#65680</a> [Lock] Declare symfony/http-client in the DynamoDb bridge (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65665" class="reference external" rel="external noopener noreferrer" target="_blank">#65665</a> [Validator] fix comment for Url requireTld argument (@dmitryuk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65662" class="reference external" rel="external noopener noreferrer" target="_blank">#65662</a> [HtmlSanitizer] Accept percent-encoded line breaks and tabs in the query of hostless URLs (@webdevsamran)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65660" class="reference external" rel="external noopener noreferrer" target="_blank">#65660</a> [Cache] Respect max_execution_time in LockRegistry's wait loop (@uncaught)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65657" class="reference external" rel="external noopener noreferrer" target="_blank">#65657</a> [Security] Clarify AuthenticatorManager constructor docblock for deprecated eraseCredentials argument (@webdevsamran)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65656" class="reference external" rel="external noopener noreferrer" target="_blank">#65656</a> [Tui] Fix Tailwind font-weight and font-family utilities being treated as FIGlet fonts (@sadiqk2)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65653" class="reference external" rel="external noopener noreferrer" target="_blank">#65653</a> [Validator] Remove needs-review-translation state from Spanish translations (@reiarseni)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65647" class="reference external" rel="external noopener noreferrer" target="_blank">#65647</a> [Serializer] Fix max depth counting for subclasses that inherit MaxDepth metadata (@oliinykdm)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65646" class="reference external" rel="external noopener noreferrer" target="_blank">#65646</a>  Review translations for Estonian (et) (@erkia)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65651" class="reference external" rel="external noopener noreferrer" target="_blank">#65651</a> [Yaml] Quote strings that look like octal numbers when dumping (@lazerg)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65645" class="reference external" rel="external noopener noreferrer" target="_blank">#65645</a> [Validator] Review Bulgarian (bg) translations (@alkinbg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65644" class="reference external" rel="external noopener noreferrer" target="_blank">#65644</a> [Notifier] Fix escaping of MarkdownV2 markup in TelegramTransport (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65640" class="reference external" rel="external noopener noreferrer" target="_blank">#65640</a> [Serializer] Let DISABLE_TYPE_ENFORCEMENT keep strings that cannot be converted (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65637" class="reference external" rel="external noopener noreferrer" target="_blank">#65637</a> [Console][FrameworkBundle] Fix profiling a command stopped at ConsoleEvents::COMMAND (@Spomky)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65593" class="reference external" rel="external noopener noreferrer" target="_blank">#65593</a> [Validator] Improve Serbian translation messages (@kaznovac)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65629" class="reference external" rel="external noopener noreferrer" target="_blank">#65629</a> [Validator] #65566  Review Turkish (tr) translations (@mmustafaAydogan)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65634" class="reference external" rel="external noopener noreferrer" target="_blank">#65634</a> [Validator] reviewed Polish translation units 147 and 148 (@thunderer)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65632" class="reference external" rel="external noopener noreferrer" target="_blank">#65632</a> [HttpClient] Fix GuzzleHttpHandler consuming responses out of band (@peter17)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65630" class="reference external" rel="external noopener noreferrer" target="_blank">#65630</a> [HttpKernel] Fix regression when a locale aware service is never initialized (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65636" class="reference external" rel="external noopener noreferrer" target="_blank">#65636</a> [Cache] Fix authenticating to the master when using Redis Sentinel (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65621" class="reference external" rel="external noopener noreferrer" target="_blank">#65621</a> [PropertyInfo] Do not prefer a static named constructor as the property mutator (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65619" class="reference external" rel="external noopener noreferrer" target="_blank">#65619</a> [PropertyInfo] Do not prefer a static named constructor as the property accessor (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65613" class="reference external" rel="external noopener noreferrer" target="_blank">#65613</a> [Console] Fix service arguments not resolved when a command is invoked by alias or abbreviation (@lazerg)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65615" class="reference external" rel="external noopener noreferrer" target="_blank">#65615</a> [Validator] Review translations for Russian (ru) (@bifidokk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65607" class="reference external" rel="external noopener noreferrer" target="_blank">#65607</a> [HttpKernel] Capture flushed content in HttpKernelBrowser (@vencakrecl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65599" class="reference external" rel="external noopener noreferrer" target="_blank">#65599</a> [CssSelector] Fix quadratic token probing in Reader::findPattern() (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65601" class="reference external" rel="external noopener noreferrer" target="_blank">#65601</a> [VarExporter] Fix export of string parameter defaults containing escaped quotes (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65598" class="reference external" rel="external noopener noreferrer" target="_blank">#65598</a> [Filesystem] Fix makeRelative() stripping leading dots when the base path is a root (@iliaal)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65594" class="reference external" rel="external noopener noreferrer" target="_blank">#65594</a> [Validator] Improve Serbian (Cyrillic) translation messages (@kaznovac, @nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65587" class="reference external" rel="external noopener noreferrer" target="_blank">#65587</a> [Validator] Review Urdu translations (@UmairRathore)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65597" class="reference external" rel="external noopener noreferrer" target="_blank">#65597</a> [Filesystem] Keep tempnam() files private when a suffix is given (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65596" class="reference external" rel="external noopener noreferrer" target="_blank">#65596</a> [CssSelector] Cap the nesting depth of :is() and :where() (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65589" class="reference external" rel="external noopener noreferrer" target="_blank">#65589</a> [Mailer] Handle MailerSend webhooks version 2 (@ovgray)</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64370" class="reference external" rel="external noopener noreferrer" target="_blank">#64370</a> Release v5.4.53</li>
</ul>
<span id="Symfony 8.1.6"></span>
</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-6-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Sun, 30 Aug 2026 23:44:04 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-8-1-6-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 7.4.18 released]]></title>
            <link>https://symfony.com/blog/symfony-7-4-18-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 7.4.18 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="#Symfony%207.4.18" class="reference internal">Symfony 7.4.18</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-7-4-17"><a class="headerlink" href="#changelog-since-symfony-7-4-17" title="Permalink to this headline">Changelog Since Symfony 7.4.17</a></h2>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/65754" class="reference external" rel="external noopener noreferrer" target="_blank">#65754</a> [PhpUnitBridge] Fix ClockMock::hrtime() when the clock is not mocked and when the nanoseconds have leading zeros (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65751" class="reference external" rel="external noopener noreferrer" target="_blank">#65751</a> [HttpClient] Reject decompression bombs (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65753" class="reference external" rel="external noopener noreferrer" target="_blank">#65753</a> [HttpFoundation] Combine trusted host patterns into a single regexp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65740" class="reference external" rel="external noopener noreferrer" target="_blank">#65740</a> [HttpClient] Reject https:// proxies that curl would connect to in cleartext (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65747" class="reference external" rel="external noopener noreferrer" target="_blank">#65747</a> [RateLimiter] Cap the burst size and the duration computed from it (@cs278, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65731" class="reference external" rel="external noopener noreferrer" target="_blank">#65731</a> [HttpClient] Don't send the original Host header on cross-authority redirects (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65742" class="reference external" rel="external noopener noreferrer" target="_blank">#65742</a> [HttpClient] Reject 3xx pushed responses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65746" class="reference external" rel="external noopener noreferrer" target="_blank">#65746</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65744" class="reference external" rel="external noopener noreferrer" target="_blank">#65744</a> [Mime] Reject an unquoted "@" in the local part of an email address (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65739" class="reference external" rel="external noopener noreferrer" target="_blank">#65739</a> [Process] Ignore invalid env var names and non-scalar env values (@nicolas-grekas, @dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65738" class="reference external" rel="external noopener noreferrer" target="_blank">#65738</a> [Process] Stop leaking CGI/FastCGI request-context vars to subprocesses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65735" class="reference external" rel="external noopener noreferrer" target="_blank">#65735</a> [Security] Avoid failing when PersistentRememberMeHandler handles a malformed cookie (@Seldaek)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65734" class="reference external" rel="external noopener noreferrer" target="_blank">#65734</a> [Security] Reject malformed login link parameters instead of throwing a TypeError (@davidszkiba, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65733" class="reference external" rel="external noopener noreferrer" target="_blank">#65733</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65732" class="reference external" rel="external noopener noreferrer" target="_blank">#65732</a> [SecurityBundle] Restrict redirections to the current host when sessions are disabled (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65737" class="reference external" rel="external noopener noreferrer" target="_blank">#65737</a> [HttpKernel][Security] Add allowed_classes =&gt; false to unserialize() in CacheWarmerAggregate, LoggerDataCollector, and HttpCache Store (@XananasX7)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65736" class="reference external" rel="external noopener noreferrer" target="_blank">#65736</a> [HttpKernel] Ignore the session id that PHP kept from a previous request (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65730" class="reference external" rel="external noopener noreferrer" target="_blank">#65730</a> [HttpKernel] Fix TypeError in UriSigner when the hash parameter is not a string (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65743" class="reference external" rel="external noopener noreferrer" target="_blank">#65743</a> [HttpFoundation] Encode the path in the X-Accel-Redirect header (@Athorcis)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65729" class="reference external" rel="external noopener noreferrer" target="_blank">#65729</a> [HttpFoundation] Reject reserved characters in the cookie path and domain (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65728" class="reference external" rel="external noopener noreferrer" target="_blank">#65728</a> [Routing] Fix matching the "0" URL (@cs278)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65727" class="reference external" rel="external noopener noreferrer" target="_blank">#65727</a> [Yaml] Fix a TypeError when "!!binary" is given an unparsable value (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65745" class="reference external" rel="external noopener noreferrer" target="_blank">#65745</a> [Filesystem] Keep tempnam() files private when a suffix is given (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65726" class="reference external" rel="external noopener noreferrer" target="_blank">#65726</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65741" class="reference external" rel="external noopener noreferrer" target="_blank">#65741</a> [HttpFoundation] Reject invalid paths (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65725" class="reference external" rel="external noopener noreferrer" target="_blank">#65725</a> [HttpFoundation] Fix parsing hosts and schemes in URLs (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65724" class="reference external" rel="external noopener noreferrer" target="_blank">#65724</a>  Declare the polyfills needed by the code on PHP 7.2 (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65721" class="reference external" rel="external noopener noreferrer" target="_blank">#65721</a> [Lock] Never take the reserved "__write__" member as a Redis lock token (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65718" class="reference external" rel="external noopener noreferrer" target="_blank">#65718</a> [VarDumper] Escape UTF-8 encoded C1 control characters (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65706" class="reference external" rel="external noopener noreferrer" target="_blank">#65706</a> [Mailer][Mailchimp] Sign the webhook URL as sent and reject a non-string mandrill_events parameter (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65704" class="reference external" rel="external noopener noreferrer" target="_blank">#65704</a> [HttpClient] Drop credentials when a redirect changes the scheme (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65693" class="reference external" rel="external noopener noreferrer" target="_blank">#65693</a> [Messenger] Restrict what "X-Message-Stamp-*" headers can put in an envelope (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65692" class="reference external" rel="external noopener noreferrer" target="_blank">#65692</a> [Console][MonologBridge][VarDumper] Escape context strings written to the terminal (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65691" class="reference external" rel="external noopener noreferrer" target="_blank">#65691</a> [VarDumper] Escape context strings in HtmlDescriptor (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65690" class="reference external" rel="external noopener noreferrer" target="_blank">#65690</a> [ExpressionLanguage] Bound the nesting level of parsed expressions (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65689" class="reference external" rel="external noopener noreferrer" target="_blank">#65689</a> [SecurityBundle] Use a lock for login throttling by default (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65686" class="reference external" rel="external noopener noreferrer" target="_blank">#65686</a> [Serializer] Check the denormalized class is a Mime part in MimeMessageNormalizer (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65688" class="reference external" rel="external noopener noreferrer" target="_blank">#65688</a> [Yaml] Bound recursion depth in the inline lexer (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65687" class="reference external" rel="external noopener noreferrer" target="_blank">#65687</a> [HttpKernel] Validate the profiler token before using it as a file name (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65709" class="reference external" rel="external noopener noreferrer" target="_blank">#65709</a> [Mailer][Mailgun] Reject non-string signature fields instead of throwing a TypeError (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65710" class="reference external" rel="external noopener noreferrer" target="_blank">#65710</a> [Notifier][Twilio] Sign the query string as sent instead of the normalized one (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65716" class="reference external" rel="external noopener noreferrer" target="_blank">#65716</a> [Notifier][Lox24] Match JSON webhook requests only (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65708" class="reference external" rel="external noopener noreferrer" target="_blank">#65708</a> [Mailer][Resend] Reject a versioned signature entry without a value instead of raising a warning (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65712" class="reference external" rel="external noopener noreferrer" target="_blank">#65712</a> [Notifier][Lox24] Read the webhook payload from the JSON body (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65675" class="reference external" rel="external noopener noreferrer" target="_blank">#65675</a> [Mailer][Notifier] Reject webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65670" class="reference external" rel="external noopener noreferrer" target="_blank">#65670</a> [Serializer] Fix deep_object_to_populate for collections of objects (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65700" class="reference external" rel="external noopener noreferrer" target="_blank">#65700</a> [Mailer][Notifier] Reject Mailgun, SendGrid and Vonage webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65701" class="reference external" rel="external noopener noreferrer" target="_blank">#65701</a> [DoctrineBridge] Restore the tolerance for outdated remember-me tokens after concurrent requests (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65702" class="reference external" rel="external noopener noreferrer" target="_blank">#65702</a> [HtmlSanitizer] Compare schemes and hosts case-insensitively (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65677" class="reference external" rel="external noopener noreferrer" target="_blank">#65677</a> [Security] Reject OIDC discovery endpoints that downgrade to plain HTTP (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65705" class="reference external" rel="external noopener noreferrer" target="_blank">#65705</a> [Translation] Fix Persian (fa) translations for Form and Validator components (@amirreza-khaleghverdi)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65684" class="reference external" rel="external noopener noreferrer" target="_blank">#65684</a> [Cache][HttpFoundation] Do not unmarshall values that SodiumMarshaller cannot decrypt (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65685" class="reference external" rel="external noopener noreferrer" target="_blank">#65685</a> [Security] Narrow the race that lets a login link exceed max_uses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65699" class="reference external" rel="external noopener noreferrer" target="_blank">#65699</a> [Mailer] Reject Mailomat webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65683" class="reference external" rel="external noopener noreferrer" target="_blank">#65683</a> [HttpFoundation] Allow-list the values of the "X-Sendfile-Type" header (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65682" class="reference external" rel="external noopener noreferrer" target="_blank">#65682</a> [HttpFoundation] Ignore session ids that are not usable as file names in MockFileSessionStorage (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65681" class="reference external" rel="external noopener noreferrer" target="_blank">#65681</a> [HttpKernel] Strip cache-internal headers from backend responses in HttpCache (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65655" class="reference external" rel="external noopener noreferrer" target="_blank">#65655</a> [Security] Apply "signature_properties" when a remember-me token provider is used (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65664" class="reference external" rel="external noopener noreferrer" target="_blank">#65664</a> [HtmlSanitizer] Keep rejecting denied URL characters when percent-decoding yields malformed UTF-8 (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65679" class="reference external" rel="external noopener noreferrer" target="_blank">#65679</a> [Messenger] Cover the headers that describe the message with the SigningSerializer signature (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65678" class="reference external" rel="external noopener noreferrer" target="_blank">#65678</a> [SecurityBundle] Make the remember-me cookie follow the session cookie defaults (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65676" class="reference external" rel="external noopener noreferrer" target="_blank">#65676</a> [Lock] Delete a DynamoDb lock only when the caller holds it (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65674" class="reference external" rel="external noopener noreferrer" target="_blank">#65674</a> [Mailer] Use the configured secret to authenticate Postmark webhooks (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65666" class="reference external" rel="external noopener noreferrer" target="_blank">#65666</a> [VarDumper] Account for PHP 8.6 deprecating SplFileObject::getCsvControl() (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65695" class="reference external" rel="external noopener noreferrer" target="_blank">#65695</a> [Validator] Review and finalize Indonesian (id) translation messages (@VernSG)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65671" class="reference external" rel="external noopener noreferrer" target="_blank">#65671</a> [Form][Validator] Review Dutch (nl) translations (@andrewo0)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65680" class="reference external" rel="external noopener noreferrer" target="_blank">#65680</a> [Lock] Declare symfony/http-client in the DynamoDb bridge (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65662" class="reference external" rel="external noopener noreferrer" target="_blank">#65662</a> [HtmlSanitizer] Accept percent-encoded line breaks and tabs in the query of hostless URLs (@webdevsamran)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65660" class="reference external" rel="external noopener noreferrer" target="_blank">#65660</a> [Cache] Respect max_execution_time in LockRegistry's wait loop (@uncaught)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65653" class="reference external" rel="external noopener noreferrer" target="_blank">#65653</a> [Validator] Remove needs-review-translation state from Spanish translations (@reiarseni)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65647" class="reference external" rel="external noopener noreferrer" target="_blank">#65647</a> [Serializer] Fix max depth counting for subclasses that inherit MaxDepth metadata (@oliinykdm)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65646" class="reference external" rel="external noopener noreferrer" target="_blank">#65646</a>  Review translations for Estonian (et) (@erkia)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65651" class="reference external" rel="external noopener noreferrer" target="_blank">#65651</a> [Yaml] Quote strings that look like octal numbers when dumping (@lazerg)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65645" class="reference external" rel="external noopener noreferrer" target="_blank">#65645</a> [Validator] Review Bulgarian (bg) translations (@alkinbg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65644" class="reference external" rel="external noopener noreferrer" target="_blank">#65644</a> [Notifier] Fix escaping of MarkdownV2 markup in TelegramTransport (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65637" class="reference external" rel="external noopener noreferrer" target="_blank">#65637</a> [Console][FrameworkBundle] Fix profiling a command stopped at ConsoleEvents::COMMAND (@Spomky)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65593" class="reference external" rel="external noopener noreferrer" target="_blank">#65593</a> [Validator] Improve Serbian translation messages (@kaznovac)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65629" class="reference external" rel="external noopener noreferrer" target="_blank">#65629</a> [Validator] #65566  Review Turkish (tr) translations (@mmustafaAydogan)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65634" class="reference external" rel="external noopener noreferrer" target="_blank">#65634</a> [Validator] reviewed Polish translation units 147 and 148 (@thunderer)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65630" class="reference external" rel="external noopener noreferrer" target="_blank">#65630</a> [HttpKernel] Fix regression when a locale aware service is never initialized (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65636" class="reference external" rel="external noopener noreferrer" target="_blank">#65636</a> [Cache] Fix authenticating to the master when using Redis Sentinel (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65621" class="reference external" rel="external noopener noreferrer" target="_blank">#65621</a> [PropertyInfo] Do not prefer a static named constructor as the property mutator (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65619" class="reference external" rel="external noopener noreferrer" target="_blank">#65619</a> [PropertyInfo] Do not prefer a static named constructor as the property accessor (@lazerg)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65615" class="reference external" rel="external noopener noreferrer" target="_blank">#65615</a> [Validator] Review translations for Russian (ru) (@bifidokk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65607" class="reference external" rel="external noopener noreferrer" target="_blank">#65607</a> [HttpKernel] Capture flushed content in HttpKernelBrowser (@vencakrecl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65599" class="reference external" rel="external noopener noreferrer" target="_blank">#65599</a> [CssSelector] Fix quadratic token probing in Reader::findPattern() (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65601" class="reference external" rel="external noopener noreferrer" target="_blank">#65601</a> [VarExporter] Fix export of string parameter defaults containing escaped quotes (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65598" class="reference external" rel="external noopener noreferrer" target="_blank">#65598</a> [Filesystem] Fix makeRelative() stripping leading dots when the base path is a root (@iliaal)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65594" class="reference external" rel="external noopener noreferrer" target="_blank">#65594</a> [Validator] Improve Serbian (Cyrillic) translation messages (@kaznovac, @nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65587" class="reference external" rel="external noopener noreferrer" target="_blank">#65587</a> [Validator] Review Urdu translations (@UmairRathore)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65597" class="reference external" rel="external noopener noreferrer" target="_blank">#65597</a> [Filesystem] Keep tempnam() files private when a suffix is given (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65596" class="reference external" rel="external noopener noreferrer" target="_blank">#65596</a> [CssSelector] Cap the nesting depth of :is() and :where() (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65589" class="reference external" rel="external noopener noreferrer" target="_blank">#65589</a> [Mailer] Handle MailerSend webhooks version 2 (@ovgray)</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64370" class="reference external" rel="external noopener noreferrer" target="_blank">#64370</a> Release v5.4.53</li>
</ul>
<span id="Symfony 7.4.18"></span>
</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-7-4-18-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Sun, 30 Aug 2026 23:39:49 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-7-4-18-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 6.4.45 released]]></title>
            <link>https://symfony.com/blog/symfony-6-4-45-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 6.4.45 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="#Symfony%206.4.45" class="reference internal">Symfony 6.4.45</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-6-4-44"><a class="headerlink" href="#changelog-since-symfony-6-4-44" title="Permalink to this headline">Changelog Since Symfony 6.4.44</a></h2>
<ul>
    <li>bug <a href="https://github.com/symfony/symfony/pull/65754" class="reference external" rel="external noopener noreferrer" target="_blank">#65754</a> [PhpUnitBridge] Fix ClockMock::hrtime() when the clock is not mocked and when the nanoseconds have leading zeros (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65751" class="reference external" rel="external noopener noreferrer" target="_blank">#65751</a> [HttpClient] Reject decompression bombs (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65753" class="reference external" rel="external noopener noreferrer" target="_blank">#65753</a> [HttpFoundation] Combine trusted host patterns into a single regexp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65740" class="reference external" rel="external noopener noreferrer" target="_blank">#65740</a> [HttpClient] Reject https:// proxies that curl would connect to in cleartext (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65747" class="reference external" rel="external noopener noreferrer" target="_blank">#65747</a> [RateLimiter] Cap the burst size and the duration computed from it (@cs278, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65731" class="reference external" rel="external noopener noreferrer" target="_blank">#65731</a> [HttpClient] Don't send the original Host header on cross-authority redirects (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65742" class="reference external" rel="external noopener noreferrer" target="_blank">#65742</a> [HttpClient] Reject 3xx pushed responses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65746" class="reference external" rel="external noopener noreferrer" target="_blank">#65746</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65744" class="reference external" rel="external noopener noreferrer" target="_blank">#65744</a> [Mime] Reject an unquoted "@" in the local part of an email address (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65739" class="reference external" rel="external noopener noreferrer" target="_blank">#65739</a> [Process] Ignore invalid env var names and non-scalar env values (@nicolas-grekas, @dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65738" class="reference external" rel="external noopener noreferrer" target="_blank">#65738</a> [Process] Stop leaking CGI/FastCGI request-context vars to subprocesses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65735" class="reference external" rel="external noopener noreferrer" target="_blank">#65735</a> [Security] Avoid failing when PersistentRememberMeHandler handles a malformed cookie (@Seldaek)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65734" class="reference external" rel="external noopener noreferrer" target="_blank">#65734</a> [Security] Reject malformed login link parameters instead of throwing a TypeError (@davidszkiba, @nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65733" class="reference external" rel="external noopener noreferrer" target="_blank">#65733</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65732" class="reference external" rel="external noopener noreferrer" target="_blank">#65732</a> [SecurityBundle] Restrict redirections to the current host when sessions are disabled (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65737" class="reference external" rel="external noopener noreferrer" target="_blank">#65737</a> [HttpKernel][Security] Add allowed_classes =&gt; false to unserialize() in CacheWarmerAggregate, LoggerDataCollector, and HttpCache Store (@XananasX7)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65736" class="reference external" rel="external noopener noreferrer" target="_blank">#65736</a> [HttpKernel] Ignore the session id that PHP kept from a previous request (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65730" class="reference external" rel="external noopener noreferrer" target="_blank">#65730</a> [HttpKernel] Fix TypeError in UriSigner when the hash parameter is not a string (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65743" class="reference external" rel="external noopener noreferrer" target="_blank">#65743</a> [HttpFoundation] Encode the path in the X-Accel-Redirect header (@Athorcis)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65729" class="reference external" rel="external noopener noreferrer" target="_blank">#65729</a> [HttpFoundation] Reject reserved characters in the cookie path and domain (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65728" class="reference external" rel="external noopener noreferrer" target="_blank">#65728</a> [Routing] Fix matching the "0" URL (@cs278)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65727" class="reference external" rel="external noopener noreferrer" target="_blank">#65727</a> [Yaml] Fix a TypeError when "!!binary" is given an unparsable value (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65745" class="reference external" rel="external noopener noreferrer" target="_blank">#65745</a> [Filesystem] Keep tempnam() files private when a suffix is given (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65726" class="reference external" rel="external noopener noreferrer" target="_blank">#65726</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65741" class="reference external" rel="external noopener noreferrer" target="_blank">#65741</a> [HttpFoundation] Reject invalid paths (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65725" class="reference external" rel="external noopener noreferrer" target="_blank">#65725</a> [HttpFoundation] Fix parsing hosts and schemes in URLs (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65724" class="reference external" rel="external noopener noreferrer" target="_blank">#65724</a>  Declare the polyfills needed by the code on PHP 7.2 (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65721" class="reference external" rel="external noopener noreferrer" target="_blank">#65721</a> [Lock] Never take the reserved "__write__" member as a Redis lock token (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65718" class="reference external" rel="external noopener noreferrer" target="_blank">#65718</a> [VarDumper] Escape UTF-8 encoded C1 control characters (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65704" class="reference external" rel="external noopener noreferrer" target="_blank">#65704</a> [HttpClient] Drop credentials when a redirect changes the scheme (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65693" class="reference external" rel="external noopener noreferrer" target="_blank">#65693</a> [Messenger] Restrict what "X-Message-Stamp-*" headers can put in an envelope (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65692" class="reference external" rel="external noopener noreferrer" target="_blank">#65692</a> [Console][MonologBridge][VarDumper] Escape context strings written to the terminal (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65691" class="reference external" rel="external noopener noreferrer" target="_blank">#65691</a> [VarDumper] Escape context strings in HtmlDescriptor (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65690" class="reference external" rel="external noopener noreferrer" target="_blank">#65690</a> [ExpressionLanguage] Bound the nesting level of parsed expressions (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65689" class="reference external" rel="external noopener noreferrer" target="_blank">#65689</a> [SecurityBundle] Use a lock for login throttling by default (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65686" class="reference external" rel="external noopener noreferrer" target="_blank">#65686</a> [Serializer] Check the denormalized class is a Mime part in MimeMessageNormalizer (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65688" class="reference external" rel="external noopener noreferrer" target="_blank">#65688</a> [Yaml] Bound recursion depth in the inline lexer (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65687" class="reference external" rel="external noopener noreferrer" target="_blank">#65687</a> [HttpKernel] Validate the profiler token before using it as a file name (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65709" class="reference external" rel="external noopener noreferrer" target="_blank">#65709</a> [Mailer][Mailgun] Reject non-string signature fields instead of throwing a TypeError (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65710" class="reference external" rel="external noopener noreferrer" target="_blank">#65710</a> [Notifier][Twilio] Sign the query string as sent instead of the normalized one (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65670" class="reference external" rel="external noopener noreferrer" target="_blank">#65670</a> [Serializer] Fix deep_object_to_populate for collections of objects (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65700" class="reference external" rel="external noopener noreferrer" target="_blank">#65700</a> [Mailer][Notifier] Reject Mailgun, SendGrid and Vonage webhook requests with a stale timestamp (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65701" class="reference external" rel="external noopener noreferrer" target="_blank">#65701</a> [DoctrineBridge] Restore the tolerance for outdated remember-me tokens after concurrent requests (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65702" class="reference external" rel="external noopener noreferrer" target="_blank">#65702</a> [HtmlSanitizer] Compare schemes and hosts case-insensitively (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65705" class="reference external" rel="external noopener noreferrer" target="_blank">#65705</a> [Translation] Fix Persian (fa) translations for Form and Validator components (@amirreza-khaleghverdi)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65684" class="reference external" rel="external noopener noreferrer" target="_blank">#65684</a> [Cache][HttpFoundation] Do not unmarshall values that SodiumMarshaller cannot decrypt (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65685" class="reference external" rel="external noopener noreferrer" target="_blank">#65685</a> [Security] Narrow the race that lets a login link exceed max_uses (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65683" class="reference external" rel="external noopener noreferrer" target="_blank">#65683</a> [HttpFoundation] Allow-list the values of the "X-Sendfile-Type" header (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65682" class="reference external" rel="external noopener noreferrer" target="_blank">#65682</a> [HttpFoundation] Ignore session ids that are not usable as file names in MockFileSessionStorage (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65681" class="reference external" rel="external noopener noreferrer" target="_blank">#65681</a> [HttpKernel] Strip cache-internal headers from backend responses in HttpCache (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65655" class="reference external" rel="external noopener noreferrer" target="_blank">#65655</a> [Security] Apply "signature_properties" when a remember-me token provider is used (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65664" class="reference external" rel="external noopener noreferrer" target="_blank">#65664</a> [HtmlSanitizer] Keep rejecting denied URL characters when percent-decoding yields malformed UTF-8 (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65674" class="reference external" rel="external noopener noreferrer" target="_blank">#65674</a> [Mailer] Use the configured secret to authenticate Postmark webhooks (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65666" class="reference external" rel="external noopener noreferrer" target="_blank">#65666</a> [VarDumper] Account for PHP 8.6 deprecating SplFileObject::getCsvControl() (@nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65695" class="reference external" rel="external noopener noreferrer" target="_blank">#65695</a> [Validator] Review and finalize Indonesian (id) translation messages (@VernSG)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65671" class="reference external" rel="external noopener noreferrer" target="_blank">#65671</a> [Form][Validator] Review Dutch (nl) translations (@andrewo0)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65662" class="reference external" rel="external noopener noreferrer" target="_blank">#65662</a> [HtmlSanitizer] Accept percent-encoded line breaks and tabs in the query of hostless URLs (@webdevsamran)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65660" class="reference external" rel="external noopener noreferrer" target="_blank">#65660</a> [Cache] Respect max_execution_time in LockRegistry's wait loop (@uncaught)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65653" class="reference external" rel="external noopener noreferrer" target="_blank">#65653</a> [Validator] Remove needs-review-translation state from Spanish translations (@reiarseni)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65647" class="reference external" rel="external noopener noreferrer" target="_blank">#65647</a> [Serializer] Fix max depth counting for subclasses that inherit MaxDepth metadata (@oliinykdm)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65646" class="reference external" rel="external noopener noreferrer" target="_blank">#65646</a>  Review translations for Estonian (et) (@erkia)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65651" class="reference external" rel="external noopener noreferrer" target="_blank">#65651</a> [Yaml] Quote strings that look like octal numbers when dumping (@lazerg)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65645" class="reference external" rel="external noopener noreferrer" target="_blank">#65645</a> [Validator] Review Bulgarian (bg) translations (@alkinbg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65644" class="reference external" rel="external noopener noreferrer" target="_blank">#65644</a> [Notifier] Fix escaping of MarkdownV2 markup in TelegramTransport (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65637" class="reference external" rel="external noopener noreferrer" target="_blank">#65637</a> [Console][FrameworkBundle] Fix profiling a command stopped at ConsoleEvents::COMMAND (@Spomky)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65593" class="reference external" rel="external noopener noreferrer" target="_blank">#65593</a> [Validator] Improve Serbian translation messages (@kaznovac)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65629" class="reference external" rel="external noopener noreferrer" target="_blank">#65629</a> [Validator] #65566  Review Turkish (tr) translations (@mmustafaAydogan)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65634" class="reference external" rel="external noopener noreferrer" target="_blank">#65634</a> [Validator] reviewed Polish translation units 147 and 148 (@thunderer)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65630" class="reference external" rel="external noopener noreferrer" target="_blank">#65630</a> [HttpKernel] Fix regression when a locale aware service is never initialized (@lazerg)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65636" class="reference external" rel="external noopener noreferrer" target="_blank">#65636</a> [Cache] Fix authenticating to the master when using Redis Sentinel (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65621" class="reference external" rel="external noopener noreferrer" target="_blank">#65621</a> [PropertyInfo] Do not prefer a static named constructor as the property mutator (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65619" class="reference external" rel="external noopener noreferrer" target="_blank">#65619</a> [PropertyInfo] Do not prefer a static named constructor as the property accessor (@lazerg)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65615" class="reference external" rel="external noopener noreferrer" target="_blank">#65615</a> [Validator] Review translations for Russian (ru) (@bifidokk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65607" class="reference external" rel="external noopener noreferrer" target="_blank">#65607</a> [HttpKernel] Capture flushed content in HttpKernelBrowser (@vencakrecl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65599" class="reference external" rel="external noopener noreferrer" target="_blank">#65599</a> [CssSelector] Fix quadratic token probing in Reader::findPattern() (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65601" class="reference external" rel="external noopener noreferrer" target="_blank">#65601</a> [VarExporter] Fix export of string parameter defaults containing escaped quotes (@iliaal)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65598" class="reference external" rel="external noopener noreferrer" target="_blank">#65598</a> [Filesystem] Fix makeRelative() stripping leading dots when the base path is a root (@iliaal)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65594" class="reference external" rel="external noopener noreferrer" target="_blank">#65594</a> [Validator] Improve Serbian (Cyrillic) translation messages (@kaznovac, @nicolas-grekas)</li>
<li>minor <a href="https://github.com/symfony/symfony/pull/65587" class="reference external" rel="external noopener noreferrer" target="_blank">#65587</a> [Validator] Review Urdu translations (@UmairRathore)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/65597" class="reference external" rel="external noopener noreferrer" target="_blank">#65597</a> [Filesystem] Keep tempnam() files private when a suffix is given (@iliaal)</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64370" class="reference external" rel="external noopener noreferrer" target="_blank">#64370</a> Release v5.4.53</li>
</ul>
<span id="Symfony 6.4.45"></span>
</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-6-4-45-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Sun, 30 Aug 2026 23:23:32 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-6-4-45-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[A Week of Symfony #1026 (August 24–30, 2026)]]></title>
            <link>https://symfony.com/blog/a-week-of-symfony-1026-august-24-30-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>This week, Symfony development activity focused mostly on bug fixes, while the community celebrated a busy first week for Symfony Language Tools and the release of Symfony Reprise 1.0.0.

Symfony development highlights

This week, 112 pull requests were merged…</description>
            <content:encoded><![CDATA[
                                <p>This week, Symfony development activity focused mostly on bug fixes, while the community celebrated <a href="https://symfony.com/blog/symfony-language-tools-a-busy-first-week">a busy first week for Symfony Language Tools</a> and the release of <a href="https://symfony.com/blog/symfony-reprise-1-0-0-released">Symfony Reprise 1.0.0</a>.</p>

<h2>Symfony development highlights</h2>

<p>This week, 112 pull requests were merged (72 in code and 40 in docs) and 68 issues were closed (40 in code and 28 in docs). Excluding merges, 44 authors made additions and deletions. See details for <a href="https://github.com/symfony/symfony/pulse">code</a> and <a href="https://github.com/symfony/symfony-docs/pulse">docs</a>.</p>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/757b06ece0f393a2430d3bd15dc888403b2a0e9e">757b06e</a>: &#91;PropertyInfo&#93; do not prefer a static named constructor as the property accessor</li>
<li><a href="https://github.com/symfony/symfony/commit/0cb81e071ee254ce877ab9c0b9ab7434f9349dc3">0cb81e0</a>: &#91;PropertyInfo&#93; do not prefer a static named constructor as the property mutator</li>
<li><a href="https://github.com/symfony/symfony/commit/38bc4c0af4ab0a1c7ff3074fdb0f49d2c9c62307">38bc4c0</a>: &#91;Cache&#93; fix authenticating to the master when using Redis Sentinel</li>
<li><a href="https://github.com/symfony/symfony/commit/f0146f73e052c9c683bd66ea983f6d7ec420f9ad">f0146f7</a>: &#91;HttpKernel&#93; fix regression when a locale aware service is never initialized</li>
<li><a href="https://github.com/symfony/symfony/commit/19a9f0cad0cee4eac69c1ae6daa71329d2dc585c">19a9f0c</a>: &#91;Console, FrameworkBundle&#93; fix profiling a command stopped at ConsoleEvents::COMMAND</li>
<li><a href="https://github.com/symfony/symfony/commit/98143636d804efa26a6c35521868204c9d0f6099">9814363</a>: &#91;Notifier&#93; fix escaping of MarkdownV2 markup in TelegramTransport</li>
<li><a href="https://github.com/symfony/symfony/commit/ba62bf3fd1a2b71dee6402b53bdba3002d3c5577">ba62bf3</a>: &#91;Yaml&#93; quote strings that look like octal numbers when dumping</li>
<li><a href="https://github.com/symfony/symfony/commit/1b0bfd14969037c55060c3136df069ad9a3c1180">1b0bfd1</a>: &#91;Serializer&#93; fix max depth counting for subclasses that inherit MaxDepth metadata</li>
<li><a href="https://github.com/symfony/symfony/commit/00d9875a1b2c80d11ac934855fcb91354deb52a5">00d9875</a>: &#91;Cache&#93; respect max_execution_time in LockRegistry's wait loop</li>
<li><a href="https://github.com/symfony/symfony/commit/7ddd4dffbb2bd6aca1669c37a6dc96358ca6cbb6">7ddd4df</a>: &#91;HtmlSanitizer&#93; accept percent-encoded line breaks and tabs in the query of hostless URLs</li>
<li><a href="https://github.com/symfony/symfony/commit/338724d042fcec4e29531135b8dc7cb059a23735">338724d</a>: &#91;VarDumper&#93; account for PHP 8.6 deprecating SplFileObject::getCsvControl()</li>
<li><a href="https://github.com/symfony/symfony/commit/773f27759476617dd2947915b6debc48160ae983">773f277</a>: &#91;Mailer&#93; use the configured secret to authenticate Postmark webhooks</li>
<li><a href="https://github.com/symfony/symfony/commit/eb0a2ae90c59a17176a326776cd999ddc8d29e65">eb0a2ae</a>: &#91;HtmlSanitizer&#93; keep rejecting denied URL characters when percent-decoding yields malformed UTF-8</li>
<li><a href="https://github.com/symfony/symfony/commit/099ba8de5e403ad17fa6c820baefe2dafb36d0fc">099ba8d</a>: &#91;Security&#93; apply "signature_properties" when a remember-me token provider is used</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/dc566db8e1307041204411104264ad8a86473f36">dc566db</a>: &#91;Lock&#93; delete a DynamoDb lock only when the caller holds it</li>
<li><a href="https://github.com/symfony/symfony/commit/2bb496b24ba260eaf24fea8a5d8c319a56670d6a">2bb496b</a>: &#91;SecurityBundle&#93; make the remember-me cookie follow the session cookie defaults</li>
<li><a href="https://github.com/symfony/symfony/commit/6121e1a77816d8f5b761a21bd5b754daffb5f63d">6121e1a</a>: &#91;Messenger&#93; cover the headers that describe the message with the SigningSerializer signature</li>
<li><a href="https://github.com/symfony/symfony/commit/c3a49332a66130cc645430395d4bdc63d5082b29">c3a4933</a>: &#91;Mailer&#93; reject Mailomat webhook requests with a stale timestamp</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/e7fac28eb27adad341c7d9a79856afd9afe807fc">e7fac28</a>: &#91;HttpClient&#93; fix GuzzleHttpHandler consuming responses out of band</li>
<li><a href="https://github.com/symfony/symfony/commit/bf5c07f5ce48c2e43f2e7bb7d3815810485000e6">bf5c07f</a>: &#91;Serializer&#93; let DISABLE_TYPE_ENFORCEMENT keep strings that cannot be converted</li>
<li><a href="https://github.com/symfony/symfony/commit/efc7beee76023e8672afc70f7d50d88a1ad67e46">efc7bee</a>: &#91;Tui&#93; fix Tailwind font-weight and font-family utilities being treated as FIGlet fonts</li>
<li><a href="https://github.com/symfony/symfony/commit/49889f2105c972d2c7e9522629b79cad564d4020">49889f2</a>: &#91;VarExporter&#93; fix fatal error when loading code exported by versions &lt; 8.1</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/commit/9e3449fb520b46304f972e264a20903e32561b84">9e3449f</a>: &#91;Messenger&#93; stop deduplicating the messages sent to a FIFO SQS queue on their content by default</li>
<li><a href="https://github.com/symfony/symfony/commit/cb4d4a213fd992aa8203c7236cefdd45bffa5c7d">cb4d4a2</a>: &#91;FrameworkBundle&#93; suggest more packages for unknown commands</li>
<li><a href="https://github.com/symfony/symfony/commit/524a899b61c3ce80bb1fa43dfef667671cb49cc1">524a899</a>: &#91;Console&#93; allow dropping multiple files</li>
<li><a href="https://github.com/symfony/symfony/commit/d3341175f37f434b71048016aa44c6b8b4c63eea">d334117</a>: &#91;ErrorHandler&#93; fix what the exception page announces to assistive technologies</li>
<li><a href="https://github.com/symfony/symfony/commit/93fcc92c8bf9b9e444da19e2e24d801d39634bde">93fcc92</a>: &#91;HttpFoundation&#93; expand PRIVATE_SUBNETS with five not-globally-reachable ranges</li>
</ul>

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

<ul>
<li><a href="https://github.com/symfony/symfony/pull/65642">[FrameworkBundle] Move AssetMapper internal artefacts in build dir</a></li>
<li><a href="https://github.com/symfony/symfony/pull/65628">[Security] Dispatch RateLimitExceededEvent from LoginThrottlingListener</a></li>
<li><a href="https://github.com/symfony/symfony/pull/65633">[Messenger] Force quit messenger:consume and messenger:failed:retry on repeated SIGINT</a></li>
<li><a href="https://github.com/symfony/symfony/pull/65641">[Messenger] Add claim check support</a></li>
</ul>

<h2>Symfony CLI</h2>

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

<ul>
<li>Set up Buildx for release attestations (@fabpot)</li>
<li>Add Symfony LSP support (@fabpot)</li>
<li>Widen archive timeout test margins to avoid flaky metadata timeouts (@fabpot)</li>
<li>Use Sigstore bundles for release signing (@fabpot)</li>
<li>Simplify external tool validation (@fabpot)</li>
<li>Set up Buildx for release attestations (@fabpot)</li>
<li>Reject overflowing archive sizes (@fabpot)</li>
<li>Preserve older Upsun CLI fallbacks (@fabpot)</li>
<li>Preserve LSP arguments for case-insensitive commands (@fabpot)</li>
<li>Generalize managed external tool installation (@fabpot)</li>
<li>Cover zip extraction size overflow rejection (@fabpot)</li>
<li>Add Symfony diagnostics check command (@fabpot)</li>
</ul>

<h2>Symfony Jobs</h2>

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

<ul>
<li><strong>Symfony Developer</strong> at Steward<br>
Part-time / Temporary - $8,700 – $13,000 / month<br>
Full remote<br>
<a href="https://symfony.com/jobs/69885c2">View details</a></li>
<li><strong>Symfony Developer</strong> at ATH<br>
Contract / Freelance - €25 – €50 / hour<br>
Full remote<br>
<a href="https://symfony.com/jobs/4a82fc1">View details</a></li>
<li><strong>Lead Symfony Developer</strong> at DocuPet<br>
Full-time - CA$140,000 – CA$180,000 / year<br>
Full remote<br>
<a href="https://symfony.com/jobs/b6a97b9">View details</a></li>
</ul>

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

<h2>SymfonyCasts Updates</h2>

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

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

<ul>
<li>(Article) <a href="https://symfonycasts.com/blog/playwright-php-symfony">Playwright-PHP Changes the Game for Symfony Testing</a></li>
<li>(Video) <a href="https://symfonycasts.com/screencast/symfony8-security/login-throttling">Symfony Security: The Basics: Limiting Login Attempts</a></li>
<li>(Video) <a href="https://symfonycasts.com/screencast/symfony8-security/exit-impersonation">Symfony Security: The Basics: Exiting Impersonation &amp; IS_IMPERSONATOR</a></li>
</ul>

<h2>They talked about us</h2>

<ul>
<li><a href="https://jolicode.com/blog/migrating-from-webpack-encore-to-vite-with-reprise">Migrating from Webpack Encore to Vite with Reprise</a></li>
<li><a href="https://medium.com/@aleksander_frolov/a-modern-api-reference-for-symfony-with-scalar-975bb08afa8f">A modern API reference for Symfony with Scalar</a></li>
<li><a href="https://dev.to/alkin/catching-risky-doctrine-migrations-before-production-dc">Catching Risky Doctrine Migrations Before Production</a></li>
<li><a href="https://dev.to/sebk69/small-entity-schema-now-supports-symfony-and-doctrine-3-1cdm">Small Entity Schema now supports Symfony and Doctrine 3</a></li>
<li><a href="https://medium.com/@przemyslaw.rafal.jez/field-level-encryption-in-doctrine-without-polluting-your-domain-c0104e710c91">Field‑Level Encryption in Doctrine, Without Polluting Your Domain</a></li>
<li><a href="https://medium.com/@tiwabrayan/how-to-deploy-a-symfony-application-with-docker-and-frankenphp-34a5a2eabbe0">How to Deploy a Symfony Application with Docker and FrankenPHP</a></li>
<li><a href="https://clemenskrack.com/articles/precognition-in-symfony-validating-a-request-without-running-the-controller">Precognition in Symfony: validating a request without running the controller</a></li>
<li><a href="https://medium.com/@alkinbg/your-symfony-logs-know-more-than-you-think-0dd6eca0f95a">Your Symfony Logs Know More Than You Think</a></li>
<li><a href="https://dev.to/pentiminax/ux-driver-a-symfony-bundle-integrating-driverjs-in-symfony-applications-3pba">UX Driver: a Symfony bundle integrating Driver.js in Symfony applications</a></li>
<li><a href="https://dev.to/sebk69/gitlab-mcp-symfony-enterprise-is-now-public-a-security-hardened-mcp-for-business-development-3kpd">GitLab MCP Symfony Enterprise Is Now Public - A Security-Hardened MCP for Business Development</a></li>
<li><a href="https://nerdpress.org/2026/08/26/enable-sentry-bundle-logging/">Enable Sentry Bundle Logging</a></li>
<li><a href="https://medium.com/@alkinbg/the-lost-update-problem-in-symfony-apis-connecting-http-etags-to-doctrine-optimistic-locking-7f22b9e25200">The Lost Update Problem in Symfony APIs: Connecting HTTP ETags to Doctrine Optimistic Locking</a></li>
<li><a href="https://jolicode.com/blog/migrer-de-webpack-encore-vers-vite-avec-reprise">Migrer de Webpack Encore vers Vite avec Reprise</a></li>
<li><a href="https://medium.com/@fatihkurekci/symfony-dependencyleri-nereden-buluyor-autowiring-nas%C4%B1l-%C3%A7al%C4%B1%C5%9F%C4%B1yor-004d62a3cf89">Symfony Dependency’leri Nereden Buluyor? Autowiring Nasıl Çalışıyor?</a></li>
<li><a href="https://habr.com/ru/articles/1074402/">100% покрытия не поймали единственный баг, который был важен</a></li>
<li><a href="https://habr.com/ru/articles/1073294/">Современный API Reference в Symfony через Scalar</a></li>
</ul>

<h2>Upcoming Symfony Events</h2>

<ul>
<li><a href="https://c.sensiolabs.de/events/symfony-php-meetup-cologne-2026?lang=en">Symfony/PHP Meetup Cologne by SensioLabs</a>: Cologne, Germany (September 24, 2026)</li>
<li><a href="https://www.acseo.fr/sylius-france-community-meetup-2026-acseo/">Sylius France Community Meetup by ACSEO</a>: Aix en Provence, France (September 28, 2026)</li>
</ul>

<h2>Call to Action</h2>

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

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/a-week-of-symfony-1026-august-24-30-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Javier Eguiluz ]]></dc:creator>
            <pubDate>Sun, 30 Aug 2026 09:43:00 +0200</pubDate>
            <comments>https://symfony.com/blog/a-week-of-symfony-1026-august-24-30-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony Reprise 1.0.0 released]]></title>
            <link>https://symfony.com/blog/symfony-reprise-1-0-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Reprise was introduced on this blog a few weeks ago, and the pitch has
not changed: it is a thin plugin, not a build tool. Vite and Rsbuild
do the real work (bundling, hashing, source maps, HMR, the dev server);
Reprise only adds the Symfony glue they leave…</description>
            <content:encoded><![CDATA[
                                <p>Reprise was <a href="https://symfony.com/blog/introducing-symfony-reprise-the-symfony-integration-layer-for-modern-bundlers" class="reference external">introduced on this blog</a> a few weeks ago, and the pitch has
not changed: it is a thin plugin, not a build tool. <a href="https://vite.dev/" class="reference external" rel="external noopener noreferrer" target="_blank">Vite</a> and <a href="https://rsbuild.dev/" class="reference external" rel="external noopener noreferrer" target="_blank">Rsbuild</a>
do the real work (bundling, hashing, source maps, HMR, the dev server);
Reprise only adds the Symfony glue they leave out, the <code translate="no" class="notranslate">entrypoints.json</code>
and <code translate="no" class="notranslate">manifest.json</code> files and the Twig tags that render them, the way
Webpack Encore did.</p>
<p>That narrow scope is why 1.0 can land this soon. The bundlers underneath are
mature and battle-tested, and Reprise's own surface is small, so a few
stabilizing releases (0.6.1 through 0.8.0) were enough to settle it. Reprise
1.0.0 makes it official: the experimental notice is gone, and the public API
now follows semantic versioning and Symfony's backward compatibility
promise.</p>
<div class="section">
<h2 id="a-backward-compatibility-promise"><a class="headerlink" href="#a-backward-compatibility-promise" title="Permalink to this headline">A backward compatibility promise</a></h2>
<p>1.0 is not a new pile of features, it is a commitment. Everything an
application depends on is now covered by <a href="https://semver.org/" class="reference external" rel="external noopener noreferrer" target="_blank">semantic versioning</a> and
Symfony's <a href="https://symfony.com/bc" class="reference external">backward compatibility promise</a>: within a major version the
public API stays stable, and anything that has to change is deprecated first
and removed only in the next major.</p>
</div>
<div class="section">
<h2 id="stabilizing-toward-1-0"><a class="headerlink" href="#stabilizing-toward-1-0" title="Permalink to this headline">Stabilizing toward 1.0</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/Kocal">
                <img src="https://github.com/Kocal.png" alt="Hugo Alliaume">
            </a>
                    <a target="_blank" href="https://github.com/pyrech">
                <img src="https://github.com/pyrech.png" alt="Loïck Piera">
            </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>
             and                     <a target="_blank" class="blog-post-contributor-name" href="https://github.com/pyrech">Loïck Piera</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/reprise/pull/67">#67</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/68">#68</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/69">#69</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/70">#70</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/72">#72</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/81">#81</a>
                    ,                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/82">#82</a>
                     and                                     <a target="_blank" href="https://github.com/symfony/reprise/pull/93">#93</a>
                                                </span>
            </div>
</div>
<p>Most of the work since the announcement was not visible in the API:
end-to-end tests with Vitest and Playwright now exercise both bundlers
against a real Symfony backend on every CI run, the playground was rebuilt
as a proper Reprise and Symfony UX showcase, and Subresource Integrity got
two fixes, on the preloaded <code translate="no" class="notranslate">Link</code> headers and on module-script
preloading.</p>
<p>The first contribution from outside the maintainer landed here too, a
per-entry opt-out of copied-filename hashing for assets that need a stable
path on disk. The Webpack Encore migration guide now names every Encore
method, mapping each one to its Reprise feature or to the bundler that
handles it natively.</p>
<p>Reprise is 1.0, but still young. If you are on Encore and eyeing Vite or
Rsbuild, or starting a new project on a modern bundler, this is a good
moment to try it on something real:</p>
<div translate="no" data-loc="2" 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 require symfony/reprise
<span class="hljs-prompt">$ </span>npm install @symfony/reprise --save-dev</code></pre>
    </div>
</div>
<p>Then wire the plugin into your Vite or Rsbuild config, as the <a href="https://symfony.com/bundles/reprise/current/index.html#installation" class="reference external">installation guide</a> shows.</p>
<p>Feedback, issues and contributions are more than welcome on <a href="https://github.com/symfony/reprise" class="reference external" rel="external noopener noreferrer" target="_blank">Reprise on GitHub</a> 🚀</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-reprise-1-0-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Hugo Alliaume ]]></dc:creator>
            <pubDate>Wed, 26 Aug 2026 16:41:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-reprise-1-0-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony Language Tools: A Busy First Week]]></title>
            <link>https://symfony.com/blog/symfony-language-tools-a-busy-first-week?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>On August 17, we announced Symfony Language Tools, the official Symfony
language server.
Six days and ten releases later, version 0.16 is out. We have added a lot of features:
the server now understands applications that look less like Symfony Demo and more…</description>
            <content:encoded><![CDATA[
                                <p>On August 17, we announced <a href="https://symfony.com/blog/announcing-symfony-language-tools-the-official-symfony-lsp-server" class="reference external">Symfony Language Tools</a>, the official Symfony
language server.</p>
<p>Six days and ten releases later, version 0.16 is out. We have added a lot of features:
the server now understands applications that look less like Symfony Demo and more like yours.</p>
<div class="section">
<h2 id="twig-knows-your-php"><a class="headerlink" href="#twig-knows-your-php" title="Permalink to this headline">Twig Knows Your PHP</a></h2>
<p>Custom Twig functions and filters used to be opaque strings. Symfony Language
Tools now connects the ones defined by your application to their PHP
implementations.</p>
<p>Type a function or filter name to get completion. Hover it to see the PHP
signature and its documentation. Use Go to Definition to open the callable,
or Find All References to list its usages across templates.</p>
<p>Named arguments work too. The server understands parameters injected by Twig,
completes the remaining ones and reports unknown names.</p>
<div class="figure">
    <img alt="Completion, hover and navigation for a custom Twig function" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/twig-callables.gif">
</div>
<div class="figure">
    <img alt="Named argument completion for a custom Twig function" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/twig-named-arguments.gif">
</div>
<p>The implementation is deliberately conservative. Dynamic names and callables
are ignored.</p>
</div>
<div class="section">
<h2 id="typed-twig-templates"><a class="headerlink" href="#typed-twig-templates" title="Permalink to this headline">Typed Twig Templates</a></h2>
<p>Twig's <code translate="no" class="notranslate">types</code> tag can now describe the variables expected by a template:</p>
<div translate="no" data-loc="5" class="notranslate codeblock codeblock-length-sm codeblock-twig">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-template-tag">{% <span class="hljs-name">types</span> {
    <span class="hljs-comment">## The product displayed on this page.</span>
    product: <span class="hljs-string">'App\\Entity\\Product'</span>,
    featured?: <span class="hljs-string">'boolean'</span>,
} %}</span></code></pre>
    </div>
</div>
<p>Completion and hover include the declared type, whether the variable is
optional and its documentation.</p>
<div class="figure">
    <img alt="Twig types completion and hover" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/twig-types.gif">
</div>
</div>
<div class="section">
<h2 id="components-from-bundles"><a class="headerlink" href="#components-from-bundles" title="Permalink to this headline">Components from Bundles</a></h2>
<p>Twig component support now reads the effective runtime registry. It recognizes
anonymous components, custom renderers and components shipped by installed
bundles.</p>
<p>That includes components such as <code translate="no" class="notranslate">ux:icon</code>. Completion knows their names and
Go to Definition opens the vendor class when it is available locally.</p>
<div class="figure">
    <img alt="Completion and navigation for the ux:icon Twig component" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/twig-components.gif">
</div>
<p>Decorated Twig loaders and bundle-provided Stimulus registries are supported as
well.</p>
</div>
<div class="section">
<h2 id="real-applications-as-tests"><a class="headerlink" href="#real-applications-as-tests" title="Permalink to this headline">Real Applications as Tests</a></h2>
<p>The first version was tested against the Symfony applications that power
<code translate="no" class="notranslate">symfony.com</code> and its subdomains.</p>
<p>The test matrix is now public. Every relevant change runs the
server against pinned revisions of <a href="https://github.com/kimai/kimai" class="reference external" rel="external noopener noreferrer" target="_blank">Kimai</a>, <a href="https://github.com/mautic/mautic" class="reference external" rel="external noopener noreferrer" target="_blank">Mautic</a>, <a href="https://github.com/sulu/sulu-demo" class="reference external" rel="external noopener noreferrer" target="_blank">Sulu Demo</a>, <a href="https://github.com/Sylius/Sylius" class="reference external" rel="external noopener noreferrer" target="_blank">Sylius</a>,
<a href="https://github.com/shopware/shopware" class="reference external" rel="external noopener noreferrer" target="_blank">Shopware</a> and <a href="https://github.com/symfony/demo" class="reference external" rel="external noopener noreferrer" target="_blank">Symfony Demo</a>. Together, they cover Symfony 6.4, 7.4 and 8.1.</p>
<p>The server indexes each application from cold and warm states, boots it and
runs real completion, hover, navigation, references, code actions and rename
requests.</p>
<p>These applications quickly exposed assumptions hidden by small fixtures. The
result is support for XML service definitions, INI translation catalogs,
Doctrine XML and YAML mappings, public assets, themed Twig loaders, non-standard
kernels and configuration shorthands.</p>
</div>
<div class="section">
<h2 id="xml-services"><a class="headerlink" href="#xml-services" title="Permalink to this headline">XML Services</a></h2>
<p>Symfony Language Tools now indexes services, aliases, parameters, decorators,
tags and references declared in XML.</p>
<p>Navigation, references and rename work across XML, YAML and PHP. Completion in
XML is not supported yet.</p>
<div class="figure">
    <img alt="Navigation and rename across an XML service declaration" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/xml-services.gif">
</div>
</div>
<div class="section">
<h2 id="doctrine-beyond-attributes"><a class="headerlink" href="#doctrine-beyond-attributes" title="Permalink to this headline">Doctrine Beyond Attributes</a></h2>
<p>Doctrine support originally relied on PHP attributes. Runtime metadata now
adds entities and fields declared through XML or YAML mappings, including
entities shipped by dependencies.</p>
<p>Field completion, hover and navigation therefore work on many more projects.</p>
<div class="figure">
    <img alt="Doctrine field completion from runtime mapping" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/doctrine-runtime.gif">
</div>
</div>
<div class="section">
<h2 id="plain-old-public-assets"><a class="headerlink" href="#plain-old-public-assets" title="Permalink to this headline">Plain Old Public Assets</a></h2>
<p>Not every application uses AssetMapper. The <code translate="no" class="notranslate">asset()</code> integration now falls
back to files under <code translate="no" class="notranslate">public/</code>, so Webpack Encore and other build pipelines get
completion and navigation too.</p>
<div class="figure">
    <img alt="Completion and navigation for an asset stored under public" class="align-center" src="https://raw.githubusercontent.com/symfony/language-tools/main/editor/vscode/images/blog/0.16/public-assets.gif">
</div>
<p>Unknown paths are not reported as errors as Symfony asset packages can have their
own fallback logic.</p>
</div>
<div class="section">
<h2 id="your-php-can-stay-in-docker"><a class="headerlink" href="#your-php-can-stay-in-docker" title="Permalink to this headline">Your PHP Can Stay in Docker</a></h2>
<p>The language server is self-contained, but runtime indexing needs to boot your
application. So it meant a compatible PHP executable on the host.</p>
<p>Not anymore. Configure the PHP command and the path of the project inside the
container:</p>
<div translate="no" data-loc="6" class="notranslate codeblock codeblock-length-sm codeblock-json">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code>{
    <span class="hljs-attr">"symfonyLsp.phpCommand"</span>: [
        <span class="hljs-string">"docker"</span>, <span class="hljs-string">"compose"</span>, <span class="hljs-string">"exec"</span>, <span class="hljs-string">"-T"</span>, <span class="hljs-string">"php"</span>, <span class="hljs-string">"php"</span>
    ],
    <span class="hljs-attr">"symfonyLsp.containerProjectRoot"</span>: <span class="hljs-string">"/app"</span>
}</code></pre>
    </div>
</div>
<p>The application boots inside Docker while navigation continues to open files on
the host. The same mechanism works with a virtual machine or any isolated PHP
command.</p>
<p>Project discovery also understands more layouts: kernels outside the <code translate="no" class="notranslate">App</code>
namespace, legacy <code translate="no" class="notranslate">app/AppKernel.php</code> applications, Symfony Runtime front
controllers and FrameworkBundle installed transitively.</p>
</div>
<div class="section">
<h2 id="more-editors"><a class="headerlink" href="#more-editors" title="Permalink to this headline">More Editors</a></h2>
<p>VS Code and Neovim were available on day one. Zed now has an official extension
for Linux and macOS. It downloads the appropriate server automatically and runs
alongside Zed's PHP language server.</p>
<p>OpenCode can also start Symfony Language Tools as a custom language server. Its
coding agent gets Symfony-aware diagnostics, hover, navigation and references.
OpenCode does not request every interactive LSP feature yet, but it is already a
useful combination.</p>
<p>The standalone server remains available for any other LSP client. On Windows,
VS Code now connects to the bundled server over a local socket automatically.
The VS Code package can also be installed in VSCodium from the release VSIX.</p>
</div>
<div class="section">
<h2 id="saying-less"><a class="headerlink" href="#saying-less" title="Permalink to this headline">Saying Less</a></h2>
<p>A language server must know when to say nothing. False positives are annoying,
but false edits are dangerous.</p>
<p>This week, Symfony Language Tools learned to ignore many more uncertain cases:</p>
<ul>
    <li>PHP and Twig comments;</li>
<li>Twig <code translate="no" class="notranslate">verbatim</code> blocks;</li>
<li>dynamic Stimulus controller expressions;</li>
<li>dynamic Twig callable options;</li>
<li>unpacked or dynamic translation parameter maps;</li>
<li>files owned by dependencies.</li>
</ul>
<p>Rename and quick fixes are now kept inside application-owned files. Quick fixes
also use the unsaved editor contents and versioned edits.</p>
<p>There is more: internationalized routes use their canonical names.</p>
<p>Runtime indexing now tolerates noisy consoles, large metadata snapshots and
kernel shutdown failures. When a refresh fails, the last valid metadata remains
available.</p>
</div>
<div class="section">
<h2 id="indexing-at-scale"><a class="headerlink" href="#indexing-at-scale" title="Permalink to this headline">Indexing at Scale</a></h2>
<p>The source index is now streamed to its persistent store instead of keeping a
second complete copy in memory. Parser results are reused; ignored and
unreadable files are skipped; garbage collection runs during large scans.</p>
<p>CI generates projects with 1,500 and 6,000 source files to enforce linear
scaling and per-file memory budgets. The server memory limit is configurable,
with a default ceiling of 2 GB.</p>
<p>Live indexing is safer too. A file saved during a full scan can no longer be
overwritten by an older result. Removing a workspace folder cancels its work
and releases its indexes. New directories, changed ignore rules and
<code translate="no" class="notranslate">composer.lock</code> updates are detected without restarting the editor.</p>
<p>The Tree-sitter parser is now compiled into the server executable as well. One
binary, one process.</p>
</div>
<div class="section">
<h2 id="still-a-beta"><a class="headerlink" href="#still-a-beta" title="Permalink to this headline">Still a Beta</a></h2>
<p>Version 0.16 is a large step, but Symfony Language Tools is still a beta. We are
releasing often because every real application teaches the server something a
fixture did not.</p>
<p>Install the update, open your application and tell us where it gets confused
on the <a href="https://github.com/symfony/language-tools/issues" class="reference external" rel="external noopener noreferrer" target="_blank">issue tracker</a>.</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-language-tools-a-busy-first-week?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Sun, 23 Aug 2026 13:04:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-language-tools-a-busy-first-week?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
            </channel>
</rss>
