Skip to content

[pull] main from sveltejs:main - #1

Open
pull[bot] wants to merge 2124 commits into
homebase-garage:mainfrom
sveltejs:main
Open

[pull] main from sveltejs:main#1
pull[bot] wants to merge 2124 commits into
homebase-garage:mainfrom
sveltejs:main

Conversation

@pull

@pull pull Bot commented Dec 20, 2023

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

github-actions Bot and others added 26 commits April 9, 2026 15:42
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.57.1

### Patch Changes

- fix: better validation for `redirect` inputs
([`10d7b44`](10d7b44))


- fix: enforce `BODY_SIZE_LIMIT` on chunked requests
([`3202ed6`](3202ed6))


- fix: use default values as fallbacks
([#15680](#15680))


- fix: relax form typings for union types
([#15687](#15687))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
Fixes #15599

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.

---------

Co-authored-by: Elliott Johnson <hello@ell.iott.dev>
…#15718)

closes #13307
related to rust-lang/crates.io#13436

This PR ensures that stylesheets and fonts are eagerly loaded even if
SSR is disabled. This helps prevent FOUC. In the case of fallback pages,
we only load the root layout which already applies to every page and is
safe to load even if we don't know what route is being rendered until
CSR kicks in.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.
…-reactive contexts (#15699)

As of #15533, `query().current` no longer works in non-reactive
contexts. I believe this is unwanted behavior -- take the following
scenario:

```svelte
<script>
  import { list_todos } from '$lib/todos.remote';
  $effect(() => {
    const events = subscribe_to_something_external();
    events.on('new-todo', (item) => {
      // I don't want to call `.run()` here, because if `list_todos`
      // is not currently used, I don't care about the result
      // (it would just waste a network request)
      const current = list_todos().current;
      if (!current) return;
      list_todos().set([data.item, ...current]);
    });

  });
</script>
```

This PR fixes it by simply restoring the old behavior of `.current`
returning `undefined` if the query has not been called yet.
Normal (non-enhanced) form behavior is to clear state when the form is
submitted, regardless of whether the result is an error, a redirect, or
a value. Currently, the previous `result` remains untouched, which is
unexpected if the form redirects back to the same page it's on. This is
a one-line fix.
closes #15700

The enhance function can be (and usually is) async. The return type must
therefore not be `void` but `void | Promise<void>` to prevent triggering
[`@typescript-eslint/no-misused-promises`](https://typescript-eslint.io/rules/no-misused-promises/)

The return type was changed from `void | Promise<void>` to `void` in
#15530, which I think was a regression. This PR changes it back.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [ ] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.
Closes #15714

`resolve` should not accept external links; the whole point of it is to
resolve internal links.
Seems like the correct pnpm setting name is camel case rather than kebab
case https://pnpm.io/settings#allowbuilds . Otherwise, pnpm doesn't
recognise those packages as approved to run postbuild

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [ ] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [ ] This message body should clearly illustrate what problems it
solves.
- [ ] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [ ] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.
When reviewing the fix for the body size limit bypass in the node
adapter,
I noticed the existing test suite only covered the updated code paths 
(chunked encoding, valid Content-Length) but not the original bypass
path.

This adds a test documenting that HTTP/1.1 requests with no
`Content-Length`
and no `Transfer-Encoding` header return an empty body rather than
processing
oversized input.
)

## Problem

When using server-side includes (SSI) — HTML comment directives like
`<!--#include virtual="/header.html" -->` that are replaced by servers
such as nginx — removing them in `transformPageChunk` triggers a false
positive warning:

> Removing comments in `transformPageChunk` can break Svelte's hydration

SSI directives are intentionally removed/replaced by the server and have
nothing to do with Svelte's hydration mechanism.

## Fix

Svelte's hydration comments (`<!--[-->`, `<!--]-->`, `<!---->`, etc.)
never start with `<!--#`. SSI directives always start with `<!--#`.
Using a negative lookahead regex (`<!--(?!#)`) to count only non-SSI
comments means:

- Removing SSI comments in `transformPageChunk` → no warning
- Removing actual Svelte hydration comments → warning still fires
correctly
Alternative to #15738
Closes #15696

I realized while reviewing that there's a fundamental problem: If the
query's validator lossily changes the input, there's no way to map the
validated input back to the correct argument. Consider a validator that
calls `Math.floor` on its input number, then consider the following:

```ts
// from the client, we request `query(1.2)` and `query(1.8)`,
// but both `arg`s are `1`
for await (const arg of requested(my_query, 5)) {
  // there is no way to map `1` back to the original inputs;
  // only 1.8 would actually be refreshed because it wrote
  // to the `validated` cache last
  void my_query(arg).refresh();
}
```

This realization in hand, I further realized the only way to make this
work is to somehow preserve the mapping of input arguments to validated
arguments. The best way to do that is to return a bound instance of the
query from `requested`:

```ts
for await (const { arg, query } of requested(my_query, 5)) {
  void query.refresh();
}
```

Problem solved; the `query` internally maintains the map of input
argument => validated argument. The `arg` is still the validated
argument in case you need to do something like `if (arg.id === id)`.

---------

Co-authored-by: machadinhos <pbmachado2002@gmail.com>
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.58.0

### Minor Changes

- breaking: require `limit` in `requested` (as originally intended)
([#15739](#15739))


- feat: `RemoteQueryFunction` gains an optional third generic parameter
`Validated` (defaulting to `Input`) that represents the argument type
after schema validation/transformation
([#15739](#15739))


- breaking: `requested` now yields `{ arg, query }` entries instead of
the validated argument
([#15739](#15739))

### Patch Changes

- fix: allow `query().current`, `.error`, `.loading`, and `.ready` to
work in non-reactive contexts
([#15699](#15699))


- fix: prevent `deep_set` crash on nullish nested values
([#15600](#15600))


- fix: restore correct `RemoteFormFields` typing for nullable array
fields (e.g. when a schema uses `.default([])`), so `.as('checkbox')`
and friends work again
([#15723](#15723))


- fix: don't warn about removed SSI comments in `transformPageChunk`
([#15695](#15695))

Server-side include (SSI) directives like `<!--#include virtual="..."
-->` are HTML comments that are replaced by servers such as nginx.
Previously, removing them in `transformPageChunk` would trigger a false
positive warning about breaking Svelte's hydration. Since SSI comments
always start with `<!--#` and Svelte's hydration comments never do, they
can be safely excluded from the check.

- Change enhance function return type from void to MaybePromise<void>.
([#15710](#15710))


- fix: throw an error when `resolve` is called with an external URL
([#15733](#15733))


- fix: avoid FOUC for CSR-only pages by loading styles and fonts before
CSR starts ([#15718](#15718))


- fix: reset form result on redirect
([#15724](#15724))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR fixes some TypeScript errors that only show when viewing files
in the IDE with TypeScript 6 or 7 because they’re not checked when
running `pnpm check`
Alternative to #15563. I reimplemented a bunch of stuff to fix a bunch
of papercuts, figured it would be easier to review this way. I still
need to add `hydratable` support.

TODO (can probably be followups):
- [ ] Figure out what to do about router coordination and refreshes
- [x] Figure out what the right behavior for network instability prior
to first resolved value should be
- [ ] Figure out an API for `invalidateNone` on `form` calls

---------

Co-authored-by: Rich Harris <rich.harris@vercel.com>
Co-authored-by: Rich Harris <richard.a.harris@gmail.com>
`form.fields.foo.as('checkbox', default_value)` previously both had a
typescript error preventing it from being used, and also did not
correctly set `checked` on the input element. This PR fixes both of
those issues and updates tests.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [ ] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.
Based on #15705 because I didn't want to resolve conflicts; so it'll
have to wait for that one to merge.

Closes #15686.
github-actions Bot and others added 26 commits July 1, 2026 09:01
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.69.0

### Minor Changes


- feat: expose `submitted` property of remote forms
([#14811](#14811))


### Patch Changes


- fix: clear issues and touched states on form reset
([#16163](#16163))


- fix: return `undefined` from `fields.branch.issues()` when only
`fields.branch.leaf` has issues
([#16187](#16187))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Node 20 is deprecated and that leads to warning in GitHub actions logs.


### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [ ] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
  * #N/A
- [x] This message body should clearly illustrate what problems it
solves.
- [ ] Ideally, include a test that fails without this PR but passes with
it.
  * #N/A

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`
  * #N/A

### Changesets
- [ ] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits
  * #N/A

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.

---------

Co-authored-by: Tee Ming <chewteeming01@gmail.com>
If a file input of a remote form is deleted, and the path to that file
contains things like `__proto__` you can do prototype pollution (you can
e.g. delete methods from object prototypes).

This fixes that by reusing the same mechanisms we already have in place
elsewhere.

Big big big edge case + remote functions are experimental, hence no SEV.
If the promise fails, nobody catches it, which can take down the
process.

I added `.catch(...)` in two more places out of abundance of caution.
They can right now not result in an unhandled promise rejection (because
other code paths make sure they never throw) but if they start to in the
future it's better to safe-guard against it now already.
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.69.1

### Patch Changes


- fix: prevent prototype pollution when deleting file inputs
([#16218](#16218))


- fix: prevent unhandled promise rejection
([#16219](#16219))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Same as #16240 but targeting main

Ignore the docs not building for v2 stuff targeting `main`. It's an
error from the v3 `paths.origin` option we use in svelte.dev
https://vercel.com/svelte/svelte-dev/GobMs1i1qQjK3DwRPn2p2ejHDGKz#L183

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [ ] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [ ] This message body should clearly illustrate what problems it
solves.
- [ ] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [ ] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.69.2

### Patch Changes

- fix: set `define` values on `globalThis` when running Vitest
([#16246](#16246))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
The action won't run unless it's on `main` so
#16254 needs to be backported. Not
sure if the instrumentation test app and job also needs to be backported
for the one on `version-3` to run
closes #16314

This PR adds a guard to `renderBuiltUrl` to avoid changing the CSS URL
references to be relative when `path.relative` is `false`

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.
`tweak_types` currently skips route exports declared through
destructuring because it only records identifier declarations. This
walks binding patterns and records the actual bound names, so
helper-produced `load` and `actions` contribute to generated route
types. Added a regression test and patch changeset. The test fails
without the fix, and the full `write_types` suite passes (11/11). Fixes
#16326.
Fixes #13948

`MAX_COOKIE_SIZE` was set to 4129, a magic number that came from testing
browser behavior rather than any spec. RFC 6265bis section 5.6 codifies
4096 bytes as the limit for a cookie's name and value combined, and
that's what Chromium and Firefox actually enforce, so this changes the
constant to 4096 and cites the spec in the comment.

While digging into this I noticed the existing check compared
`MAX_COOKIE_SIZE` against the fully serialized `Set-Cookie` string, so
name, value, and all the attributes like `Path` and `SameSite`. That
doesn't match what 4096 is defined for in the spec (name + value only),
so I changed the check itself to only measure the name and value, not
the serialized string with its attributes. Keeping the scope to this
since that's the simplest fix that matches the spec, per benmccann's
comment on the issue about preferring the simplest solution.

Updated the existing dev-mode cookie size test to reflect the new 4096
boundary and added a case for a cookie right at the limit not throwing.

This PR was written with the help of Claude Code (Anthropic). I read
through the issue thread, the relevant code, and verified the change and
tests myself before opening this.

Ran `pnpm -F @sveltejs/kit test:unit` (598 passed), `pnpm run format`
and eslint on the changed files, and `tsc --noEmit` for the kit package;
all clean. Added a changeset (patch for `@sveltejs/kit`).

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Rich Harris <hello@rich-harris.dev>
Co-authored-by: Nic Polumeyv <nicolas.polum@outlook.com>
Co-authored-by: Rich Harris <rich.harris@vercel.com>
In #14341 someone asked whether `registration.update()` runs on
client-side navigations. It doesn't, and the service workers docs page
says nothing about update behavior at all, so I promised a docs PR
there.

This adds an "Updating the service worker" section covering the three
things that answer covered. Browsers only check on full-page navigations
and functional events, SvelteKit itself only updates the worker as part
of error recovery (route module fails to load or a navigation errors,
plus version polling says the app was redeployed), and an
`afterNavigate` snippet for anyone who wants updates picked up eagerly.
The error recovery behavior is verified against the two
`update_service_worker()` call sites in `client.js` on current main.

Docs only, no changeset.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [ ] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [ ] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [ ] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.

---------

Co-authored-by: Tee Ming <chewteeming01@gmail.com>
Co-authored-by: Rich Harris <hello@rich-harris.dev>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.69.3

### Patch Changes

- fix: detect destructured `load` and `actions` exports during type
generation ([#16329](#16329))

- fix: ensure CSS URL references are absolute when `paths.relative` is
`false` ([#16315](#16315))

- fix: align MAX_COOKIE_SIZE with RFC 6265bis
([#16322](#16322))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…DE_ENV (#16313)

The NODE_ENV saga continues. Any build where NODE_ENV isn't `production`
currently ships with every origin check compiled out:

```js
// respond.js
if (!DEV) {
	// cross-site remote request check
	// cross-site form submission check (csrf.checkOrigin / trustedOrigins)
}
```

`DEV` comes from esm-env, which kit bundles into apps resolved by
NODE_ENV, so `NODE_ENV=staging vite build` produces a deployable server
with CSRF protection silently disabled. Vite's docs list non-production
builds as a supported workflow, and khromov raised this exact failure
mode in #14335 when the gate was added. At the time `DEV` was assumed to
only mean `vite dev`, which the esm-env consolidation in #14308 no
longer guarantees (first leak #15632, fixed by #15852, second leak
#16008, fixed by #16023).

This applies the rule from the #15852 body ("reverting to the global
constant where we want the code to only run during `vite dev` ... Every
other place that uses DEV is meant to fire warnings ... and that should
still happen if the user did `NODE_ENV=development vite build`") to two
sites it missed:

- the `respond.js` gate, `!DEV` to `!__SVELTEKIT_DEV__`, covering both
the form CSRF check and the remote functions origin check that now
shares it
- the live-serving condition in `app/server/remote/prerender.js`, same
one-token swap (prerendered remote functions were served live in these
builds)

The three validation `DEV` sites in `respond.js` (`validateHeaders`,
`page_nodes.validate()`, `validate_server_exports`) are deliberately
untouched. They are warning sites and should keep following NODE_ENV per
the rule. The check internals are also untouched, so this stays out of
the way of the `sec-fetch-site` idea in #15992.

The new spec in `test/build-errors` builds a minimal fixture with
`NODE_ENV=staging`, imports the generated server, and asserts a normal
GET returns 200 while a forged cross-site form POST returns 403. It
fails on main (the POST returns 200) and passes with the fix. The
existing basics CSRF tests stay green in both modes, and dev behavior is
unchanged.

There are HMR-coupled `DEV` gates in `client.js` and the remote query
modules from the same class. Left for a follow-up, `client.js` currently
conflicts with #16307.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.

---------

Co-authored-by: Tee Ming <chewteeming01@gmail.com>
Realised that it'll be easier to do this in stages, deprecating it first
rather than erroring immediately (#16375). This way we can keep the docs
intact, and allow svelte.dev to continue building.

---

### Please don't delete this checklist! Before submitting the PR, please
make sure you do the following:
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] This message body should clearly illustrate what problems it
solves.
- [ ] Ideally, include a test that fails without this PR but passes with
it.

### Tests
- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint` and `pnpm check`

### Changesets
- [x] If your PR makes a change that should be noted in one or more
packages' changelogs, generate a changeset by running `pnpm changeset`
and following the prompts. Changesets that add features should be
`minor` and those that fix bugs should be `patch`. Please prefix
changeset messages with `feat:`, `fix:`, or `chore:`.

### Edits

- [x] Please ensure that 'Allow edits from maintainers' is checked. PRs
without this option may be closed.

---------

Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.70.0

### Minor Changes

- feat: move `defineEnvVars` to `@sveltejs/kit/env`
([#16378](#16378))

### Patch Changes

- fix: enable CSRF protection in builds with a non-production `NODE_ENV`
value ([#16313](#16313))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
quick fix to get kit 2 docs building although svelte.dev has kit 3 types
installed
follow-up to #16396, which unfortunately broke the docs as a result of
how they're being built during the 2-3 transition. We need to apply the
same changes to `main`, and then merge
sveltejs/svelte.dev#2102

---------

Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.70.1

### Patch Changes

- docs: update links to hooks documentation
([#16417](#16417))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
so confused about how these changes got missed from #16417
this, combined with an upgrade to the latest version of SvelteKit,
should hopefully get the preview docs building again
* fix: prevent quadratic backtracking in `Accept` headers

* remove comment
github-actions Bot and others added 3 commits July 29, 2026 16:57
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @sveltejs/kit@2.70.2

### Patch Changes

- fix: prevent quadratic backtracking in `Accept` header content
negotiation
([#1](homebase-garage#1))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
already merged to version-3 but I should have just based it on main and
forwarded it over
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.