Laravel 12 : ce qui change vraiment
Laravel 12 marque un tournant avec de nouveaux starter kits modernes et la fin de Breeze et Jetstream. Voici les changements importants et comment migrer depuis Laravel 11.
Les nouveaux Starter Kits
Le changement majeur de Laravel 12 est l'introduction de nouveaux starter kits qui remplacent Breeze et Jetstream. Trois options sont disponibles :
Les 3 starter kits
React : Inertia 2 + React 19 + TypeScript + shadcn/ui + Tailwind 4
Vue : Inertia 2 + Vue 3 Composition API + TypeScript + shadcn-vue + Tailwind
Livewire : Livewire + Flux UI + Tailwind
Installation
Terminal
# Nouveau projet avec menu interactif
laravel new my-app
# Ou directement avec le stack souhaité
laravel new my-app --stack=react
laravel new my-app --stack=vue
laravel new my-app --stack=livewire
Fin de Breeze et Jetstream
Laravel Breeze et Jetstream ne recevront plus de mises à jour. Les projets existants continueront de fonctionner, mais pour les nouveaux projets, utilisez les nouveaux starter kits.
React Starter Kit en détail
Le starter React est le plus complet. Il inclut une stack moderne et prête pour la production.
Stack technique
- Inertia 2 : dernière version avec support amélioré de TypeScript
- React 19 : nouvelles features (use, Server Components preview)
- TypeScript : typage strict par défaut
- Tailwind CSS 4 : nouvelle version avec config simplifiée
- shadcn/ui : composants accessibles et personnalisables
Structure des fichiers
Structure React starter
resources/js/
├── app.tsx
├── ssr.tsx
├── pages/
│ ├── auth/
│ │ ├── login.tsx
│ │ └── register.tsx
│ ├── dashboard.tsx
│ └── settings/
├── components/
│ ├── ui/ # shadcn/ui components
│ └── app-sidebar.tsx
├── layouts/
│ ├── app-layout.tsx
│ └── auth-layout.tsx
└── hooks/
└── use-appearance.ts
Layouts disponibles
Le starter inclut plusieurs variantes de layout que vous pouvez modifier.
Changer de layout sidebar
// Dans app-sidebar.tsx
// Layout par défaut
<Sidebar collapsible="icon" variant="sidebar">
// Layout inset
<Sidebar collapsible="icon" variant="inset">
// Layout floating
<Sidebar collapsible="icon" variant="floating">
Authentification WorkOS
Nouveauté majeure : une variante WorkOS AuthKit pour chaque starter kit. WorkOS offre une authentification moderne avec :
- Social login : Google, GitHub, Microsoft...
- Passkeys : authentification biométrique
- SSO : SAML, OIDC pour l'entreprise
- Gratuit jusqu'à 1 million d'utilisateurs actifs mensuels
Terminal
# Starter avec WorkOS
laravel new my-app --stack=react --auth=workos
Quand utiliser WorkOS
WorkOS : SaaS B2B avec besoin SSO, apps avec social login, projets où l'auth n'est pas le focus.
Auth Laravel classique : contrôle total, pas de dépendance externe, apps internes.
Livewire Starter Kit
Pour ceux qui préfèrent rester full PHP, le starter Livewire utilise Flux UI, une bibliothèque de composants Tailwind créée par l'équipe Livewire.
Terminal
laravel new my-app --stack=livewire
Ce qui est inclus
- Livewire 3 : dernière version stable
- Flux UI : composants UI modernes pour Livewire
- Laravel Volt : composants Livewire single-file
- Auth complète : login, register, password reset, email verification
Autres nouveautés Laravel 12
PHP 8.2 minimum
Laravel 12 requiert PHP 8.2 au minimum. Si vous êtes encore en PHP 8.1, c'est le moment de mettre à jour.
Attribut #[Scope] pour les Query Scopes
Nouvelle syntaxe pour définir les scopes locaux avec un attribut PHP.
Nouvelle syntaxe des scopes
use Illuminate\Database\Eloquent\Attributes\Scope;
class User extends Model
{
// Laravel 11 - Ancienne syntaxe
public function scopeActive(Builder $query): void
{
$query->where('active', true);
}
// Laravel 12 - Nouvelle syntaxe
#[Scope]
protected function active(Builder $query): void
{
$query->where('active', true);
}
}
Eager Loading automatique
Nouvelle option pour charger automatiquement les relations quand elles sont accédées.
app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot(): void
{
// Active l'eager loading automatique
Model::automaticallyEagerLoadRelationships();
}
SSR simplifié pour Inertia
Terminal
# Build SSR
npm run build:ssr
# Lancer le serveur SSR
php artisan inertia:start-ssr
# Ou tout en un pour le dev
composer dev:ssr
Migration depuis Laravel 11
Prérequis
- PHP 8.2+ (vérifiez avec
php -v) - Composer 2.x
- Mettez à jour vos dépendances
Étapes de migration
composer.json
{
"require": {
"php": "^8.2",
"laravel/framework": "^12.0"
}
}
Terminal
composer update
Breaking changes à surveiller
Points d'attention
1. Vérifiez la compatibilité de vos packages tiers avec Laravel 12.
2. Les scopes avec scopeNom fonctionnent toujours, mais préférez la nouvelle syntaxe.
3. Si vous utilisiez Breeze/Jetstream, votre code continue de fonctionner.
Migration progressive
Pas besoin de tout migrer d'un coup. Laravel 12 est rétrocompatible avec Laravel 11 sur la plupart des aspects.
- Mettez à jour le framework
- Testez votre application
- Adoptez les nouvelles features progressivement
- Pour un nouveau projet, utilisez les nouveaux starter kits
Faut-il migrer ?
Résumé des recommandations
Migrer si :
- Vous démarrez un nouveau projet → utilisez les nouveaux starters
- Vous voulez les dernières features PHP 8.2+
- Votre projet est bien testé et la migration est safe
Attendre si :
- Vos packages tiers ne supportent pas encore Laravel 12
- Projet critique en production sans tests exhaustifs
- Équipe pas disponible pour tester la migration
Projets existants avec Breeze/Jetstream
Votre code continue de fonctionner. Pas de migration obligatoire. Breeze et Jetstream restent utilisables, ils ne reçoivent simplement plus de nouvelles features.
Ressources
- Release notes : laravel.com/docs/12.x/releases
- Upgrade guide : laravel.com/docs/12.x/upgrade
- Starter kits : laravel.com/docs/12.x/starter-kits
- shadcn/ui : ui.shadcn.com
- Flux UI : fluxui.dev