Svelte Framework

SvelteKit

SvelteKit est le framework d'application officiel de Svelte. Il ajoute le routage basé sur les fichiers, des fonctions de chargement côté serveur, des actions de formulaire et des adaptateurs permettant un déploiement partout.

intermediate14 min readUpdated 15 sept. 2026
+page.server.js
js
// src/routes/blog/[slug]/+page.server.js
import { error } from "@sveltejs/kit";

export async function load({ params, fetch }) {
  const res = await fetch(`/api/posts/${params.slug}`);
  if (!res.ok) throw error(404, "Post not found");

  return { post: await res.json() };
}
Basé sur
Svelte
Routeur
Basé sur les fichiers (src/routes)
Données
load functions
Mutations
Form actions
Serveur
Node, serverless, edge
Déploiement
Adaptateurs pour toute cible

Pourquoi c'est important

Pourquoi SvelteKit est la configuration Svelte par défaut

Routage sans configuration

Les dossiers et des fichiers spéciaux définissent les routes, les layouts, les états de chargement et les pages d'erreur, sans table de routage à maintenir.

Chargement de données sur le serveur

Les fonctions load s'exécutent sur le serveur ou à l'edge, ainsi les pages arrivent avec des données déjà résolues.

Adaptateurs pour chaque hôte

Un seul build peut cibler Node, l'hébergement statique, Vercel, Netlify, Cloudflare et plus encore en changeant simplement d'adaptateur.

Le tableau complet

Les trois idées fondamentales de SvelteKit

Les fichiers définissent les routes, les fonctions de chargement récupèrent les données sur le serveur, et les adaptateurs transforment la même application pour n'importe quelle cible de déploiement.

Le routeur

Navigation

Les fichiers +page, +layout et +server définissent les pages, l'UI partagée et les points de terminaison API.

Fonctions de chargement

Données

Fonctions serveur ou universelles qui récupèrent les données avant le rendu d'une page.

Adaptateurs

Déploiement

Le résultat du build est formaté pour la plateforme sur laquelle vous déployez.

SvelteKit en un coup d'œil

Ce que SvelteKit ajoute à Svelte

Routes basées sur les fichiers

src/routes mappe les dossiers et fichiers vers des URLs, incluant les paramètres dynamiques.

Layouts

Les fichiers +layout enveloppent les routes enfants et peuvent être imbriqués pour des structures partagées.

Fonctions de chargement

Récupération des données avant le rendu, sur le serveur ou dans le navigateur.

Actions de formulaire

Gestion des soumissions de formulaires sur le serveur avec amélioration progressive.

Points de terminaison API

Les fichiers +server.js exportent des gestionnaires GET, POST et d'autres méthodes HTTP.

Hooks

Exécution de logique à chaque requête pour l'authentification, les logs et les variables locales.

Un bref aperçu

De Sapper au framework officiel

  1. 2017

    Sapper

    Le premier framework d'application Svelte introduit le routage basé sur les fichiers et le SSR.

    17
  2. 2020

    Annonce de SvelteKit

    Le successeur de Sapper est conçu autour des adaptateurs et des standards du web.

    20
  3. 2021

    Bêta publique

    SvelteKit stabilise ses API de routage, de chargement et de formulaires.

    21
  4. 2022

    SvelteKit 1.0

    Une version stable devient la méthode recommandée pour construire des applications Svelte.

    22
  5. Aujourd'hui

    Couplé à Svelte 5

    SvelteKit adopte les runes et reste le framework d'application officiel.

    Aujourd'hui

Le guide complet

SvelteKit: Tout ce que vous devez savoir

Qu’est-ce que SvelteKit ?

SvelteKit est le framework d’application officiel pour Svelte. Svelte vous apporte les composants et la réactivité ; SvelteKit ajoute le routage, le chargement de données côté serveur, la gestion des formulaires, les points de terminaison API et les adaptateurs de déploiement. C’est la méthode recommandée pour construire tout projet plus complexe qu’un simple widget, et il s’intègre naturellement avec Svelte 5.

