{"collection":{"slug":"frontend-frameworks","name":"Frontend Frameworks"},"digest":{"id":"cwd_LOZReCIqJXtS_--IAW3y-","weekStart":"2026-07-06","title":"SvelteKit 3.0 enters breaking-change territory while Vite 8 goes stable","intro":"This week SvelteKit dropped three consecutive 3.0 pre-releases that remove $app/stores, $app/paths, and require Vite 8 with Rolldown 1.0.0, while Next.js gradually ships Request Insights and an experimental TypeScript CLI.","body":"The story of the week is SvelteKit's sprint toward 3.0. Three sequential pre-releases — next.5, next.6, and next.7 — landed within days of each other, each carrying major breaking changes that will require careful attention from anyone upgrading.\n\n### A clean break with $app/stores and $app/paths\n\nThe most surface-level change is the removal of two beloved modules. [SvelteKit 3.0.0-next.7](/release/rel_1rMskW060DcWmp_SU0TPn-sveltekit-3-0-0-next-7-removes-app-stores-and-param-files-hardens-form-error) eliminates `$app/stores` entirely, forcing migration to the updated `$app/state` module. [SvelteKit 3.0.0-next.5](/release/rel_96BPhN_GSv-E1I7lI7ukF-sveltekit-3-0-0-next-5-removes-base-assets-from-app-paths-and-requires-vite-8) removes `base`, `assets`, and `resolveRoute` from `$app/paths`. Both decisions reflect the framework's ongoing move toward a more consistent state model. If you're reaching for `$app/paths` in your SvelteKit project, you'll need to import `base` and `assets` from `$app/state` instead.\n\n### Form actions get surgical\n\nForm handling received significant attention. [SvelteKit 3.0.0-next.6](/release/rel_a0BM5D2wIO40Aq4QQ2vqa-sveltekit-3-0-0-next-6-overhauls-form-actions-http-status-handling-and) now uses the HTTP status code returned from `fail()` for form action responses, rather than ignoring it. The `form.error` type in next.7 was tightened from `any` to `App.Error | undefined` — a welcome narrowing that catches type mismatches at compile time rather than runtime. On the stable side, [SvelteKit 2.69.0](/release/rel_teoEWFDQ_cJ04sJHZpGJq-sveltekit-2-69-0-exposes-submitted-property-of-remote-forms) exposed a `submitted` property on remote forms, and [SvelteKit 2.68.0](/release/rel_mEJOjlmLhLqVedlaT-Po_-sveltekit-2-68-0-exposes-form-enhancement-types-and-sets-submit-field-values) exposed `RemoteFormEnhanceInstance` and `RemoteFormEnhanceCallback` types for better TypeScript ergonomics.\n\n### Vite 8 and Rolldown 1.0.0 become the baseline\n\nA hard requirement for Vite ^8.0.12, the first stable Vite 8 release bundling Rolldown 1.0.0, ripples through every SvelteKit next-release. [SvelteKit 3.0.0-next.5](/release/rel_96BPhN_GSv-E1I7lI7ukF-sveltekit-3-0-0-next-5-removes-base-assets-from-app-paths-and-requires-vite-8) requires it, as does the [SvelteKit Adapter for Vercel v7.0.0-next.1](/release/rel_6PbgqTgNylXaTOfHgBcOO-sveltekit-adapter-for-vercel-v7-0-0-next-1-requires-vite-8), the adapter-node 6.0.0-next.1, and [enhanced-img 1.0.0-next.1](/release/rel_KVxZ9eaumpnYp30kDyhTt-sveltejs-enhanced-img-1-0-0-next-1-requires-vite-8-0-12). If you're running any of these adapters or plugins, you must upgrade your Vite version in lockstep.\n\n### Adapter config consolidation\n\nThe [adapter-node 6.0.0-next.2](/release/rel_9ho4jhx0jN3UH-vClJrLT-sveltejs-adapter-node-6-0-0-next-2-consolidates-origin-config) removes the `ORIGIN` environment variable and `kit.prerender.origin` config option, replacing both with a single `kit.paths.origin` config. This simplifies deployment configuration, especially for those running behind proxies. The [adapter-node@5.5.7](/release/rel_BgscVEyivd4snALZ3M5U3-sveltejs-adapter-node-5-5-7-fixes-streaming-buffering-and-socket-file-cleanup) also shipped a fix adding `X-Accel-Buffering: no` headers to SSE responses to prevent nginx buffering.\n\n### Next.js edges toward developer tooling\n\nWhile the SvelteKit ecosystem dominated the week, Next.js shipped several canary releases worth noting. [Next.js v16.3.0-canary.84](/release/rel_PN4mrV7AG6zy4DjPt1NBT-next-js-v16-3-0-canary-84-adds-request-insights-with-dev-snapshots-and-hmr) introduces Request Insights, which exposes dev snapshots to tools and HMR, derives request history and fetch data, and records local framework spans. [Next.js v16.3.0-canary.83](/release/rel_kkmBkrqwHoHXpIQvt3I2W-next-js-v16-3-0-canary-83-adds-experimental-typescript-cli-backend) adds an experimental TypeScript CLI backend, and [Next.js v16.3.0-canary.82](/release/rel_81a-5DkemmvlbD7l5_s7k-next-js-v16-3-0-canary-82-normalizes-expire-and-revalidate-values) normalizes expire and revalidate values to handle Infinity and surface configuration mistakes early.\n\n### Security and platform fixes\n\nTwo practical fixes worth highlighting: [SvelteKit 2.69.1](/release/rel_oQflo-_uObskPhfi7PiDF-sveltekit-2-69-1-fixes-prototype-pollution-and-unhandled-promise-rejection) patches a prototype pollution vulnerability when deleting file inputs, and the [SvelteKit adapter-netlify v7.0.0-next.2](/release/rel_Nijrz0L4lLNpCAQpEknDj-sveltekit-adapter-netlify-v7-0-0-next-2-fixes-platform-context-types) fixes type definitions for `platform.context`. Expo also [added passkey sign-in](/release/rel_Lsb42L6v7Q-90yhtxnbW0-expo-adds-passkey-sign-in-to-accounts) to its accounts, replacing the password-plus-OTP combination for more secure authentication.","releaseIds":["rel_1rMskW060DcWmp_SU0TPn","rel_96BPhN_GSv-E1I7lI7ukF","rel_a0BM5D2wIO40Aq4QQ2vqa","rel_teoEWFDQ_cJ04sJHZpGJq","rel_mEJOjlmLhLqVedlaT-Po_","rel_6PbgqTgNylXaTOfHgBcOO","rel_KVxZ9eaumpnYp30kDyhTt","rel_9ho4jhx0jN3UH-vClJrLT","rel_BgscVEyivd4snALZ3M5U3","rel_PN4mrV7AG6zy4DjPt1NBT","rel_kkmBkrqwHoHXpIQvt3I2W","rel_81a-5DkemmvlbD7l5_s7k","rel_oQflo-_uObskPhfi7PiDF","rel_Nijrz0L4lLNpCAQpEknDj","rel_Lsb42L6v7Q-90yhtxnbW0"],"releaseCount":22,"generatedAt":"2026-07-13T06:19:04.200Z","releases":[{"id":"rel_1rMskW060DcWmp_SU0TPn","title":"SvelteKit 3.0.0-next.7 removes $app/stores and param files, hardens form.error typing","path":"/release/rel_1rMskW060DcWmp_SU0TPn-app-stores-removed-form-error-now-typed-param-files-deprecated","org":{"slug":"svelte","name":"Svelte"},"importance":4},{"id":"rel_96BPhN_GSv-E1I7lI7ukF","title":"SvelteKit 3.0.0-next.5 removes base/assets from $app/paths and requires Vite 8","path":"/release/rel_96BPhN_GSv-E1I7lI7ukF-app-paths-simplified-base-and-assets-removed-requires-vite-8","org":{"slug":"svelte","name":"Svelte"},"importance":4},{"id":"rel_a0BM5D2wIO40Aq4QQ2vqa","title":"SvelteKit 3.0.0-next.6 overhauls form actions, HTTP status handling, and navigation","path":"/release/rel_a0BM5D2wIO40Aq4QQ2vqa-form-actions-now-return-http-status-codes-external-redirects-forbidden-by","org":{"slug":"svelte","name":"Svelte"},"importance":4},{"id":"rel_teoEWFDQ_cJ04sJHZpGJq","title":"SvelteKit 2.69.0 exposes submitted property of remote forms","path":"/release/rel_teoEWFDQ_cJ04sJHZpGJq-remote-forms-now-expose-submitted-property","org":{"slug":"svelte","name":"Svelte"},"importance":2},{"id":"rel_mEJOjlmLhLqVedlaT-Po_","title":"SvelteKit 2.68.0 exposes form enhancement types and sets submit field values","path":"/release/rel_mEJOjlmLhLqVedlaT-Po_-form-enhancement-types-exposed-submit-fields-now-populated-on-submission","org":{"slug":"svelte","name":"Svelte"},"importance":2},{"id":"rel_6PbgqTgNylXaTOfHgBcOO","title":"SvelteKit Adapter for Vercel v7.0.0-next.1 requires Vite 8","path":"/release/rel_6PbgqTgNylXaTOfHgBcOO-requires-vite-8-0-12","org":{"slug":"svelte","name":"Svelte"},"importance":4},{"id":"rel_KVxZ9eaumpnYp30kDyhTt","title":"@sveltejs/enhanced-img@1.0.0-next.1 requires Vite 8.0.12+","path":"/release/rel_KVxZ9eaumpnYp30kDyhTt-requires-vite-8-0-12-and-above","org":{"slug":"svelte","name":"Svelte"},"importance":2},{"id":"rel_9ho4jhx0jN3UH-vClJrLT","title":"@sveltejs/adapter-node 6.0.0-next.2 consolidates origin config","path":"/release/rel_9ho4jhx0jN3UH-vClJrLT-kit-paths-origin-replaces-prerender-origin-and-origin-env-var","org":{"slug":"svelte","name":"Svelte"},"importance":4},{"id":"rel_BgscVEyivd4snALZ3M5U3","title":"@sveltejs/adapter-node@5.5.7 fixes streaming buffering and socket file cleanup","path":"/release/rel_BgscVEyivd4snALZ3M5U3-streamed-responses-no-longer-buffered-by-reverse-proxies-socket-file-cleanup","org":{"slug":"svelte","name":"Svelte"},"importance":2},{"id":"rel_PN4mrV7AG6zy4DjPt1NBT","title":"Next.js v16.3.0-canary.84 adds request insights with dev snapshots and HMR","path":"/release/rel_PN4mrV7AG6zy4DjPt1NBT-request-insights-dev-snapshots-fetch-history-framework-spans","org":{"slug":"vercel","name":"Vercel"},"importance":2},{"id":"rel_kkmBkrqwHoHXpIQvt3I2W","title":"Next.js v16.3.0-canary.83 adds experimental TypeScript CLI backend","path":"/release/rel_kkmBkrqwHoHXpIQvt3I2W-experimental-typescript-cli-backend-ships","org":{"slug":"vercel","name":"Vercel"},"importance":2},{"id":"rel_81a-5DkemmvlbD7l5_s7k","title":"Next.js v16.3.0-canary.82 normalizes expire and revalidate values","path":"/release/rel_81a-5DkemmvlbD7l5_s7k-expire-and-revalidate-values-now-normalized-and-validated","org":{"slug":"vercel","name":"Vercel"},"importance":2},{"id":"rel_oQflo-_uObskPhfi7PiDF","title":"SvelteKit 2.69.1 fixes prototype pollution and unhandled promise rejection","path":"/release/rel_oQflo-_uObskPhfi7PiDF-prototype-pollution-fixed-unhandled-promise-rejection-prevented","org":{"slug":"svelte","name":"Svelte"},"importance":3},{"id":"rel_Nijrz0L4lLNpCAQpEknDj","title":"SvelteKit adapter-netlify v7.0.0-next.2 fixes platform.context types","path":"/release/rel_Nijrz0L4lLNpCAQpEknDj-platform-context-types-fixed","org":{"slug":"svelte","name":"Svelte"},"importance":2},{"id":"rel_Lsb42L6v7Q-90yhtxnbW0","title":"Expo adds passkey sign-in to accounts","path":"/release/rel_Lsb42L6v7Q-90yhtxnbW0-passkey-sign-in-now-available","org":{"slug":"expo","name":"Expo"},"importance":3}]}}