Skip to main content

Was ist Wayfinder?

Laravel Wayfinder ist ein Paket, das ein Laravel-Backend reibungslos mit einem TypeScript-Frontend verbindet. Es erzeugt aus Controllern und Routen vollständig typisierte TypeScript-Funktionen, sodass Sie Laravel-Endpoints direkt als Funktion aus dem Frontend aufrufen können. Hartkodierte URLs, manuelles Verwalten von Route-Parametern und das händische Nachziehen von Backend-Änderungen entfallen komplett.
Wayfinder ist im Beta (aktuell v0.1.x). Bis zum v1.0.0-Release kann sich die API noch ändern. Alle relevanten Änderungen werden im CHANGELOG protokolliert.

Unterschiede zwischen Ziggy und Wayfinder

Was ist Ziggy?

Ziggy ist ein Route-Helper, der über Jahre im Laravel-Ökosystem verbreitet war. Er stellt Laravel-Routen JavaScript-seitig bereit und erzeugt URLs in der Form route('posts.show', { id: 1 }).

Warum Wayfinder ihn ablöst

Da Ziggy Route-Namen und Parameter als Strings behandelt, gab es Grenzen für TypeScript. Tippfehler in Route-Namen oder falsche Parameternamen fielen erst zur Laufzeit auf. Wayfinder ist TypeScript-first und erzeugt Controller-Methoden als importierbare Funktionen. In den Inertia-basierten Laravel-Starterkits (React, Vue, Svelte) ist Wayfinder standardmäßig aktiv.

Installation

1. Server-seitiges Paket per Composer installieren

2. Vite-Plugin per NPM installieren

3. Plugin in vite.config.js ergänzen

Mit dem Vite-Plugin werden bei laufendem Dev-Server die TypeScript-Dateien bei jeder Änderung an PHP- oder Route-Dateien automatisch neu erzeugt.

TypeScript-Definitionen erzeugen

Erzeugen Sie die TypeScript-Dateien mit dem Kommando wayfinder:generate.
Standardmäßig werden unter resources/js drei Verzeichnisse erzeugt.
Da die erzeugten Dateien bei jedem Build vollständig neu erzeugt werden, empfehlen wir, sie in .gitignore einzutragen. Schließen Sie die drei Verzeichnisse wayfinder, actions und routes gemeinsam aus.
Zum Ändern des Ausgabepfads verwenden Sie die Option --path.
Sie können auch nur Controller-Actions oder nur Routen erzeugen.

Grundlegende Verwendung

Actions importieren und nutzen

Beispiel: URL-Erzeugung für die show-Methode von PostController.
Wenn nur die URL benötigt wird, verwenden Sie .url().
Auch eine bestimmte HTTP-Methode ist möglich.

Übergabe von Parametern

Wayfinder-Funktionen akzeptieren verschiedene Parameterformen.
Wenn die Route ein Key-Binding vorgibt (/posts/{post:slug}), können Sie diesen Wert nutzen.

Vollständigen Controller importieren

Sie können auch den gesamten Controller importieren und Methoden darauf aufrufen.
Beim Import des gesamten Controllers greift Tree-Shaking nicht, und alle Actions landen im Bundle. Einzelimporte halten die finale Bundle-Größe kleiner.

Invokable Controller

Bei Invokable Controllern rufen Sie die importierte Funktion direkt auf.

Benannte Routen importieren

Für den Zugriff über Route-Namen verwenden Sie die Dateien unter routes/.

Query-Parameter

Alle Wayfinder-Funktionen akzeptieren query für zusätzliche Query-Parameter.
Zum Mergen mit den aktuellen Query-Parametern der URL nutzen Sie mergeQuery.

Form-Varianten

Für den Einsatz in klassischen HTML-Formularen erzeugen Sie mit --with-form und verwenden die .form-Variante.

Kombination aus Inertia und Wayfinder

Kombiniert mit den Formular-Helpern von Inertia versenden Sie Formulare, ohne einen einzigen URL-String zu schreiben.
Auch mit der Link-Komponente funktioniert es analog.

Übernahme im Starterkit

Wenn Sie mit laravel new ein neues Projekt anlegen und React, Vue oder Svelte wählen, erhalten Sie eine Konfiguration, in der Wayfinder automatisch eingerichtet ist. Das Starterkit enthält:
  • Composer-Paket laravel/wayfinder
  • NPM-Paket @laravel/vite-plugin-wayfinder
  • Plugin-Konfiguration in vite.config.js
  • Eintrag der generierten Verzeichnisse in .gitignore
Auch die manuelle Einführung in bestehende Projekte ist mit obigen Schritten möglich.

Behandlung von Reserved Words

Für Controller-Methoden mit dem Namen eines JavaScript-Schlüsselworts (z. B. delete, import) wird das Suffix Method angehängt.

Aktueller Stand (v0.1.x)

Die aktuelle Stable-Version wird über den Branch v0.1.x bereitgestellt. Stand März 2026 ist die neueste Version v0.1.15.

Wichtige Änderungen der v0.1.x-Reihe


Im next-Branch entwickelte Next-Gen-Features

Im Branch next wird die nächste Version entwickelt, die den Funktionsumfang gegenüber v0.1.x deutlich erweitert.
Der next-Branch lässt sich per dev-next-Constraint installieren, doch die API kann sich stark ändern. Der Einsatz in Produktion ist nicht empfohlen.

Deutlich erweiterter TypeScript-Umfang

Während v0.1.x nur Routen und Controller-Actions abdeckt, erzeugt die nächste Version alle folgenden Elemente als TypeScript.

Typen aus FormRequests

Aus diesem FormRequest werden folgende Typen erzeugt.

Typen aus Eloquent-Modellen

Aus dem Modell werden Typen in types.d.ts erzeugt.

PHP-Enum zu TypeScript

Sowohl Typen als auch Konstanten werden generiert.

Änderungen am Ausgabeverzeichnis

In v0.1.x war die Ausgabe auf actions/, routes/ und wayfinder/ aufgeteilt; in der nächsten Version wird alles unter resources/js/wayfinder gebündelt.

Wichtigste Änderungen von v0.1.x auf next

  • Import-Pfad wechselt von @/actions/... zu @/wayfinder/...
  • Flags --skip-actions, --skip-routes, --with-form entfallen und wandern in die Konfiguration
  • types.ts heißt jetzt types.d.ts

Fazit

Laravel Wayfinder ist die TypeScript-first-Neukonzeption der Ziggy-Funktionalität „Laravel-Routen aus JavaScript nutzen”. Der Import erzeugter Funktionen bringt bei Typsicherheit, IDE-Support und Tree-Shaking erhebliche Vorteile. Bereits v0.1.x ermöglicht typsichere Referenzen auf Routen und Controller-Actions und ist Standardteil der Inertia-basierten Laravel-Starterkits. Die im next-Branch entwickelte nächste Version wird zu einem umfassenderen Typ-Fundament ausgebaut, das FormRequests, Eloquent-Modelle, Enums und Inertia-Page-Props als TypeScript erzeugt.

GitHub-Repository Laravel Wayfinder

Quellcode, CHANGELOG und Issues finden Sie hier.

Vite Plugin Wayfinder

Details zu den Konfigurationsoptionen des Vite-Plugins.
Zuletzt geändert am 13. Juli 2026