Skip to content

fix: output workers to client assets - #16929

Merged
teemingc merged 3 commits into
sveltejs:version-3from
willfarrell:feature/worker-client-output-v3
Aug 25, 2026
Merged

fix: output workers to client assets#16929
teemingc merged 3 commits into
sveltejs:version-3from
willfarrell:feature/worker-client-output-v3

Conversation

@willfarrell

Copy link
Copy Markdown
Contributor

Clone of #16870, but bases off version-3

Worker chunks from ?worker and ?worker&url imports are emitted to {appDir}/immutable/workers/. In two cases, only the SSR build emits them: when every page has csr: false (the client build is skipped entirely), and when the import lives in a server-only module such as +page.server.js. The files then exist only in output/server/, which adapters never publish, so the worker URL returns a 404 in production.

The build already handles this problem for immutable/assets/ by copying server-emitted files into output/client/. This PR applies the same copy to immutable/workers/ in both build branches. Filenames are content-hashed, so copying over an identical file is harmless, and apps without workers are unaffected.

Tests: the basics app covers the server-only import case by checking that the worker file lands in the client output. The amp app covers the skipped client build case by fetching the worker URL and expecting a 200. Both tests fail without the fix.

Related: #12438. That issue also stems from worker files being overlooked, but it concerns the $service-worker build list and is not resolved here.


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.

Signed-off-by: will Farrell <willfarrell@proton.me>
@pkg-svelte-dev

pkg-svelte-dev Bot commented Aug 25, 2026

Copy link
Copy Markdown

Install the latest version of @sveltejs/kit from a6a1364:

pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/a6a1364698428312393810f18adc5f714ba2b5a3

Open in pkg.svelte.dev: https://pkg.svelte.dev/repos/kit/pr/16929

Note

This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed.

@changeset-bot

changeset-bot Bot commented Aug 25, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a6a1364

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@sveltejs/kit Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@Nic-Polumeyv Nic-Polumeyv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome!

Comment thread packages/kit/test/apps/basics/test/server.test.js Outdated

@teemingc teemingc left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I separated the no-csr tests a little bit to make it clearer when a test fails

@teemingc
teemingc merged commit c66a6ed into sveltejs:version-3 Aug 25, 2026
36 of 37 checks passed
@teemingc teemingc changed the title feat: output workers to client assets fix: output workers to client assets Aug 25, 2026
@willfarrell
willfarrell deleted the feature/worker-client-output-v3 branch August 25, 2026 12:51
Rich-Harris pushed a commit that referenced this pull request Aug 26, 2026
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 version-3, this PR
will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`version-3` is currently in **pre mode** so this branch has prereleases
rather than normal releases. If you want to exit prereleases, run
`changeset pre exit` on `version-3`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## @sveltejs/adapter-bun@1.0.0-next.2

### Major Changes

- breaking: require Bun 1.4, which routes `HEAD` to `GET` handlers and
settles `stop()` after a force close
([#16880](#16880))

### Patch Changes

- fix: build apps that use server instrumentation
([#16898](#16898))
- Updated dependencies
[[`ff8cdd4`](ff8cdd4),
[`723572c`](723572c),
[`3b8e034`](3b8e034),
[`f2c5102`](f2c5102),
[`c66a6ed`](c66a6ed),
[`428e5ef`](428e5ef)]:
  - @sveltejs/kit@3.0.0-next.26
## @sveltejs/adapter-node@6.0.0-next.11

### Patch Changes

- chore: remove polka, attach the handler to the http server directly
([#16907](#16907))
- Updated dependencies
[[`ff8cdd4`](ff8cdd4),
[`723572c`](723572c),
[`3b8e034`](3b8e034),
[`f2c5102`](f2c5102),
[`c66a6ed`](c66a6ed),
[`428e5ef`](428e5ef)]:
  - @sveltejs/kit@3.0.0-next.26
## @sveltejs/kit@3.0.0-next.26

### Patch Changes

- fix: only require the `svelte-trusted-html` trusted-types policy when
client-side code is shipped, allowing builds where all pages have `csr:
false` ([#16928](#16928))

- chore: stop externalizing `cookie` dependency during build
([#16936](#16936))

- fix: preserve metadata on streamed page responses
([#16935](#16935))

- fix: error on server-only imports reachable from hooks or service
worker files outside the project root
([#16912](#16912))

- fix: copy worker files emitted by the server build to the client
output directory ([#16929](#16929))

- fix: Reject all pending query promises when a query fails before
resolving with a value for the first time
([#16890](#16890))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants