Svelte 5: perché scegliere Svelte come framework frontend nel 2025
Nel panorama del web development, i framework JavaScript cambiano rapidamente per soddisfare esigenze sempre più elevate di prestazioni, scalabilità e usabilità. Nel 2026, Svelte 5 si afferma come una delle soluzioni più interessanti del panorama frontend. Rilasciato a ottobre 2024, Svelte 5 introduce i Runes — primitive di reattività esplicite come $state, $derived ed $effect — che rendono il codice più prevedibile rispetto alla reattività implicita di Svelte 4.
A differenza di React e Vue (che si basano su una virtual DOM) o Angular (che usa un approccio più “enterprise”), Svelte compila i componenti in JavaScript ottimizzato, riducendo al minimo il lavoro del browser. In altre parole, Svelte 5 sposta la logica di rendering al momento della compilazione, offrendo un’ottima performance anche su dispositivi meno potenti.
Se vuoi approfondire la scena dei framework JS emergenti, ti consiglio di leggere:
Framework JS emergenti: panoramica Svelte, Astro e Qwik
Svelte 5 vs React, Vue e Angular: le differenze principali
- Compilazione al build-time: Svelte trasforma i componenti in JavaScript puro durante la fase di build, producendo bundle leggeri e veloci.
- Sintassi intuitiva: i file
.svelteintegrano HTML, CSS e JS, semplificando la manutenzione del codice. - Reattività nativa: basta dichiarare variabili; Svelte si occupa degli aggiornamenti DOM senza bisogno di setState o watcher.
- Performance: con un bundle più piccolo e meno overhead di runtime, Svelte 5 risulta ideale per ottimizzare i Core Web Vitals.
Per un confronto tra i migliori framework JavaScript nel 2026, consulta:
I Migliori Framework JavaScript per il 2026: Quale Scegliere per il Tuo Prossimo Progetto?
Iniziare con Svelte 5: installazione e configurazione
Per creare un progetto basato su Svelte, esistono due modalità principali:
- Usare sv, il nuovo CLI ufficiale di Svelte 5:
npx sv create nome-progetto - Usare un tool di bundling moderno come Vite o Rollup
Esempio con degit:
npx sv create nome-progetto-svelte
cd nome-progetto-svelte
npm install
npm run devQuesto comando genera la struttura base con App.svelte e una configurazione minima.
Creare un progetto base in Svelte 5: file e convenzioni
All’interno della cartella troverai:
public/: conterrà l’index.htmle le risorse statichesrc/: contiene i file.sveltee il filemain.jsomain.tsrollup.config.js(ovite.config.jsse usi Vite): configurazione base per la build
Esempio di un file App.svelte:
<script>
let name = 'CyberAlchimista';
</script>
<style>
h1 {
color: #ff3e00;
}
</style>
<h1>Ciao {name}!</h1>Svelte organizza HTML, CSS e JavaScript in un unico file .svelte, promuovendo un approccio modulare. Se intendi sviluppare un’app più articolata, puoi suddividere i componenti in cartelle (components/, store/, pages/) e utilizzare routing con SvelteKit.
Principali caratteristiche di Svelte 5: reattività e prestazioni
Reactive Statements e Runes in Svelte 5
I Reactive Statements (identificati da $:) consentono di eseguire codice al variare di una o più variabili:
<script>
let count = 0;
$: double = count * 2;
function increment() {
count++;
}
</script>
<p>Contatore: {count}</p>
<p>Doppio: {double}</p>
<button on:click={increment}>Incrementa</button>In questo esempio, double si aggiorna automaticamente a ogni modifica di count.
Novità Svelte 5 — Runes: In Svelte 5, la sintassi $: è deprecata in favore dei Runes, primitive di reattività esplicite e più potenti:
<script>
let count = $state(0);
let double = $derived(count * 2);
function increment() {
count++;
}
</script>
<p>Contatore: {count}</p>
<p>Doppio: {double}</p>
<button onclick={increment}>Incrementa</button>Store in Svelte 5: gestione dello stato globale
Svelte introduce il concetto di Store, utile per gestire uno stato condiviso fra più componenti:
// store.js
import { writable } from 'svelte/store';
export const userStore = writable({ name: 'Alice', loggedIn: false });Nei componenti, basta importare userStore e utilizzare la sintassi $userStore:
<script>
import { userStore } from './store.js';
function login() {
userStore.update(user => ({ ...user, loggedIn: true }));
}
</script>
{#if $userStore.loggedIn}
<p>Benvenuto, {$userStore.name}!</p>
{:else}
<button on:click={login}>Accedi</button>
{/if}Componenti dinamici in Svelte 5
Creare componenti riutilizzabili è facile, grazie a proprietà (props) e slot:
<!-- Button.svelte -->
<script>
export let label = 'Cliccami';
export let color = '#ff3e00';
</script>
<button style="background-color: {color};">
{label}
</button>Nel componente genitore:
<script>
import Button from './Button.svelte';
</script>
<Button label="Salva" color="#007bff" />
<Button label="Annulla" color="#ccc" />Transizioni e animazioni in Svelte 5
Svelte fornisce helper come fade, slide, scale e consente di creare animazioni personalizzate:
<script>
import { fade } from 'svelte/transition';
let visible = true;
</script>
<button on:click={() => visible = !visible}>Toggle</button>
{#if visible}
<p transition:fade>Dati sensibili</p>
{/if}Se vuoi saperne di più sulle animazioni CSS in generale, leggi Animazioni CSS moderne: guida pratica oppure, per animazioni JavaScript avanzate, Animazioni JavaScript Avanzate con GSAP: Guida Completa.
Esempio pratico: creare una To-Do App
Vediamo ora come realizzare una semplice To-Do App con Svelte.
Struttura dei file
src/
App.svelte
TodoItem.svelte
store.js
main.jsstore.js
import { writable } from 'svelte/store';
export const todos = writable([
{ id: 1, text: 'Studiare Svelte', done: false },
{ id: 2, text: 'Preparare nuova feature', done: false },
]);TodoItem.svelte
<script>
export let todo;
export let toggleDone;
export let remove;
</script>
<div>
<input
type="checkbox"
bind:checked={todo.done}
on:change={() => toggleDone(todo.id)}
/>
<span>{todo.text}</span>
<button on:click={() => remove(todo.id)}>x</button>
</div>App.svelte
<script>
import { todos } from './store.js';
import TodoItem from './TodoItem.svelte';
import { fade } from 'svelte/transition';
let newTodoText = '';
function addTodo() {
if (!newTodoText.trim()) return;
todos.update(items => {
const id = items.length ? items[items.length - 1].id + 1 : 1;
return [...items, { id, text: newTodoText, done: false }];
});
newTodoText = '';
}
function toggleDone(id) {
todos.update(items => items.map(
todo => todo.id === id ? { ...todo, done: !todo.done } : todo
));
}
function remove(id) {
todos.update(items => items.filter(todo => todo.id !== id));
}
</script>
<h1>To-Do App</h1>
<input
type="text"
bind:value={newTodoText}
placeholder="Aggiungi una nuova task"
/>
<button on:click={addTodo}>Aggiungi</button>
{#each $todos as todo (todo.id)}
<div transition:fade>
<TodoItem
todo={todo}
toggleDone={toggleDone}
remove={remove}
/>
</div>
{/each}Vantaggi e svantaggi rispetto ad altri framework
Vantaggi
- Performance: la compilazione di Svelte 5 riduce la dimensione dei bundle e rende le app più veloci.
- Codice pulito: HTML, CSS e JS in un solo file
.svelte, con reattività integrata. - Curva di apprendimento rapida: chi conosce HTML/CSS/JS può facilmente iniziare.
- Meno “concettuale”: senza virtual DOM, la gestione dello stato è più semplice.
Svantaggi
- Ecosistema giovane: rispetto a React o Angular, l’ecosistema di librerie e plugin è meno esteso.
- Community più piccola: sebbene in crescita, la base utenti è ancora inferiore rispetto ad altri framework.
- Adozione enterprise: molte grandi aziende continuano a preferire framework più consolidati.
Conclusioni: perché è una scelta vincente per il frontend moderno
Svelte 5 offre un approccio unico alla creazione di applicazioni JavaScript, spostando la complessità dalla fase di esecuzione (runtime) a quella di build. Il risultato è un codice più leggero e performante, unito a una sintassi semplice e dichiarativa.
Per approfondire, visita: Svelte Official Docs. Troverai anche un articolo interessante su Smashing Magazine che spiega i principi reattivi alla base di Svelte.

