Repository: sveltejs/kit
Pull request #8146 (2022-12-14 11:47:23)

Live now
at the risk of giving the game away: we can merge this right before today's stream

changeset-bot[bot]: ###  ⚠️  No Changeset found

Latest commit: 337f69caf44cd841ee6b3ceaed8f8ca4bdbab7d6

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. **If these changes should result in a version bump, you need to add a changeset.**

<details><summary>This PR includes no changesets</summary>

  When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

</details>

[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/master/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add a changeset to this PR](https://github.com/sveltejs/kit/new/live-now?filename=.changeset/cyan-dolphins-grow.md&value=---%0A%22kit.svelte.dev%22%3A%20patch%0A---%0A%0ALive%20now%0A)



Patch:
diff --git a/.changeset/config.json b/.changeset/config.json
index 8df503f2b..cc0d41521 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -5,5 +5,5 @@
 	"linked": [],
 	"access": "public",
 	"baseBranch": "master",
-	"updateInternalDependencies": "patch"
+	"bumpVersionsWithWorkspaceProtocolOnly": true
 }
diff --git a/.changeset/exit-pre-manually.js b/.changeset/exit-pre-manually.js
new file mode 100644
index 000000000..59a962214
--- /dev/null
+++ b/.changeset/exit-pre-manually.js
@@ -0,0 +1,78 @@
+import glob from 'tiny-glob/sync.js';
+import { unlinkSync, readFileSync, writeFileSync } from 'fs';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+
+// cleanup changests dir, remove all changesets and pre.json
+const changesets_dir = dirname(fileURLToPath(import.meta.url));
+const changeset_files = glob(`${changesets_dir}/*-*-*.md`);
+changeset_files.forEach((f) => unlinkSync(f));
+unlinkSync(`${changesets_dir}/pre.json`);
+console.log(`removed ${changeset_files.length} changesets`);
+
+// update packages
+// set version
+// add changelog entry
+const packages_dir = fileURLToPath(new URL('../packages', import.meta.url));
+const package_files = glob(`${packages_dir}/*/package.json`);
+for (const pkg_file of package_files) {
+	const pkg = JSON.parse(readFileSync(pkg_file, 'utf-8'));
+	const { version } = pkg;
+	if (version.includes('-next')) {
+		pkg.version = version.replace(/(\d+\.\d+\.\d+)-next.*/, '$1');
+		// remove -next from peerDependencies
+		if (pkg.peerDependencies) {
+			pkg.peerDependencies = Object.fromEntries(
+				Object.entries(pkg.peerDependencies).map(([k, v]) => [
+					k,
+					v.replace(/(\d+\.\d+\.\d+)-next.*/, '$1')
+				])
+			);
+		}
+		writeFileSync(pkg_file, JSON.stringify(pkg, null, '\t') + '\n');
+		const changelog_file = pkg_file.replace(/package\.json$/, 'CHANGELOG.md');
+		let changelog = readFileSync(changelog_file, 'utf-8');
+		changelog = update_changelog(changelog, pkg);
+		writeFileSync(changelog_file, changelog, 'utf-8');
+	} else {
+		throw new Error(`invalid version ${version}, expected -next tag for ${pkg.name}`);
+	}
+	console.log(`updated ${pkg.name}@${version} to ${pkg.version}`);
+}
+const create_svelte_template_dir = fileURLToPath(
+	new URL('../packages/create-svelte/templates', import.meta.url)
+);
+const create_svelte_templates = glob(`${create_svelte_template_dir}/*/package.template.json`);
+for (const create_svelte_template_pkg_file of create_svelte_templates) {
+	const pkg = JSON.parse(readFileSync(create_svelte_template_pkg_file, 'utf-8'));
+	// remove -next from devDependencies
+	if (pkg.devDependencies) {
+		pkg.devDependencies = Object.fromEntries(
+			Object.entries(pkg.devDependencies).map(([k, v]) => [
+				k,
+				v.replace(/(\d+\.\d+\.\d+)-next.*/, '$1')
+			])
+		);
+	}
+	writeFileSync(create_svelte_template_pkg_file, JSON.stringify(pkg, null, '\t') + '\n');
+	console.log(`removed -next from devDependencies in ${create_svelte_template_pkg_file}`);
+}
+
+function update_changelog(changelog, pkg) {
+	const prefix = `# ${pkg.name}\n`;
+	if (!changelog.startsWith(prefix)) {
+		throw new Error(`changelog invalid for ${pkg.name}. must start with ''${prefix}`);
+	}
+	return changelog.replace(prefix, `${prefix}${changelog_entry(pkg.version)}`);
+}
+
+function changelog_entry(version) {
+	return `
+## ${version}
+
+### Major Changes
+
+First major release, see below for the history of changes that lead up to this.
+Starting from now all releases follow semver and changes will be listed as Major/Minor/Patch
+`;
+}
diff --git a/.changeset/forty-apricots-sin.md b/.changeset/forty-apricots-sin.md
new file mode 100644
index 000000000..b2a59d612
--- /dev/null
+++ b/.changeset/forty-apricots-sin.md
@@ -0,0 +1,8 @@
+---
+'@sveltejs/adapter-cloudflare': patch
+'@sveltejs/adapter-cloudflare-workers': patch
+'@sveltejs/adapter-node': patch
+'@sveltejs/kit': patch
+---
+
+[breaking] remove warnings/errors about removed/changed APIs
diff --git a/.changeset/fresh-files-study.md b/.changeset/fresh-files-study.md
new file mode 100644
index 000000000..0b5ec64a9
--- /dev/null
+++ b/.changeset/fresh-files-study.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+[fix] remove obsolete generated types correctly
diff --git a/.changeset/pre.json b/.changeset/pre.json
index c9eb0cd30..764a6f896 100644
--- a/.changeset/pre.json
+++ b/.changeset/pre.json
@@ -402,6 +402,7 @@
     "fluffy-crews-fry",
     "fluffy-dryers-jump",
     "fluffy-seahorses-sell",
+    "forty-apricots-sin",
     "forty-cycles-punch",
     "forty-icons-switch",
     "forty-lions-give",
@@ -426,6 +427,7 @@
     "fresh-adults-ring",
     "fresh-brooms-relate",
     "fresh-dolls-destroy",
+    "fresh-files-study",
     "fresh-geese-flow",
     "fresh-hats-tie",
     "fresh-lemons-fail",
@@ -1081,6 +1083,7 @@
     "rude-masks-kneel",
     "rude-nails-work",
     "rude-olives-wink",
+    "rude-pears-hammer",
     "rude-rockets-rescue",
     "rude-starfishes-press",
     "rude-tips-rule",
diff --git a/.changeset/rude-pears-hammer.md b/.changeset/rude-pears-hammer.md
new file mode 100644
index 000000000..5185d07d4
--- /dev/null
+++ b/.changeset/rude-pears-hammer.md
@@ -0,0 +1,5 @@
+---
+'create-svelte': patch
+---
+
+[feat] remove release candidate banner
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f23ce4008..1403abb6b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -46,19 +46,6 @@ jobs:
           NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
           UPDATE_TEMPLATE_SSH_KEY: ${{ secrets.UPDATE_TEMPLATE_SSH_KEY }}
 
-      - name: Update latest tag on published packages # only needed until we release 1.0.0 and exit pre-release mode
-        if: steps.changesets.outputs.published == 'true'
-        # wait a bit and then run "npm dist-tag add package@version latest" for all published packages
-        env:
-          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
-          published_packages: ${{steps.changesets.outputs.publishedPackages}}
-        run: |
-          sleep 20
-          cat << EOF > "$HOME/.npmrc"
-            //registry.npmjs.org/:_authToken=$NPM_TOKEN
-          EOF
-          echo $published_packages | jq -r 'map((.name + "@" + .version)) | .[]' | while read pkgver; do npm dist-tag add $pkgver latest || continue;done
-
       # TODO alert discord
       # - name: Send a Slack notification if a publish happens
       #   if: steps.changesets.outputs.published == 'true'
