Skip to main content

Cos’è Svelte

Svelte occupa una posizione originale tra i framework JavaScript. Mentre React e Vue funzionano come librerie a runtime, Svelte funziona come compilatore. In fase di build converte i componenti in JavaScript puro, quindi non serve inviare al browser codice framework aggiuntivo. La caratteristica principale di Svelte è che non usa un Virtual DOM. Quando lo stato cambia, il codice generato in compilazione da Svelte aggiorna direttamente il DOM. Il risultato è una UI molto leggera e veloce.
In questa pagina spieghiamo la combinazione di Svelte 5 e Inertia v3. Lo starter kit di Laravel 13 usa questa configurazione per impostazione predefinita.

Le rune di Svelte 5

Con Svelte 5 (rilasciato nel 2024) è stato introdotto un nuovo sistema di reattività chiamato Runes. Si dichiarano stati reattivi con funzioni speciali (rune) come $state, $derived ed $effect. A differenza della reattività implicita di Svelte 4 e precedenti, il design è esplicito e più prevedibile.
Lo starter kit Svelte di Laravel usa Svelte 5 + TypeScript come standard. Anche gli esempi di questa pagina sono tutti in TypeScript (lang="ts").

Posizione in Laravel

Storia

Il rapporto tra Svelte e Laravel è molto più recente rispetto a Vue e React: la sua prima adozione ufficiale è l’inclusione negli starter kit ufficiali. Con Laravel 13 (2026) Svelte è stato aggiunto ufficialmente agli starter kit e, di fatto, è diventato una delle scelte frontend ufficiali nell’ecosistema Laravel. È trattato allo stesso livello di Vue e React ed è selezionabile dal prompt interattivo di laravel new. È ancora un framework poco conosciuto tra gli utenti Laravel, ma è caratterizzato da bundle leggeri grazie al compilatore e sintassi semplice: chi arriva da Vue o React potrebbe sorprendersi della minore quantità di codice necessaria.

Stile principale attuale: Inertia × Svelte

Il modo principale di usare Svelte in Laravel è Inertia × Svelte. Inertia realizza l’architettura “monolite moderno” che permette di passare dati dai controller Laravel direttamente ai componenti Svelte senza progettare un’API.

Setup

Tramite starter kit (consigliato)

Per iniziare un nuovo progetto il modo più semplice è usare lo starter kit.
Se scegli Svelte nel prompt interattivo, viene tutto configurato automaticamente.
  • inertiajs/inertia-laravel (adapter lato server)
  • @inertiajs/svelte (adapter lato client)
  • svelte + @sveltejs/vite-plugin-svelte (Svelte 5 e plugin Vite)
  • TypeScript + svelte-check
  • Tailwind CSS + libreria di componenti shadcn-svelte
  • Middleware HandleInertiaRequests
  • Schermate di autenticazione (login, registrazione, ecc.) già implementate con Inertia + Svelte + TypeScript

Installazione manuale

Per aggiungerlo a un progetto esistente, installa separatamente lato server e lato client.
Aggiungi poi in vite.config.ts il plugin Svelte e il plugin Vite di Inertia.
Avvia l’app Inertia in resources/js/app.ts. Il plugin @inertiajs/vite esegue la risoluzione automatica delle pagine e il mount, quindi bastano poche righe nell’entry point.
Per i dettagli dell’installazione manuale (configurazione del template root, registrazione dei middleware, ecc.) consulta la documentazione ufficiale di Inertia.

Struttura delle directory

Negli starter kit i componenti pagina Svelte vanno nella directory resources/js/pages/.
Scrivendo Inertia::render('posts/Index', [...]), il componente corrispondente è resources/js/pages/posts/Index.svelte.

Struttura di base di un file Svelte

Un file .svelte è composto da tre blocchi: <script>, template e <style>.
La struttura ricorda i Single File Component (SFC) di Vue, ma il codice del template e dello script è più conciso. <style> è per default con scope limitato, quindi non devi preoccuparti dei conflitti di nomi di classe.

Sintassi del template

Espansione di variabili ed espressioni

Nel template si usa {} per incorporare valori o espressioni JavaScript.

