Laravel 13.21 a été publié le 21 juillet 2026, accompagné le même jour du correctif 13.21.1, qui se contente d'incrémenter la constante de version interne du framework sans apporter de changement fonctionnel ; les deux versions sont donc traitées ensemble.

La principale nouveauté est un attribut de classe #[RouteKey] pour les modèles Eloquent. Auparavant, personnaliser la colonne utilisée pour la liaison implicite de modèle de route nécessitait de surcharger la méthode getRouteKeyName(). Il suffit désormais de déclarer #[RouteKey('slug')] au-dessus de la définition de la classe, selon le même principe déjà employé par #[ObservedBy] et #[ScopedBy]. En l'absence d'attribut, getRouteKeyName() continue de se rabattre sur la clé primaire. Contribution de nimnaherath dans la pull request #60841.

Une nouvelle règle de validation base64 rejoint les vérifications de format de chaîne du validateur, comblant un manque déjà couvert par des bibliothèques comme Zod. Elle vérifie qu'une valeur est une chaîne Base64 conforme à la RFC 4648, en exigeant un décodage en mode strict qui, réencodé, redonne exactement la même chaîne ; les erreurs de padding ou les caractères parasites font donc échouer la validation. Contribution de lucasmichot dans la PR #60808.

Un nouvel attribut contextuel #[RequestAttribute] permet d'injecter directement dans un paramètre typé des valeurs auparavant stockées dans le sac d'attributs de la requête (par exemple un tenant ou une organisation résolus par un middleware), sans appeler manuellement $request->attributes->get(). Un exemple illustre #[RequestAttribute('org')] Organization $org dans une méthode InventoryController::index(). Contribution de cosmastech dans la PR #60847.

Le composant Image, introduit dans Laravel 13.20, ne prenait en charge que la conversion vers WebP, JPG et JPEG, alors que la bibliothèque Intervention Image embarquée gère davantage de formats. Laravel 13.21 ajoute les méthodes fluides toPng(), toGif(), toAvif() et toBmp(). Cette version corrige aussi Image::extension(), qui manquait du mappage MIME image/avif et produisait à tort une extension .bin pour les sorties AVIF. Contribution de Tresor-Kasenda dans la PR #60713.

Application::configure() imposait auparavant la classe ApplicationBuilder en dur, obligeant les paquets étendant la classe Application de Laravel à surcharger toute la méthode pour la remplacer. Une nouvelle propriété protected static $applicationBuilder permet désormais aux sous-classes de fournir leur propre générateur tout en conservant l'API de configuration existante (PR #60848).

Le composant Illuminate\Concurrency dispose désormais de son propre sous-dépôt Git en lecture seule, rejoignant les autres composants Illuminate déjà publiés comme paquets indépendants (PR #60836).

Autres corrections : les callbacks de rollback des transactions de base de données se déclenchent désormais correctement (#60777) ; un nouveau motif de message de connexion perdue déclenche des reconnexions automatiques (#60819) ; Grammar::whereColumn() échappe désormais les points d'interrogation (#60832) ; les messages d'InvalidPayloadException incluent le nom du job et la file d'attente (#60799) ; passer un enum à LogManager::forgetChannel() ne provoque plus de TypeError (#60801) ; RedisTaggedCache::decrement() gère les clés de type enum (#60821) ; Str::wordWrap() traite correctement les chaînes multi-octets (#60814) ; la mise en cache des attributs contextuels ne se mélange plus entre propriétés d'une même classe (#60815) ; les paramètres falsy des exceptions de concurrence sont préservés (#60822) ; l'analyse du port hôte dans la commande serve est corrigée (#60828) ; et un index non défini dans Pipeline\Hub::pipe() est résolu (#60802).