Wat is Svelte
Svelte neemt een unieke positie in onder de JavaScript-frameworks. Waar React en Vue als runtimelibrary’s werken, werkt Svelte als compiler. Componenten worden tijdens de build omgezet naar pure JavaScript, waardoor er geen overbodige frameworkcode naar de browser hoeft te worden gestuurd. Het grootste kenmerk van Svelte is dat het geen virtual DOM gebruikt. Wanneer de state verandert, werkt de code die Svelte tijdens het compileren heeft gegenereerd de DOM direct bij. Dit maakt een extreem lichte en snelle UI mogelijk.Deze pagina behandelt de combinatie van Svelte 5 en Inertia v3. De starter kits van Laravel 13 gebruiken deze opzet standaard.
De runes van Svelte 5
Svelte 5 (uitgebracht in 2024) introduceerde een nieuw reactiviteitssysteem genaamd runes. Je declareert reactieve state met speciale functies (runes) zoals$state, $derived en $effect. Anders dan de impliciete reactiviteit van Svelte 4 en eerder is dit ontwerp expliciet en voorspelbaar.
De positie binnen Laravel
Geschiedenis
De relatie tussen Svelte en Laravel is vergeleken met Vue en React nog erg jong: de opname in de officiële starter kits is de eerste officiële ondersteuning. Met de officiële toevoeging van Svelte aan de starter kits in Laravel 13 (2026) werd Svelte een van de officiële frontendkeuzes binnen het Laravel-ecosysteem. Het wordt op gelijke voet met Vue en React behandeld en is te selecteren in de interactieve prompt vanlaravel new.
Het framework is bij Laravel-gebruikers nog niet zo bekend, maar het kenmerkt zich door een lichte bundel dankzij de compiler en een eenvoudige syntaxis — stap je over van Vue of React, dan zul je misschien verbaasd zijn hoe weinig je hoeft te schrijven.
De huidige mainstream: Inertia × Svelte
De belangrijkste manier om Svelte in Laravel te gebruiken is tegenwoordig Inertia × Svelte. Inertia realiseert een “moderne monoliet”-architectuur waarbij je zonder een API te ontwerpen data rechtstreeks vanuit Laravel-controllers aan Svelte-componenten doorgeeft.Setup
Via een starter kit (aanbevolen)
Voor een nieuw project is een starter kit de makkelijkste route.inertiajs/inertia-laravel(server-side adapter)@inertiajs/svelte(clientadapter)svelte+@sveltejs/vite-plugin-svelte(Svelte 5 zelf en de Vite-plugin)- TypeScript +
svelte-check - Tailwind CSS + de shadcn-svelte-componentlibrary
- De middleware
HandleInertiaRequests - Authenticatieschermen zoals inloggen en registreren (al geïmplementeerd met Inertia + Svelte + TypeScript)
Handmatige installatie
Voeg je Inertia toe aan een bestaand project, dan installeer je de server- en clientzijde afzonderlijk.vite.config.ts.
resources/js/app.ts. Omdat de @inertiajs/vite-plugin het automatisch oplossen en mounten van pagina’s verzorgt, volstaat een minimaal entrypoint.
Zie de officiële Inertia-documentatie voor de details van een handmatige installatie (zoals het instellen van de roottemplate en het registreren van de middleware).
Directorystructuur
In de starter kits plaats je Svelte-paginacomponenten in de directoryresources/js/pages/.
Inertia::render('posts/Index', [...]), dan is resources/js/pages/posts/Index.svelte de bijbehorende component.
De basisstructuur van een Svelte-bestand
Een.svelte-bestand bestaat uit drie blokken: <script>, template en <style>.
<style> standaard scoped is, hoef je je geen zorgen te maken over botsende klassenamen.
Templatesyntaxis
Variabelen en expressies invoegen
Binnen de template gebruik je{} om JavaScript-waarden of -expressies in te voegen.
{#if} — voorwaarden
v-if / v-else in Vue of de ternaire operator in React.
{#each} — lijsten renderen
(post.id) is de key-aanduiding, die wordt gebruikt voor efficiënte diff-updates. Dit komt overeen met v-for in Vue of Array.map() in React.
bind: — two-way binding
Met bind:value synchroniseer je de waarde van een formulierelement in twee richtingen met een reactieve variabele.
v-model in Vue. In React moest je zelf een onChange-handler schrijven, maar in Svelte doe je dit declaratief met bind:.
De basis van paginacomponenten
Een Inertia-paginacomponent is een gewone Svelte-component. De data die je vanuit de Laravel-controller doorgeeft, ontvang je als props.Controller
Svelte-paginacomponent
In Svelte 5 ontvang je props met de rune$props().
$props() en kunt de data uit de controller direct in de template gebruiken. Een REST API definiëren is niet nodig.
De Link-component
Met de <Link>-component van @inertiajs/svelte verlopen paginanavigaties via XHR, zodat een volledige browserreload wordt vermeden.
<a>-tag, maar op de achtergrond vervangt Inertia alleen de paginacomponent, waardoor het aanvoelt als een SPA.
De Form-component
De <Form>-component van @inertiajs/svelte is de aanbevolen stijl voor formulierverzending die in de authenticatieschermen van de starter kits wordt gebruikt. Je geeft action en method op als props en schrijft de inhoud met {#snippet}.
Basisgebruik
{#snippet children({ errors, processing })} is de snippet-syntaxis van Svelte: een contentblok dat je aan een component doorgeeft (vergelijkbaar met slots in Vue of render props in React). De Form-component berekent errors en processing automatisch en geeft ze door. Voor de formuliervelden gebruik je geen bind:value maar het native HTML-attribuut name, zodat de standaard formulierdataverzameling van de browser werkt.
Het patroon van de starter kits
De starter kits gebruiken Wayfinder om routes als objecten te beheren.store.form() geeft een object terug met de action en method van het routeobject, dat je in <Form> spreadt.
resetOnSuccess worden bij een geslaagde verzending automatisch gereset. Gebruik dit voor velden die je na het verzenden leeg wilt maken, zoals wachtwoordvelden.
Gebruik je Wayfinder niet, dan werkt het net zo goed als je direct een URL doorgeeft, zoals
action="/login".De useForm-hook
Voor formulierverwerking gebruik je de useForm-hook van @inertiajs/svelte. Statebeheer van het formulier, verzenden en het tonen van validatiefouten implementeer je hiermee eenvoudig.
Aan de controllerkant
Svelte-formuliercomponent
useForm teruggeeft:
Komt er een validatiefout terug, dan toont
useForm de fouten terwijl de ingevoerde inhoud behouden blijft. In combinatie met bind:value krijg je een naadloze formulierervaring.
Gedeelde data (shared data)
Data die je op elke pagina nodig hebt (zoals de ingelogde gebruiker en flashberichten) definieer je in de methodeshare() van de middleware HandleInertiaRequests.
usePage().
Gedeelde data wordt bij elke request meegestuurd; beperk deze daarom tot het strikt noodzakelijke. Gebruik je lazy evaluation met
fn(), dan wordt de data alleen geëvalueerd wanneer er daadwerkelijk toegang toe is.De reactiviteit van Svelte 5 (runes)
Hier zijn de runes van Svelte 5 die je moet kennen om met Inertia × Svelte te ontwikkelen.$state — reactieve state
$state worden automatisch reactief. Verandert de waarde, dan wordt de DOM automatisch bijgewerkt. Dit komt overeen met ref in Vue of useState in React, maar zonder dat je een .value-property nodig hebt: een gewone toewijzing werkt de state al bij.
$derived — afgeleide waarden
$derived wordt automatisch opnieuw berekend wanneer de waarden waarvan het afhangt veranderen. Dit komt overeen met computed in Vue of useMemo in React.
$effect — side effects verwerken
$effect wordt uitgevoerd telkens wanneer een $state-waarde waarvan het afhangt verandert. Het komt overeen met useEffect in React, maar je hoeft geen dependency-array op te geven: de gebruikte $state-variabelen worden automatisch gevolgd.
shadcn-svelte-componenten
De starter kit bevat shadcn-svelte. shadcn-svelte is een componentlibrary met dezelfde ontwerpfilosofie als shadcn/ui voor React: de code wordt naar je project gekopieerd en je kunt hem vrij aanpassen.Componenten toevoegen
resources/js/components/ui/.
Gebruik
npx shadcn-svelte@latest add.
Samenvatting
Svelte komt in combinatie met Laravel vooral tot zijn recht in de “moderne monoliet”-opzet via Inertia. Dankzij het compilergebaseerde ontwerp is de bundel klein, en dankzij de runes-syntaxis is de reactiviteit expliciet en makkelijk te begrijpen.
Met Inertia × Svelte krijg je een ontwikkelervaring die de eenvoud van een Laravel-backend combineert met de compacte schrijfstijl van Svelte. Maak je een project aan met de starter kit, dan kun je direct beginnen met ontwikkelen, inclusief authenticatieschermen.
Officiële Inertia.js-documentatie
Raadpleeg de officiële documentatie voor alle functies van Inertia v3.