Mise à jour de l’écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.
Écouter la pageenviron 4 min
Mai 2026 apporte de grosses mises à jour pratiques : Scale-to-Zero full-stack et Managed Queues pour Laravel Cloud, optimisation des polices, pipelines multi-agents, etc.Source : Laravel May Product Updates
La nouvelle directive @fonts gère automatiquement les balises <link rel="preload">, les styles @font-face et les en-têtes HTTP/2 push nécessaires au chargement des web fonts. Elle lit le manifeste de polices généré par le plugin Vite Font et injecte tous les éléments requis en une seule opération.
{{-- Charger toutes les polices --}}@fonts{{-- Une famille de polices spécifique uniquement --}}@fonts(["sans", "mono"])
@fonts permet de ne contrôler que les polices nécessaires page par page, ce qui évite les préchargements inutiles et optimise les performances.
La nouvelle interface Interruptible permet à un job de réagir lorsqu’un worker de queue reçoit SIGTERM pendant un déploiement. Vous pouvez arrêter une boucle, libérer des verrous, sauvegarder l’état, etc. en toute sécurité avant l’arrêt du worker.
use Illuminate\Contracts\Queue\Interruptible;use Illuminate\Contracts\Queue\ShouldQueue;class ProcessLargeReport implements ShouldQueue, Interruptible{ public function handle(): void { foreach ($this->getChunks() as $chunk) { if ($this->shouldInterrupt()) { $this->saveProgress(); return; } $this->processChunk($chunk); } }}
Les routes API renvoient désormais automatiquement les réponses d’erreur au format JSON. Auparavant, certaines conditions pouvaient produire du HTML pour ces routes ; désormais, les routes définies dans api.php sont garanties de recevoir une réponse JSON.
Un nouveau store de cache storage a été ajouté. Il utilise le système de fichiers comme backend de cache tout en tirant parti de la configuration de stockage de Laravel.
Sauvegarde sur disque des grosses charges utiles SQS
Une option a été ajoutée pour sauvegarder les charges utiles SQS sur disque lorsqu’elles sont trop volumineuses (> 256 Ko). C’est utile pour traiter de gros volumes de données via la queue.
Une option --stop-when-empty a été ajoutée pour arrêter automatiquement le worker lorsque la queue devient vide. Pratique pour les traitements par lots ou les workers en CI qui doivent se terminer une fois la queue vide.
Les agents IA Laravel peuvent désormais déléguer à d’autres agents. Si vous renvoyez un agent depuis la méthode tools(), le LLM de l’agent parent l’appelle comme n’importe quel autre outil. Les contextes étant isolés, les historiques de conversation ne se mélangent pas.
class OrchestratorAgent extends Agent{ public function tools(): array { return [ new AnalysisAgent(), new WritingAgent(), new SearchTool(), ]; }}
Scale-to-Zero full-stack (démarrage en moins de 500 ms, 20× plus rapide), Managed Queues (workers auto-scalés, tableau de bord des jobs échoués), plafonds de dépenses, nouveau plan Starter à 5 $/mois
Laravel Forge
MySQL managé 8.4 (sauvegardes automatiques, réplicas en lecture, alertes), PHP 8.5 par défaut, redémarrage automatique d’Horizon lors du changement de variables d’environnement
Nightwatch
Le serveur MCP fournit des données de performance : temps d’exécution des routes, durée des requêtes, métriques d’exécution des jobs, etc.
Dernière modification le 13 juillet 2026
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Knowledge of Laravel","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/light.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=df0b7397202a6aa1c1f321620c5aa146","dark":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/dark.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=a8a0340d86ff8aa90e9adfc98a0362d7","href":"/"},"favicon":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/favicon.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=8f5a03a681c95d31803fc237b5811065","api":{"playground":{"display":"simple"}},"navbar":{},"footer":{"socials":{"github":"https://github.com/invokable"}},"seo":{"metatags":{"canonical":"https://kawax.biz"},"indexing":"all"},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"navigation":{"languages":[{"language":"jp","default":true,"href":"jp/packages/laravel-boost-copilot-cli"},{"language":"en","href":"en/packages/laravel-boost-copilot-cli"},{"language":"de","href":"de/packages/laravel-boost-copilot-cli"},{"language":"es","href":"es/packages/laravel-boost-copilot-cli"},{"language":"fr","href":"fr/packages/laravel-boost-copilot-cli"},{"language":"it","href":"it/packages/laravel-boost-copilot-cli"},{"language":"ko","href":"ko/packages/laravel-boost-copilot-cli"},{"language":"nl","href":"nl/packages/laravel-boost-copilot-cli"},{"language":"zh-Hans","href":"zh-CN/packages/laravel-boost-copilot-cli"},{"language":"zh-Hant","href":"zh-TW/packages/laravel-boost-copilot-cli"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"invokable","hasAudioNarration":true,"actualSubdomain":"invokable","customDomains":["kawax.biz"],"gitSource":{"type":"github","owner":"kawax","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af5ac4727c119ec9a1de7fe","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"en","tag":"My Packages","count":145},{"language":"jp","tag":"マイパッケージ","count":145},{"language":"de","tag":"Meine Pakete","count":100},{"language":"es","tag":"Mis paquetes","count":100},{"language":"fr","tag":"Mes packages","count":100},{"language":"it","tag":"I miei pacchetti","count":100},{"language":"ko","tag":"My 패키지","count":100},{"language":"nl","tag":"Mijn packages","count":100},{"language":"zh-Hans","tag":"我的包","count":100},{"language":"zh-Hant","tag":"我的套件","count":100},{"language":"de","tag":"Fortgeschrittene Themen","count":82},{"language":"en","tag":"Advanced Topics","count":82},{"language":"es","tag":"Temas avanzados","count":82},{"language":"fr","tag":"Sujets avancés","count":82},{"language":"it","tag":"Argomenti avanzati","count":82},{"language":"jp","tag":"応用トピック","count":82},{"language":"ko","tag":"심화 주제","count":82},{"language":"nl","tag":"Geavanceerde onderwerpen","count":82},{"language":"zh-Hans","tag":"进阶主题","count":82},{"language":"zh-Hant","tag":"進階主題","count":82},{"language":"en","tag":"VOICEVOX","count":67},{"language":"jp","tag":"VOICEVOX","count":67},{"language":"de","tag":"Leitfaden","count":61},{"language":"en","tag":"Guide","count":61},{"language":"es","tag":"Guía","count":61},{"language":"fr","tag":"Guide","count":61},{"language":"it","tag":"Guida","count":61},{"language":"jp","tag":"ガイド","count":61},{"language":"ko","tag":"가이드","count":61},{"language":"nl","tag":"Gids","count":61},{"language":"zh-Hans","tag":"指南","count":61},{"language":"zh-Hant","tag":"指南","count":61},{"language":"de","tag":"Blog","count":47},{"language":"en","tag":"Blog","count":47},{"language":"es","tag":"Blog","count":47},{"language":"fr","tag":"Blog","count":47},{"language":"it","tag":"Blog","count":47},{"language":"jp","tag":"ブログ","count":47},{"language":"ko","tag":"블로그","count":47},{"language":"nl","tag":"Blog","count":47},{"language":"zh-Hans","tag":"博客","count":47},{"language":"zh-Hant","tag":"部落格","count":47},{"language":"en","tag":"VOICEVOX Engine API Reference","count":45},{"language":"jp","tag":"VOICEVOXエンジンAPIリファレンス","count":45},{"language":"de","tag":"Paketentwicklung","count":43},{"language":"de","tag":"GitHub Copilot","count":43},{"language":"en","tag":"Package Development","count":43},{"language":"en","tag":"GitHub Copilot","count":43},{"language":"es","tag":"Desarrollo de paquetes","count":43},{"language":"es","tag":"GitHub Copilot","count":43},{"language":"fr","tag":"Développement de packages","count":43},{"language":"fr","tag":"GitHub Copilot","count":43},{"language":"it","tag":"Sviluppo di pacchetti","count":43},{"language":"it","tag":"GitHub Copilot","count":43},{"language":"jp","tag":"パッケージ開発","count":43},{"language":"jp","tag":"GitHub Copilot","count":43},{"language":"ko","tag":"패키지 개발","count":43},{"language":"ko","tag":"GitHub Copilot","count":43},{"language":"nl","tag":"Package-ontwikkeling","count":43},{"language":"nl","tag":"GitHub Copilot","count":43},{"language":"zh-Hans","tag":"包开发","count":43},{"language":"zh-Hans","tag":"GitHub Copilot","count":43},{"language":"zh-Hant","tag":"套件開發","count":43},{"language":"zh-Hant","tag":"GitHub Copilot","count":43},{"language":"de","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"en","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"es","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"fr","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"it","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"jp","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"ko","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"nl","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"zh-Hans","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"zh-Hant","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"de","tag":"Tutorial","count":35},{"language":"en","tag":"Tutorial","count":35},{"language":"es","tag":"Tutorial","count":35},{"language":"fr","tag":"Tutoriel","count":35},{"language":"it","tag":"Tutorial","count":35},{"language":"jp","tag":"チュートリアル","count":35},{"language":"ko","tag":"튜토리얼","count":35},{"language":"nl","tag":"Tutorial","count":35},{"language":"zh-Hans","tag":"教程","count":35},{"language":"zh-Hant","tag":"教學","count":35},{"language":"de","tag":"SDK","count":27},{"language":"es","tag":"SDK","count":27},{"language":"fr","tag":"SDK","count":27},{"language":"it","tag":"SDK","count":27},{"language":"ko","tag":"SDK","count":27},{"language":"nl","tag":"SDK","count":27},{"language":"zh-Hans","tag":"SDK","count":27},{"language":"zh-Hant","tag":"SDK","count":27},{"language":"de","tag":"VOICEVOX","count":22},{"language":"es","tag":"VOICEVOX","count":22},{"language":"fr","tag":"VOICEVOX","count":22},{"language":"it","tag":"VOICEVOX","count":22},{"language":"ko","tag":"VOICEVOX","count":22},{"language":"nl","tag":"VOICEVOX","count":22},{"language":"zh-Hans","tag":"VOICEVOX","count":22},{"language":"zh-Hant","tag":"VOICEVOX","count":22}],"searchSettings":{"isFiltersEnabled":false,"showContentSnippets":true,"fullPageSearch":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"fr/blog/changelog/202605","slug":"/fr/blog/changelog/202605","pageMetadata":{"title":"Mises à jour Laravel — mai 2026","description":"Mise à jour de l'écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.","sidebarTitle":"Mai 2026","href":"/fr/blog/changelog/202605"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Mise à jour de l’écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Mai 2026 apporte de grosses mises à jour pratiques : Scale-to-Zero full-stack et Managed Queues pour Laravel Cloud, optimisation des polices, pipelines multi-agents, etc.`}),`\n`,_jsxs(_components.p,{children:[`Source : `,_jsx(_components.a,{href:`https://laravel.com/blog/laravel-may-product-updates`,children:`Laravel May Product Updates`})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`laravel-framework`,children:`Laravel Framework`}),`\n`,_jsx(Heading,{level:`3`,id:`directive-blade-@fonts`,children:`Directive Blade @fonts`}),`\n`,_jsxs(_components.p,{children:[`La nouvelle directive `,_jsx(_components.code,{children:`@fonts`}),` gère automatiquement les balises `,_jsx(_components.code,{children:`\u003clink rel=\"preload\">`}),`, les styles `,_jsx(_components.code,{children:`@font-face`}),` et les en-têtes HTTP/2 push nécessaires au chargement des web fonts. Elle lit le manifeste de polices généré par le plugin Vite Font et injecte tous les éléments requis en une seule opération.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`blade`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`blade`,children:_jsxs(_components.code,{language:`blade`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`{{-- Charger toutes les polices --}}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@fonts`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`{{-- Une famille de polices spécifique uniquement --}}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@fonts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`([`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sans\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"mono\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`])`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@fonts`}),` permet de ne contrôler que les polices nécessaires page par page, ce qui évite les préchargements inutiles et optimise les performances.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`interruptible-jobs-jobs-sensibles-aux-signaux`,children:`Interruptible Jobs (jobs sensibles aux signaux)`}),`\n`,_jsxs(_components.p,{children:[`La nouvelle interface `,_jsx(_components.code,{children:`Interruptible`}),` permet à un job de réagir lorsqu’un worker de queue reçoit SIGTERM pendant un déploiement. Vous pouvez arrêter une boucle, libérer des verrous, sauvegarder l’état, etc. en toute sécurité avant l’arrêt du worker.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`16`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Contracts\\\\Queue\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Interruptible`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Contracts\\\\Queue\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ShouldQueue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` ProcessLargeReport`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` implements`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ShouldQueue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Interruptible`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` handle`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` foreach`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`$this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getChunks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $chunk`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`$this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`shouldInterrupt`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`saveProgress`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`processChunk`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$chunk`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`exceptions-json-par-défaut-pour-les-routes-api`,children:`Exceptions JSON par défaut pour les routes API`}),`\n`,_jsxs(_components.p,{children:[`Les routes API renvoient désormais automatiquement les réponses d’erreur au format JSON. Auparavant, certaines conditions pouvaient produire du HTML pour ces routes ; désormais, les routes définies dans `,_jsx(_components.code,{children:`api.php`}),` sont garanties de recevoir une réponse JSON.`]}),`\n`,_jsx(Heading,{level:`3`,id:`store-de-cache-storage`,children:`Store de cache storage`}),`\n`,_jsxs(_components.p,{children:[`Un nouveau store de cache `,_jsx(_components.code,{children:`storage`}),` a été ajouté. Il utilise le système de fichiers comme backend de cache tout en tirant parti de la configuration de stockage de Laravel.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// config/cache.php`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'stores'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'storage'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'driver'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'storage'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'disk'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'local'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'path'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'framework/cache'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`sauvegarde-sur-disque-des-grosses-charges-utiles-sqs`,children:`Sauvegarde sur disque des grosses charges utiles SQS`}),`\n`,_jsx(_components.p,{children:`Une option a été ajoutée pour sauvegarder les charges utiles SQS sur disque lorsqu’elles sont trop volumineuses (> 256 Ko). C’est utile pour traiter de gros volumes de données via la queue.`}),`\n`,_jsx(Heading,{level:`3`,id:`filtre-d’environnement-pour-les-commandes-planifiées`,children:`Filtre d’environnement pour les commandes planifiées`}),`\n`,_jsxs(_components.p,{children:[`La commande `,_jsx(_components.code,{children:`schedule:list`}),` accepte désormais un filtre par environnement.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`php`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` artisan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` schedule:list`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --environment=production`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`option-stop-when-empty-pour-les-workers`,children:`Option Stop When Empty pour les workers`}),`\n`,_jsxs(_components.p,{children:[`Une option `,_jsx(_components.code,{children:`--stop-when-empty`}),` a été ajoutée pour arrêter automatiquement le worker lorsque la queue devient vide. Pratique pour les traitements par lots ou les workers en CI qui doivent se terminer une fois la queue vide.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`php`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` artisan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` queue:work`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --stop-when-empty`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`helper-de-schéma-foreignuuidfor`,children:`Helper de schéma foreignUuidFor`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`foreignUuidFor()`}),` a été ajouté comme équivalent UUID de `,_jsx(_components.code,{children:`foreignIdFor()`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`table`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'posts'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Blueprint`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $table`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $table`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`foreignUuidFor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`User`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`constrained`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`prise-en-charge-des-sous-agents-ia`,children:`Prise en charge des sous-agents IA`}),`\n`,_jsxs(_components.p,{children:[`Les agents IA Laravel peuvent désormais déléguer à d’autres agents. Si vous renvoyez un agent depuis la méthode `,_jsx(_components.code,{children:`tools()`}),`, le LLM de l’agent parent l’appelle comme n’importe quel autre outil. Les contextes étant isolés, les historiques de conversation ne se mélangent pas.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` OrchestratorAgent`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Agent`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` tools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` array`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` AnalysisAgent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` WritingAgent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` SearchTool`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ];`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`inertia-3-x`,children:`Inertia 3.x`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Option `,_jsx(_components.code,{children:`mode`}),` de `,_jsx(_components.code,{children:`router.poll`})]}),` : permet de configurer le mode de fonctionnement du polling`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Support des données dynamiques dans `,_jsx(_components.code,{children:`usePoll`})]}),` : mise à jour dynamique des données pendant le polling`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`Inertia.once`})}),` : prise en charge d’événements qui ne se déclenchent qu’une fois`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Slot `,_jsx(_components.code,{children:`rescue`}),` de `,_jsx(_components.code,{children:`\u003cDeferred>`})]}),` : fallback lorsque les props deferred échouent`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`pao-php-agentic-output`,children:`PAO (PHP Agentic Output)`}),`\n`,_jsx(_components.p,{children:`PAO est désormais intégré par défaut dans les starter kits. De nouvelles fonctionnalités ont été ajoutées :`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Support de Rector`}),` : PAO traite également les sorties JSON de Rector`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Guidance d’agent pour PHPStan`}),` : ajout d’indications pour expliquer à l’agent comment corriger les erreurs`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Variable d’environnement `,_jsx(_components.code,{children:`PAO_FORCE`})]}),` : force l’activation du mode PAO`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Support Artisan RECTOR`}),` : PAO prend en charge les commandes Artisan`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`laravel-cloud-laravel-forge-et-nightwatch`,children:`Laravel Cloud, Laravel Forge et Nightwatch`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Produit`}),_jsx(_components.th,{children:`Principales mises à jour`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Laravel Cloud`})}),_jsx(_components.td,{children:`Scale-to-Zero full-stack (démarrage en moins de 500 ms, 20× plus rapide), Managed Queues (workers auto-scalés, tableau de bord des jobs échoués), plafonds de dépenses, nouveau plan Starter à 5 $/mois`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Laravel Forge`})}),_jsx(_components.td,{children:`MySQL managé 8.4 (sauvegardes automatiques, réplicas en lecture, alertes), PHP 8.5 par défaut, redémarrage automatique d’Horizon lors du changement de variables d’environnement`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Nightwatch`})}),_jsx(_components.td,{children:`Le serveur MCP fournit des données de performance : temps d’exécution des routes, durée des requêtes, métriques d’exécution des jobs, etc.`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Mises à jour Laravel — mai 2026","description":"Mise à jour de l'écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.","sidebarTitle":"Mai 2026","href":"/fr/blog/changelog/202605"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Laravel Framework","slug":"laravel-framework","depth":2,"children":[{"title":"Directive Blade @fonts","slug":"directive-blade-@fonts","depth":3,"children":[]},{"title":"Interruptible Jobs (jobs sensibles aux signaux)","slug":"interruptible-jobs-jobs-sensibles-aux-signaux","depth":3,"children":[]},{"title":"Exceptions JSON par défaut pour les routes API","slug":"exceptions-json-par-défaut-pour-les-routes-api","depth":3,"children":[]},{"title":"Store de cache storage","slug":"store-de-cache-storage","depth":3,"children":[]},{"title":"Sauvegarde sur disque des grosses charges utiles SQS","slug":"sauvegarde-sur-disque-des-grosses-charges-utiles-sqs","depth":3,"children":[]},{"title":"Filtre d’environnement pour les commandes planifiées","slug":"filtre-d’environnement-pour-les-commandes-planifiées","depth":3,"children":[]},{"title":"Option Stop When Empty pour les workers","slug":"option-stop-when-empty-pour-les-workers","depth":3,"children":[]},{"title":"Helper de schéma foreignUuidFor","slug":"helper-de-schéma-foreignuuidfor","depth":3,"children":[]}]},{"title":"Prise en charge des sous-agents IA","slug":"prise-en-charge-des-sous-agents-ia","depth":2,"children":[]},{"title":"Inertia 3.x","slug":"inertia-3-x","depth":2,"children":[]},{"title":"PAO (PHP Agentic Output)","slug":"pao-php-agentic-output","depth":2,"children":[]},{"title":"Laravel Cloud, Laravel Forge et Nightwatch","slug":"laravel-cloud-laravel-forge-et-nightwatch","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"narration":{"path":"fr/blog/changelog/202605","locale":"fr","estimatedDurationSec":212},"subdomain":"invokable","siteName":"Knowledge of Laravel","title":"Mises à jour Laravel — mai 2026 - Knowledge of Laravel","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"jp":{"href":"/jp/blog/changelog/202605","matchLevel":1},"en":{"href":"/en/blog/changelog/202605","matchLevel":1},"de":{"href":"/de/blog/changelog/202605","matchLevel":1},"es":{"href":"/es/blog/changelog/202605","matchLevel":1},"fr":{"href":"/fr/blog/changelog/202605","matchLevel":0},"it":{"href":"/it/blog/changelog/202605","matchLevel":1},"ko":{"href":"/ko/blog/changelog/202605","matchLevel":1},"nl":{"href":"/nl/blog/changelog/202605","matchLevel":1},"zh-Hans":{"href":"/zh-CN/blog/changelog/202605","matchLevel":1},"zh-Hant":{"href":"/zh-TW/blog/changelog/202605","matchLevel":1}}},"lastModified":"2026-07-13T21:16:47.946Z","gitLastModified":"2026-07-13T21:15:13.000Z","originalFileLocation":"fr/blog/changelog/202605.mdx","locale":"fr"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Mise à jour de l\u0026#x27;écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Mises à jour Laravel — mai 2026 - Knowledge of Laravel\">\u003cmeta data-mint-head property=\"og:description\" content=\"Mise à jour de l\u0026#x27;écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://kawax.biz/fr/blog/changelog/202605\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://invokable.mintlify.site/_mintlify/api/og/v2?division=Changelog\u0026amp;title=Mises+%C3%A0+jour+Laravel+%E2%80%94+mai+2026\u0026amp;description=Mise+%C3%A0+jour+de+l%27%C3%A9cosyst%C3%A8me+Laravel+en+mai+2026+%3A+directive+Blade+%40fonts%2C+jobs+Interruptible%2C+prise+en+charge+des+sous-agents%2C+Scale-to-Zero+sur+Cloud%2C+etc.\u0026amp;theme=cef70bdc0dd1884481ab7c5d\u0026amp;signature=e9cf7535ca917720eed0d5552f6a66b4b85517e68caf31d9c3cec365c8e8c6f9\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Mises à jour Laravel — mai 2026 - Knowledge of Laravel\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Mise à jour de l\u0026#x27;écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://invokable.mintlify.site/_mintlify/api/og/v2?division=Changelog\u0026amp;title=Mises+%C3%A0+jour+Laravel+%E2%80%94+mai+2026\u0026amp;description=Mise+%C3%A0+jour+de+l%27%C3%A9cosyst%C3%A8me+Laravel+en+mai+2026+%3A+directive+Blade+%40fonts%2C+jobs+Interruptible%2C+prise+en+charge+des+sous-agents%2C+Scale-to-Zero+sur+Cloud%2C+etc.\u0026amp;theme=cef70bdc0dd1884481ab7c5d\u0026amp;signature=e9cf7535ca917720eed0d5552f6a66b4b85517e68caf31d9c3cec365c8e8c6f9\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://kawax.biz/fr/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/fr/blog/changelog/202605.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://kawax.biz/fr/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://kawax.biz/jp/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://kawax.biz/en/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://kawax.biz/de/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://kawax.biz/es/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://kawax.biz/it/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://kawax.biz/ko/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"nl\" href=\"https://kawax.biz/nl/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https://kawax.biz/zh-CN/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hant\" href=\"https://kawax.biz/zh-TW/blog/changelog/202605\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://kawax.biz/jp/blog/changelog/202605\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://kawax.biz/#organization\",\"name\":\"Knowledge of Laravel\",\"url\":\"https://kawax.biz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/light.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=df0b7397202a6aa1c1f321620c5aa146\"}},{\"@type\":\"WebSite\",\"@id\":\"https://kawax.biz#website\",\"name\":\"Knowledge of Laravel\",\"url\":\"https://kawax.biz\",\"publisher\":{\"@id\":\"https://kawax.biz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://kawax.biz/fr/blog/changelog/202605#webpage\",\"url\":\"https://kawax.biz/fr/blog/changelog/202605\",\"name\":\"Mises à jour Laravel — mai 2026\",\"description\":\"Mise à jour de l'écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.\",\"dateModified\":\"2026-07-13T21:15:13.000Z\",\"isPartOf\":{\"@id\":\"https://kawax.biz#website\"},\"breadcrumb\":{\"@id\":\"https://kawax.biz/fr/blog/changelog/202605#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://kawax.biz/fr/blog/changelog/202605#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Changelog\",\"item\":\"https://kawax.biz/fr/blog/changelog/202610\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mises à jour Laravel — mai 2026\",\"item\":\"https://kawax.biz/fr/blog/changelog/202605\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://kawax.biz/fr/blog/changelog/202605#article\",\"headline\":\"Mises à jour Laravel — mai 2026\",\"name\":\"Mises à jour Laravel — mai 2026\",\"description\":\"Mise à jour de l'écosystème Laravel en mai 2026 : directive Blade @fonts, jobs Interruptible, prise en charge des sous-agents, Scale-to-Zero sur Cloud, etc.\",\"url\":\"https://kawax.biz/fr/blog/changelog/202605\",\"mainEntityOfPage\":{\"@id\":\"https://kawax.biz/fr/blog/changelog/202605#webpage\"},\"dateModified\":\"2026-07-13T21:15:13.000Z\",\"publisher\":{\"@id\":\"https://kawax.biz/#organization\"},\"isPartOf\":{\"@id\":\"https://kawax.biz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Knowledge of Laravel\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Knowledge of Laravel\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/fr/blog/changelog/202605.md","siteName":"Knowledge of Laravel","nav":{"global":null,"languages":[{"language":"jp","default":true,"pages":[{"title":"jp","href":"/jp/blog/changelog/202605"}]},{"language":"en","pages":[{"title":"en","href":"/en/blog/changelog/202605"}]},{"language":"de","pages":[{"title":"de","href":"/de/blog/changelog/202605"}]},{"language":"es","pages":[{"title":"es","href":"/es/blog/changelog/202605"}]},{"language":"fr","tabs":[{"tab":"Mes packages","pages":[{"title":"Mes packages","href":"/fr/packages/laravel-boost-copilot-cli"}]},{"tab":"Tutoriel","pages":[{"title":"Tutoriel","href":"/fr/introduction"}]},{"tab":"Guide","pages":[{"title":"Guide","href":"/fr/lifecycle"}]},{"tab":"Sujets avancés","pages":[{"title":"Sujets avancés","href":"/fr/advanced/mcp-server"}]},{"tab":"Blog","groups":[{"group":"Changelog","pages":[{"title":"Mises à jour Laravel — octobre 2026","sidebarTitle":"Octobre 2026","href":"/fr/blog/changelog/202610"},{"title":"Mises à jour Laravel — septembre 2026","sidebarTitle":"Septembre 2026","href":"/fr/blog/changelog/202609"},{"title":"Mises à jour Laravel — août 2026","sidebarTitle":"Août 2026","href":"/fr/blog/changelog/202608"},{"title":"Mises à jour Laravel — juillet 2026","sidebarTitle":"Juillet 2026","href":"/fr/blog/changelog/202607"},{"title":"Mises à jour Laravel — juin 2026","description":"Mise à jour de l'écosystème Laravel en juin 2026 : Bus::bulk(), prise en charge du pooler de transactions Postgres, client/serveur MCP, commande artisan dev, métadonnées de routes, etc.","sidebarTitle":"Juin 2026","href":"/fr/blog/changelog/202606"},{"title":"Mises à jour Laravel — mai 2026","sidebarTitle":"Mai 2026","href":"/fr/blog/changelog/202605"},{"title":"Mises à jour Laravel — avril 2026","description":"Mise à jour de l'écosystème Laravel en avril 2026 : Passkeys (authentification sans mot de passe), Debounceable Jobs, MCP UI App, prise en charge de Redis Cluster, etc.","sidebarTitle":"Avril 2026","href":"/fr/blog/changelog/202604"},{"title":"Mises à jour Laravel — mars 2026","sidebarTitle":"Mars 2026","href":"/fr/blog/changelog/202603"}]},{"group":"Laravel 13","pages":[{"title":"Les nouveautés de Laravel 13","href":"/fr/blog/laravel-13-new-features"}]},{"group":"Produits","pages":[{"title":"Laravel Cloud — Vue d'ensemble de la PaaS dédiée à Laravel","href":"/fr/blog/laravel-cloud"},{"title":"Laravel Cloud Hibernation (mise en veille automatique)","href":"/fr/blog/laravel-cloud-hibernation"},{"title":"Introduction à Laravel Nightwatch","href":"/fr/blog/nightwatch-introduction"},{"title":"Laravel Cloud CLI — piloter Laravel Cloud depuis le terminal","href":"/fr/blog/laravel-cloud-cli"},{"title":"Les agents IA passent du code « correct » au code « idiomatique Laravel » — le prochain cap de Boost Benchmarks","sidebarTitle":"Le prochain cap de Boost Benchmarks","href":"/fr/blog/boost-benchmarks-idiomatic-laravel"},{"title":"Les agents IA Laravel prennent en charge les serveurs MCP","href":"/fr/blog/ai-sdk-mcp-client"}]},{"group":"Présentation des packages","pages":[{"title":"⚡Introduction à Livewire 4 — créer des UI réactives sans JavaScript","href":"/fr/blog/livewire-introduction"},{"title":"Construire une SPA avec Inertia.js","href":"/fr/blog/inertia-introduction"},{"title":"Se lancer dans les tests Laravel avec Pest PHP","href":"/fr/blog/pest-introduction"},{"title":"Cas d'usage pratiques de Laravel Pennant","href":"/fr/blog/laravel-pennant"},{"title":"Techniques pratiques de Laravel Telescope","href":"/fr/blog/telescope-introduction"},{"title":"Présentation de Laravel Wayfinder","href":"/fr/blog/wayfinder-introduction"},{"title":"Présentation du package Blaze","href":"/fr/blog/blaze-introduction"}]},{"group":"Étude de nouveaux dépôts","pages":[{"title":"Laravel Multiplex — un TUI pour piloter tous vos processus de développement local","href":"/fr/blog/multiplex-introduction"},{"title":"Laravel Maestro — l'orchestrateur de développement des starter kits","href":"/fr/blog/maestro-introduction"},{"title":"laravel/agent-skills — la collection officielle de skills d'agents IA Laravel","href":"/fr/blog/agent-skills-introduction"},{"title":"Le nouvel écosystème d'analyse de code Laravel — surveyor / ranger / roster","href":"/fr/blog/laravel-ecosystem-analysis"},{"title":"Laravel Sentinel — analyse du middleware de protection des routes","href":"/fr/blog/sentinel-introduction"},{"title":"Première analyse de Laravel Passkeys (passkeys-server + @laravel/passkeys)","href":"/fr/blog/passkeys-introduction"},{"title":"Laravel Agent Detector — package de détection d'agents IA","href":"/fr/blog/agent-detector-introduction"},{"title":"Laravel PAO — outil d'optimisation des sorties pour les agents IA","href":"/fr/blog/pao-introduction"},{"title":"Laravel Chisel — la bibliothèque de scripts post-installation des starter kits","sidebarTitle":"Laravel Chisel","href":"/fr/blog/chisel-introduction"},{"title":"Laravel LSP — Extension des fonctionnalités d'IDE via le Language Server Protocol","href":"/fr/blog/laravel-lsp-introduction"},{"title":"laravel/symfony-on-cloud — faire tourner une application Symfony sur Laravel Cloud","href":"/fr/blog/symfony-on-cloud-introduction"},{"title":"Laravel Package Skeleton — le template de démarrage pour packages officiels","sidebarTitle":"Laravel Package Skeleton","href":"/fr/blog/package-skeleton-introduction"},{"title":"Laravel Doctor — l'outil de diagnostic d'application","href":"/fr/blog/laravel-doctor-introduction"},{"title":"cpx 2.0 — Composer Package Executor entièrement réécrit","sidebarTitle":"cpx 2.0","href":"/fr/blog/cpx-introduction"}]},{"group":"Guides de mise à jour","pages":[{"title":"Guide de mise à niveau de Laravel 12 vers 13","href":"/fr/blog/upgrade-12-to-13"},{"title":"Guide de mise à niveau de Laravel 11 à 12","href":"/fr/blog/upgrade-11-to-12"},{"title":"Mise à niveau de Laravel 10 à 11","href":"/fr/blog/upgrade-10-to-11"},{"title":"Mise à niveau de Laravel 9 vers 10","href":"/fr/blog/upgrade-9-to-10"},{"title":"Mise à niveau de Laravel 8 vers 9","href":"/fr/blog/upgrade-8-to-9"}]},{"group":"Authentification","pages":[{"title":"Guide de migration de laravel/ui vers Fortify","href":"/fr/blog/ui-to-fortify"}]},{"group":"Frontend","pages":[{"title":"Introduction à Vue.js — les bases pour l'utiliser avec Inertia × Laravel","href":"/fr/blog/vue-introduction"},{"title":"Introduction à React — bases pour l'utiliser avec Inertia × Laravel","href":"/fr/blog/react-introduction"},{"title":"Introduction à Svelte — bases pour l'utiliser avec Inertia × Laravel","href":"/fr/blog/svelte-introduction"}]},{"group":"Configuration de l'environnement","pages":[{"title":"Installer PHP, Composer et Node.js avec Homebrew (macOS)","href":"/fr/blog/mac-setup"},{"title":"Installer PHP, Composer et Node.js avec WSL (Windows)","href":"/fr/blog/windows-setup"}]}]}]},{"language":"it","pages":[{"title":"it","href":"/it/blog/changelog/202605"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/blog/changelog/202605"}]},{"language":"nl","pages":[{"title":"nl","href":"/nl/blog/changelog/202605"}]},{"language":"zh-Hans","pages":[{"title":"zh-Hans","href":"/zh-CN/blog/changelog/202605"}]},{"language":"zh-Hant","pages":[{"title":"zh-Hant","href":"/zh-TW/blog/changelog/202605"}]}]},"basePath":"","title":"Mises à jour Laravel — mai 2026 - Knowledge of Laravel","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["2bfc744e19"],"chunks":["NarrationPlayer-CfOFO133.js","types-CiTgMxws.js","shallow-dY3TMRCk.js"]}