Svelte est un framework JavaScript radicalement différent de React et Vue : il déplace le travail au moment de la compilation plutôt qu'à l'exécution. Résultat : des bundles plus légers, pas de Virtual DOM, et une syntaxe remarquablement intuitive. Svelte fascine régulièrement les développeurs dans les sondages Stack Overflow.
La philosophie Svelte
React et Vue incluent un runtime dans le bundle : la librairie elle-même s'exécute dans le navigateur. Svelte compile les composants en JavaScript vanilla optimisé au moment du build. Zero framework en production, bundle minimal, performances natives.
Cette approche svelte nécessite un outillage (compilateur) mais le résultat est spectaculaire : des applications plus légères, plus rapides, avec moins de code.
Syntaxe Svelte : intuitive et concise
<script>
let count = 0;
let name = 'monde';
// Réactivité déclarée avec $:
$: doubled = count * 2;
$: if (count > 10) console.log('Grand nombre !');
function increment() { count++; }
</script>
<h1>Bonjour {name} !</h1>
<p>Compteur : {count} (double : {doubled})</p>
<button on:click={increment}>+1</button>
<style>
h1 { color: navy; } /* Scoped automatiquement */
</style>
Notez l'absence de JSX, de useState, de className : c'est du HTML, CSS et JavaScript standard. La réactivité est déclarée avec $:.
Props et composants
<!-- Button.svelte -->
<script>
export let label = 'Cliquer';
export let variant = 'primary';
</script>
<button class="btn btn-{variant}">{label}</button>
<!-- Utilisation -->
<Button label="Envoyer" variant="success" />
Les props sont déclarées avec export let. Le binding bidirectionnel est natif avec bind:value.
Stores : état global
Les stores svelte gèrent l'état partagé entre composants sans bibliothèque externe :
// stores.js
import { writable, derived } from 'svelte/store';
export const user = writable(null);
export const isLoggedIn = derived(user, $user => $user !== null);
<script>
import { user, isLoggedIn } from './stores.js';
</script>
{#if $isLoggedIn}
<p>Bonjour {$user.name} !</p>
{/if}
Animations et transitions
Svelte intègre des primitives d'animation natives :
<script>
import { fade, fly, slide } from 'svelte/transition';
let visible = true;
</script>
{#if visible}
<div transition:fly="{{ y: 50, duration: 300 }}">Contenu animé</div>
{/if}
SvelteKit : le framework full-stack
SvelteKit est à Svelte ce que Next.js est à React : routage basé sur les fichiers, SSR, SSG, ISR, API routes et déploiement flexible. C'est la solution recommandée pour les applications svelte en production.
Pour démarrer avec Svelte et SvelteKit, la documentation officielle est excellente avec un tutoriel interactif dans le navigateur.
Conclusion
Svelte offre une expérience de développement remarquablement fluide avec ses bundles légers et sa syntaxe intuitive. Si vous cherchez une alternative à React pour votre prochain projet, Svelte mérite sérieusement d'être évalué. SvelteKit en fait une option complète pour le développement full-stack.
Svelte représente une rupture paradigmatique : le compilateur produit du JavaScript vanille optimisé, sans runtime à charger dans le navigateur. SvelteKit est le framework full-stack de référence avec file-based routing, SSR, SSG et API routes intégrés. La réactivité fine-grained de Svelte 5 avec les Runes ($state, $derived, $effect) rend la gestion d'état encore plus explicite et performante. Pour les stores partagés, svelte/store offre une API minimaliste puissante. Svelte excelle pour les applications légères où la taille du bundle est critique. Consultez la documentation SvelteKit et essayez le tutoriel interactif officiel — l'expérience d'apprentissage est parmi les meilleures de l'écosystème JavaScript moderne.
Svelte vs React vs Vue
Svelte produit des bundles 30 à 50% plus légers que React ou Vue pour des fonctionnalités équivalentes, car il n'embarque pas de runtime. En contrepartie, son écosystème est moins mature et sa communauté plus petite. Il est particulièrement adapté aux widgets embarqués, aux sites e-commerce où chaque octet compte, et aux équipes qui valorisent une syntaxe proche des standards web (HTML, CSS, JS vanilla).