Laravel 12 vs Laravel 13 : Ce qui change vraiment pour les développeurs PHP
Laravel sort une nouvelle version majeure chaque année. En février 2025, Laravel 12 a posé des bases solides avec de nouveaux starter kits et une mise à jour des dépendances. En mars 2026, Laravel 13 franchit une étape décisive en intégrant nativement l'IA, la recherche vectorielle, les PHP Attributes sur les modèles, et bien plus encore. Dans cet article, on décortique les différences concrètes entre les deux versions, avec des exemples de code avant/après pour que tu puisses voir exactement ce qui change dans ton quotidien de développeur.

Introduction
Laravel suit un cycle de release annuel, généralement en Q1. Chaque version majeure vient avec son lot de nouveautés, de dépréciations et parfois de véritables révolutions dans la façon d'écrire du code PHP.
Laravel 12, sorti le 24 février 2025, était un release dit "maintenance-focused" : peu de changements cassants, beaucoup de mise à jour de dépendances, et des starter kits entièrement repensés.
Laravel 13, sorti le 17 mars 2026, change d'ambition. Il introduit un SDK IA natif, la recherche sémantique vectorielle, les PHP Attributes pour configurer les modèles, et plusieurs améliorations profondes sur la sécurité, les queues et Inertia v3.
Voici le guide complet de ce qui change, version par version.
1. Prérequis PHP
C'est le premier point à vérifier avant toute migration.
| Version | PHP minimum requis |
|---|---|
| Laravel 12 | PHP 8.2 |
| Laravel 13 | PHP 8.3 |
Laravel 13 abandonne complètement PHP 8.1 et 8.2. Ce choix n'est pas anodin : PHP 8.3 apporte les typed class constants, l'attribut #[Override], et la fonction json_validate(), qui permettent d'attraper des bugs à la compilation plutôt qu'en production.
# Vérifier ta version de PHP
php -v
# Mettre à jour la dépendance dans composer.json
# Laravel 12
"laravel/framework": "^12.0"
# Laravel 13
"laravel/framework": "^13.0"
2. Les nouveaux Starter Kits (Laravel 12)
Laravel 12 a complètement revu ses starter kits officiels. Breeze et Jetstream ne reçoivent plus de mises à jour majeures. À la place :
- React Starter Kit : Inertia.js + React 19 + TypeScript + Tailwind CSS
- Vue Starter Kit : Inertia.js + Vue 3 + TypeScript + Tailwind CSS
- Svelte Starter Kit : Inertia.js + Svelte + TypeScript
- Livewire Starter Kit : Livewire 3 + Blade + Tailwind CSS
Et en option sur tous les kits : WorkOS AuthKit, qui offre l'authentification sociale, les passkeys et le SSO out-of-the-box.
# Créer un nouveau projet Laravel 12 avec le kit React
laravel new mon-projet --using=react
# Avec WorkOS AuthKit
laravel new mon-projet --using=react-with-workos
Laravel 13 pousse cela encore plus loin en embarquant Inertia v3 dès le départ, avec la fonctionnalité Teams intégrée (gestion d'équipes, invitations, switch entre équipes via des onglets séparés).
3. UUIDv7 par défaut (Laravel 12)
Avant (Laravel 11 et antérieur) :
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class User extends Model
{
use HasUuids; // Générait des UUIDs v4 (aléatoires, non ordonnés)
}
Après (Laravel 12) :
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class User extends Model
{
use HasUuids; // Génère maintenant des UUIDs v7 (ordonnés, meilleurs pour les index DB)
}
// Si tu veux garder l'ancien comportement v4 :
use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids;
UUIDv7 est basé sur un timestamp, ce qui améliore significativement les performances des index dans PostgreSQL et MySQL.
4. PHP Attributes sur les modèles (Laravel 13)
C'est l'une des nouveautés les plus élégantes de Laravel 13. Tu peux maintenant configurer tes modèles, listeners, notifications, commandes Artisan avec des PHP Attributes plutôt que des propriétés de classe.
Avant (Laravel 12) :
class User extends Model
{
protected $table = 'users';
protected $primaryKey = 'user_id';
protected $keyType = 'string';
public $incrementing = false;
protected $hidden = ['password', 'remember_token'];
protected $fillable = ['name', 'email'];
}
Après (Laravel 13) :
use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Attributes\Fillable;
#[Table('users', key: 'user_id', keyType: 'string', incrementing: false)]
#[Hidden(['password', 'remember_token'])]
#[Fillable(['name', 'email'])]
class User extends Model
{
// Beaucoup plus clean, non ?
}
Idem pour les commandes Artisan :
Avant :
class SendEmails extends Command
{
protected $signature = 'mail:send {user}';
protected $description = 'Envoyer un email à un utilisateur';
}
Après (Laravel 13) :
use Illuminate\Console\Attributes\Signature;
use Illuminate\Console\Attributes\Description;
#[Signature('mail:send {user}')]
#[Description('Envoyer un email à un utilisateur')]
class SendEmails extends Command
{
//
}
Ces changements sont optionnels et non cassants. Tu peux migrer progressivement.
5. Le SDK IA natif (Laravel 13)
C'est probablement la fonctionnalité la plus marquante de Laravel 13. Un SDK IA first-party, agnostique aux providers (OpenAI, Anthropic, DeepSeek, OpenRouter...).
Génération de texte / Agent
use App\Ai\Agents\SalesCoach;
$response = SalesCoach::make()->prompt('Analyse cette transcription de vente...');
return (string) $response;
Génération d'images
use Laravel\Ai\Image;
$image = Image::of('Un coucher de soleil sur la lagune de Cotonou')->generate();
Génération audio (text-to-speech)
use Laravel\Ai\Audio;
$audio = Audio::of('Bienvenue sur DevBenin !')->generate();
$rawContent = (string) $audio;
Embeddings pour la recherche sémantique
use Laravel\Ai\Embedding;
$embedding = Embedding::of('Framework PHP pour le web')->generate();
Failover automatique entre providers
Quand un provider tombe en quota (OpenAI, Anthropic, DeepSeek...), Laravel AI bascule automatiquement sur le suivant sans aucun changement de code. Tout se configure dans config/ai.php.
6. Recherche vectorielle / sémantique (Laravel 13)
Laravel 13 intègre nativement le support des vector queries pour PostgreSQL + pgvector. Parfait pour construire des moteurs de recherche IA.
Avant (Laravel 12) :
// Passage par du SQL brut ou un package tiers
$documents = DB::select(
"SELECT * FROM documents ORDER BY embedding <=> ? LIMIT 10",
[$queryEmbedding]
);
Après (Laravel 13) :
$documents = DB::table('documents')
->whereVectorSimilarTo('embedding', 'Les meilleurs restaurants de Cotonou')
->limit(10)
->get();
Simple, expressif, Laravel-native.
7. JSON:API Resources (Laravel 13)
Laravel 13 introduit un support first-party de la spécification JSON:API, très utilisée dans les projets API-first.
Avant (Laravel 12) :
// Construction manuelle de la structure JSON:API
return response()->json([
'data' => [
'type' => 'articles',
'id' => $article->id,
'attributes' => [
'title' => $article->title,
],
],
]);
Après (Laravel 13) :
use Illuminate\Http\Resources\Json\JsonApiResource;
class ArticleResource extends JsonApiResource
{
// Sérialisation JSON:API automatique
// Relationships, sparse fieldsets, links... tout est géré
}
// Dans le controller :
return ArticleResource::make($article);
8. Queue routing par classe (Laravel 13)
Avant (Laravel 12) :
// Dans chaque job, configuration manuelle
class ProcessPayment implements ShouldQueue
{
public $connection = 'redis';
public $queue = 'payments';
}
Après (Laravel 13) :
// Dans AppServiceProvider.php, configuration centralisée
use Illuminate\Support\Facades\Queue;
Queue::route(ProcessPayment::class, queue: 'payments', connection: 'redis');
Queue::route(SendNotification::class, queue: 'notifications');
Plus besoin de toucher à chaque job individuellement. La configuration est centralisée et claire.
9. Sécurité CSRF renforcée (Laravel 13)
Avant (Laravel 12) :
// Dans Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
Après (Laravel 13) :
// Le middleware est formalisé sous le nom PreventRequestForgery
// Il ajoute une vérification basée sur l'Origin header
// tout en restant compatible avec la protection token-based
// Checklist de migration : remplacer VerifyCsrfToken par PreventRequestForgery
\Illuminate\Foundation\Http\Middleware\PreventRequestForgery::class,
10. Inertia v3 et SSR simplifié (Laravel 13)
Laravel 13 embarque Inertia.js v3 dans tous ses starter kits. Les changements notables :
- Le SSR fonctionne automatiquement pendant
npm run dev— plus besoin d'un processus Node.js séparé - Les erreurs SSR sont maintenant détaillées (composant, URL, hints)
- Axios et qs supprimés — remplacés par un client XHR interne plus léger
- Nouveau hook
useHttppour les requêtes HTTP hors cycle Inertia - Support des optimistic updates via
.optimistic()
// Optimistic update avec Inertia v3
router.post('/posts', data).optimistic((currentProps) => ({
posts: [...currentProps.posts, newPost]
}));
// L'UI se met à jour immédiatement, avant la réponse serveur.
// Si la requête échoue, le changement est annulé automatiquement.
Tableau récapitulatif
| Fonctionnalité | Laravel 12 | Laravel 13 |
|---|---|---|
| Date de sortie | 24 février 2025 | 17 mars 2026 |
| PHP minimum | 8.2 | 8.3 |
| Starter kits officiels | React, Vue, Svelte, Livewire | Idem + Teams intégré |
| Inertia | v2 | v3 |
| SDK IA natif | Non | Oui (text, image, audio, agents) |
| Recherche vectorielle | Non | Oui (pgvector natif) |
| JSON:API resources | Non | Oui |
| PHP Attributes sur modèles | Non | Oui (optionnel) |
| Queue routing centralisé | Non | Oui |
| UUIDv7 par défaut | Oui | Oui |
| Breaking changes | Minimes | Minimes (upgrade fluide) |
| Support bug fixes | Jusqu'à août 2026 | Jusqu'à Q3 2027 |
| Support sécurité | Jusqu'à février 2027 | Jusqu'à Q1 2028 |
Dois-tu migrer maintenant ?
Tu es sur Laravel 11 ou inférieur : commence par migrer vers Laravel 12. C'est l'étape la plus urgente, surtout que Laravel 10 est sorti du support de sécurité.
Tu es sur Laravel 12 : tu as le temps. Le support sécurité court jusqu'en février 2027. Prépare ta migration vers Laravel 13 en :
- Vérifiant que tes packages sont compatibles PHP 8.3
- Auditant tes usages de
named argumentssur les méthodes du framework - Remplaçant les références à
VerifyCsrfTokenparPreventRequestForgery
Tu démarres un nouveau projet : pars directement sur Laravel 13. C'est la version la plus moderne, avec l'IA native et Inertia v3 dès le premier composer create-project.
# Installer Laravel 13
composer create-project laravel/laravel mon-projet "^13.0"
# Ou avec le CLI Laravel
laravel new mon-projet
Conclusion
Entre Laravel 12 et Laravel 13, le gap est plus important qu'il n'y paraît. Laravel 12 était une mise à niveau propre et sans drama, pensée pour moderniser les outils sans bousculer les bases de code existantes. Laravel 13, lui, prend un pari clair sur l'avenir : l'IA comme citoyen de première classe dans le framework, la recherche vectorielle intégrée nativement, et une expressivité encore plus grande avec les PHP Attributes.
Pour la communauté DevBenin, c'est une bonne nouvelle. Ces outils permettent de construire des applications modernes et compétitives sans dépendre de dizaines de packages tiers. Que tu construises une API pour un projet civic tech, une plateforme e-commerce, ou une app de livraison, Laravel 13 te donne les bons outils, sans complexité supplémentaire.
L'écosystème Laravel est en bonne santé. Et ça, c'est une raison de plus de continuer à coder en PHP.
Article rédigé par la communauté DevBenin. Pour rejoindre la communauté et accéder à nos ressources, rendez-vous sur devbenin.bj.

Besoin d'un développeur pour votre prochain projet ? Je suis disponible pour des missions freelance.
Me contacterArticles similaires
Related writings that dive deeper into design decisions, workflows, and creative problem-solving. Each article expands on ideas shared throughout this project.

