Products#Code generation

SvelteKit 3 ships: config folds into vite.config.ts, $lib becomes #lib

SvelteKit 3.0 released October 1: config folds into vite.config.ts, $lib becomes #lib, env vars and error handling cleaned up; npx sv migrate does the rest.

SvelteKit 3 art: an Svelte-branded machine at the end of a conveyor belt

The Svelte team shipped SvelteKit 3.0 on October 1, with the official framing “the same framework with a little more polish and a little less junk” — not a rewrite, but a structural cleanup that pays down debt.

The facts

  • Config merge: svelte.config.js is retired; configuration lives in vite.config.ts — one place for framework and build settings.
  • Alias change: $lib becomes #lib, riding Node’s standard subpath imports.
  • Also cleaned up: environment-variable handling, service-worker boilerplate and error handling.
  • Migration: npx sv migrate sveltekit-3 handles it automatically.
  • Next priority: type-safe Remote functions (client-server RPC), waiting on the experimental Async Svelte flag — not in this release.
  • Calendar: Svelte Summit lands November 19-20 in Ljubljana, coinciding with Svelte’s tenth birthday.

The Vite-convergence signal

Folding framework config into vite.config.ts makes Vite the official runtime skeleton and minimizes “framework special config.” SolidStart 2 made the same move to Vite 8 — the meta-framework competition is shifting from “who ships their own build” to “who uses Vite most cleanly.”

Upgrade notes

The breaking changes are mechanical: run the official migration, then audit CI references to svelte.config.js and any dynamic imports resolving through $lib. Svelte 5 runes are untouched; no component-level work required.

The other 3.0 this week

WSL 3.0 landed the same week: two major-version releases that both chose structural cleanup over new features — infrastructure and framework layers quietly paying down debt amid the AI noise.

Editorial take

“A little less junk” is a scarce release philosophy when AI-generated code floods every ecosystem: SvelteKit 3 ships no new paradigm, just order. For a ten-year-old framework that is harder than chasing every trend. If Remote functions land once Async Svelte stabilizes, SvelteKit will own the simplest full-stack type-safety story in its class — that is the real 4.0 pitch.

The migration surface in detail

Teams should budget a day, not a sprint: the config merge is mechanical, the $lib-to-#lib rename is a global find-and-replace that touches dynamic imports last, and the env-var and service-worker cleanups are additive. The real audit item is plugins and tooling that read svelte.config.js — ESLint configs, deployment adapters and editor extensions all need pointing at the new location. Svelte 5 runes code needs zero changes.

More than a changelog

A framework spending its major version on subtraction is making a statement about where its risk sits: SvelteKit’s differentiation is developer experience per kilobyte, and junk — config sprawl, boilerplate, special cases — is the tax that erodes it. Remote functions remain the roadmap headline; if they land with Async Svelte, the client-server story gets type safety without a separate API layer, which is the strongest answer yet to Next.js and SolidStart in the islands-and-RPC era. The subtraction is the strategy.

The ecosystem read

SvelteKit’s plugin surface (adapters for Vercel, Netlify, Cloudflare, Deno) all track vite.config.ts now, and the majors shipped same-day compatibility — evidence of how standardized the Vite-plugin contract has become. For teams choosing a meta-framework in late 2026, the practical differentiators are deployment targets and RPC ergonomics, not build tooling; SvelteKit 3 removing the build-tooling differentiator is a deliberate act of convergence. The cleanups also unblock the AI-tooling story: editors and agents generate less config against a single vite.config.ts.

Also worth noting: the release notes credit AI-assisted tooling for the migration generator — the framework team is using the same accelerators its users are. Config-in-Vite also means one less file for scaffolding tools to drift out of date. The Svelte Summit sessions in November will show how much of the roadmap survives contact with Async Svelte. Libraries exporting virtual $lib modules need the same #lib treatment. For agencies maintaining many client sites, the one-command migration is the release’s real feature.