Svelte Release Notes
113 release notes curated from 25 sources by the Releasebot Team. Last updated: Aug 13, 2026
Svelte Products
- Aug 13, 2026
- Date parsed from source:Aug 13, 2026
- First seen by Releasebot:Aug 13, 2026
The SvelteKit 3 Release Candidate is here
Svelte releases SvelteKit 3 in release candidate form with a major refresh for configs, aliases, TypeScript setup, service workers, environment variables, error handling, shallow routing, and Vite 8 support, while also previewing remote functions and migration tools.
SvelteKit 3 is now in the Release Candidate phase
If all goes well — meaning that people like you try it out and find that it works as expected — we will follow it up with a stable release in the near future, with no further breaking changes.
But there are some breaking changes since SvelteKit 2. We’re taking advantage of this release to prune some of the weeds in the codebase and lay the groundwork for SvelteKit’s continued evolution, more on which below.
To migrate an existing app, you can use the next version of sv migrate:
npx sv@next migrate sveltekit-3 --tasks all --confirmThis will automatically migrate as much of your code as possible. For everything else, it will generate a TODO list for you (or your clanker of choice) to work through. Wherever possible, SvelteKit will print useful diagnostic warnings and errors if you try to run code that hasn’t yet been updated.
To create a new app, run sv create:
npx sv@next create my-new-appWhat’s changed?
For the full list of changes, consult the migration guide over on next.svelte.dev which is where the SvelteKit 3 documentation will live until the stable release. Most changes are fairly minor, but a few are worth calling out:
Configuration now lives in vite.config.ts
Previously, you would configure SvelteKit via a svelte.config.js file. This turned out to be limiting: it’s useful for the Vite plugin to have access to your config immediately rather than having to go through an asynchronous resolution process (which can’t begin until after we’ve resolved the entire Vite config, because tools like Vitest may run with a current working directory that isn’t the project root), and after all why wouldn’t we put the config in one place rather than two?
The $lib alias is now #lib
In SvelteKit 2, you would put shared code in src/lib and import it via a $lib alias. This is nicer than importing from ../../../../somewhere, which is what inevitably happens in larger codebases.
But in modern projects, aliases are unnecessary, because we have something better: subpath imports. This Node feature is natively supported by tools like Vite and TypeScript, and it means we can delete the code that previously coordinated between them. There is one small gotcha: Node and TypeScript require that your subpath imports be unambiguous — instead of importing from #lib/foo, you will need to import from #lib/foo.ts or #lib/foo/index.ts.
TypeScript configuration got simpler
In SvelteKit 2, your tsconfig.json needed to extend the somewhat scruffy-looking ./.svelte-kit/tsconfig.json. In SvelteKit 3, you extend $app/tsconfig instead. This generated config file is written to node_modules/$app and contains configuration that is specific to your app. While it’s simpler than the SvelteKit 2 version (we no longer need to add the $lib alias to "paths", for example) it also includes more recommended compiler options, which means you can likely delete your own compilerOptions unless you have esoteric requirements.
You should explicitly specify your include and exclude arrays, and the latter should include your service worker. Speaking of which:
Service workers got a facelift
Using service workers is nicer in SvelteKit 3. Instead of the weird $service-worker module, which exposed the necessary tools to perform offline caching (for example), you can now just import those things from $app/env, $app/paths, and the new $app/manifest module like in every other part of your app. You can also import self from $app/service-worker to get accurate typings for fetch events and so on, provided you create a tsconfig.json alongside your service worker that extends $app/tsconfig/service-worker.
In future, we may expose helper functions for different caching strategies, so that it’s easier to build things like offline-friendly PWAs without running into barbed wire.
Environment variables are more powerful
SvelteKit already had arguably the most sophisticated and flexible environment variable handling of any framework. SvelteKit 3 takes it a step further with the explicit environment variables feature, which are no longer behind an experimental flag. The gist is that you define which environment variables your app depends on, in src/env.ts, and specify if they should be publicly available (in which case you can import them into code that will run in the client) and whether they should be resolved at build time (in which case they can be used for optimizations like dead code elimination) or when the app boots up. You can also use Standard Schema libraries to validate your environment variables.
In exchange, you get effortless type-safe, secure, validated environment variables that can be auto-imported when you need them.
Error handling is way better
SvelteKit 2 was constrained by its support for Svelte 4, which didn’t have a concept of error boundaries. This meant that we could only display your +error.svelte components when errors occurred during load, not render. SvelteKit 3 requires Svelte 5, which means error handling can be made much more comprehensive and consistent.
Another change is that all errors are piped through your handleError logic, including the ones you deliberately created with error(...) which were previously ignored on the assumption that you’d already done something with them. This gives you more flexibility with less hoop-jumping.
Oh, and we apply sourcemaps to stack traces now. No biggie. (It’ll take a minute before every adapter can display properly sourcemapped stack traces in production, but this is the necessary first step.)
Shallow routing now happens with goto
Instead of using pushState and replaceState to use shallow routing, you now use goto with the shallow: true option. Shallow navigations now trigger beforeNavigate etc, and you can persist page state across a reload with persistState: true.
Vite 8: Rolldown, and the Environment API
SvelteKit 2 supported Vite 8, but SvelteKit 3 requires it. This means you get faster builds thanks to Rolldown.
We’ve also adopted the Vite Environment API, which simplifies some of our build logic. One thing we don’t support is FetchableDevEnvironment — we tried to make this work, but ulimately concluded that it forces frameworks to absorb too much complexity. We think the problems it aims to solve (most notably, providing access to Cloudflare Workers bindings during local development) can be addressed in other ways, which we’re actively exploring.
Remote functions
If you’ve been following SvelteKit’s development over the last year, you’ve likely encountered remote functions. This, alongside async Svelte, is our vision for how client-server communication should be handled.
We’re unreasonably excited about remote functions and can’t wait to use them everywhere. Frankly, they make everything else look a bit clunky, including SvelteKit’s load functions and actions.
For now, though, they remain behind an experimental flag as we iron out the last few kinks.
Send us your feedback
As ever, we rely on your thoughts and your bug reports: if you have the opportunity to upgrade your apps and test out the new stuff, we and the rest of the Svelte community will be in your debt. Thank you!
Original source - Aug 13, 2026
- Date parsed from source:Aug 13, 2026
- First seen by Releasebot:Aug 13, 2026
All of your release notes in one feed
Join Releasebot and get updates from Svelte and hundreds of other software products.
- Aug 13, 2026
- Date parsed from source:Aug 13, 2026
- First seen by Releasebot:Aug 13, 2026
- Aug 12, 2026
- Date parsed from source:Aug 12, 2026
- First seen by Releasebot:Aug 13, 2026
Svelte fixes each batching, printer whitespace, attribute comments and CSS comment preservation.
Patch Changes
- fix: skip controlled each fast path while another batch is pending (#18625)
- fix: better whitespace handling inside printer (#18638)
- fix: don't duplicate comments in attributes (#18636)
- fix: preserve CSS comments in the AST printer (#18637)
- Aug 12, 2026
- Date parsed from source:Aug 12, 2026
- First seen by Releasebot:Aug 13, 2026
Similar to Svelte with recent updates:
- Zoom release notes205 release notes · Latest Jul 27, 2026
- Google release notes1877 release notes · Latest Aug 15, 2026
- Zed release notes160 release notes · Latest Aug 12, 2026
- Cursor release notes124 release notes · Latest Aug 13, 2026
- Eleven Labs release notes86 release notes · Latest Aug 10, 2026
- Obsidian release notes106 release notes · Latest Aug 12, 2026
- Aug 12, 2026
- Date parsed from source:Aug 12, 2026
- First seen by Releasebot:Aug 13, 2026
@sveltejs/[email protected]
SvelteKit ships breaking API moves and patch fixes for Vite plugin hooks, prerendering, and app output.
Major Changes
- breaking: move remote function types and isValidationError to @sveltejs/kit/remote (#16764)
- breaking: move RequestEvent and Cookies to $app/server (#16751)
Patch Changes
- fix: correctly implement Vite plugin hook filters (#16760)
- fix: yield to allow prerender updates to be visible (#16748)
- fix: don't destroy partial-line app output with the prerender progress line (#16750)
- Aug 11, 2026
- Date parsed from source:Aug 11, 2026
- First seen by Releasebot:Aug 13, 2026
- Aug 11, 2026
- Date parsed from source:Aug 11, 2026
- First seen by Releasebot:Aug 13, 2026
@sveltejs/[email protected]
SvelteKit ships breaking type-location changes, moving remote function, hooks, and env types to new package paths and requiring explicit module extensions. It also improves response logging and fixes an infinite loop in watch builds.
Major Changes
- breaking: move remote function types to $app/server (#16740)
- breaking: remove #lib definition from paths; requires explicit module extensions as a result (#16736)
- breaking: move hooks-related types to @sveltejs/kit/hooks (#16737)
- breaking: move env-related types to @sveltejs/kit/env (#16739)
Minor Changes
- feat: better response logging (#16744)
Patch Changes
- chore: bump mrmime to 2.0.1 (#16745)
- chore: bump @sveltejs/acorn-typescript to 1.0.12 (#16745)
- chore: bump magic-string to 1.1.0 (#16745)
- chore: bump devalue to 5.9.0 (#16745)
- chore: bump cookie to 2.0.1 (#16745)
- chore: bump acorn to 8.18.0 (#16745)
- fix: avoid infinite loop when building with --watch flag (#16632)
- Aug 11, 2026
- Date parsed from source:Aug 11, 2026
- First seen by Releasebot:Aug 13, 2026
@sveltejs/[email protected]
SvelteKit releases breaking API moves and stronger error handling, moving several types into new $app modules and @sveltejs/kit/params. It also ignores +prefixed test files and includes dev and build fixes for manifests, prerender errors, and bundling.
Major Changes
breaking: move defineParams and associated types to @sveltejs/kit/params (#16716)
breaking: run all errors through the handleError hook (#16664)
breaking: move Page, ReadonlyURL and ReadonlyURLSearchParams from @sveltejs/kit to $app/state (#16694)
breaking: move BeforeNavigate, OnNavigate, AfterNavigate, Navigation, NavigationTarget, NavigationType, GotoOptions and the Navigation* variant types from @sveltejs/kit to $app/navigation (#16694)
breaking: move ActionResult and SubmitFunction from @sveltejs/kit to $app/forms (#16694)
breaking: remove handleValidationError and pass remote function validation errors to handleError with kind: 'validation' (#16672)
Minor Changes
feat: ignore files with + prefix if they contain test/spec/stories (#16715)
Patch Changes
fix: rebuild the dev manifest when route files disappear during an incremental update (#16643)
fix: externalize @opentelemetry/api to prevent bundler chunk colocation between instrumentation.server.js and application code (#16302)
fix: surface prerender errors during development (#16507)
fix: adjust error overload for optional App.Error parameters (#16725)
Original source - Aug 11, 2026
- Date parsed from source:Aug 11, 2026
- First seen by Releasebot:Aug 13, 2026
@sveltejs/[email protected]
SvelteKit ships a patch update with dependency bumps for magic-string and zimmerframe.
Patch Changes
chore: bump magic-string to 1.1.0 (#16745)
chore: bump zimmerframe to 1.1.4 (#16745)
Original source - Aug 11, 2026
- Date parsed from source:Aug 11, 2026
- First seen by Releasebot:Aug 13, 2026
@sveltejs/[email protected]
SvelteKit ships a patch update with a Rolldown dependency bump and updated package dependencies.
Patch Changes
- chore: bump rolldown to 1.2.3 (#16745)
- Updated dependencies [1742811, 1611c61, b361b81, b361b81, b361b81, b361b81, 13e7b18, 529346d, b361b81, 81d6319, b361b81, 69a5bdf]:
- @sveltejs/[email protected]
- Aug 11, 2026
- Date parsed from source:Aug 11, 2026
- First seen by Releasebot:Aug 13, 2026
@sveltejs/[email protected]
SvelteKit fixes bundler chunk colocation by externalizing @opentelemetry/api in instrumentation and app code.
Patch Changes
- fix: externalize @opentelemetry/api to prevent bundler chunk colocation between instrumentation.server.js and application code (#16302)
- Updated dependencies [04f9ab4, 1e198bd, 813726d, a115a7b, 031ac69, dc7442c, 19c4478, dc7442c, dc7442c, 0b3e2b3, c5d0ce2]:
- @sveltejs/[email protected]
- Aug 10, 2026
- Date parsed from source:Aug 10, 2026
- First seen by Releasebot:Aug 11, 2026
@sveltejs/[email protected]
SvelteKit separates adapter Vite plugins into pre and post in a breaking major change.
- Aug 10, 2026
- Date parsed from source:Aug 10, 2026
- First seen by Releasebot:Aug 10, 2026
@sveltejs/[email protected]
SvelteKit improves form actions and adds a new snapshot helper for navigation.
Major Changes
breaking: enhanced cross-page form actions now navigate to the action page on success and failure, matching native form behavior (#16684)
Minor Changes
chore: deprecate export const snapshot in favour of the snapshot helper (#16687)
feat: add snapshot helper to $app/navigation (#16685)
Original source - Aug 10, 2026
- Date parsed from source:Aug 10, 2026
- First seen by Releasebot:Aug 10, 2026
@sveltejs/[email protected]
SvelteKit fixes generated manifest imports for project paths with special characters.
Patch Changes
- fix: import the generated manifest via pathToFileURL, which handles special characters in the project path (#16649)
- Updated dependencies [c66e589, 0bee0e8, 9703b94]:
- @sveltejs/[email protected]
Curated by the Releasebot team
Releasebot is an aggregator of official release notes from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.