<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps" -->

---
title: The SvelteKit 3 Release Candidate is here | daily.dev
description: SvelteKit 3 has entered Release Candidate phase, bringing breaking changes from SvelteKit 2 alongside a migration tool (sv migrate). Key changes include moving...
canonical: https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The SvelteKit 3 Release Candidate is here | daily.dev
og:description: SvelteKit 3 has entered Release Candidate phase, bringing breaking changes from SvelteKit 2 alongside a migration tool (sv migrate). Key changes include moving...
og:url: https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps
og:image: https://api.daily.dev/og/posts/LooTBlLps.png
og:image:alt: The SvelteKit 3 Release Candidate is here
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The SvelteKit 3 Release Candidate is here

**[Svelte Blog](https://daily.dev/sources/svelte)** · 6 min read · 72 upvotes · 5 comments

## Summary

SvelteKit 3 has entered Release Candidate phase, bringing breaking changes from SvelteKit 2 alongside a migration tool (sv migrate). Key changes include moving configuration into vite.config.ts, replacing the $lib alias with Node subpath imports (#lib), simplified TypeScript config via $app/tsconfig, reworked service worker imports, more powerful explicit environment variables (now stable, not experimental), improved error handling via Svelte 5 error boundaries and handleError, sourcemapped stack traces, and shallow routing now handled through goto. SvelteKit 3 requires Vite 8 (with Rolldown for faster builds) and adopts the Vite Environment API, though it does not support FetchableDevEnvironment. Remote functions, previewed over the past year, remain experimental but are positioned as the future of client-server communication alongside async Svelte.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://svelte.dev/blog/sveltekit-3-release-candidate>

## Questions this post answers

### How do I migrate my SvelteKit 2 app to SvelteKit 3?

Run npx sv@next migrate sveltekit-3 --tasks all --confirm to automatically migrate as much code as possible. Remaining changes generate a TODO list. SvelteKit prints diagnostic warnings and errors for code that has not yet been updated, since SvelteKit 3 introduces breaking changes such as replacing the $lib alias with Node subpath imports and requiring Svelte 5.

_daily.dev helps developers track framework upgrades like this one before shipping a migration._

### What replaced the $lib alias in SvelteKit 3?

The $lib alias from SvelteKit 2 is replaced by Node.js subpath imports, using #lib instead. Unlike the old alias, subpath imports require unambiguous paths, so importing from #lib/foo must instead be written as #lib/foo.ts or #lib/foo/index.ts, since Vite and TypeScript natively support this Node feature without extra coordination code.

_Developers weighing import strategies can follow changes like this one via daily.dev._

### Does SvelteKit 3 require Svelte 5?

Yes, SvelteKit 3 requires Svelte 5, whereas SvelteKit 2 supported Svelte 4. This unlocks error boundaries, allowing +error.svelte components to display during render errors, not just load errors, and lets all errors, including deliberately thrown ones, pass through handleError logic for more consistent handling.

_Teams planning a Svelte 5 upgrade can keep tabs on dependent framework changes via daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@allinonetools** · 2 upvotes

> Really interesting release. The migration tool should make the breaking changes much easier to handle, and Vite 8 + Rolldown sounds like a big performance win.

**@rizzdev** · 1 upvotes

> They moved $lib to a node subpath and deleted the alias coordination. Every import now has to name the file or the index, and a directory or extensionless path is a compile fail. That is a full-repo grep they never put a number on, and it hits every app that treated lib like a folder

**@agustinbarrientos** · 1 upvotes

> The migration should run in its own commit, with manual fixes following separately. Generated changes are much easier to audit or revert that way

**@trevorsuna** · 0 upvotes

> Moving config into vite.config.ts and adopting Vite 8 should simplify the stack, but the migration tool will be the real confidence builder for larger apps. Sourcemapped server errors and stronger error boundaries are practical upgrades that teams will notice immediately.

## Similar posts on daily.dev

- [What’s new in Svelte: July 2026](https://daily.dev/posts/what-s-new-in-svelte-july-2026-yjmmqqvqz) · Svelte Blog · 50 upvotes · 4 comments
- [SvelteKit 3 puts heat on Next.js with radical approach to RPCs](https://daily.dev/posts/sveltekit-3-puts-heat-on-next-js-with-radical-approach-to-rpcs-mfzwc6pvz) · DEVCLASS · 7 upvotes · 1 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#typescript](https://daily.dev/tags/typescript), [#svelte](https://daily.dev/tags/svelte), [#vite](https://daily.dev/tags/vite), [#sveltekit](https://daily.dev/tags/sveltekit)

[View this post on daily.dev](https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"The SvelteKit 3 Release Candidate is here","url":"https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps"},"datePublished":"2026-08-13T16:49:27.935Z","dateModified":"2026-09-13T20:34:01.087Z","description":"SvelteKit 3 has entered Release Candidate phase, bringing breaking changes from SvelteKit 2 alongside a migration tool (sv migrate). Key changes include moving...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/43b0856596be0e5b26ab277dacfdcd62?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/43b0856596be0e5b26ab277dacfdcd62?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Svelte Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Svelte Blog","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/28300f110fce4397bb4b78124a45ae29","url":"https://daily.dev/sources/svelte"},"commentCount":5,"discussionUrl":"https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":72},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":5}],"keywords":"webdev,typescript,svelte,vite,sveltekit","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Svelte Blog","item":"https://daily.dev/sources/svelte"},{"@type":"ListItem","position":3,"name":"The SvelteKit 3 Release Candidate is here"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps","comment":[{"@type":"Comment","text":"Really interesting release. The migration tool should make the breaking changes much easier to handle, and Vite 8 + Rolldown sounds like a big performance win.","datePublished":"2026-08-14T03:10:18.660Z","url":"https://daily.dev/posts/LooTBlLps#c-tiN43dCXo","author":{"@type":"Person","name":"AllInOneTools","url":"https://daily.dev/allinonetools","image":"https://media.daily.dev/image/upload/s--4ZT8QlF0--/f_auto/v1769790028/avatars/avatar_igzBsWloJeaegzm9bQltZ?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2}},{"@type":"Comment","text":"They moved $lib to a node subpath and deleted the alias coordination. Every import now has to name the file or the index, and a directory or extensionless path is a compile fail. That is a full-repo grep they never put a number on, and it hits every app that treated lib like a folder","datePublished":"2026-08-14T11:34:44.478Z","url":"https://daily.dev/posts/LooTBlLps#c-RnsKOUAHZ","author":{"@type":"Person","name":"Andrew","url":"https://daily.dev/rizzdev","image":"https://media.daily.dev/image/upload/s--35vRfXAA--/f_auto/v1785413727/avatars/avatar_fQ7ttCKtPuu6tDvcgQXv5?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"The migration should run in its own commit, with manual fixes following separately. Generated changes are much easier to audit or revert that way","datePublished":"2026-08-14T12:36:56.081Z","url":"https://daily.dev/posts/LooTBlLps#c-OP4gmn7D0","author":{"@type":"Person","name":"Agustin Barrientos","url":"https://daily.dev/agustinbarrientos","image":"https://media.daily.dev/image/upload/s--5ayxQnqn--/f_auto/v1788281802/avatars/avatar_wQYYVe5Tbj0NJ7C7qPoa8?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"Moving config into vite.config.ts and adopting Vite 8 should simplify the stack, but the migration tool will be the real confidence builder for larger apps. Sourcemapped server errors and stronger error boundaries are practical upgrades that teams will notice immediately.","datePublished":"2026-08-15T02:52:52.459Z","url":"https://daily.dev/posts/LooTBlLps#c-oLCbG9VjN","author":{"@type":"Person","name":"Trevor Suna","url":"https://daily.dev/trevorsuna","image":"https://media.daily.dev/image/upload/s--dZ7gXxpp--/f_auto/v1784081551/avatars/avatar_EMoP47rpuw8DNjhp6R1b6?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/the-sveltekit-3-release-candidate-is-here-lootbllps#faq","mainEntity":[{"@type":"Question","name":"How do I migrate my SvelteKit 2 app to SvelteKit 3?","acceptedAnswer":{"@type":"Answer","text":"Run npx sv@next migrate sveltekit-3 --tasks all --confirm to automatically migrate as much code as possible. Remaining changes generate a TODO list. SvelteKit prints diagnostic warnings and errors for code that has not yet been updated, since SvelteKit 3 introduces breaking changes such as replacing the $lib alias with Node subpath imports and requiring Svelte 5. daily.dev helps developers track framework upgrades like this one before shipping a migration."}},{"@type":"Question","name":"What replaced the $lib alias in SvelteKit 3?","acceptedAnswer":{"@type":"Answer","text":"The $lib alias from SvelteKit 2 is replaced by Node.js subpath imports, using #lib instead. Unlike the old alias, subpath imports require unambiguous paths, so importing from #lib/foo must instead be written as #lib/foo.ts or #lib/foo/index.ts, since Vite and TypeScript natively support this Node feature without extra coordination code. Developers weighing import strategies can follow changes like this one via daily.dev."}},{"@type":"Question","name":"Does SvelteKit 3 require Svelte 5?","acceptedAnswer":{"@type":"Answer","text":"Yes, SvelteKit 3 requires Svelte 5, whereas SvelteKit 2 supported Svelte 4. This unlocks error boundaries, allowing +error.svelte components to display during render errors, not just load errors, and lets all errors, including deliberately thrown ones, pass through handleError logic for more consistent handling. Teams planning a Svelte 5 upgrade can keep tabs on dependent framework changes via daily.dev."}}]}
```