{#if} — condizionali

Corrisponde a v-if / v-else di Vue e all’operatore ternario di React.

{#each} — rendering di liste

(post.id) è la specifica della chiave, usata per un aggiornamento differenziale efficiente. Corrisponde a v-for di Vue e a Array.map() di React.

bind: — binding bidirezionale

Con bind:value puoi sincronizzare bidirezionalmente il valore di un elemento form e una variabile reattiva.
Corrisponde a v-model di Vue. In React dovevi scrivere manualmente handler onChange; in Svelte, con bind:, si scrive in modo dichiarativo.

Le basi del componente pagina

I componenti pagina di Inertia sono normali componenti Svelte. I dati passati dal controller Laravel arrivano come props.

Controller

Componente pagina Svelte

In Svelte 5 le props si ricevono con la runa $props().
Basta ricevere le props con $props() per usare nel template i dati passati dal controller. Non è necessario definire un’API REST.
Usando il componente <Link> di @inertiajs/svelte, le transizioni avvengono via XHR ed eviti il full reload del browser.
Si scrive come un normale tag <a>, ma dietro le quinte Inertia sostituisce solo il componente di pagina, dando una sensazione da SPA.

Componente Form

Il componente <Form> fornito da @inertiajs/svelte è lo stile consigliato usato negli starter kit per l’invio dei form. Specifichi action e method come props e descrivi l’interno con {#snippet}.

Uso di base

{#snippet children({ errors, processing })} è la sintassi degli snippet di Svelte, un blocco di contenuto da passare al componente (equivalente agli slot di Vue o alle render props di React). errors e processing sono calcolati e passati automaticamente dal componente Form. Ai campi si assegna l’attributo HTML nativo name invece di bind:value, così funziona la raccolta standard dei dati del browser.

Pattern degli starter kit

Gli starter kit gestiscono le rotte come oggetti tramite Wayfinder. store.form() restituisce un oggetto contenente action e method dell’oggetto rotta e lo passi a <Form> con lo spread.
I campi specificati in resetOnSuccess vengono ripristinati automaticamente al successo dell’invio. Utile per campi come la password che vuoi svuotare dopo l’invio.
Se non usi Wayfinder puoi passare direttamente l’URL come action="/login" e funziona allo stesso modo.

Hook useForm

Per la gestione dei form usa l’hook useForm di @inertiajs/svelte. Puoi implementare in modo semplice gestione stato, invio ed errori di validazione.

Lato controller

Componente form Svelte

Ecco le principali proprietà restituite da useForm. Quando arrivano errori di validazione, useForm mantiene i contenuti inseriti mostrando gli errori. Combinato con bind:value offre un’esperienza di form senza interruzioni.

Dati condivisi (Shared Data)

I dati necessari a tutte le pagine (utente loggato, messaggi flash, ecc.) si definiscono nel metodo share() del middleware HandleInertiaRequests.
Per accedere ai dati condivisi da un componente Svelte usa usePage().
Poiché i dati condivisi sono inclusi in ogni richiesta, si consiglia di limitarli allo stretto necessario. Con valutazioni lazy tramite fn(), vengono valutati solo quando ci si accede davvero.

Reattività di Svelte 5 (Runes)

Ecco le rune di Svelte 5 essenziali per sviluppare con Inertia × Svelte.

$state — stato reattivo

Le variabili dichiarate con $state sono automaticamente reattive. Al cambio di valore il DOM si aggiorna in automatico. Corrisponde a ref di Vue o useState di React, ma non serve accedere alla proprietà .value: aggiornare lo stato equivale a fare l’assegnazione.

$derived — valori derivati

$derived viene ricalcolato automaticamente quando cambia una delle dipendenze. Corrisponde a computed di Vue o useMemo di React.

$effect — effetti collaterali

$effect si esegue ogni volta che cambia un valore $state da cui dipende. Corrisponde a useEffect di React, ma non devi indicare esplicitamente un array di dipendenze: le variabili $state usate vengono tracciate automaticamente.

Componenti shadcn-svelte

Gli starter kit includono shadcn-svelte. shadcn-svelte è una libreria di componenti con la stessa filosofia di design di shadcn/ui per React: il codice viene copiato nel progetto e puoi personalizzarlo liberamente.

Aggiungere componenti

Eseguendo il comando, il codice sorgente del componente viene posizionato in resources/js/components/ui/.

Utilizzo

Gli starter kit contengono già componenti d’uso comune come Button, Input, Card, Dialog e Dropdown. Quelli che vuoi aggiungere puoi introdurli in qualsiasi momento con npx shadcn-svelte@latest add.

Conclusioni

Svelte, in combinazione con Laravel, dà il meglio nell’architettura “monolite moderno” tramite Inertia. Grazie al design basato su compilatore, il bundle è piccolo e, con la sintassi delle rune, la reattività è esplicita e facile da comprendere. Con Inertia × Svelte ottieni un’esperienza di sviluppo che unisce la semplicità del backend Laravel a uno stile di scrittura compatto. Creando il progetto tramite starter kit, puoi iniziare subito con schermate di autenticazione incluse.

Documentazione ufficiale di Inertia.js

Per tutte le funzionalità di Inertia v3 consulta la documentazione ufficiale.
Ultima modifica il 13 luglio 2026