Si vous avez déjà utilisé Next.js ou Nuxt, la structure vous semblera familière. La différence réside dans une forte orientation vers les standards du web : les formulaires, les requêtes et les réponses sont des primitives de la plateforme, et SvelteKit les améliore plutôt que de les remplacer.

Routage basé sur les fichiers

Tout se trouve dans src/routes. Les dossiers deviennent des segments d’URL, et des fichiers nommés spécifiquement définissent le comportement.

src/routes/
├── +layout.svelte          # shared shell for all routes
├── +page.svelte            # /
├── about/+page.svelte      # /about
├── blog/
│   ├── +page.svelte        # /blog
│   └── [slug]/
│       ├── +page.svelte    # /blog/:slug
│       └── +page.server.js # data for that page
└── api/
    └── posts/+server.js    # GET/POST /api/posts

Le préfixe + marque les fichiers spéciaux de SvelteKit. +page.svelte rend une page, +layout.svelte enveloppe les routes enfants, +page.server.js fournit des données côté serveur uniquement, et +server.js définit un point de terminaison API.

Fonctions de chargement (Load functions)

Les fonctions de chargement récupèrent les données avant le rendu d’une page. Elles peuvent s’exécuter sur le serveur, dans le navigateur, ou les deux.

// src/routes/posts/+page.server.js
export async function load({ fetch }) {
  const res = await fetch("/api/posts");
  if (!res.ok) throw error(500, "Failed to load posts");
  return { posts: await res.json() };
}
<!-- src/routes/posts/+page.svelte -->
<script>
  let { data } = $props();
</script>

