Skip to main content

Was ist Svelte?

Svelte nimmt unter den JavaScript-Frameworks eine besondere Position ein. Während React und Vue als Laufzeitbibliotheken arbeiten, wirkt Svelte als Compiler. Beim Build werden Komponenten in reines JavaScript umgewandelt, sodass keine zusätzliche Framework-Runtime an den Browser gesendet werden muss. Das prägnanteste Merkmal von Svelte ist der Verzicht auf einen Virtual DOM. Bei Zustandsänderungen aktualisiert der von Svelte zur Compile-Zeit erzeugte Code das DOM direkt. Dadurch entstehen sehr leichte, schnelle Oberflächen.
Diese Seite behandelt die Kombination Svelte 5 mit Inertia v3. Die Starterkits von Laravel 13 verwenden diese Konstellation standardmäßig.

Runen in Svelte 5

Mit Svelte 5 (Release 2024) wurde ein neues Reaktivitätssystem eingeführt: die Runen (Runes). Reaktiver State wird mit besonderen Funktionen (Runen) wie $state, $derived und $effect deklariert. Anders als die implizite Reaktivität in Svelte 4 ist das Design explizit und leichter vorhersagbar.
Das Svelte-Starterkit von Laravel setzt standardmäßig auf Svelte 5 mit TypeScript. Alle Beispiele auf dieser Seite sind ebenfalls in TypeScript (lang="ts") geschrieben.

Rolle in Laravel

Historie

Die Beziehung zwischen Svelte und Laravel ist gegenüber Vue und React sehr jung – der erste offizielle Support ist die Aufnahme in das offizielle Starterkit. Mit Laravel 13 (2026) wurde Svelte offiziell den Starterkits hinzugefügt und ist damit eine offizielle Frontend-Option im Laravel-Ökosystem. Es steht gleichrangig neben Vue und React und lässt sich im interaktiven Prompt von laravel new auswählen. Für viele Laravel-Nutzer ist Svelte noch weniger bekannt; kennzeichnend sind der kleine Bundle-Footprint durch den Compiler und die schlanke Syntax. Wer von Vue oder React umsteigt, ist häufig überrascht, wie wenig Code nötig ist.

Aktueller Standard: Inertia × Svelte

Der Standardansatz für Svelte in Laravel ist Inertia × Svelte. Inertia realisiert die „moderne Monolith”-Architektur, bei der Daten aus dem Laravel-Controller direkt an Svelte-Komponenten gehen, ohne API-Design.

Setup

Via Starterkit (empfohlen)

Für neue Projekte ist das Starterkit am komfortabelsten.
Wenn Sie im interaktiven Prompt Svelte wählen, wird automatisch alles Folgende eingerichtet:
  • inertiajs/inertia-laravel (serverseitiger Adapter)
  • @inertiajs/svelte (Client-Adapter)
  • svelte + @sveltejs/vite-plugin-svelte (Svelte 5 selbst und Vite-Plugin)
  • TypeScript + svelte-check
  • Tailwind CSS + Komponentenbibliothek shadcn-svelte
  • Middleware HandleInertiaRequests
  • Auth-Seiten für Login, Registrierung u. a. (bereits mit Inertia + Svelte + TypeScript umgesetzt)

Manuelle Installation

Für die Ergänzung in einem bestehenden Projekt installieren Sie Server- und Client-Seite separat.
Ergänzen Sie anschließend in vite.config.ts das Svelte-Plugin und das Inertia-Vite-Plugin:
Starten Sie die Inertia-App in resources/js/app.ts. Da das Plugin @inertiajs/vite die automatische Auflösung und das Mounting übernimmt, genügt ein minimaler Entry-Point.
Details zur manuellen Installation (Root-Template, Middleware-Registrierung usw.) finden Sie in der offiziellen Inertia-Dokumentation.

Verzeichnisstruktur

Im Starterkit werden Svelte-Page-Komponenten unter resources/js/pages/ abgelegt.
Inertia::render('posts/Index', [...]) verweist auf resources/js/pages/posts/Index.svelte.

Grundaufbau einer Svelte-Datei

Eine .svelte-Datei besteht aus drei Blöcken: <script>, Template und <style>.
Ähnlich wie die Single-File-Components (SFC) von Vue, allerdings mit weniger Boilerplate in Template und Script. <style> ist standardmäßig gescoped, sodass Sie sich um Klassennamen-Kollisionen nicht sorgen müssen.

Template-Syntax

Variablen und Ausdrücke

Innerhalb des Templates betten Sie JavaScript-Werte mit {} ein.

