The project currently runs on @sveltejs/kit ^2.69.3. SvelteKit 3 is in its release candidate phase (3.0.0-next.23 on the next tag), with a stable release promised without further breaking changes. The rest of the toolchain already meets the v3 minimums: Node 24, TypeScript 6, Svelte 5.56.6, Vite 8.1.5, vite-plugin-svelte 7.2.0.

Tasks

  • Bump @sveltejs/kit to 3.x and @sveltejs/adapter-static to 4.x (other dependencies already satisfy v3 requirements)
  • Move all kit.* config and compilerOptions from svelte.config.js into the sveltekit() plugin options in vite.config.js, then delete svelte.config.js
  • Replace the $lib alias with #lib subpath imports (126 files, explicit file extensions required); keep the $styles alias via plugin options
  • Switch Header.svelte from $app/stores to $app/state (the last remaining usage)
  • Drop the removed base import from $app/paths in the sitemap page and both feed endpoints (it is an empty string here)
  • Move experimental.remoteFunctions into plugin options; remote functions in pages.remote.js need no code changes (no event.url/params access)
  • Add "prepare": "svelte-kit sync" to package.json (v3 removes the preinstall hook) and point jsconfig.json at $app/tsconfig
  • Verify pnpm lint, pnpm check, pnpm test:ci, and pnpm build pass; smoke-test the preview build

Not affected

Service workers, cookies, and CSRF changes do not apply to this static site. The pushState shallow-routing migration is moot: the only usage was dead code and has been removed. $env modules are not used. The Vite 8 / rolldown compatibility risk for vite-imagetools, the LQIP inliner plugin, and Lightning CSS was already cleared by the earlier Vite upgrade.

Stay on the current major

SvelteKit 3 migration with a verified build

A static site template built with SvelteKit.

Sveleton, 2025