<ul>
  {#each data.posts as post (post.id)}
    <li>{post.title}</li>
  {/each}
</ul>

Comme les données sont résolues avant le rendu, le premier affichage (first paint) contient déjà du contenu. Utilisez +page.server.js lorsque le code nécessite des secrets ou une base de données, et +page.js lorsqu’il peut s’exécuter aux deux endroits. Les layouts peuvent également posséder des fonctions de chargement, et les chargements enfants reçoivent les données du parent.

Actions de formulaire

Les formulaires sont des citoyens de premier plan. Une action de formulaire s’exécute sur le serveur et gère la soumission, sans qu’aucun fetch côté client ne soit nécessaire.

// src/routes/posts/new/+page.server.js
export const actions = {
  default: async ({ request }) => {
    const data = await request.formData();
    const title = String(data.get("title") ?? "").trim();

    if (!title) {
      return { success: false, error: "Title is required" };
    }

    await db.post.create({ data: { title } });
    return { success: true };
  },
};
<!-- src/routes/posts/new/+page.svelte -->
<script>
  let { form } = $props();
</script>

<form method="POST">
  <input name="title" />
  {#if form?.error}<p class="error">{form.error}</p>{/if}
  <button>Create</button>
</form>

Le formulaire fonctionne avant même le chargement de JavaScript, et SvelteKit l’améliore une fois que le client est prêt. La valeur retournée est disponible dans la prop form de la page, ce qui rend le retour d’information sur la validation très simple.

Points de terminaison de l’API

Pour les API JSON, un fichier +server.js exporte des gestionnaires HTTP.

// src/routes/api/posts/+server.js
import { json } from "@sveltejs/kit";

export async function GET() {
  const posts = await db.post.findMany();
  return json(posts);
}

export async function POST({ request }) {
  const body = await request.json();
  const post = await db.post.create({ data: body });
  return json(post, { status: 201 });
}

Il s’agit d’objets Request et Response web standards, donc les mêmes connaissances sont transférables vers d’autres runtimes et frameworks.

Hooks

Un fichier hooks.server.js s’exécute à chaque requête. C’est l’endroit idéal pour gérer l’authentification, le logging et le remplissage de event.locals.

// src/hooks.server.js
export async function handle({ event, resolve }) {
  const session = await getSession(event.cookies);
  event.locals.user = session?.user ?? null;

  return resolve(event);
}

Tout ce que vous définissez sur locals est accessible aux fonctions de chargement (load functions) et aux actions, ce qui permet de centraliser les préoccupations transversales au lieu de les disperser dans les routes.

Rendu et adaptateurs

SvelteKit prend en charge plusieurs stratégies de rendu et vous permet de choisir celle qui convient pour chaque route :

  • SSR effectue le rendu sur le serveur et l’hydratation dans le navigateur.
  • Prerendering génère du HTML statique lors de l’étape de build.
  • CSR effectue le rendu uniquement dans le navigateur pour les routes qui désactivent les autres options.
  • Hybride mélange ces trois approches, permettant par exemple qu’une page marketing soit statique tandis qu’une route d’application soit rendue côté serveur.

Le déploiement est géré par des adapters. Installez l’adapter correspondant à votre cible — Node.js, static, Vercel, Netlify, Cloudflare et bien d’autres — configurez-le, et le même code source sera compilé pour cette plateforme. Changer d’hébergeur ne nécessite généralement qu’une seule ligne de modification.

Bonnes pratiques

  • Utilisez les fonctions load +page.server.js pour les données qui doivent rester sur le serveur.
  • Privilégiez les form actions aux requêtes POST côté client pour les mutations.
  • Gérez l’authentification et les logs dans hooks.server.js.
  • Choisissez le mode de rendu le plus restrictif possible pour chaque route.
  • Utilisez +layout.svelte pour l’UI partagée afin que l’état persiste lors de la navigation.
  • Typez les valeurs de retour de vos fonctions load lorsque vous utilisez TypeScript.
  • Installez dès le départ un adapter correspondant à votre cible de déploiement.

Erreurs courantes

  • Effectuer des appels fetch dans onMount et perdre le rendu serveur.
  • Placer des secrets dans un +page.js load universel au lieu de +page.server.js.
  • Recréer des formulaires avec des appels fetch côté client alors que les actions fonctionnent déjà.
  • Oublier de mettre des clés dans les blocs {#each}, ce qui casse les mises à jour de listes.
  • Prerender une route qui dépend de données utilisateur.
  • Ignorer les hooks et dupliquer les vérifications d’authentification dans chaque fonction load.

Et après ?

SvelteKit est la solution complète pour construire des applications avec Svelte. Approfondissez vos connaissances en Svelte, ajoutez TypeScript, et comparez son architecture avec celle de Next.js, Nuxt et Astro. Ensuite, créez une petite application comprenant une fonction load, une action de formulaire et un point de terminaison API pour voir l’ensemble du modèle en action.

Chargement de données

Une fonction load s'exécute sur le serveur avant le rendu de la page. Le chargement dans onMount arrive plus tard et provoque un flash de contenu vide.

Préférer
// +page.js
export async function load({ fetch }) {
  const res = await fetch("/api/posts");
  return { posts: await res.json() };
}
Éviter
<script>
  import { onMount } from "svelte";
  let posts = [];
  onMount(async () => {
    posts = await fetch("/api/posts")
      .then((r) => r.json());
  });
</script>

Gestion des formulaires

Une action de formulaire s'exécute sur le serveur et fonctionne sans JavaScript, puis s'améliore automatiquement quand JS est disponible.

Préférer
// +page.server.js
export const actions = {
  default: async ({ request }) => {
    const data = await request.formData();
    await createPost(data.get("title"));
  },
};
Éviter
<script>
  async function submit(e) {
    e.preventDefault();
    await fetch("/api/posts", {
      method: "POST",
      body: new FormData(e.target),
    });
  }
</script>

FAQ

Foire aux questions

Keep learning

Related topics from the roadmap.

$ commencer à apprendre

Prêt à apprendre SvelteKit ?

Notre tutoriel interactif vous guide à travers SvelteKit pas à pas — avec des quiz et du vrai code que vous pouvez exécuter dans le navigateur.