The SvelteKit 3 preview lands with new $app modules, zero-config error props and refreshAll
The biggest news this month is the first @next
releases of SvelteKit 3. Thirteen preview versions shipped in July: previewing new $app/manifest
and $app/service-worker
modules, improved API availability and type checking in service workers, tracing out of the experimental namespace, shallow routing baked into goto
and a lot more. It's a prerelease, but it's worth trying out to see what's coming to SvelteKit!
Alongside the preview releases, the stable line kept moving with submitted
on remote forms and a new home for defineEnvVars
. The language tools also picked up zero-config +error.svelte
props so error pages get their page
and error
types with no extra setup.
And, in case you missed it, Svelte Summit Ljubljana 2026 is happening November 19-20, with a workshop day on November 18, the day before the summit. Save the date!
What's new in SvelteKit
- Remote forms now expose a
submitted
property so you can react to the moment a form is submitted without waiting for the response (2.69.0, Docs, #14811) defineEnvVars
has moved from@sveltejs/kit
to@sveltejs/kit/env
so environment helpers live in a dedicated subpath (2.70.0, Docs, #16378)
SvelteKit 3 preview
The next major version has landed in @next
. Here are the highlights from 3.0.0-next.5
through 3.0.0-next.13
that you'll actually want to try out:
- Shallow routing is now built into
goto
via a newstate
option (withpersistState: true
to keep state across reloads), replacingpushState
andreplaceState
(3.0.0-next.13, #16449) goto
'snoScroll
andkeepFocus
options (and their matchingdata-sveltekit-*
attributes) collapse into a singlereset
option (3.0.0-next.13, #16558)error(status, {...})
is deprecated in favor oferror(status, message, {...})
so error messages are always required (3.0.0-next.13, #16540)refreshAll
replacesinvalidateAll
, which is now deprecated (3.0.0-next.8, #16289)- A new
$app/manifest
module exposesimmutable
,assets
,prerendered
androutes
so you can introspect the build output at runtime (3.0.0-next.12, #16372) - A new
$app/service-worker
module replaces the old$service-worker
, and$app/paths
is now importable inside service workers (3.0.0-next.12, #16458, #16441) - SvelteKit now detects new deployments on data, remote and form action responses, on tab focus and on visibility change, with a default
version.pollInterval
of one hour (3.0.0-next.12, #16496) - Sourcemaps are now supported in production builds (3.0.0-next.11, #16412)
- Tracing has moved out of the experimental namespace and the
instrumentation
flag has been removed (3.0.0-next.7, #16260) - Form fields pick up a
dirty()
helper and remote forms get a newfield.touched()
for better validation UX (3.0.0-next.6, #16208, #14692)
Full preview details (including expected breaking changes) are in the SvelteKit 3 CHANGELOG.
For all the features and bugfixes across the stable line and adapters, check out the SvelteKit CHANGELOGs.
What's new in the Svelte CLI and Language Tools
sv
now picks the right package manager more reliably, with detection that respects the lockfile in nested workspaces (sv@0.16.6, #1190)- Add-on authors can now call
addOption
during the setup phase to add options dynamically based on user choices (sv@0.16.6, #1042) - The prettier add-on now formats every file it generates, not just the ones it touches (sv@0.16.6, #1192)
- The
better-auth
add-on has been bumped to Better Auth 1.6 and now uses the dedicatedauth
package (sv@0.16.5, #1058) sv-utils
gainsdefineEnv().importEnv
for importing from the environment module without branching on mode, plus recognition of thenub
package manager (sv-utils@0.3.1/0.3.2, #1150, #1187)+error.svelte
now gets itspage
anderror
props typed automatically, with no extra setup (svelte-check@4.7.3/svelte2tsx@0.7.58, #3076)svelte-language-server
drops itslodash
dependency for a smaller install and faster startup (svelte-language-server@0.18.3, #3038)- The Svelte Inspector adds a context menu with the current component stack, making it easier to jump between parent and child components (vite-plugin-svelte@7.2.0, #1370)
- The
@sveltejs/opencode
plugin now ships a TUI variant for terminal workflows (opencode@0.1.10, #231) @sveltejs/opencode
also gains anautoupdate
option so the plugin can keep itself current (opencode@0.1.12, #238)
Want to dive deeper? Check out the Svelte CLI and language-tools releases. For all the minor changes and bugfixes that came out in the Svelte compiler this month, you can read the full Svelte CHANGELOG.
Community Showcase
Apps & Sites built with Svelte
- Recipe Jar is a local-first recipe keeper built as a PWA with runes, IndexedDB and no backend (GitHub)
- Doota reimagines email as a chat interface, built entirely on Svelte and Cloudflare's edge stack (GitHub)
- Loot Raiders is a browser-based inventory extraction game built with SvelteKit, GSAP and Howler
- Motioner is a browser-based Figma-style design tool where every frame doubles as an animation timeline
- The Prototype is a collaborative 3D scene editor built on Threlte, with peer-to-peer sync over WebRTC and a full runes-based state system
- clocks.dev is a community-built gallery where every clock is a Svelte component and anyone can contribute a new design
- Flatxel is an r/place-style collaborative pixel canvas
- Gabble is a daily word game PWA that mixes Wordle and Boggle mechanics
- Vivalence is an AI-harnessed, self-hostable app platform built in Svelte
- Can you terraform Mars? is an interactive Nature featured article
Learning Resources
Featuring Svelte Contributors and Ambassadors
- atproto x npmx x svelte meetup happened in Berlin after Local-First Conf - a crossover satellite event with the AT Protocol, npmx, and Svelte communities!
- Agentic Engineering with Svelte by Paolo Ricciuti walks through how Mainmatter is building agent-driven workflows on top of Svelte and SvelteKit
This Week in Svelte
To Read
- Migrated a dashboard application from React to Svelte - an account from an engineer who cut their bundle size roughly in half after moving from TanStack Start + React Query to SvelteKit and remote functions
- I built a Rust toolchain for Svelte by Yamagishi Kazutoshi (one of the main Svelte
language-tools
maintainers) walks throughrsvelte
, a Rust reimplementation of the Svelte compiler, formatter, linter, type checker and LSP tested against 12,000+ real components - Three years ago I told you Svelte gave me everything by Bishwas Bhandari is a personal retrospective on six years of building with Svelte
- Building a Dynamic Invoice Form in Svelte 5 with Formisch uses Formisch, Valibot and
FieldArray
to build a typed dynamic invoice form - Svelte Building Blocks is a free, runnable, level-based course that starts with components and runes and works up through APIs, testing and production
Libraries, Tools & Components
Frameworks and Tooling
- LayerChart 2.0 shipped a rewrite with a CSS-framework-agnostic API, new components and chart types from Sean Lynch
- Mochi, the experimental SSR framework for Svelte 5 and Bun, has added an
component with resizing, email sending with Svelte components as templates, queues, rate limiting and a built-in captcha (0.8.x). It can also now route compilation through a rust compiler (rsvelte
) instead ofsvelte/compiler
(0.9.x) - rsvelte is a Rust implementation of the Svelte toolchain from Yamagishi Kazutoshi
- Frizzante v2 is a Go + Svelte full-stack framework whose latest release adds SSG snapshots
- Hoikka is a full-stack SvelteKit ecommerce project that runs on SQLite and deploys to Node or Cloudflare (
pnpx create-hoikka-app
to try it) - SVOCS is a markdown-first docs and blog generator built on SvelteKit
- Svelte DocSmith is another docs framework for SvelteKit where markdown files become routes and the sidebar builds itself from frontmatter
- SDuX is a deterministic pipeline-based state management library that works with Svelte through
@sdux-vault/core
- svelte-effect-runtime lets you
yield*
effectful code directly inside
and markup - PlaySocket is a multiplayer library that handles optimistic updates and CRDT-based synchronization
UI Components and Visual Effects
- Lily is a Tailwind v4 component library with a single "quiet by design" visual language and shadcn-style CLI installs
- CossUI-Svelte is an unofficial port of the Coss UI components backfilling components missing from shadcn, Bits UI and Origin UI
- mindmapcn-svelte is a zero-config interactive mind map component styled to fit shadcn-svelte design systems
- Svelte Swipe To Action is a highly customizable swipe-to-action component
- Edra v3 is a rich text editor for SvelteKit that now ships headless and shadcn variants through a CLI and component registry
- CMS Brew lets clients edit their SvelteKit site through a chat interface that produces plain commits on GitHub
- File Viewer for Svelte is a native Svelte component and action for previewing PDF, Office, CAD and archive files in the browser (Demo)
Developer Tools and Plugins
- svelte-vitals is a static code-health checker for SvelteKit that scores SEO, performance, correctness, security and architecture from source, with inline PR annotations and SARIF upload
- PerfGraph turns Lighthouse traces into a focused "root cause to impact to fix" report designed to be read by AI agents
That's it for this month! Let us know if we missed anything on Reddit or Discord.
Until next time 👋🏼!
Facts Only
* Thirteen preview versions of SvelteKit 3 shipped in July, previewing new $app/manifest and $app/service-worker modules.
* Remote forms now expose a submitted property to react to form submission events immediately.
* `defineEnvVars` has moved from `@sveltejs/kit` to `@sveltejs/kit/env`.
* Shallow routing is now built into `goto` via a new `state` option, replacing `pushState` and `replaceState`.
* `refreshAll` replaces the deprecated `invalidateAll`.
* A new `$app/manifest` module exposes immutable, assets, prerendered, and routes for runtime introspection.
* A new `$app/service-worker` module replaces `$service-worker`, and `$app/paths` is now importable in service workers.
* SvelteKit detects new deployments based on data, remote responses, tab focus, and visibility change, with a default `pollInterval` of one hour.
* Sourcemaps are supported in production builds.
* Tracing has moved out of the experimental namespace.
* Form fields gain a `dirty()` helper, and remote forms get a `field.touched()` helper for validation UX.
* The Svelte CLI improves package manager detection.
* `error.svelte` now automatically gets `page` and `error` props typed.
Executive Summary
SvelteKit is introducing new features and updates, highlighted by the release of thirteen preview versions in July, which feature development in the $app/manifest and $app/service-worker modules, improved service worker API support with type checking, and tracing being moved out of the experimental namespace. Stable releases continue to integrate updates, such as remote forms exposing a submitted property and environment helpers moving to a dedicated subpath. The SvelteKit 3 preview introduces significant shifts in routing and error handling, including shallow routing baked into goto via a new state option, replacement of refreshAll with invalidateAll, and changes to error reporting requiring a message alongside the status code. Additionally, language tools are seeing improvements, like zero-config error props for page/error types and dependency reduction in the Svelte Language Server.
The preview releases focus on integrating advanced features into core concepts; specifically, routing is being made more direct through goto updates, and runtime introspection of build outputs is enabled via the new manifest module. Stable updates continue to refine developer experience by improving form interaction feedback and simplifying environment variable management. The upcoming Svelte Summit Ljubljana 2026 is scheduled for November 19-20.
Full Take
The evolution of SvelteKit signals a deliberate shift toward deeper integration, runtime awareness, and improved developer ergonomics, moving complex concepts into the core framework structure. The introduction of modules like `$app/manifest` and `$app/service-worker` suggests an intent to expose the underlying operational state of deployments directly to the application layer, fundamentally changing how developers interact with deployment artifacts at runtime. Furthermore, baking shallow routing into `goto` reflects a move away from lower-level browser API calls toward higher-level, framework-aware state management for navigation, reducing the friction associated with manipulating browser history primitives.
The pattern emerging is one of expanding the scope of what the framework manages and exposes—from build outputs (manifest) to asynchronous operations (service workers) and user experience feedback (form states). This focus suggests an attempt to reduce the "plumbing" burden on the developer, allowing them to focus on application logic rather than manual state synchronization or low-level deployment checks. The subtle integration of tracing and form feedback helpers indicates a trajectory toward making abstract concepts like data flow and user interaction explicit and manageable within the framework's typesystem.
The implication is that the future direction involves transforming SvelteKit from a routing/rendering framework into a comprehensive runtime orchestration layer. This requires understanding how these new introspection and synchronization capabilities will impact downstream ecosystem tools and build processes. What assumptions about application deployment and state management are being made when these low-level details become integrated options? If the system prioritizes runtime detection of deployments and state synchronization, what role does this play in managing distributed application architectures? How does this evolution balance achieving greater framework power against maintaining a cohesive, predictable experience for developers navigating complex asynchronous operations?
Sentinel — Human
This article reads like a detailed, fact-heavy developer roundup, demonstrating strong aggregation of technical release notes rather than pure synthetic generation.
