Runes-first, Vite 7-powered, and quietly eating Astro's lunch on cold builds
If you've been living under a rock this week, SvelteKit 3 dropped and the benchmarks are spicy. Spoiler: it's faster than Astro on cold builds. Do not @ me — I ran the numbers on an M4.
The Setup
SvelteKit 3 is runes-first now. No more `$:` reactive blocks, no more `export let` props. Everything is `$state`, `$derived`, `$props`. The compiler output is leaner and the dev server boots in under 200ms on my M4.
bun create svelte@latest my-app
cd my-app
bun install
bun run devThe Money Pattern
The new `+page.svelte` route convention is unchanged, but the ergonomics inside are night-and-day. Behold a route file with rune state and a typed loader — this is the entire mental model.
<script lang="ts">
import type { PageData } from './$types';
let { data }: { data: PageData } = $props();
let count = $state(0);
let doubled = $derived(count * 2);
</script>
<h1>{data.title}</h1>
<button onclick={() => count++}>
clicked {count} times — doubled is {doubled}
</button>The Catch
The ecosystem is still smaller than Next.js. Half the shadcn-equivalents are community-maintained and the Supabase auth helpers lag behind the Next.js SSR package. If you live in headless Pipedrive-meets-Supabase land, you'll write more glue than you'd expect.
The Verdict
For greenfield content sites and dashboards, SvelteKit 3 is a legitimately better DX than Next 16. The runes finally feel like the React hooks API should have felt in 2019. I'm porting a side project to it this weekend just to feel something. Try it.