SvelteKit 3.0 verlangt Vite 8 und TypeScript 6 und ersetzt $lib durch #lib
SvelteKit 3.0.0 ist am 1. Oktober erschienen, zusammen mit neuen Hauptversionen aller offiziellen Adapter: adapter-node 6, adapter-vercel 7, adapter-netlify 7, adapter-cloudflare 8 und adapter-static 4, dazu @sveltejs/package 3 und enhanced-img 1.0. Die Versionshinweise umfassen Dutzende Einträge, die meisten davon als inkompatibel markiert.
Neue Mindestversionen. SvelteKit 3 setzt Vite 8 voraus, mindestens 8.0.12 – die erste Vite-Version mit dem stabilen Rolldown 1.0 –, außerdem @sveltejs/vite-plugin-svelte 7 und TypeScript 6. Svelte-Konfigurationsoptionen müssen nun über das Vite-Plugin übergeben werden.
Änderungen, die die meisten Anwendungen treffen.
- Der Alias
$libwird durch#libersetzt, die Optionfiles.libentfällt, und Importe über#libbrauchen ausdrückliche Dateiendungen. base,assetsundresolveRouteverschwinden aus$app/paths. Die neue Optionkit.paths.originersetzt sowohlkit.prerender.originals auch die UmgebungsvariableORIGINdes Node-Adapters.- Die
goto-OptionennoScrollundkeepFocuswerden zu einer einzigen Optionreset; das Attributdata-sveltekit-resetersetzt die beiden entsprechenden Attribute.gotolehnt nun eine URL ab, die keiner Route der Anwendung entspricht. refreshAllkommt hinzu,invalidateAllgilt als veraltet. Ein Klick auf einen Link zur aktuellen URL führt jetzt alle Load-Funktionen und Abfragen erneut aus.error(status, {...})ist zugunsten vonerror(status, message, {...})veraltet, alle Fehler laufen nun durch den HookhandleError, und dieser kann den Statuscode beeinflussen.
Verhalten auf dem Server und Sicherheit. Formularübermittlungen von fremden Ursprüngen ohne Content-Type-Header werden abgewiesen. Die veraltete CSRF-Option checkOrigin entfällt zugunsten von trustedOrigins. Abfrageparameter, die mit x-sveltekit- beginnen, werden zurückgewiesen. Verzeichnisse namens server gelten überall im Projekt als nur für den Server bestimmt, außer unter src/routes und im Asset-Verzeichnis. Cookie-Namen dürfen nach dem Wechsel auf cookie v2 nur noch ASCII-Zeichen enthalten. Antworten von Form Actions tragen den HTTP-Status, den fail zurückgibt.
Kleinere Streichungen. Die Option preloadStrategy entfällt, weil immer modulepreload genutzt wird; eine neue Option linkHeaderPreload lädt über den Link-Header vor. Die Versionsabfrage erkennt neue Deployments jetzt auch bei Daten- und Formularantworten und beim Fokus auf den Tab, ihr Standardintervall beträgt eine Stunde. Tracing verlässt den experimentellen Bereich. Dateien für Remote Functions werden nur noch mit experimental.remoteFunctions akzeptiert.

Was das bedeutet
Das ist eine Migrationsversion, keine Funktionsversion. Teams sollten zuerst die Umstellung auf Vite 8 und TypeScript 6 planen, weil alles andere davon abhängt, und dann die Änderungen an $lib, $app/paths und goto abarbeiten, die den meisten Code treffen. Anwendungen mit dem Node-Adapter, die ORIGIN setzen, brauchen die neue Einstellung paths.origin, sonst können auf dem Server erzeugte URLs falsch ausfallen.