Qu’est-ce que Svelte ?
Svelte occupe une place à part parmi les frameworks JavaScript. Alors que React et Vue fonctionnent comme des bibliothèques d’exécution, Svelte est un compilateur : au moment du build, les composants sont transformés en pur JavaScript, ce qui évite d’envoyer un runtime de framework au navigateur. Le point le plus caractéristique est l’absence de Virtual DOM. Quand l’état change, le code généré à la compilation met à jour directement le DOM. Il en résulte une UI très légère et rapide.Cette page présente la combinaison Svelte 5 + Inertia v3, qui est la configuration par défaut du starter kit Laravel 13.
Les runes de Svelte 5
Svelte 5 (sorti en 2024) introduit un nouveau système de réactivité appelé runes. On déclare l’état réactif via des fonctions spéciales ($state, $derived, $effect, etc.). Contrairement à la réactivité implicite des versions antérieures, cette approche est explicite et plus prévisible.
Place de Svelte dans Laravel
Historique
La relation entre Svelte et Laravel est très récente comparée à Vue et React : l’intégration officielle passe par les starter kits. En 2026, avec Laravel 13, Svelte devient officiellement l’une des options frontend de l’écosystème Laravel. Il figure au même titre que Vue et React dans le prompt interactif delaravel new.
Ce framework reste peu connu des utilisateurs Laravel, mais il se distingue par une taille de bundle réduite grâce au compilateur et une syntaxe simple : en venant de Vue ou React, la quantité de code à écrire surprend souvent par sa concision.
Style dominant actuel : Inertia × Svelte
L’usage principal de Svelte avec Laravel est Inertia × Svelte. Inertia offre une architecture « monolithe moderne » où les données du contrôleur Laravel sont directement passées au composant Svelte, sans avoir à concevoir une API.Mise en place
Via un starter kit (recommandé)
Le plus simple pour un nouveau projet.inertiajs/inertia-laravel(adaptateur serveur)@inertiajs/svelte(adaptateur client)svelte+@sveltejs/vite-plugin-svelte(Svelte 5 et plugin Vite)- TypeScript +
svelte-check - Tailwind CSS + shadcn-svelte
- Middleware
HandleInertiaRequests - Écrans d’authentification (déjà implémentés en Inertia + Svelte + TypeScript)
Installation manuelle
Pour un projet existant, installez séparément côté serveur et côté client.vite.config.ts.
resources/js/app.ts. Le plugin @inertiajs/vite prenant en charge la résolution automatique des pages et le montage, l’entrée peut se limiter au strict minimum.
Pour les détails (template racine, enregistrement du middleware, etc.), consultez la documentation officielle Inertia.
Structure des répertoires
Dans le starter kit, les composants de page Svelte sont placés dansresources/js/pages/.
Inertia::render('posts/Index', [...]) correspond au composant resources/js/pages/posts/Index.svelte.
Structure d’un fichier Svelte
Un fichier.svelte se compose de trois blocs : <script>, template et <style>.
<style> étant scopé par défaut, on ne se soucie plus des collisions de noms de classes.
Syntaxe du template
Interpolation et expressions
Dans le template,{} intègre une valeur ou une expression JavaScript.
{#if} — branchement
v-if / v-else de Vue et au ternaire de React.
{#each} — rendu de liste
(post.id) sert de clé et permet un diff efficace. Équivalent au v-for de Vue et au Array.map() de React.
bind: — binding bidirectionnel
bind:value synchronise la valeur d’un élément de formulaire avec une variable réactive dans les deux sens.
v-model de Vue. En React, il fallait écrire un onChange ; Svelte l’exprime de manière déclarative avec bind:.
Composant de page — bases
Un composant de page Inertia est un composant Svelte classique. Les données passées par le contrôleur arrivent en props.Contrôleur
Composant de page Svelte
En Svelte 5, on reçoit les props avec la rune$props().
$props() pour utiliser les données transmises par le contrôleur. Aucune API REST à définir.
Composant Link
Le composant <Link> de @inertiajs/svelte déclenche la navigation en XHR sans rechargement complet.
<a>, mais seul le composant de page est remplacé en coulisses, offrant une expérience SPA.
Composant Form
Le composant <Form> de @inertiajs/svelte est l’écriture recommandée dans les écrans d’authentification du starter kit. On passe action et method en props, et le contenu se décrit avec {#snippet}.
Utilisation de base
{#snippet children({ errors, processing })} est la syntaxe de snippet Svelte — un bloc de contenu passé au composant (équivalent des slots de Vue ou des render props de React). Les valeurs errors et processing sont calculées et fournies par le composant Form. Les champs utilisent l’attribut natif name plutôt que bind:value, ce qui active la collecte standard des données de formulaire par le navigateur.
Patron du starter kit
Le starter kit utilise Wayfinder pour gérer les routes en tant qu’objets.store.form() renvoie un objet contenant action et method que l’on spread dans <Form>.
resetOnSuccess sont réinitialisés automatiquement après un envoi réussi. Utile pour les champs de mot de passe à vider.
Sans Wayfinder,
action="/login" fonctionne de la même façon.Hook useForm
Pour la gestion de formulaires, utilisez le hook useForm de @inertiajs/svelte.
Côté contrôleur
Composant de formulaire Svelte
useForm.
En cas d’erreur de validation,
useForm conserve les valeurs saisies. Combiné à bind:value, l’expérience de formulaire est fluide.
Données partagées (Shared Data)
Les données communes à toutes les pages (utilisateur connecté, messages flash) sont déclarées dans la méthodeshare() du middleware HandleInertiaRequests.
usePage().
Ces données étant présentes à chaque requête, limitez-les au strict nécessaire. Utilisez une évaluation paresseuse avec
fn() pour qu’elles ne soient évaluées qu’en cas d’accès.Réactivité de Svelte 5 (runes)
Les runes essentielles pour développer avec Inertia × Svelte.$state — état réactif
$state est automatiquement réactive : lorsque sa valeur change, le DOM est mis à jour. C’est l’équivalent de ref en Vue ou useState en React, mais sans .value : il suffit d’une affectation pour mettre à jour.
$derived — valeur dérivée
$derived recalcule automatiquement lorsque ses dépendances changent. Équivalent à computed en Vue ou useMemo en React.
$effect — effets de bord
$effect se déclenche à chaque variation d’un $state utilisé. Équivalent à useEffect en React, mais sans tableau de dépendances : les variables $state utilisées sont détectées automatiquement.
Composants shadcn-svelte
Le starter kit intègre shadcn-svelte. Cette bibliothèque a le même esprit que shadcn/ui pour React : vous copiez le code dans le projet et le personnalisez librement.Ajouter des composants
resources/js/components/ui/.
Utilisation
npx shadcn-svelte@latest add.
Conclusion
Svelte s’exprime particulièrement bien avec Laravel dans un « monolithe moderne » via Inertia. Son bundle réduit grâce au compilateur et la clarté des runes en font un choix pertinent.
Inertia × Svelte combine la simplicité du backend Laravel à l’écriture compacte de Svelte. Le starter kit permet de démarrer immédiatement, écrans d’authentification inclus.
Documentation officielle Inertia.js
Consultez la documentation officielle pour toutes les fonctionnalités d’Inertia v3.