L'équipe Laravel a publié la version 13.26.0 le 18 août 2026. La nouveauté principale est un driver de filesystem read-through qui superpose un disque primaire à un disque de secours. Les lectures interrogent d'abord le primaire, basculent sinon sur le secondaire et copient le fichier vers le primaire au passage, de sorte que le primaire se remplit paresseusement des fichiers réellement demandés. Écritures, suppressions et listings ne visent que le primaire. L'option copy => false sert depuis le secours sans promotion, pratique pour pointer un environnement de développement vers des fichiers de production. Les échecs de promotion sont ignorés par défaut ; throw_on_promotion_failure => true les expose. Contribution de @taylorotwell dans #61140, option sans copie par @jimbojsb dans #61155.

L'attribut #[DebounceFor], introduit pour les jobs dans Laravel 13.6, fonctionne désormais sur les listeners d'événements en file. Quand le même événement se déclenche en rafale, seul le dernier dispatch dans la fenêtre exécute le listener. Une méthode debounceId() borne la fenêtre par ressource, et maxWait plafonne le report possible. Le debounce s'applique par listener : les autres listeners du même événement s'exécutent toujours. Un listener avec debounce ne peut pas aussi implémenter ShouldBeUnique, sinon le dispatcher lève une LogicException. Contribution de @stevebauman dans #61169.

Queue::forward() redirige tout ce qui est dispatché vers une queue vers une autre queue, une autre connexion, ou les deux, configuré une fois dans un service provider sans toucher aux classes de jobs ni aux sites de dispatch. Il accepte des paires simples ou un tableau de correspondances et passe par le même hook que Queue::route(), donc la redirection s'applique quel que soit le chemin du job. Contribution de @jackbayliss dans #61188.

Trois améliorations de Process viennent de @xurshudyan. Les pools de processus et leurs résultats implémentent IteratorAggregate (#61184) ; auparavant, un foreach sur ProcessPoolResults itérait les propriétés publiques, inexistantes, donc une boucle censée vérifier les codes de sortie ne vérifiait rien. Un idle timeout lève désormais sa propre ProcessIdleTimedOutException au lieu de ProcessTimedOutException (#61182), distinguant un processus bloqué d'un processus lent. Le fake Process gagne assertRanCount(), assertRanInOrder() et un filtre recorded() avec callback (#61193, #61197) ; les assertions de compte et d'ordre acceptent aussi les commandes sous forme de tableau.

Eloquent gagne orWhereKey() et orWhereKeyNot(), qui remplacent le contournement orWhereIn('id', ...) (@calebdw, #61154). wherePivot() et orWherePivot() acceptent une closure recevant un builder restreint au modèle pivot, ce qui rend les scopes d'une classe pivot personnalisée utilisables depuis la requête de relation (@calebdw, #61150). inOrderOf() accepte des enums dans sa liste de valeurs (@ziadoz, #61147), et les relations exposent un accesseur getRelatedClass() (#61222).

La visibilité des workers s'améliore. Un nouvel événement JobReleased se déclenche quand un job est remis en file depuis son handler ou depuis un middleware comme WithoutOverlapping ; l'ancien JobReleasedAfterException ne couvrait que les remises causées par une exception (#61108). Les workers affichent aussi un avis quand une queue consommée est en pause puis reprise, car un worker en pause restait muet et semblait bloqué (#61142). Les deux par @jackbayliss.

Autres changements : Guzzle 8 est pris en charge aux côtés de Guzzle 7 (#60321). db:seed --class=SpecificSeeder affiche la même sortie RUNNING/DONE que les seeders imbriqués (#61186). Redis a été durci : les vérifications de queues en pause évitent les lectures cross-slot sur les clusters, le pruning des tags de cache scanne tous les nœuds maîtres sans boucler à l'infini, un pipeline en échec laisse la connexion utilisable, le client phpredis est reconstruit après une erreur de cluster, et certaines commandes réessaient sur erreurs transitoires. Le driver Cloud expose managedQueues(), les événements de queues managées remontent les données imbriquées, et les long-polls d'agents cloud expirés sont retentés. throwUnless() ne reste plus silencieux là où il devrait lever, l'ordre des clés d'entrée Request est préservé lors de la fusion de fichiers, SQL Server respecte readonly=false, les chemins JSON Postgres échappent les apostrophes, et les paramètres JSON:API en tableau ne provoquent plus de TypeError. pail n'est enregistré que si Pail est installé, artisan dev cesse de redemander l'installation de @laravel/multiplex, les erreurs de session conservent le message d'assertion d'origine, un problème de réutilisation de setTestNow() avec now() est corrigé, et expectsQuestion() accepte des réponses en tableau.

Aucun changement cassant n'est attendu pour les applications typiques. Deux cas limites : un listener avec #[DebounceFor] lève une LogicException s'il implémente aussi ShouldBeUnique, et les internes de whereKey()/whereKeyNot() ont été consolidés dans #61154, ce qui ne compte que si vous étendez le builder Eloquent et surchargez ces méthodes.