Laravel 13.21 wurde am 21. Juli 2026 zusammen mit dem gleichtägigen Patch 13.21.1 veröffentlicht. Der Patch ändert lediglich die interne Versionskonstante des Frameworks und bringt keine funktionalen Neuerungen, weshalb beide Versionen hier gemeinsam behandelt werden.

Die wichtigste Neuerung ist ein #[RouteKey]-Klassenattribut für Eloquent-Modelle. Bisher musste man zur Anpassung der für implizites Route-Model-Binding verwendeten Spalte die Methode getRouteKeyName() überschreiben. Jetzt genügt es, #[RouteKey('slug')] über der Klassendefinition anzugeben – nach demselben Muster, das bereits #[ObservedBy] und #[ScopedBy] nutzen. Fehlt das Attribut, greift getRouteKeyName() weiterhin auf den Primärschlüssel zurück. Beigetragen von nimnaherath in Pull Request #60841.

Eine neue base64-Validierungsregel ergänzt die Formatprüfungen des Validators und schließt damit eine Lücke, die Bibliotheken wie Zod bereits abdecken. Sie prüft, ob ein Wert ein gültiger RFC-4648-Base64-String ist: Der Wert muss im Strict-Modus dekodierbar sein und beim erneuten Kodieren exakt denselben String ergeben, sodass fehlerhafte Padding-Zeichen die Validierung scheitern lassen. Beigetragen von lucasmichot in PR #60808.

Ein neues #[RequestAttribute]-Kontextattribut erlaubt es, Werte, die zuvor von Middleware in der Attribut-Sammlung des Requests abgelegt wurden (etwa ein per API-Key aufgelöster Mandant), direkt als typisierte Methodenparameter einzuschleusen, anstatt manuell $request->attributes->get() aufzurufen. Ein Beispiel zeigt #[RequestAttribute('org')] Organization $org in einer InventoryController::index()-Methode. Beigetragen von cosmastech in PR #60847.

Die in Laravel 13.20 eingeführte Image-Komponente unterstützte bisher nur die Konvertierung zu WebP, JPG und JPEG, obwohl die mitgelieferte Intervention-Image-Bibliothek mehr Formate beherrscht. Laravel 13.21 ergänzt die fluenten Methoden toPng(), toGif(), toAvif() und toBmp(). Zudem wird Image::extension() korrigiert, dem bislang die MIME-Zuordnung für image/avif fehlte und das für AVIF-Ausgaben fälschlich die Dateiendung .bin erzeugte. Beigetragen von Tresor-Kasenda in PR #60713.

Application::configure() hatte bisher die Klasse ApplicationBuilder fest verdrahtet, sodass Pakete, die Laravels Application-Klasse erweitern, die gesamte Methode überschreiben mussten, um den Builder auszutauschen. Eine neue protected static $applicationBuilder-Eigenschaft erlaubt Unterklassen nun, einen eigenen Builder anzugeben, ohne die bestehende Konfigurations-API zu verändern (PR #60848).

Die Komponente Illuminate\Concurrency erhält einen eigenen schreibgeschützten Git-Subsplit und reiht sich damit in die anderen als eigenständige Pakete veröffentlichten Illuminate-Komponenten ein (PR #60836).

Weitere Korrekturen: Rollback-Callbacks bei Datenbanktransaktionen feuern nun korrekt (#60777); ein neues Fehlermeldungsmuster für verlorene Verbindungen löst automatische Reconnects aus (#60819); Grammar::whereColumn() escaped nun Fragezeichen (#60832); InvalidPayloadException-Meldungen enthalten Job-Namen und Queue (#60799); die Übergabe eines Enums an LogManager::forgetChannel() wirft keinen TypeError mehr (#60801); RedisTaggedCache::decrement() unterstützt Enum-Schlüssel (#60821); Str::wordWrap() behandelt Multibyte-Strings korrekt (#60814); das Caching von Kontextattributen kollidiert nicht mehr zwischen Eigenschaften derselben Klasse (#60815); falsy-Parameter bei Concurrency-Exceptions bleiben erhalten (#60822); die Host-Port-Auflösung im serve-Befehl ist korrigiert (#60828); und ein undefinierter Index in Pipeline\Hub::pipe() ist behoben (#60802).