{#if} – Bedingte Anzeige

Entspricht v-if / v-else in Vue und dem ternären Operator in React.

{#each} – Listen darstellen

(post.id) ist die Key-Angabe und wird für effizientes Diffing genutzt. Entspricht v-for in Vue und Array.map() in React.

bind: – Zwei-Wege-Binding

Mit bind:value synchronisieren Sie den Wert eines Formularelements bidirektional mit einer reaktiven Variablen.
Entspricht v-model in Vue. Anders als bei React, wo onChange-Handler nötig sind, drücken Sie es in Svelte deklarativ mit bind: aus.

Grundlagen der Page-Komponente

Eine Inertia-Page-Komponente ist eine gewöhnliche Svelte-Komponente. Die aus dem Laravel-Controller übergebenen Daten stehen als Props zur Verfügung.

Controller

Svelte-Page-Komponente

In Svelte 5 empfangen Sie Props mit der Rune $props().
Nach $props() verwenden Sie die vom Controller übergebenen Daten direkt im Template. Eine REST-API ist nicht nötig.
Die von @inertiajs/svelte bereitgestellte <Link>-Komponente sorgt für Seitenwechsel per XHR und vermeidet ein Full-Page-Reload.
Die Schreibweise gleicht einem <a>-Tag; im Hintergrund tauscht Inertia nur die Page-Komponente aus.

Die Form-Komponente

Die <Form>-Komponente von @inertiajs/svelte ist der empfohlene Stil aus den Starterkit-Auth-Screens. Sie geben action und method als Props an und beschreiben das Innere mit {#snippet}.

Grundlegende Verwendung

{#snippet children({ errors, processing })} ist die Snippet-Syntax von Svelte – ein Content-Block, der an die Komponente übergeben wird (analog zu Vue-Slots oder React-Render-Props). errors und processing werden von Form automatisch berechnet und übergeben. Statt bind:value verwenden Sie das native HTML-name-Attribut, sodass die Formulardatenerfassung des Browsers zum Zug kommt.

Muster aus dem Starterkit

Die Starterkits verwalten Routen mit Wayfinder als Objekte. store.form() liefert ein Objekt mit action und method, das per Spread an <Form> übergeben wird.
Die in resetOnSuccess angegebenen Felder werden bei erfolgreichem Absenden automatisch zurückgesetzt. Nutzen Sie das etwa für Passwortfelder, die nach dem Absenden geleert werden sollen.
Ohne Wayfinder verhalten sich action="/login" und Co. identisch, sobald Sie die URL direkt übergeben.

Der useForm-Hook

Für die Formularverarbeitung nutzen Sie den useForm-Hook aus @inertiajs/svelte. State-Handling, Absenden und Fehleranzeige lassen sich damit schlank umsetzen.

Auf der Controller-Seite

Svelte-Formular-Komponente

Wichtige Eigenschaften des Rückgabewerts von useForm: Bei Validierungsfehlern behält useForm die Eingaben und zeigt die Fehler an. In Verbindung mit bind:value entsteht ein nahtloses Formularerlebnis.

Shared Data

Daten, die auf allen Seiten gemeinsam gebraucht werden (angemeldeter Nutzer, Flash-Messages u. a.), definieren Sie in der Methode share() der Middleware HandleInertiaRequests.
In der Svelte-Komponente greifen Sie mit usePage() auf Shared Data zu.
Da Shared Data in jeder Anfrage enthalten sind, empfiehlt sich die Beschränkung auf das Nötigste. Eine Lazy-Evaluation per fn() wird nur ausgewertet, wenn tatsächlich zugegriffen wird.

Reaktivität in Svelte 5 (Runen)

Wichtige Runen-Konzepte für die Arbeit mit Inertia × Svelte:

$state – reaktiver State

Mit $state deklarierte Variablen sind automatisch reaktiv. Bei Wertänderung wird das DOM aktualisiert. Entspricht Vues ref bzw. Reacts useState, jedoch ohne .value-Zugriff – die Zuweisung reicht.

$derived – abgeleitete Werte

$derived berechnet sich neu, sobald sich abhängige Werte ändern. Entspricht computed in Vue und useMemo in React.

$effect – Seiteneffekte

$effect wird bei jeder Änderung eines abhängigen $state-Werts ausgeführt. Entspricht useEffect in React, aber ohne explizites Dependency-Array – verwendete $state-Variablen werden automatisch getrackt.

shadcn-svelte-Komponenten

Das Starterkit enthält shadcn-svelte. shadcn-svelte folgt dem gleichen Designprinzip wie shadcn/ui für React: Sie kopieren den Code in Ihr Projekt und passen ihn frei an.

Komponente hinzufügen

Nach dem Befehl liegt der Quellcode der Komponenten in resources/js/components/ui/.

Verwendung

Im Starterkit sind bereits gängige Komponenten wie Button, Input, Card, Dialog und Dropdown enthalten. Weitere Komponenten ergänzen Sie bei Bedarf mit npx shadcn-svelte@latest add.

Fazit

Svelte entfaltet in Kombination mit Laravel – insbesondere über Inertia im Sinne eines „modernen Monolithen” – seine Stärken. Dank der Compiler-Basis ist die Bundle-Größe klein; die Runen-Syntax macht Reaktivität explizit und verständlich. Mit Inertia × Svelte verbinden Sie die Einfachheit des Laravel-Backends mit der kompakten Ausdrucksweise von Svelte. Legen Sie ein Projekt mit dem Starterkit an, sind auch die Auth-Screens sofort einsatzbereit.

Offizielle Inertia.js-Dokumentation

Alle Funktionen von Inertia v3 finden Sie in der offiziellen Dokumentation.
Zuletzt geändert am 13. Juli 2026