diff --git a/README.md b/README.md
index b9d068c73..fb5282e9f 100644
--- a/README.md
+++ b/README.md
@@ -1,58 +1,31 @@
 [![Chat](https://img.shields.io/discord/457912077277855764?label=chat&logo=discord)](https://svelte.dev/chat)
 
-# READ THIS FIRST!
+# SvelteKit
 
-SvelteKit is in its release candidate phase:
-- :exclamation: expect bugs! 
-- :heavy_check_mark: no more planned breaking changes
-- :heavy_check_mark: countdown to a stable release
-- :x: feature-complete
-- :x: tutorials
-
-Watch [the announcement](https://www.youtube.com/watch?v=A8jkJTWacow&t=29628s) and track [progress towards 1.0](https://github.com/sveltejs/kit/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0) for more details.
-
-## Overview
-
-The Fastest Way to Build Svelte Apps
-
-- 💨 Blazing-Fast Production Sites
-- 🛠️ SSR, SPA, SSG, and In-Between
-- ⚡️ Instantly Visible Code Changes
-- 🔩 Existing Universe of Plugins
-- 🔑 Fully Typed APIs
-
-## Documentation
-
-Please see [the documentation](https://kit.svelte.dev/docs) for information about getting started and developing with SvelteKit.
+Web development, streamlined. Read the [documentation](https://kit.svelte.dev/docs) to get started.
 
 ### Packages
 
 | Package                                                                     | Changelog                                                     |
 | --------------------------------------------------------------------------- | ------------------------------------------------------------- |
 | [@sveltejs/kit](packages/kit)                                               | [Changelog](packages/kit/CHANGELOG.md)                        |
-| [create-svelte](packages/create-svelte)                                     | [Changelog](packages/create-svelte/CHANGELOG.md)              |
-| [@sveltejs/adapter-node](packages/adapter-node)                             | [Changelog](packages/adapter-node/CHANGELOG.md)               |
-| [@sveltejs/adapter-static](packages/adapter-static)                         | [Changelog](packages/adapter-static/CHANGELOG.md)             |
-| [@sveltejs/adapter-cloudflare-workers](packages/adapter-cloudflare-workers) | [Changelog](packages/adapter-cloudflare-workers/CHANGELOG.md) |
+| [@sveltejs/adapter-auto](packages/adapter-auto)                             | [Changelog](packages/adapter-auto/CHANGELOG.md)               |
 | [@sveltejs/adapter-cloudflare](packages/adapter-cloudflare)                 | [Changelog](packages/adapter-cloudflare/CHANGELOG.md)         |
+| [@sveltejs/adapter-cloudflare-workers](packages/adapter-cloudflare-workers) | [Changelog](packages/adapter-cloudflare-workers/CHANGELOG.md) |
 | [@sveltejs/adapter-netlify](packages/adapter-netlify)                       | [Changelog](packages/adapter-netlify/CHANGELOG.md)            |
+| [@sveltejs/adapter-node](packages/adapter-node)                             | [Changelog](packages/adapter-node/CHANGELOG.md)               |
+| [@sveltejs/adapter-static](packages/adapter-static)                         | [Changelog](packages/adapter-static/CHANGELOG.md)             |
 | [@sveltejs/adapter-vercel](packages/adapter-vercel)                         | [Changelog](packages/adapter-vercel/CHANGELOG.md)             |
+| [@sveltejs/amp](packages/amp)                                               | [Changelog](packages/amp/CHANGELOG.md)                        |
+| [@sveltejs/package](packages/package)                                       | [Changelog](packages/package/CHANGELOG.md)                    |
+| [create-svelte](packages/create-svelte)                                     | [Changelog](packages/create-svelte/CHANGELOG.md)              |
+| [svelte-migrate](packages/migrate)                                          | [Changelog](packages/migrate/CHANGELOG.md)                    |
 
-The SvelteKit community also makes additional [SvelteKit adapters available for use](https://sveltesociety.dev/components#adapters).
-
-### Migrating from Sapper
-
-Check out the [Migration Guide](https://kit.svelte.dev/docs/migrating) if you are upgrading from Sapper.
-
-## Bug reporting
-
-Please make sure the issue you're reporting involves SvelteKit. Many issues related to how a project builds originate from [Vite](https://vitejs.dev/), which is used to build a SvelteKit project. It's important to note that new Vite projects don't use SSR by default, and so if you create a new Vite project from scratch, many issues won't reproduce. You should thus start with a project that utilizes SSR, such as `npm create vite-extra@latest -- --template ssr-svelte`.
-
-If an issue originates from Vite, please report it in the [Vite issue tracker](https://github.com/vitejs/vite/issues).
+[Additional adapters](<(https://sveltesociety.dev/components#adapters)>) are maintained by the community.
 
-## Changing SvelteKit locally
+## Contributing
 
-See the [Contributing Guide](./CONTRIBUTING.md).
+See [CONTRIBUTING.md](./CONTRIBUTING.md) for information on how to develop SvelteKit locally.
 
 ## Supporting Svelte
 
diff --git a/documentation/docs/10-getting-started/10-introduction.md b/documentation/docs/10-getting-started/10-introduction.md
index 8159e26ae..a6a447628 100644
--- a/documentation/docs/10-getting-started/10-introduction.md
+++ b/documentation/docs/10-getting-started/10-introduction.md
@@ -4,15 +4,15 @@ title: Introduction
 
 ## Before we begin
 
-> SvelteKit is in release candidate phase for 1.0 while we address reported issues and add polish. If you get stuck, reach out for help in the [Discord chatroom](https://svelte.dev/chat).
+> If you're new to Svelte or SvelteKit we recommend checking out the (experimental!) [interactive tutorial](https://learn.svelte.dev).
 >
-> See the [migration guides](/docs/migrating) for help upgrading from Sapper.
+> If you get stuck, reach out for help in the [Discord chatroom](https://svelte.dev/chat).
 
 ## What is SvelteKit?
 
-SvelteKit is a framework for building extremely high-performance web apps.
+SvelteKit is a framework for rapid development of robust, performant web applications.
 
-Building an app with all the modern best practices is fiendishly complicated. Those practices include [build optimizations](https://vitejs.dev/guide/features.html#build-optimizations), so that you load only the minimal required code; [offline support](/docs/service-workers); [preloading](/docs/link-options#data-sveltekit-preload-data) pages before the user initiates navigation; and [configurable rendering](/docs/page-options) that allows you to render your app [on the server](/docs/glossary#ssr) or [in the browser](/docs/glossary#csr-and-spa) at runtime or [at build-time](/docs/glossary#prerendering). SvelteKit does all the boring stuff for you so that you can get on with the creative part.
+Building an app with all the modern best practices is fiendishly complicated. Those practices include [build optimizations](https://vitejs.dev/guide/features.html#build-optimizations), so that you load only the minimal required code; [offline support](/docs/service-workers); [preloading](/docs/link-options#data-sveltekit-preload-data) pages before the user initiates navigation; [configurable rendering](/docs/page-options) that allows you to render your app [on the server](/docs/glossary#ssr) or [in the browser](/docs/glossary#csr-and-spa) at runtime or [at build-time](/docs/glossary#prerendering); and many other things. SvelteKit does all the boring stuff for you so that you can get on with the creative part.
 
 It uses [Vite](https://vitejs.dev/) with a [Svelte plugin](https://github.com/sveltejs/vite-plugin-svelte) to provide a lightning-fast and feature-rich development experience with [Hot Module Replacement (HMR)](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#hot), where changes to your code are reflected in the browser instantly.
 
diff --git a/documentation/docs/20-core-concepts/40-page-options.md b/documentation/docs/20-core-concepts/40-page-options.md
index 4cbd00984..e3085ea20 100644
--- a/documentation/docs/20-core-concepts/40-page-options.md
+++ b/documentation/docs/20-core-concepts/40-page-options.md
@@ -66,6 +66,10 @@ Accessing [`url.searchParams`](/docs/load#using-url-data-url) during prerenderin
 
 Pages with [actions](/docs/form-actions) cannot be prerendered, because a server must be able to handle the action `POST` requests.
 
+### Prerender and ssr
+
+If you set the [ssr option](#ssr) to `false`, each request will result in the same empty HTML shell. Since this would result in unnecessary work, SvelteKit defaults to prerendering any pages it finds where `prerender` is not explicitly set to `false`.
+
 ### Route conflicts
 
 Because prerendering writes to the filesystem, it isn't possible to have two endpoints that would cause a directory and a file to have the same name. For example, `src/routes/foo/+server.js` and `src/routes/foo/bar/+server.js` would try to create `foo` and `foo/bar`, which is impossible.
diff --git a/documentation/faq/10-version-numbers.md b/documentation/faq/10-version-numbers.md
deleted file mode 100644
index 143956b57..000000000
--- a/documentation/faq/10-version-numbers.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: SvelteKit is not 1.0 yet. Should I use it?
----
-
-SvelteKit is currently in release candidate phase. We expect minimal to no breaking changes and for development to be focused on bug fixes.
diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json
index cf72fddba..e4449e2ba 100644
--- a/packages/adapter-auto/package.json
+++ b/packages/adapter-auto/package.json
@@ -30,7 +30,7 @@
 		"check": "tsc"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"@types/node": "^16.18.6",
 		"typescript": "^4.9.3"
 	},
diff --git a/packages/adapter-cloudflare-workers/CHANGELOG.md b/packages/adapter-cloudflare-workers/CHANGELOG.md
index 76d282f90..68fc16d41 100644
--- a/packages/adapter-cloudflare-workers/CHANGELOG.md
+++ b/packages/adapter-cloudflare-workers/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @sveltejs/adapter-cloudflare-workers
 
+## 1.0.0-next.65
+
+### Patch Changes
+
+- [breaking] remove warnings/errors about removed/changed APIs ([#8019](https://github.com/sveltejs/kit/pull/8019))
+
+- Updated dependencies [[`f42604a2`](https://github.com/sveltejs/kit/commit/f42604a2b4c04026d3d8bad95807720b79529539)]:
+  - @sveltejs/kit@1.0.0-next.589
+
 ## 1.0.0-next.64
 
 ### Patch Changes
diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js
index ee3b45caf..2a38c5a67 100644
--- a/packages/adapter-cloudflare-workers/index.js
+++ b/packages/adapter-cloudflare-workers/index.js
@@ -16,13 +16,6 @@ import { fileURLToPath } from 'url';
 
 /** @type {import('.').default} */
 export default function ({ config = 'wrangler.toml' } = {}) {
-	// TODO remove for 1.0
-	if (arguments.length > 0) {
-		throw new Error(
-			'esbuild options can no longer be passed to adapter-cloudflare-workers — see https://github.com/sveltejs/kit/pull/4639'
-		);
-	}
-
 	return {
 		name: '@sveltejs/adapter-cloudflare-workers',
 
diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json
index 6dc0feed5..ebfccd5d0 100644
--- a/packages/adapter-cloudflare-workers/package.json
+++ b/packages/adapter-cloudflare-workers/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "@sveltejs/adapter-cloudflare-workers",
-	"version": "1.0.0-next.64",
+	"version": "1.0.0-next.65",
 	"repository": {
 		"type": "git",
 		"url": "https://github.com/sveltejs/kit",
diff --git a/packages/adapter-cloudflare/CHANGELOG.md b/packages/adapter-cloudflare/CHANGELOG.md
index e1cef4ccf..930e5c9b3 100644
--- a/packages/adapter-cloudflare/CHANGELOG.md
+++ b/packages/adapter-cloudflare/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @sveltejs/adapter-cloudflare
 
+## 1.0.0-next.45
+
+### Patch Changes
+
+- [breaking] remove warnings/errors about removed/changed APIs ([#8019](https://github.com/sveltejs/kit/pull/8019))
+
+- Updated dependencies [[`f42604a2`](https://github.com/sveltejs/kit/commit/f42604a2b4c04026d3d8bad95807720b79529539)]:
+  - @sveltejs/kit@1.0.0-next.589
+
 ## 1.0.0-next.44
 
 ### Patch Changes
diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js
index 15197f2cf..e0d880e9d 100644
--- a/packages/adapter-cloudflare/index.js
+++ b/packages/adapter-cloudflare/index.js
@@ -5,13 +5,6 @@ import * as esbuild from 'esbuild';
 
 /** @type {import('.').default} */
 export default function () {
-	// TODO remove for 1.0
-	if (arguments.length > 0) {
-		throw new Error(
-			'esbuild options can no longer be passed to adapter-cloudflare — see https://github.com/sveltejs/kit/pull/4639'
-		);
-	}
-
 	return {
 		name: '@sveltejs/adapter-cloudflare',
 		async adapt(builder) {
diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json
index 39d8b4b30..c2d2b8cc1 100644
--- a/packages/adapter-cloudflare/package.json
+++ b/packages/adapter-cloudflare/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "@sveltejs/adapter-cloudflare",
-	"version": "1.0.0-next.44",
+	"version": "1.0.0-next.45",
 	"repository": {
 		"type": "git",
 		"url": "https://github.com/sveltejs/kit",
diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json
index e12c38409..162bc0126 100644
--- a/packages/adapter-netlify/package.json
+++ b/packages/adapter-netlify/package.json
@@ -41,7 +41,7 @@
 		"@rollup/plugin-commonjs": "^23.0.3",
 		"@rollup/plugin-json": "^5.0.2",
 		"@rollup/plugin-node-resolve": "^15.0.1",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"@types/node": "^16.18.6",
 		"@types/set-cookie-parser": "^2.4.2",
 		"rimraf": "^3.0.2",
diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md
index 0b4ba4a56..956e79f38 100644
--- a/packages/adapter-node/CHANGELOG.md
+++ b/packages/adapter-node/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @sveltejs/adapter-node
 
+## 1.0.0-next.106
+
+### Patch Changes
+
+- [breaking] remove warnings/errors about removed/changed APIs ([#8019](https://github.com/sveltejs/kit/pull/8019))
+
+- Updated dependencies [[`f42604a2`](https://github.com/sveltejs/kit/commit/f42604a2b4c04026d3d8bad95807720b79529539)]:
+  - @sveltejs/kit@1.0.0-next.589
+
 ## 1.0.0-next.105
 
 ### Patch Changes
diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js
index 9913432d8..7dc13e34d 100644
--- a/packages/adapter-node/index.js
+++ b/packages/adapter-node/index.js
@@ -9,14 +9,6 @@ const files = fileURLToPath(new URL('./files', import.meta.url).href);
 
 /** @type {import('.').default} */
 export default function (opts = {}) {
-	// TODO remove for 1.0
-	// @ts-expect-error
-	if (opts.env) {
-		throw new Error(
-			'options.env has been removed in favour of options.envPrefix. Consult the adapter-node README: https://github.com/sveltejs/kit/tree/master/packages/adapter-node'
-		);
-	}
-
 	const { out = 'build', precompress, envPrefix = '' } = opts;
 
 	return {
diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json
index 55bdd3f57..22e87d977 100644
--- a/packages/adapter-node/package.json
+++ b/packages/adapter-node/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "@sveltejs/adapter-node",
-	"version": "1.0.0-next.105",
+	"version": "1.0.0-next.106",
 	"repository": {
 		"type": "git",
 		"url": "https://github.com/sveltejs/kit",
@@ -32,7 +32,7 @@
 		"prepublishOnly": "pnpm build"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"@types/node": "^16.18.6",
 		"c8": "^7.12.0",
 		"polka": "^1.0.0-next.22",
diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json
index ef113206d..0a9c7b8e2 100644
--- a/packages/adapter-static/package.json
+++ b/packages/adapter-static/package.json
@@ -25,7 +25,7 @@
 		"test": "uvu test test.js"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"@types/node": "^16.18.6",
 		"sirv": "^2.0.2",
 		"svelte": "^3.54.0",
diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json
index e734a5aa0..47dfa4624 100644
--- a/packages/adapter-vercel/package.json
+++ b/packages/adapter-vercel/package.json
@@ -32,7 +32,7 @@
 		"esbuild": "^0.16.3"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"@types/node": "^16.18.6",
 		"typescript": "^4.9.3"
 	},
diff --git a/packages/create-svelte/CHANGELOG.md b/packages/create-svelte/CHANGELOG.md
index 762f5b284..c9a28e16e 100644
--- a/packages/create-svelte/CHANGELOG.md
+++ b/packages/create-svelte/CHANGELOG.md
@@ -1,5 +1,11 @@
 # create-svelte
 
+## 2.0.0-next.204
+
+### Patch Changes
+
+- [feat] remove release candidate banner ([#8109](https://github.com/sveltejs/kit/pull/8109))
+
 ## 2.0.0-next.203
 
 ### Patch Changes
diff --git a/packages/create-svelte/bin.js b/packages/create-svelte/bin.js
index 32db8d6e0..c3447a7f0 100755
--- a/packages/create-svelte/bin.js
+++ b/packages/create-svelte/bin.js
@@ -9,10 +9,6 @@ import { dist } from './utils.js';
 // prettier-ignore
 const disclaimer = `
 ${bold(cyan('Welcome to SvelteKit!'))}
-
-${bold(red('This is release candidate software; expect bugs and missing features.'))}
-
-Problems? Open an issue on ${cyan('https://github.com/sveltejs/kit/issues')} if none exists already.
 `;
 
 const { version } = JSON.parse(fs.readFileSync(new URL('package.json', import.meta.url), 'utf-8'));
@@ -180,7 +176,7 @@ async function main() {
 	console.log(`  ${i++}: ${bold(cyan('npm run dev -- --open'))}`);
 
 	console.log(`\nTo close the dev server, hit ${bold(cyan('Ctrl-C'))}`);
-	console.log(`\nStuck? Visit us at ${cyan('https://svelte.dev/chat')}\n`);
+	console.log(`\nStuck? Visit us at ${cyan('https://svelte.dev/chat')}`);
 }
 
 main();
diff --git a/packages/create-svelte/package.json b/packages/create-svelte/package.json
index a5bcd5c47..16183206d 100644
--- a/packages/create-svelte/package.json
+++ b/packages/create-svelte/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "create-svelte",
-	"version": "2.0.0-next.203",
+	"version": "2.0.0-next.204",
 	"repository": {
 		"type": "git",
 		"url": "https://github.com/sveltejs/kit",
diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md
index 39c7ac401..65cbe9cf8 100644
--- a/packages/kit/CHANGELOG.md
+++ b/packages/kit/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @sveltejs/kit
 
+## 1.0.0-next.589
+
+### Patch Changes
+
+- [breaking] remove warnings/errors about removed/changed APIs ([#8019](https://github.com/sveltejs/kit/pull/8019))
+
+## 1.0.0-next.588
+
+### Patch Changes
+
+- [fix] remove obsolete generated types correctly ([#8149](https://github.com/sveltejs/kit/pull/8149))
+
 ## 1.0.0-next.587
 
 ### Patch Changes
diff --git a/packages/kit/package.json b/packages/kit/package.json
index 0a8d7526c..3c92bfa6c 100644
--- a/packages/kit/package.json
+++ b/packages/kit/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "@sveltejs/kit",
-	"version": "1.0.0-next.587",
+	"version": "1.0.0-next.589",
 	"repository": {
 		"type": "git",
 		"url": "https://github.com/sveltejs/kit",
diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js
index 6e931aaf9..49a469806 100755
--- a/packages/kit/src/cli.js
+++ b/packages/kit/src/cli.js
@@ -27,20 +27,6 @@ prog
 	.describe('Synchronise generated files')
 	.option('--mode', 'Specify a mode for loading environment variables', 'development')
 	.action(async ({ mode }) => {
-		const event = process.env.npm_lifecycle_event;
-
-		// TODO remove for 1.0
-		if (event === 'prepare') {
-			const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
-			const message =
-				pkg.scripts.prepare === 'svelte-kit sync'
-					? `\`svelte-kit sync\` now runs on "postinstall" — please remove the "prepare" script from your package.json\n`
-					: `\`svelte-kit sync\` now runs on "postinstall" — please remove it from your "prepare" script\n`;
-
-			console.error(colors.bold().red(message));
-			return;
-		}
-
 		if (!fs.existsSync('svelte.config.js')) {
 			console.warn(`Missing ${path.resolve('svelte.config.js')} — skipping`);
 			return;
@@ -55,54 +41,4 @@ prog
 		}
 	});
 
-// TODO remove for 1.0
-replace('dev');
-replace('build');
-replace('preview');
-prog
-	.command('package')
-	.describe('No longer available - use @sveltejs/package instead')
-	.action(() => {
-		console.error(
-			'svelte-kit package has been removed. It now lives in its own npm package. See the PR on how to migrate: https://github.com/sveltejs/kit/pull/5730'
-		);
-	});
-
 prog.parse(process.argv, { unknown: (arg) => `Unknown option: ${arg}` });
-
-/** @param {string} command */
-function replace(command) {
-	prog
-		.command(command)
-		.describe(`No longer available — use vite ${command} instead`)
-		.action(async () => {
-			const message = `\n> svelte-kit ${command} is no longer available — use vite ${command} instead`;
-			console.error(colors.bold().red(message));
-
-			const steps = [
-				'Install vite as a devDependency with npm/pnpm/etc',
-				'Create a vite.config.js with the @sveltejs/kit/vite plugin (see below)',
-				`Update your package.json scripts to reference \`vite ${command}\` instead of \`svelte-kit ${command}\``
-			];
-
-			steps.forEach((step, i) => {
-				console.error(`  ${i + 1}. ${colors.cyan(step)}`);
-			});
-
-			console.error(
-				`
-				${colors.grey('// vite.config.js')}
-				import { sveltekit } from '@sveltejs/kit/vite';
-
-				/** @type {import('vite').UserConfig} */
-				const config = {
-					plugins: [sveltekit()]
-				};
-
-				export default config;
-
-				`.replace(/^\t{4}/gm, '')
-			);
-			process.exit(1);
-		});
-}
diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js
index adca1e7a9..316bf446d 100644
--- a/packages/kit/src/core/adapt/builder.js
+++ b/packages/kit/src/core/adapt/builder.js
@@ -33,6 +33,23 @@ export function create_builder({ config, build_data, routes, prerendered, log })
 		config,
 		prerendered,
 
+		async compress(directory) {
+			if (!existsSync(directory)) {
+				return;
+			}
+
+			const files = await glob('**/*.{html,js,json,css,svg,xml,wasm}', {
+				cwd: directory,
+				dot: true,
+				absolute: true,
+				filesOnly: true
+			});
+
+			await Promise.all(
+				files.map((file) => Promise.all([compress_file(file, 'gz'), compress_file(file, 'br')]))
+			);
+		},
+
 		async createEntries(fn) {
 			/** @type {import('types').RouteDefinition[]} */
 			const facades = routes.map((route) => {
@@ -177,39 +194,6 @@ export function create_builder({ config, build_data, routes, prerendered, log })
 
 		writeServer(dest) {
 			return copy(`${config.kit.outDir}/output/server`, dest);
-		},
-
-		// TODO remove these methods for 1.0
-		// @ts-expect-error
-		writeStatic() {
-			throw new Error(
-				`writeStatic has been removed. Please ensure you are using the latest version of ${
-					config.kit.adapter.name || 'your adapter'
-				}`
-			);
-		},
-
-		async compress(directory) {
-			if (!existsSync(directory)) {
-				return;
-			}
-
-			const files = await glob('**/*.{html,js,json,css,svg,xml,wasm}', {
-				cwd: directory,
-				dot: true,
-				absolute: true,
-				filesOnly: true
-			});
-
-			await Promise.all(
-				files.map((file) => Promise.all([compress_file(file, 'gz'), compress_file(file, 'br')]))
-			);
-		},
-
-		async prerender() {
-			throw new Error(
-				'builder.prerender() has been removed. Prerendering now takes place in the build phase — see builder.prerender and builder.writePrerendered'
-			);
 		}
 	};
 }
diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js
index eac242074..047c67532 100644
--- a/packages/kit/src/core/config/index.js
+++ b/packages/kit/src/core/config/index.js
@@ -16,14 +16,6 @@ export function load_template(cwd, config) {
 	if (fs.existsSync(appTemplate)) {
 		const contents = fs.readFileSync(appTemplate, 'utf8');
 
-		// TODO remove this for 1.0
-		const match = /%svelte\.([a-z]+)%/.exec(contents);
-		if (match) {
-			throw new Error(
-				`%svelte.${match[1]}% in ${relative} should be replaced with %sveltekit.${match[1]}%`
-			);
-		}
-
 		const expected_tags = ['%sveltekit.head%', '%sveltekit.body%'];
 		expected_tags.forEach((tag) => {
 			if (contents.indexOf(tag) === -1) {
@@ -81,9 +73,6 @@ function process_config(config, { cwd = process.cwd() } = {}) {
 	validated.kit.outDir = path.resolve(cwd, validated.kit.outDir);
 
 	for (const key in validated.kit.files) {
-		// TODO remove for 1.0
-		if (key === 'template') continue;
-
 		if (key === 'hooks') {
 			validated.kit.files.hooks.client = path.resolve(cwd, validated.kit.files.hooks.client);
 			validated.kit.files.hooks.server = path.resolve(cwd, validated.kit.files.hooks.server);
diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js
index a0ed74285..b5c802fdf 100644
--- a/packages/kit/src/core/config/index.spec.js
+++ b/packages/kit/src/core/config/index.spec.js
@@ -61,12 +61,7 @@ const get_defaults = (prefix = '') => ({
 	kit: {
 		adapter: null,
 		alias: {},
-		amp: undefined,
 		appDir: '_app',
-		browser: {
-			hydrate: undefined,
-			router: undefined
-		},
 		csp: {
 			mode: 'auto',
 			directives: directive_defaults,
@@ -75,7 +70,6 @@ const get_defaults = (prefix = '') => ({
 		csrf: {
 			checkOrigin: true
 		},
-		endpointExtensions: undefined,
 		embedded: false,
 		env: {
 			dir: process.cwd(),
@@ -92,14 +86,9 @@ const get_defaults = (prefix = '') => ({
 			routes: join(prefix, 'src/routes'),
 			serviceWorker: join(prefix, 'src/service-worker'),
 			appTemplate: join(prefix, 'src/app.html'),
-			errorTemplate: join(prefix, 'src/error.html'),
-			template: undefined
+			errorTemplate: join(prefix, 'src/error.html')
 		},
-		headers: undefined,
-		host: undefined,
-		hydrate: undefined,
 		inlineStyleThreshold: 0,
-		methodOverride: undefined,
 		moduleExtensions: ['.js', '.ts'],
 		outDir: join(prefix, '.svelte-kit'),
 		serviceWorker: {
@@ -112,30 +101,15 @@ const get_defaults = (prefix = '') => ({
 		prerender: {
 			concurrency: 1,
 			crawl: true,
-			createIndexFiles: undefined,
-			default: undefined,
-			enabled: undefined,
 			entries: ['*'],
-			force: undefined,
 			handleHttpError: 'fail',
 			handleMissingId: 'fail',
-			onError: undefined,
-			origin: 'http://sveltekit-prerender',
-			pages: undefined
+			origin: 'http://sveltekit-prerender'
 		},
-		protocol: undefined,
-		router: undefined,
-		routes: undefined,
-		ssr: undefined,
-		target: undefined,
-		trailingSlash: undefined,
 		version: {
 			name: Date.now().toString(),
 			pollInterval: 0
-		},
-		// TODO cleanup for 1.0
-		vite: undefined,
-		package: undefined
+		}
 	}
 });
 
diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js
index 4d3aa71cc..2aa87c8a2 100644
--- a/packages/kit/src/core/config/options.js
+++ b/packages/kit/src/core/config/options.js
@@ -85,12 +85,6 @@ const options = object(
 				return input;
 			}),
 
-			// TODO: remove this for the 1.0 release
-			amp: error(
-				(keypath) =>
-					`${keypath} has been removed. See https://kit.svelte.dev/docs/seo#manual-setup-amp for details on how to support AMP`
-			),
-
 			appDir: validate('_app', (input, keypath) => {
 				assert_string(input, keypath);
 
@@ -107,18 +101,6 @@ const options = object(
 				return input;
 			}),
 
-			// TODO: remove this for the 1.0 release
-			browser: object({
-				hydrate: error(
-					(keypath) =>
-						`${keypath} has been removed. You can set \`export const csr = false\` inside the top level +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197`
-				),
-				router: error(
-					(keypath) =>
-						`${keypath} has been removed. You can set \`export const csr = false\` inside the top level +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197`
-				)
-			}),
-
 			csp: object({
 				mode: list(['auto', 'hash', 'nonce']),
 				directives,
@@ -131,11 +113,6 @@ const options = object(
 
 			embedded: boolean(false),
 
-			// TODO: remove this for the 1.0 release
-			endpointExtensions: error(
-				(keypath) => `${keypath} has been renamed to config.kit.moduleExtensions`
-			),
-
 			env: object({
 				dir: string(process.cwd()),
 				publicPrefix: string('PUBLIC_')
@@ -143,59 +120,24 @@ const options = object(
 
 			files: object({
 				assets: string('static'),
-				hooks: (input, keypath) => {
-					// TODO remove this for the 1.0 release
-					if (typeof input === 'string') {
-						throw new Error(
-							`${keypath} is an object with { server: string, client: string } now. See the PR for more information: https://github.com/sveltejs/kit/pull/6586`
-						);
-					}
-
-					return object({
-						client: string(join('src', 'hooks.client')),
-						server: string(join('src', 'hooks.server'))
-					})(input, keypath);
-				},
+				hooks: object({
+					client: string(join('src', 'hooks.client')),
+					server: string(join('src', 'hooks.server'))
+				}),
 				lib: string(join('src', 'lib')),
 				params: string(join('src', 'params')),
 				routes: string(join('src', 'routes')),
 				serviceWorker: string(join('src', 'service-worker')),
 				appTemplate: string(join('src', 'app.html')),
-				errorTemplate: string(join('src', 'error.html')),
-				// TODO: remove this for the 1.0 release
-				template: error(
-					() => 'config.kit.files.template has been renamed to config.kit.files.appTemplate'
-				)
+				errorTemplate: string(join('src', 'error.html'))
 			}),
 
-			// TODO: remove this for the 1.0 release
-			headers: error(
-				(keypath) =>
-					`${keypath} has been removed. See https://github.com/sveltejs/kit/pull/3384 for details`
-			),
-
-			// TODO: remove this for the 1.0 release
-			host: error(
-				(keypath) =>
-					`${keypath} has been removed. See https://github.com/sveltejs/kit/pull/3384 for details`
-			),
-
-			// TODO remove for 1.0
-			hydrate: error((keypath) => `${keypath} has been moved to config.kit.browser.hydrate`),
-
 			inlineStyleThreshold: number(0),
 
-			methodOverride: error(
-				() =>
-					'Method overrides have been removed in favor of actions. See the PR for more information: https://github.com/sveltejs/kit/pull/6469'
-			),
-
 			moduleExtensions: string_array(['.js', '.ts']),
 
 			outDir: string('.svelte-kit'),
 
-			package: error((keypath) => `${keypath} has been removed — use @sveltejs/package instead`),
-
 			paths: object({
 				base: validate('', (input, keypath) => {
 					assert_string(input, keypath);
@@ -232,18 +174,6 @@ const options = object(
 			prerender: object({
 				concurrency: number(1),
 				crawl: boolean(true),
-				createIndexFiles: error(
-					(keypath) =>
-						`${keypath} has been removed — it is now controlled by the trailingSlash option. See https://kit.svelte.dev/docs/page-options#trailingslash`
-				),
-				default: error(
-					(keypath) =>
-						`${keypath} has been removed. You can set it inside the top level +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197`
-				),
-				enabled: error(
-					(keypath) =>
-						`${keypath} has been removed. You can wrap any code that should not be executed during build in a \`if (!building) {...}\` block. See the discussion for more information: https://github.com/sveltejs/kit/discussions/7716`
-				),
 				entries: validate(['*'], (input, keypath) => {
 					if (!Array.isArray(input) || !input.every((page) => typeof page === 'string')) {
 						throw new Error(`${keypath} must be an array of strings`);
@@ -260,17 +190,6 @@ const options = object(
 					return input;
 				}),
 
-				// TODO: remove this for the 1.0 release
-				force: validate(undefined, (input, keypath) => {
-					const new_input = input ? 'warn' : 'fail';
-					const needs_option = new_input === 'warn';
-					throw new Error(
-						`${keypath} has been removed in favor of \`handleHttpError\`. In your case, set \`handleHttpError\` to "${new_input}"${
-							needs_option ? '' : ' (or leave it undefined)'
-						} to get the same behavior as you would with \`force: ${JSON.stringify(input)}\``
-					);
-				}),
-
 				handleHttpError: validate('fail', (input, keypath) => {
 					if (typeof input === 'function') return input;
 					if (['fail', 'warn', 'ignore'].includes(input)) return input;
@@ -283,17 +202,6 @@ const options = object(
 					throw new Error(`${keypath} should be "fail", "warn", "ignore" or a custom function`);
 				}),
 
-				// TODO: remove this for the 1.0 release
-				onError: validate(undefined, (input, keypath) => {
-					let message = `${keypath} has been renamed to \`handleHttpError\``;
-
-					if (input === 'continue') {
-						message += ', and "continue" has been renamed to "warn"';
-					}
-
-					throw new Error(message);
-				}),
-
 				origin: validate('http://sveltekit-prerender', (input, keypath) => {
 					assert_string(input, keypath);
 
@@ -310,56 +218,18 @@ const options = object(
 					}
 
 					return origin;
-				}),
-
-				// TODO: remove this for the 1.0 release
-				pages: error((keypath) => `${keypath} has been renamed to \`entries\`.`)
+				})
 			}),
 
-			// TODO: remove this for the 1.0 release
-			protocol: error(
-				(keypath) =>
-					`${keypath} has been removed. See https://github.com/sveltejs/kit/pull/3384 for details`
-			),
-
-			// TODO remove for 1.0
-			router: error(
-				(keypath) =>
-					`${keypath} has been removed. You can set \`export const csr = false\` inside the top level +layout.js (or +layout.server.js) instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197`
-			),
-
-			// TODO remove for 1.0
-			routes: error(
-				(keypath) =>
-					`${keypath} has been removed. See https://github.com/sveltejs/kit/discussions/5774 for details`
-			),
-
 			serviceWorker: object({
 				register: boolean(true),
 				files: fun((filename) => !/\.DS_Store/.test(filename))
 			}),
 
-			// TODO remove this for 1.0
-			ssr: error(
-				(keypath) =>
-					`${keypath} has been removed — use the handle hook instead: https://kit.svelte.dev/docs/hooks#server-hooks-handle`
-			),
-
-			// TODO remove this for 1.0
-			target: error((keypath) => `${keypath} is no longer required, and should be removed`),
-
-			trailingSlash: error(
-				(keypath, input) =>
-					`${keypath} has been removed. You can set \`export const trailingSlash = '${input}'\` inside a top level +layout.js (or +layout.server.js) instead. See the PR for more information: https://github.com/sveltejs/kit/pull/7719`
-			),
-
 			version: object({
 				name: string(Date.now().toString()),
 				pollInterval: number(0)
-			}),
-
-			// TODO remove this for 1.0
-			vite: error((keypath) => `${keypath} has been removed — use vite.config.js instead`)
+			})
 		})
 	},
 	true
@@ -514,11 +384,4 @@ function assert_string(input, keypath) {
 	}
 }
 
-/** @param {(keypath?: string, input?: any) => string} fn */
-function error(fn) {
-	return validate(undefined, (input, keypath) => {
-		throw new Error(fn(keypath, input));
-	});
-}
-
 export default options;
diff --git a/packages/kit/src/core/prerender/prerender.js b/packages/kit/src/core/prerender/prerender.js
index 3bcae5076..65ece5d73 100644
--- a/packages/kit/src/core/prerender/prerender.js
+++ b/packages/kit/src/core/prerender/prerender.js
@@ -91,19 +91,6 @@ export async function prerender() {
 
 	installPolyfills();
 
-	// TODO remove this for 1.0
-	const { fetch } = globalThis;
-	globalThis.fetch = async (info, init) => {
-		const url = info instanceof Request ? info.url : info.toString();
-
-		if (url.startsWith(config.prerender.origin + '/')) {
-			const sliced = url.slice(config.prerender.origin.length);
-			throw new Error(`Use \`event.fetch('${sliced}')\` instead of the global \`fetch('${url}')\``);
-		}
-
-		return fetch(info, init);
-	};
-
 	const server_root = join(config.outDir, 'output');
 
 	/** @type {import('types').ServerModule} */
diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js
index 0c0edff16..4483fb5d0 100644
--- a/packages/kit/src/core/sync/create_manifest_data/index.js
+++ b/packages/kit/src/core/sync/create_manifest_data/index.js
@@ -266,9 +266,7 @@ function create_routes_and_nodes(cwd, config, fallback) {
 			const root = routes[0];
 			if (!root.leaf && !root.error && !root.layout && !root.endpoint) {
 				throw new Error(
-					// TODO adjust this error message for 1.0
-					// 'No routes found. If you are using a custom src/routes directory, make sure it is specified in svelte.config.js'
-					'The filesystem router API has changed, see https://github.com/sveltejs/kit/discussions/5774 for details'
+					'No routes found. If you are using a custom src/routes directory, make sure it is specified in svelte.config.js'
 				);
 			}
 		}
@@ -386,13 +384,6 @@ function analyze(project_relative, file, component_extensions, module_extensions
 		const pattern = /^\+(?:(page(?:@(.*))?)|(layout(?:@(.*))?)|(error))$/;
 		const match = pattern.exec(name);
 		if (!match) {
-			// TODO remove for 1.0
-			if (/^\+layout-/.test(name)) {
-				throw new Error(
-					`${project_relative} should be reimplemented with layout groups: https://kit.svelte.dev/docs/advanced-routing#advanced-layouts`
-				);
-			}
-
 			throw new Error(`Files prefixed with + are reserved (saw ${project_relative})`);
 		}
 
diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js
index 06c63d05c..9eb12d562 100644
--- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js
+++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js
@@ -751,12 +751,4 @@ test('prevents route conflicts between groups', () => {
 	);
 });
 
-// TODO remove for 1.0
-test('errors on encountering a declared layout', () => {
-	assert.throws(
-		() => create('samples/declared-layout'),
-		/samples\/declared-layout\/\+layout-foo.svelte should be reimplemented with layout groups: https:\/\/kit\.svelte\.dev\/docs\/advanced-routing#advanced-layouts/
-	);
-});
-
 test.run();
diff --git a/packages/kit/src/core/sync/sync.js b/packages/kit/src/core/sync/sync.js
index b1ba0fbb5..5949de8fa 100644
--- a/packages/kit/src/core/sync/sync.js
+++ b/packages/kit/src/core/sync/sync.js
@@ -1,4 +1,3 @@
-import fs from 'fs';
 import path from 'path';
 import create_manifest_data from './create_manifest_data/index.js';
 import { write_client_manifest } from './write_client_manifest.js';
@@ -14,24 +13,6 @@ import { write_ambient } from './write_ambient.js';
  * @param {string} mode
  */
 export function init(config, mode) {
-	// TODO remove for 1.0
-	if (fs.existsSync('src/app.d.ts')) {
-		const content = fs.readFileSync('src/app.d.ts', 'utf-8');
-		if (content.includes('PageError')) {
-			if (content.includes('// interface PageError')) {
-				fs.writeFileSync(
-					'src/app.d.ts',
-					content.replace(/\/\/ interface PageError/g, '// interface Error')
-				);
-				console.warn('App.PageError has been renamed to App.Error — we updated your src/app.d.ts');
-			} else {
-				throw new Error(
-					'App.PageError has been renamed to App.Error — please update your src/app.d.ts'
-				);
-			}
-		}
-	}
-
 	write_tsconfig(config.kit);
 	write_ambient(config.kit, mode);
 }
diff --git a/packages/kit/src/core/sync/write_types/index.js b/packages/kit/src/core/sync/write_types/index.js
index 2e3eab2c8..83cb0e7e8 100644
--- a/packages/kit/src/core/sync/write_types/index.js
+++ b/packages/kit/src/core/sync/write_types/index.js
@@ -49,7 +49,7 @@ export async function write_all_types(config, manifest_data) {
 		for (const file of walk(types_dir)) {
 			const dir = path.dirname(file);
 			if (!expected_directories.has(dir)) {
-				rimraf(file);
+				rimraf(path.join(types_dir, file));
 			}
 		}
 	}
diff --git a/packages/kit/src/exports/vite/build/build_server.js b/packages/kit/src/exports/vite/build/build_server.js
index 235e05642..b44fcca75 100644
--- a/packages/kit/src/exports/vite/build/build_server.js
+++ b/packages/kit/src/exports/vite/build/build_server.js
@@ -68,16 +68,9 @@ export class Server {
 			dev: false,
 			embedded: ${config.kit.embedded},
 			handle_error: (error, event) => {
-				return this.options.hooks.handleError({
-					error,
-					event,
-
-					// TODO remove for 1.0
-					// @ts-expect-error
-					get request() {
-						throw new Error('request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details');
-					}
-				}) ?? { message: event.route.id != null ? 'Internal Error' : 'Not Found' };
+				return this.options.hooks.handleError({ error, event }) ?? {
+					message: event.route.id != null ? 'Internal Error' : 'Not Found'
+				};
 			},
 			hooks: null,
 			manifest,
@@ -117,11 +110,6 @@ export class Server {
 		if (!this.options.hooks) {
 			const module = await import(${s(hooks)});
 
-			// TODO remove this for 1.0
-			if (module.externalFetch) {
-				throw new Error('externalFetch has been removed — use handleFetch instead. See https://github.com/sveltejs/kit/pull/6565 for details');
-			}
-
 			this.options.hooks = {
 				handle: module.handle || (({ event, resolve }) => resolve(event)),
 				handleError: module.handleError || (({ error }) => console.error(error.stack)),
@@ -167,22 +155,6 @@ export async function build_server(options, client) {
 
 	let hooks_file = resolve_entry(config.kit.files.hooks.server);
 
-	// TODO remove for 1.0
-	if (!hooks_file) {
-		const old_file = resolve_entry(path.join(process.cwd(), 'src', 'hooks'));
-		if (old_file && fs.existsSync(old_file)) {
-			throw new Error(
-				`Rename your server hook file from ${posixify(
-					path.relative(process.cwd(), old_file)
-				)} to ${posixify(
-					path.relative(process.cwd(), config.kit.files.hooks.server)
-				)}${path.extname(
-					old_file
-				)} (because there's also client hooks now). See the PR for more information: https://github.com/sveltejs/kit/pull/6586`
-			);
-		}
-	}
-
 	if (!hooks_file || !fs.existsSync(hooks_file)) {
 		hooks_file = path.join(config.kit.outDir, 'build/hooks.js');
 		fs.writeFileSync(hooks_file, '');
diff --git a/packages/kit/src/exports/vite/build/build_service_worker.js b/packages/kit/src/exports/vite/build/build_service_worker.js
index 1bfecfbfb..234e7175d 100644
--- a/packages/kit/src/exports/vite/build/build_service_worker.js
+++ b/packages/kit/src/exports/vite/build/build_service_worker.js
@@ -34,13 +34,6 @@ export async function build_service_worker(
 	fs.writeFileSync(
 		service_worker,
 		`
-			// TODO remove for 1.0
-			export const timestamp = {
-				toString: () => {
-					throw new Error('\`timestamp\` has been removed from $service-worker. Use \`version\` instead');
-				}
-			};
-
 			export const build = [
 				${Array.from(build)
 					.map((file) => `${s(`${config.kit.paths.base}/${file}`)}`)
diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js
index 13765de6e..545af8d1f 100644
--- a/packages/kit/src/exports/vite/dev/index.js
+++ b/packages/kit/src/exports/vite/dev/index.js
@@ -377,32 +377,8 @@ export async function dev(vite, vite_config, svelte_config) {
 					? await vite.ssrLoadModule(`/${hooks_file}`)
 					: {};
 
-				// TODO remove for 1.0
-				if (!resolve_entry(hooks_file)) {
-					const old_file = resolve_entry(path.join(process.cwd(), 'src', 'hooks'));
-					if (old_file && fs.existsSync(old_file)) {
-						throw new Error(
-							`Rename your server hook file from ${posixify(
-								path.relative(process.cwd(), old_file)
-							)} to ${posixify(
-								path.relative(process.cwd(), svelte_config.kit.files.hooks.server)
-							)}${path.extname(
-								old_file
-							)} (because there's also client hooks now). See the PR for more information: https://github.com/sveltejs/kit/pull/6586`
-						);
-					}
-				}
-
 				const handle = user_hooks.handle || (({ event, resolve }) => resolve(event));
 
-				// TODO remove for 1.0
-				// @ts-expect-error
-				if (user_hooks.externalFetch) {
-					throw new Error(
-						'externalFetch has been removed — use handleFetch instead. See https://github.com/sveltejs/kit/pull/6565 for details'
-					);
-				}
-
 				/** @type {import('types').ServerHooks} */
 				const hooks = {
 					handle,
@@ -421,18 +397,6 @@ export async function dev(vite, vite_config, svelte_config) {
 					handleFetch: user_hooks.handleFetch || (({ request, fetch }) => fetch(request))
 				};
 
-				if (/** @type {any} */ (hooks).getContext) {
-					// TODO remove this for 1.0
-					throw new Error(
-						'The getContext hook has been removed. See https://kit.svelte.dev/docs/hooks'
-					);
-				}
-
-				if (/** @type {any} */ (hooks).serverFetch) {
-					// TODO remove this for 1.0
-					throw new Error('The serverFetch hook has been renamed to externalFetch.');
-				}
-
 				// TODO the / prefix will probably fail if outDir is outside the cwd (which
 				// could be the case in a monorepo setup), but without it these modules
 				// can get loaded twice via different URLs, which causes failures. Might
@@ -497,15 +461,7 @@ export async function dev(vite, vite_config, svelte_config) {
 										return Reflect.get(target, property, target);
 									}
 								}),
-								event,
-
-								// TODO remove for 1.0
-								// @ts-expect-error
-								get request() {
-									throw new Error(
-										'request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details'
-									);
-								}
+								event
 							});
 							return (
 								error_object ?? { message: event.route.id != null ? 'Internal Error' : 'Not Found' }
diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js
index 331bdc115..0acd4dabd 100644
--- a/packages/kit/src/exports/vite/index.js
+++ b/packages/kit/src/exports/vite/index.js
@@ -199,9 +199,6 @@ function kit({ svelte_config }) {
 		};
 	}
 
-	// TODO remove this for 1.0
-	check_vite_version();
-
 	/** @type {import('vite').Plugin} */
 	const plugin_setup = {
 		name: 'vite-plugin-sveltekit-setup',
@@ -631,19 +628,6 @@ function kit({ svelte_config }) {
 	return [plugin_setup, plugin_compile];
 }
 
-function check_vite_version() {
-	// TODO parse from kit peer deps and maybe do a full semver compare if we ever require feature releases a min
-	const min_required_vite_major = 4;
-	const vite_version = vite.version ?? '2.x'; // vite started exporting it's version in 3.0
-	const current_vite_major = parseInt(vite_version.split('.')[0], 10);
-
-	if (current_vite_major < min_required_vite_major) {
-		throw new Error(
-			`Vite version ${current_vite_major} is no longer supported. Please upgrade to version ${min_required_vite_major}`
-		);
-	}
-}
-
 /** @param {import('rollup').OutputBundle} bundle */
 function collect_output(bundle) {
 	/** @type {import('rollup').OutputChunk[]} */
diff --git a/packages/kit/src/runtime/app/forms.js b/packages/kit/src/runtime/app/forms.js
index f2b73fba0..b8e39ddc4 100644
--- a/packages/kit/src/runtime/app/forms.js
+++ b/packages/kit/src/runtime/app/forms.js
@@ -119,17 +119,7 @@ export function enhance(form, submit = () => {}) {
 			form,
 			update: (opts) => fallback_callback({ action, result, reset: opts?.reset }),
 			// @ts-expect-error generic constraints stuff we don't care about
-			result,
-			// TODO remove for 1.0
-			get type() {
-				throw new Error('(result) => {...} has changed to ({ result }) => {...}');
-			},
-			get location() {
-				throw new Error('(result) => {...} has changed to ({ result }) => {...}');
-			},
-			get error() {
-				throw new Error('(result) => {...} has changed to ({ result }) => {...}');
-			}
+			result
 		});
 	}
 
diff --git a/packages/kit/src/runtime/app/navigation.js b/packages/kit/src/runtime/app/navigation.js
index a7e8b75ec..95a0b3868 100644
--- a/packages/kit/src/runtime/app/navigation.js
+++ b/packages/kit/src/runtime/app/navigation.js
@@ -20,13 +20,3 @@ export const preloadData = BROWSER ? client.preload_data : guard('preloadData');
 export const preloadCode = BROWSER ? client.preload_code : guard('preloadCode');
 export const beforeNavigate = BROWSER ? client.before_navigate : () => {};
 export const afterNavigate = BROWSER ? client.after_navigate : () => {};
-
-// TODO remove for 1.0 release
-/** @param {any} _args */
-export const prefetch = (..._args) => {
-	throw new Error('prefetch has been renamed to preloadData');
-};
-/** @param {any} _args */
-export const prefetchRoutes = (..._args) => {
-	throw new Error('prefetchRoutes has been renamed to preloadCode');
-};
diff --git a/packages/kit/src/runtime/app/stores.js b/packages/kit/src/runtime/app/stores.js
index 0eb99f4df..5c79a7ad3 100644
--- a/packages/kit/src/runtime/app/stores.js
+++ b/packages/kit/src/runtime/app/stores.js
@@ -2,23 +2,13 @@ import { getContext } from 'svelte';
 import { browser } from './environment.js';
 import { stores as browser_stores } from '../client/singletons.js';
 
-// TODO remove this (for 1.0? after 1.0?)
-let warned = false;
-export function stores() {
-	if (!warned) {
-		console.error('stores() is deprecated; use getStores() instead');
-		warned = true;
-	}
-	return getStores();
-}
-
 /**
  * @type {import('$app/stores').getStores}
  */
 export const getStores = () => {
 	const stores = browser ? browser_stores : getContext('__svelte__');
 
-	const readonly_stores = {
+	return {
 		page: {
 			subscribe: stores.page.subscribe
 		},
@@ -27,28 +17,6 @@ export const getStores = () => {
 		},
 		updated: stores.updated
 	};
-
-	// TODO remove this for 1.0
-	Object.defineProperties(readonly_stores, {
-		preloading: {
-			get() {
-				console.error('stores.preloading is deprecated; use stores.navigating instead');
-				return {
-					subscribe: stores.navigating.subscribe
-				};
-			},
-			enumerable: false
-		},
-		session: {
-			get() {
-				removed_session();
-				return {};
-			},
-			enumerable: false
-		}
-	});
-
-	return readonly_stores;
 };
 
 /** @type {typeof import('$app/stores').page} */
@@ -68,19 +36,6 @@ export const navigating = {
 	}
 };
 
-function removed_session() {
-	// TODO remove for 1.0
-	throw new Error(
-		'stores.session is no longer available. See https://github.com/sveltejs/kit/discussions/5883'
-	);
-}
-
-export const session = {
-	subscribe: removed_session,
-	set: removed_session,
-	update: removed_session
-};
-
 /** @type {typeof import('$app/stores').updated} */
 export const updated = {
 	subscribe(fn) {
diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js
index 38114bc80..ea1a1a6bf 100644
--- a/packages/kit/src/runtime/client/client.js
+++ b/packages/kit/src/runtime/client/client.js
@@ -62,26 +62,6 @@ function update_scroll_positions(index) {
 	scroll_positions[index] = scroll_state();
 }
 
-// TODO remove for 1.0
-/** @type {Record<string, true>} */
-let warned_about_attributes = {};
-
-function check_for_removed_attributes() {
-	const attrs = ['prefetch', 'noscroll', 'reload'];
-	for (const attr of attrs) {
-		if (document.querySelector(`[sveltekit\\:${attr}]`)) {
-			if (!warned_about_attributes[attr]) {
-				warned_about_attributes[attr] = true;
-				console.error(
-					`The sveltekit:${attr} attribute has been replaced with data-sveltekit-${
-						attr === 'prefetch' ? 'preload-data' : attr
-					}`
-				);
-			}
-		}
-	}
-}
-
 /**
  * @param {{
  *   target: HTMLElement;
@@ -337,9 +317,7 @@ export function create_client({ target, base }) {
 				navigation_result.props.page.url = url;
 			}
 
-			const post_update = pre_update();
 			root.$set(navigation_result.props);
-			post_update();
 		} else {
 			initialize(navigation_result);
 		}
@@ -393,22 +371,20 @@ export function create_client({ target, base }) {
 
 		page = result.props.page;
 
-		const post_update = pre_update();
 		root = new Root({
 			target,
 			props: { ...result.props, stores },
 			hydrate: true
 		});
-		post_update();
 
 		/** @type {import('types').AfterNavigate} */
 		const navigation = {
 			from: null,
-			to: add_url_properties('to', {
+			to: {
 				params: current.params,
 				route: { id: current.route?.id ?? null },
 				url: new URL(location.href)
-			}),
+			},
 			willUnload: false,
 			type: 'enter'
 		};
@@ -504,29 +480,6 @@ export function create_client({ target, base }) {
 				// The whole page store is updated, but this way the object reference stays the same
 				data: data_changed ? data : page.data
 			};
-
-			// TODO remove this for 1.0
-			Object.defineProperty(result.props.page, 'routeId', {
-				get() {
-					throw new Error('$page.routeId has been replaced by $page.route.id');
-				},
-				enumerable: false
-			});
-			/**
-			 * @param {string} property
-			 * @param {string} replacement
-			 */
-			const print_error = (property, replacement) => {
-				Object.defineProperty(result.props.page, property, {
-					get: () => {
-						throw new Error(`$page.${property} has been replaced by $page.url.${replacement}`);
-					}
-				});
-			};
-
-			print_error('origin', 'origin');
-			print_error('path', 'pathname');
-			print_error('query', 'searchParams');
 		}
 
 		return result;
@@ -642,40 +595,6 @@ export function create_client({ target, base }) {
 				}
 			};
 
-			// TODO remove this for 1.0
-			Object.defineProperties(load_input, {
-				props: {
-					get() {
-						throw new Error(
-							'@migration task: Replace `props` with `data` stuff https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693'
-						);
-					},
-					enumerable: false
-				},
-				session: {
-					get() {
-						throw new Error(
-							'session is no longer available. See https://github.com/sveltejs/kit/discussions/5883'
-						);
-					},
-					enumerable: false
-				},
-				stuff: {
-					get() {
-						throw new Error(
-							'@migration task: Remove stuff https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693'
-						);
-					},
-					enumerable: false
-				},
-				routeId: {
-					get() {
-						throw new Error('routeId has been replaced by route.id');
-					},
-					enumerable: false
-				}
-			});
-
 			if (DEV) {
 				try {
 					lock_fetch();
@@ -1072,16 +991,16 @@ export function create_client({ target, base }) {
 
 		/** @type {import('types').Navigation} */
 		const navigation = {
-			from: add_url_properties('from', {
+			from: {
 				params: current.params,
 				route: { id: current.route?.id ?? null },
 				url: current.url
-			}),
-			to: add_url_properties('to', {
+			},
+			to: {
 				params: intent?.params ?? null,
 				route: { id: intent?.route?.id ?? null },
 				url
-			}),
+			},
 			willUnload: !intent,
 			type
 		};
@@ -1324,30 +1243,10 @@ export function create_client({ target, base }) {
 		},
 
 		goto: (href, opts = {}) => {
-			// TODO remove for 1.0
-			if ('keepfocus' in opts && !('keepFocus' in opts)) {
-				throw new Error(
-					'`keepfocus` has been renamed to `keepFocus` (note the difference in casing)'
-				);
-			}
-
-			if ('noscroll' in opts && !('noScroll' in opts)) {
-				throw new Error(
-					'`noscroll` has been renamed to `noScroll` (note the difference in casing)'
-				);
-			}
-
 			return goto(href, opts, []);
 		},
 
 		invalidate: (resource) => {
-			if (resource === undefined) {
-				// TODO remove for 1.0
-				throw new Error(
-					'`invalidate()` (with no arguments) has been replaced by `invalidateAll()`'
-				);
-			}
-
 			if (typeof resource === 'function') {
 				invalidated.push(resource);
 			} else {
@@ -1394,9 +1293,7 @@ export function create_client({ target, base }) {
 
 					current = navigation_result.state;
 
-					const post_update = pre_update();
 					root.$set(navigation_result.props);
-					post_update();
 
 					tick().then(reset_focus);
 				}
@@ -1408,9 +1305,7 @@ export function create_client({ target, base }) {
 					form: result.data,
 					page: { ...page, form: result.data, status: result.status }
 				};
-				const post_update = pre_update();
 				root.$set(props);
-				post_update();
 
 				if (result.type === 'success') {
 					tick().then(reset_focus);
@@ -1433,11 +1328,11 @@ export function create_client({ target, base }) {
 					// it's due to an external or full-page-reload link, for which we don't want to call the hook again.
 					/** @type {import('types').BeforeNavigate} */
 					const navigation = {
-						from: add_url_properties('from', {
+						from: {
 							params: current.params,
 							route: { id: current.route?.id ?? null },
 							url: current.url
-						}),
+						},
 						to: null,
 						willUnload: true,
 						type: 'leave',
@@ -1783,60 +1678,6 @@ function handle_error(error, event) {
 	);
 }
 
-// TODO remove for 1.0
-const properties = [
-	'hash',
-	'href',
-	'host',
-	'hostname',
-	'origin',
-	'pathname',
-	'port',
-	'protocol',
-	'search',
-	'searchParams',
-	'toString',
-	'toJSON'
-];
-
-/**
- * @param {'from' | 'to'} type
- * @param {import('types').NavigationTarget} target
- */
-function add_url_properties(type, target) {
-	for (const prop of properties) {
-		Object.defineProperty(target, prop, {
-			get() {
-				throw new Error(
-					`The navigation shape changed - ${type}.${prop} should now be ${type}.url.${prop}`
-				);
-			},
-			enumerable: false
-		});
-	}
-
-	Object.defineProperty(target, 'routeId', {
-		get() {
-			throw new Error(
-				`The navigation shape changed - ${type}.routeId should now be ${type}.route.id`
-			);
-		},
-		enumerable: false
-	});
-
-	return target;
-}
-
-function pre_update() {
-	if (DEV) {
-		return () => {
-			check_for_removed_attributes();
-		};
-	}
-
-	return () => {};
-}
-
 function reset_focus() {
 	const autofocus = document.querySelector('[autofocus]');
 	if (autofocus) {
diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js
index 08de05ac5..d3a918757 100644
--- a/packages/kit/src/runtime/server/endpoint.js
+++ b/packages/kit/src/runtime/server/endpoint.js
@@ -1,6 +1,6 @@
 import { negotiate } from '../../utils/http.js';
 import { Redirect } from '../control.js';
-import { check_method_names, method_not_allowed } from './utils.js';
+import { method_not_allowed } from './utils.js';
 
 /**
  * @param {import('types').RequestEvent} event
@@ -11,9 +11,6 @@ import { check_method_names, method_not_allowed } from './utils.js';
 export async function render_endpoint(event, mod, state) {
 	const method = /** @type {import('types').HttpMethod} */ (event.request.method);
 
-	// TODO: Remove for 1.0
-	check_method_names(mod);
-
 	let handler = mod[method];
 
 	if (!handler && method === 'HEAD') {
diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js
index 5c77c84c7..ae64b865d 100644
--- a/packages/kit/src/runtime/server/index.js
+++ b/packages/kit/src/runtime/server/index.js
@@ -151,41 +151,6 @@ export async function respond(request, options, state) {
 		isDataRequest: is_data_request
 	};
 
-	// TODO remove this for 1.0
-	/**
-	 * @param {string} property
-	 * @param {string} replacement
-	 * @param {string} suffix
-	 */
-	const removed = (property, replacement, suffix = '') => ({
-		get: () => {
-			throw new Error(`event.${property} has been replaced by event.${replacement}` + suffix);
-		}
-	});
-
-	const details = '. See https://github.com/sveltejs/kit/pull/3384 for details';
-
-	const body_getter = {
-		get: () => {
-			throw new Error(
-				'To access the request body use the text/json/arrayBuffer/formData methods, e.g. `body = await request.json()`' +
-					details
-			);
-		}
-	};
-
-	Object.defineProperties(event, {
-		clientAddress: removed('clientAddress', 'getClientAddress'),
-		method: removed('method', 'request.method', details),
-		headers: removed('headers', 'request.headers', details),
-		origin: removed('origin', 'url.origin'),
-		path: removed('path', 'url.pathname'),
-		query: removed('query', 'url.searchParams'),
-		body: body_getter,
-		rawBody: body_getter,
-		routeId: removed('routeId', 'route.id')
-	});
-
 	/** @type {import('types').RequiredResolveOptions} */
 	let resolve_opts = {
 		transformPageChunk: default_transform,
@@ -279,12 +244,7 @@ export async function respond(request, options, state) {
 					}
 
 					return response;
-				}),
-			// TODO remove for 1.0
-			// @ts-expect-error
-			get request() {
-				throw new Error('request in handle has been replaced with event' + details);
-			}
+				})
 		});
 
 		// respond with 304 if etag matches
@@ -350,13 +310,6 @@ export async function respond(request, options, state) {
 	async function resolve(event, opts) {
 		try {
 			if (opts) {
-				// TODO remove for 1.0
-				if ('transformPage' in opts) {
-					throw new Error(
-						'transformPage has been replaced by transformPageChunk — see https://github.com/sveltejs/kit/pull/5657 for more information'
-					);
-				}
-
 				if ('ssr' in opts) {
 					throw new Error(
 						'ssr has been removed, set it in the appropriate +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197'
diff --git a/packages/kit/src/runtime/server/page/load_data.js b/packages/kit/src/runtime/server/page/load_data.js
index dbd039e1b..99735c2e4 100644
--- a/packages/kit/src/runtime/server/page/load_data.js
+++ b/packages/kit/src/runtime/server/page/load_data.js
@@ -102,8 +102,7 @@ export async function load_data({
 		return server_data_node?.data ?? null;
 	}
 
-	/** @type {import('types').LoadEvent} */
-	const load_event = {
+	const result = await node.universal.load.call(null, {
 		url: event.url,
 		params: event.params,
 		data: server_data_node?.data ?? null,
@@ -226,21 +225,8 @@ export async function load_data({
 		setHeaders: event.setHeaders,
 		depends: () => {},
 		parent
-	};
-
-	// TODO remove this for 1.0
-	Object.defineProperties(load_event, {
-		session: {
-			get() {
-				throw new Error(
-					'session is no longer available. See https://github.com/sveltejs/kit/discussions/5883'
-				);
-			},
-			enumerable: false
-		}
 	});
 
-	const result = await node.universal.load.call(null, load_event);
 	const data = result ? await unwrap_promises(result) : null;
 	validate_load_response(data, /** @type {string} */ (event.route.id));
 	return data;
diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js
index c147f3733..91337cab0 100644
--- a/packages/kit/src/runtime/server/page/render.js
+++ b/packages/kit/src/runtime/server/page/render.js
@@ -102,23 +102,6 @@ export async function render_response({
 			form: form_value
 		};
 
-		// TODO remove this for 1.0
-		/**
-		 * @param {string} property
-		 * @param {string} replacement
-		 */
-		const print_error = (property, replacement) => {
-			Object.defineProperty(props.page, property, {
-				get: () => {
-					throw new Error(`$page.${property} has been replaced by $page.url.${replacement}`);
-				}
-			});
-		};
-
-		print_error('origin', 'origin');
-		print_error('path', 'pathname');
-		print_error('query', 'searchParams');
-
 		rendered = options.root.render(props);
 
 		for (const { node } of branch) {
diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js
index 190374940..6039343e6 100644
--- a/packages/kit/src/runtime/server/utils.js
+++ b/packages/kit/src/runtime/server/utils.js
@@ -11,30 +11,11 @@ export function is_pojo(body) {
 	if (body) {
 		if (body instanceof Uint8Array) return false;
 		if (body instanceof ReadableStream) return false;
-
-		// if body is a node Readable, throw an error
-		// TODO remove this for 1.0
-		if (body._readableState && typeof body.pipe === 'function') {
-			throw new Error('Node streams are no longer supported — use a ReadableStream instead');
-		}
 	}
 
 	return true;
 }
 
-// TODO: Remove for 1.0
-/** @param {Record<string, any>} mod */
-export function check_method_names(mod) {
-	['get', 'post', 'put', 'patch', 'del'].forEach((m) => {
-		if (m in mod) {
-			const replacement = m === 'del' ? 'DELETE' : m.toUpperCase();
-			throw Error(
-				`Endpoint method "${m}" has changed to "${replacement}". See https://github.com/sveltejs/kit/discussions/5359 for more information.`
-			);
-		}
-	});
-}
-
 /** @type {import('types').SSRErrorPage} */
 export const GENERIC_ERROR = {
 	id: '__error'
@@ -79,15 +60,6 @@ export function allowed_methods(mod) {
  */
 export function get_option(nodes, option) {
 	return nodes.reduce((value, node) => {
-		// TODO remove for 1.0
-		for (const thing of [node?.server, node?.universal]) {
-			if (thing && ('router' in thing || 'hydrate' in thing)) {
-				throw new Error(
-					'`export const hydrate` and `export const router` have been replaced with `export const csr`. See https://github.com/sveltejs/kit/pull/6446'
-				);
-			}
-		}
-
 		return /** @type {any} TypeScript's too dumb to understand this */ (
 			node?.universal?.[option] ?? node?.server?.[option] ?? value
 		);
diff --git a/packages/kit/src/utils/filesystem.js b/packages/kit/src/utils/filesystem.js
index 1296bd0d2..f53b10452 100644
--- a/packages/kit/src/utils/filesystem.js
+++ b/packages/kit/src/utils/filesystem.js
@@ -83,6 +83,7 @@ export function copy(source, target, opts = {}) {
  * Get a list of all files in a directory
  * @param {string} cwd - the directory to walk
  * @param {boolean} [dirs] - whether to include directories in the result
+ * @returns {string[]} a list of all found files (and possibly directories) relative to `cwd`
  */
 export function walk(cwd, dirs = false) {
 	/** @type {string[]} */
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dcb9a0030..c86f1bf06 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -32,7 +32,7 @@ importers:
 
   packages/adapter-auto:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       '@types/node': ^16.18.6
       import-meta-resolve: ^2.2.0
       typescript: ^4.9.3
@@ -84,7 +84,7 @@ importers:
       '@rollup/plugin-commonjs': ^23.0.3
       '@rollup/plugin-json': ^5.0.2
       '@rollup/plugin-node-resolve': ^15.0.1
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       '@types/node': ^16.18.6
       '@types/set-cookie-parser': ^2.4.2
       esbuild: ^0.16.3
@@ -115,7 +115,7 @@ importers:
       '@rollup/plugin-commonjs': ^23.0.2
       '@rollup/plugin-json': ^5.0.1
       '@rollup/plugin-node-resolve': ^15.0.1
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       '@types/node': ^16.18.6
       c8: ^7.12.0
       polka: ^1.0.0-next.22
@@ -141,7 +141,7 @@ importers:
 
   packages/adapter-static:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       '@types/node': ^16.18.6
       sirv: ^2.0.2
       svelte: ^3.54.0
@@ -159,7 +159,7 @@ importers:
 
   packages/adapter-static/test/apps/prerendered:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       vite: ^4.0.0
     devDependencies:
@@ -169,8 +169,8 @@ importers:
 
   packages/adapter-static/test/apps/spa:
     specifiers:
-      '@sveltejs/adapter-node': workspace:*
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/adapter-node': workspace:^
+      '@sveltejs/kit': workspace:^
       sirv-cli: ^2.0.2
       svelte: ^3.54.0
       vite: ^4.0.0
@@ -183,7 +183,7 @@ importers:
 
   packages/adapter-vercel:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       '@types/node': ^16.18.6
       '@vercel/nft': ^0.22.1
       esbuild: ^0.16.3
@@ -316,8 +316,8 @@ importers:
 
   packages/kit/test/apps/amp:
     specifiers:
-      '@sveltejs/amp': workspace:*
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/amp': workspace:^
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       purify-css: ^1.2.5
       svelte: ^3.54.0
@@ -336,7 +336,7 @@ importers:
 
   packages/kit/test/apps/basics:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       rimraf: ^3.0.2
       svelte: ^3.54.0
@@ -354,7 +354,7 @@ importers:
 
   packages/kit/test/apps/dev-only:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       rimraf: ^3.0.2
       svelte: ^3.54.0
@@ -372,7 +372,7 @@ importers:
 
   packages/kit/test/apps/options:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       svelte: ^3.54.0
       svelte-check: ^2.9.2
@@ -388,8 +388,8 @@ importers:
 
   packages/kit/test/apps/options-2:
     specifiers:
-      '@sveltejs/adapter-node': workspace:*
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/adapter-node': workspace:^
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       svelte: ^3.54.0
       svelte-check: ^2.9.2
@@ -406,7 +406,7 @@ importers:
 
   packages/kit/test/apps/writes:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       rimraf: ^3.0.2
       svelte: ^3.54.0
@@ -430,8 +430,8 @@ importers:
 
   packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment:
     specifiers:
-      '@sveltejs/adapter-auto': workspace:*
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/adapter-auto': workspace:^
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.7.1
       typescript: ^4.9.3
@@ -446,8 +446,8 @@ importers:
 
   packages/kit/test/build-errors/apps/prerenderable-not-prerendered:
     specifiers:
-      '@sveltejs/adapter-auto': workspace:*
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/adapter-auto': workspace:^
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -462,7 +462,7 @@ importers:
 
   packages/kit/test/build-errors/apps/private-dynamic-env:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -476,7 +476,7 @@ importers:
 
   packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -490,7 +490,7 @@ importers:
 
   packages/kit/test/build-errors/apps/private-static-env:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       cross-env: ^7.0.3
       svelte: ^3.54.0
       svelte-check: ^2.9.2
@@ -506,7 +506,7 @@ importers:
 
   packages/kit/test/build-errors/apps/private-static-env-dynamic-import:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -520,7 +520,7 @@ importers:
 
   packages/kit/test/build-errors/apps/server-only-folder:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -534,7 +534,7 @@ importers:
 
   packages/kit/test/build-errors/apps/server-only-folder-dynamic-import:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -548,7 +548,7 @@ importers:
 
   packages/kit/test/build-errors/apps/server-only-module:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -562,7 +562,7 @@ importers:
 
   packages/kit/test/build-errors/apps/server-only-module-dynamic-import:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -576,7 +576,7 @@ importers:
 
   packages/kit/test/prerendering/basics:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -592,7 +592,7 @@ importers:
 
   packages/kit/test/prerendering/options:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -608,7 +608,7 @@ importers:
 
   packages/kit/test/prerendering/paths-base:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -624,7 +624,7 @@ importers:
 
   packages/kit/test/prerendering/ssr-false:
     specifiers:
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/kit': workspace:^
       svelte: ^3.54.0
       svelte-check: ^2.9.2
       typescript: ^4.9.3
@@ -684,10 +684,10 @@ importers:
 
   sites/kit.svelte.dev:
     specifiers:
-      '@sveltejs/adapter-auto': workspace:*
-      '@sveltejs/adapter-static': workspace:*
-      '@sveltejs/amp': workspace:*
-      '@sveltejs/kit': workspace:*
+      '@sveltejs/adapter-auto': workspace:^
+      '@sveltejs/adapter-static': workspace:^
+      '@sveltejs/amp': workspace:^
+      '@sveltejs/kit': workspace:^
       '@sveltejs/site-kit': ^3.0.3
       '@types/d3-geo': ^3.0.2
       '@types/node': ^16.18.6
diff --git a/sites/kit.svelte.dev/package.json b/sites/kit.svelte.dev/package.json
index 4a97c809c..69aa30b8e 100644
--- a/sites/kit.svelte.dev/package.json
+++ b/sites/kit.svelte.dev/package.json
@@ -10,10 +10,10 @@
 		"test": "uvu src \"(spec\\.js|test[\\\\/]index\\.js)\""
 	},
 	"devDependencies": {
-		"@sveltejs/adapter-auto": "workspace:*",
-		"@sveltejs/adapter-static": "workspace:*",
-		"@sveltejs/amp": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/adapter-auto": "workspace:^",
+		"@sveltejs/adapter-static": "workspace:^",
+		"@sveltejs/amp": "workspace:^",
+		"@sveltejs/kit": "workspace:^",
 		"@sveltejs/site-kit": "^3.0.3",
 		"@types/d3-geo": "^3.0.2",
 		"@types/node": "^16.18.6",
diff --git a/sites/kit.svelte.dev/src/routes/Banner.svelte b/sites/kit.svelte.dev/src/routes/Banner.svelte
index 60486c46f..e3f8d57cd 100644
--- a/sites/kit.svelte.dev/src/routes/Banner.svelte
+++ b/sites/kit.svelte.dev/src/routes/Banner.svelte
@@ -16,7 +16,7 @@
 <header class="banner" class:visible>
 	<p>
 		<a href="https://www.youtube.com/watch?v=N4BRVkQVoMc">
-			<strong>Dec 14:</strong> a Svelte Radio live special 👀
+			<strong>LIVE NOW:</strong> announcing SvelteKit 1.0!
 		</a>
 	</p>
 </header>


Test patch:
diff --git a/packages/adapter-static/test/apps/prerendered/package.json b/packages/adapter-static/test/apps/prerendered/package.json
index 75ad973b1..dc1169106 100644
--- a/packages/adapter-static/test/apps/prerendered/package.json
+++ b/packages/adapter-static/test/apps/prerendered/package.json
@@ -8,7 +8,7 @@
 		"start": "vite start"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"vite": "^4.0.0"
 	},
diff --git a/packages/adapter-static/test/apps/spa/package.json b/packages/adapter-static/test/apps/spa/package.json
index b10cbca5e..5ae5f3629 100644
--- a/packages/adapter-static/test/apps/spa/package.json
+++ b/packages/adapter-static/test/apps/spa/package.json
@@ -8,8 +8,8 @@
 		"start": "sirv -s 200.html build"
 	},
 	"devDependencies": {
-		"@sveltejs/adapter-node": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/adapter-node": "workspace:^",
+		"@sveltejs/kit": "workspace:^",
 		"sirv-cli": "^2.0.2",
 		"svelte": "^3.54.0",
 		"vite": "^4.0.0"
diff --git a/packages/kit/test/apps/amp/package.json b/packages/kit/test/apps/amp/package.json
index 249ee29f2..d773dadb7 100644
--- a/packages/kit/test/apps/amp/package.json
+++ b/packages/kit/test/apps/amp/package.json
@@ -12,8 +12,8 @@
 		"test:build": "playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/amp": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/amp": "workspace:^",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"purify-css": "^1.2.5",
 		"svelte": "^3.54.0",
diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json
index 52f329c13..a6fc6901d 100644
--- a/packages/kit/test/apps/basics/package.json
+++ b/packages/kit/test/apps/basics/package.json
@@ -12,7 +12,7 @@
 		"test:build": "rimraf test/errors.json && playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"rimraf": "^3.0.2",
 		"svelte": "^3.54.0",
diff --git a/packages/kit/test/apps/dev-only/package.json b/packages/kit/test/apps/dev-only/package.json
index b6c7b48e6..90daab97b 100644
--- a/packages/kit/test/apps/dev-only/package.json
+++ b/packages/kit/test/apps/dev-only/package.json
@@ -10,7 +10,7 @@
 		"test": "cross-env DEV=true playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"rimraf": "^3.0.2",
 		"svelte": "^3.54.0",
diff --git a/packages/kit/test/apps/options-2/package.json b/packages/kit/test/apps/options-2/package.json
index 0d6f446b5..91d83ae3f 100644
--- a/packages/kit/test/apps/options-2/package.json
+++ b/packages/kit/test/apps/options-2/package.json
@@ -12,8 +12,8 @@
 		"test:build": "playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/adapter-node": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/adapter-node": "workspace:^",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
diff --git a/packages/kit/test/apps/options/package.json b/packages/kit/test/apps/options/package.json
index c224beaa4..a463aa0ad 100644
--- a/packages/kit/test/apps/options/package.json
+++ b/packages/kit/test/apps/options/package.json
@@ -12,7 +12,7 @@
 		"test:build": "playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
diff --git a/packages/kit/test/apps/writes/package.json b/packages/kit/test/apps/writes/package.json
index 6cc38db70..951dba079 100644
--- a/packages/kit/test/apps/writes/package.json
+++ b/packages/kit/test/apps/writes/package.json
@@ -12,7 +12,7 @@
 		"test:build": "rimraf test/errors.json && playwright test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"rimraf": "^3.0.2",
 		"svelte": "^3.54.0",
diff --git a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json
index 61af164ac..bcd1756b4 100644
--- a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json
+++ b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json
@@ -9,8 +9,8 @@
 		"check": "svelte-kit sync && tsc && svelte-check"
 	},
 	"devDependencies": {
-		"@sveltejs/adapter-auto": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/adapter-auto": "workspace:^",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.7.1",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json
index 210d405cd..6121a2070 100644
--- a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json
+++ b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json
@@ -9,8 +9,8 @@
 		"check": "svelte-kit sync && tsc && svelte-check"
 	},
 	"devDependencies": {
-		"@sveltejs/adapter-auto": "workspace:*",
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/adapter-auto": "workspace:^",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json b/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json
index 3e23168f2..854ebd023 100644
--- a/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json
+++ b/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/private-dynamic-env/package.json b/packages/kit/test/build-errors/apps/private-dynamic-env/package.json
index 4843ad7f9..e334da656 100644
--- a/packages/kit/test/build-errors/apps/private-dynamic-env/package.json
+++ b/packages/kit/test/build-errors/apps/private-dynamic-env/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json b/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json
index 98d91d505..44a2e5a5a 100644
--- a/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json
+++ b/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/private-static-env/package.json b/packages/kit/test/build-errors/apps/private-static-env/package.json
index ab3df286e..6591bb197 100644
--- a/packages/kit/test/build-errors/apps/private-static-env/package.json
+++ b/packages/kit/test/build-errors/apps/private-static-env/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"cross-env": "^7.0.3",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
diff --git a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json
index bb6b21a16..b3f83571c 100644
--- a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json
+++ b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/server-only-folder/package.json b/packages/kit/test/build-errors/apps/server-only-folder/package.json
index f647fd86b..310dd2dc7 100644
--- a/packages/kit/test/build-errors/apps/server-only-folder/package.json
+++ b/packages/kit/test/build-errors/apps/server-only-folder/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json
index 6623c0d66..016624edf 100644
--- a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json
+++ b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/build-errors/apps/server-only-module/package.json b/packages/kit/test/build-errors/apps/server-only-module/package.json
index ec9846465..91a9e216a 100644
--- a/packages/kit/test/build-errors/apps/server-only-module/package.json
+++ b/packages/kit/test/build-errors/apps/server-only-module/package.json
@@ -10,7 +10,7 @@
 		"check:watch": "svelte-check --tsconfig ./jsconfig.json --watch"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/prerendering/basics/package.json b/packages/kit/test/prerendering/basics/package.json
index b51c6213d..216d7accb 100644
--- a/packages/kit/test/prerendering/basics/package.json
+++ b/packages/kit/test/prerendering/basics/package.json
@@ -10,7 +10,7 @@
 		"test": "svelte-kit sync && pnpm build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/prerendering/options/package.json b/packages/kit/test/prerendering/options/package.json
index 18b7531e0..f0667f467 100644
--- a/packages/kit/test/prerendering/options/package.json
+++ b/packages/kit/test/prerendering/options/package.json
@@ -10,7 +10,7 @@
 		"test": "svelte-kit sync && pnpm build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/prerendering/paths-base/package.json b/packages/kit/test/prerendering/paths-base/package.json
index 5d080030c..bf75751d4 100644
--- a/packages/kit/test/prerendering/paths-base/package.json
+++ b/packages/kit/test/prerendering/paths-base/package.json
@@ -10,7 +10,7 @@
 		"test": "svelte-kit sync && pnpm build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/prerendering/ssr-false/package.json b/packages/kit/test/prerendering/ssr-false/package.json
index 0e42986ca..5075166c6 100644
--- a/packages/kit/test/prerendering/ssr-false/package.json
+++ b/packages/kit/test/prerendering/ssr-false/package.json
@@ -6,10 +6,11 @@
 		"dev": "vite dev",
 		"build": "vite build",
 		"preview": "vite preview",
+		"check": "svelte-kit sync && tsc && svelte-check",
 		"test": "svelte-kit sync && pnpm build && uvu test"
 	},
 	"devDependencies": {
-		"@sveltejs/kit": "workspace:*",
+		"@sveltejs/kit": "workspace:^",
 		"svelte": "^3.54.0",
 		"svelte-check": "^2.9.2",
 		"typescript": "^4.9.3",
diff --git a/packages/kit/test/prerendering/ssr-false/src/routes/not-prerenderable/+page.server.js b/packages/kit/test/prerendering/ssr-false/src/routes/not-prerenderable/+page.server.js
index 576d6d28b..0e3c31134 100644
--- a/packages/kit/test/prerendering/ssr-false/src/routes/not-prerenderable/+page.server.js
+++ b/packages/kit/test/prerendering/ssr-false/src/routes/not-prerenderable/+page.server.js
@@ -1,1 +1,3 @@
-export const actions = {};
+export const actions = {
+	default: () => {}
+};