8 min read
To migrate to SvelteKit 3, which shipped on October 1, 2026, first raise your floor to Node 22.17, TypeScript 6, Svelte 5.57.1, Vite 8.0.12 and vite-plugin-svelte 7, then run npx sv migrate sveltekit-3 --tasks all --confirm on a clean branch. The two changes that break most PRs are that svelte.config.js is no longer supported (kit options move into sveltekit() in vite.config) and $lib becomes #lib through package.json subpath imports with file extensions.
Related posts on ShopperCove:
Affiliate disclosure. This post includes one optional ClickBank affiliate link for Clozure (seller nickname CLOZURE). If you buy through that link, ShopperCove may earn a commission at no extra cost to you. Clozure is not a SvelteKit adapter, Vite plugin, or framework dependency—only an optional AI business OS (email/calendar/CRM) some indie founders use. ShopperCove has not trialed Clozure for this SvelteKit 3 briefing. ClickBank is the retailer of products on this site. CLICKBANK® is a registered trademark of Click Sales, Inc., a Delaware corporation located at 1444 S. Entertainment Ave., Suite 410, Boise, ID 83709, USA, and used by permission. ClickBank’s role as retailer does not constitute an endorsement, approval, or review of these products or any claim, statement, or opinion used in promotion of these products.
From the announce post, quick highlights:
vite.config (no more svelte.config.js)$lib → #lib via standard Node subpath importsNew apps:
Migrating apps:
The migrator rewrites what it can and emits a TODO list for the rest (the announce post notes agent-assisted cleanup works well on leftovers).
Remote functions: still not production-ready. The team’s top priority, but they require Async Svelte behind an experimental flag. Do not treat remote functions as a migration blocker or a day-one production bet.
Per Migrating to SvelteKit v3, raise the floor before you expect a clean build:
| Dependency | Minimum (vendor) |
|---|---|
| Node | v22.17 |
| TypeScript | v6 |
| Svelte | v5.57.1 |
| Vite | v8.0.12 (first Vite 8 with stable rolldown v1) |
@sveltejs/vite-plugin-svelte | v7 |
Vendor tip: upgrade to the newest 2.x first so you see targeted deprecation warnings, then jump to 3.0.
svelte.config.js is no longer supported. Pass former config.kit.* options as top-level options to sveltekit() in vite.config.js / vite.config.ts, alongside compilerOptions:
Removed / renamed options to watch (migration guide—verify against current docs for your exact adapters):
vitePlugin removed — pass vite-plugin-svelte options (e.g. inspector) directlypreloadStrategy removed — modulepreload alwaysprerender.origin → paths.origincsrf.checkOrigin → csrf.trustedOriginsexperimental.tracing → top-level tracingfiles.lib, experimental.handleRenderingErrors, experimental.instrumentation obsoleteNew / changed examples: output.linkHeaderPreload, csrf.trustedOrigins, paths.origin (also replaces adapter-node’s old ORIGIN env var), version.pollInterval defaulting to one hour.
$lib → #lib (subpath imports)#lib is not auto-injected. Declare it in package.json imports:
Then replace imports and add extensions (Node/TS require unambiguous subpaths):
sv migrate should rewrite most of this; grep for leftover $lib in CI.
Treat these as checklist items (details in the migration guide—not exhaustive):
$app/environment → $app/env (also usable from service workers).$app/stores removed — use $app/state (page not $page).$service-worker removed — use $app/env, $app/manifest, $app/paths as documented.$env/... deprecated in favor of $app/env/private and $app/env/public.extends $app/tsconfig (not ./.svelte-kit/tsconfig.json); set your own include / exclude. Service workers get a separate src/service-worker/tsconfig.json extending $app/tsconfig/service-worker.goto(..., { shallow: true }) over deprecated pushState / replaceState; invalidateAll → refreshAll; goto option renames (replace, reset: false, etc.).$app/paths — use resolve / asset instead of removed base / assets / resolveRoute.src/params.ts via defineParams from @sveltejs/kit/params (not a src/params/ directory of files).server (not only .server. infix); any server directory (except routes/static) is server-only.handleError sees more cases; CSRF always on with trustedOrigins; enhanced form fail statuses surface; external redirect needs { external: true } (or allowlist).cloudflare:workers / request.cf; adapter-node uses rolldown and drops ORIGIN env; adapter-vercel drops edge runtime; Netlify needs newer CLI, etc. Read the adapter section for your host.npx sv migrate sveltekit-3 --tasks all --confirm on a clean working tree.svelte.config.js; confirm vite.config owns adapter + kit options.#lib imports map and extensioned imports; fail CI on $lib.$app/* imports (stores → state, env rename, service-worker removals).compilerOptions.experimental.async + experimental.remoteFunctions.#lib extensions and vite-config location are the two most common “why is my PR red?” traps.ShopperCove’s recent frontend trend posts lean Next.js / Remix / React tooling. SvelteKit 3’s Oct 1 ship date is a clean, time-sensitive alternative for teams (and searchers) on the Svelte stack—without inventing a framework beauty contest. If you are React-primary, still skim the migration shape: Vite-centric config and subpath #lib mirror broader 2026 frontend tooling directions.
Is this a rewrite like Remix 3?
No. Vendor framing is “same framework,” major-version cleanup + dependency floor + config/alias moves. Compare with our Remix 3 briefing if you need the “new framework vs continuation” distinction elsewhere.
Are remote functions ready?
Not yet (experimental + Async Svelte). Top priority for the team; not a default production feature on day one.
Do I need Clozure to migrate?
No. Unrelated optional ops tooling.
Where do docs live during the cutover?
Prefer current svelte.dev kit docs / migration guide; RC-era notes pointed at next.svelte.dev while docs were catching up—confirm you are on stable docs when you cut.
A major-version migration week is usually about Node, Vite, and CI—not a new CRM. Solo founders who also want email/calendar/CRM sometimes evaluate an AI business OS separately from framework work.
One disclosed option (vendor claims only; ShopperCove has not hands-on tested it for this briefing):
Visit Clozure AI Business OS
Skip it if you already have ops tooling or only came for the SvelteKit 3 checklist. Verify export, cancel, and access controls before putting customer data in any SaaS.
SvelteKit 3.0 arrived October 1, 2026. Raise Node 22.17+, TypeScript 6, Svelte 5.57.1+, Vite 8.0.12+, run npx sv migrate sveltekit-3 --tasks all --confirm, move kit config into sveltekit() in Vite, switch $lib → #lib, and treat remote functions as experimental. Attribute every floor and rename to the official migration guide; spike adapters on staging before you call the cutover done.
npx sv migrate sveltekit-3 --tasks all --confirm. It rewrites what it can and leaves a TODO list for the rest.
Node 22.17, TypeScript 6, Svelte 5.57.1, Vite 8.0.12 and @sveltejs/vite-plugin-svelte 7, per the official Migrating to SvelteKit v3 guide.
No. They still need Async Svelte behind an experimental flag, so leave them out of the migration unless you have a planned spike.
Primary sources: SvelteKit 3 is here, Migrating to SvelteKit v3.
Lab evidence
Hands-on notes: this checklist is attributed to the official svelte.dev SvelteKit 3 announcement dated Oct 1, 2026, and the official Migrating to SvelteKit v3 documentation. I reviewed the documented configuration, alias, runtime, TypeScript, Svelte, and Vite requirements and migration command. No invented benchmarks or local performance measurements are included.
Explore the product
Check the live price, offer, and return terms on the seller page before you buy.
Vite 7.3.6 vs Parcel 2.16.4 on a 40-page React 19 TS fixture (147 modules): cold serve-ready median 692 ms vs 1,718 ms (~2.5x); cold prod build wall median 2,586 ms vs 1,806 ms; JS 228,426 B vs 227,172 B with Parcel --no-source-maps.
Hands-on5 Oct 20265 min read
oxfmt 0.72.0 (5 Oct 2026) swaps its Prettier-backed Markdown path for the native oxc_formatter_markdown (breaking). ShopperCove formatted 221 Markdown drafts with oxfmt 0.71.0, 0.72.0 and Prettier 3.9.9: byte-identical output, ~2 s vs ~16 ms. Plus opt-in import sorting inside code fences, the documented divergences, ignore-file and LSP fixes. No affiliate links.
Summary5 Oct 20265 min read
Biome published @biomejs/biome@2.5.15 on 30 September 2026: type-inference and HTML formatter performance, plus nursery rules for React defaults, Svelte runes, logical CSS, and more. ShopperCove upgrade checklist only; no affiliate.
Summary5 Oct 20264 min read