Skip to content

Route server islands through prerender handler#15891

Merged
matthewp merged 1 commit intomainfrom
si-prerenderenv-node
Mar 12, 2026
Merged

Route server islands through prerender handler#15891
matthewp merged 1 commit intomainfrom
si-prerenderenv-node

Conversation

@matthewp
Copy link
Copy Markdown
Contributor

@matthewp matthewp commented Mar 12, 2026

Changes

  • Route /_server-islands/* through the Astro core prerender dev handler by treating server island routes as prerender-handler eligible.
  • This prevents it from being forwarded to the workerd environment which does not have the key.

Testing

  • Add a Cloudflare prerenderEnvironment: 'node' dev regression test that reproduces and verifies server:defer island fetches return 200.

Docs

  • No docs changes needed. This is a dev routing bug fix and test coverage update.

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 12, 2026

🦋 Changeset detected

Latest commit: 2f40c9d

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

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

@github-actions github-actions bot added pkg: integration Related to any renderer integration (scope) pkg: astro Related to the core `astro` package (scope) labels Mar 12, 2026
@matthewp matthewp changed the title fix(dev): route server islands through prerender handler Route server islands through prerender handler Mar 12, 2026
@matthewp matthewp added the pr preview Apply this label to a PR to generate a preview release label Mar 12, 2026
@github-actions github-actions bot removed the pr preview Apply this label to a PR to generate a preview release label Mar 12, 2026
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Mar 12, 2026

npm i https://pkg.pr.new/astro@15891
npm i https://pkg.pr.new/@astrojs/preact@15891

commit: 80ab9b9

@matthewp
Copy link
Copy Markdown
Contributor Author

@CaiJimmy this should fix your dev issue.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Mar 12, 2026

Merging this PR will not alter performance

✅ 18 untouched benchmarks


Comparing si-prerenderenv-node (2f40c9d) with main (dcd2c8e)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (de2860c) during the generation of this report, so dcd2c8e was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@matthewp matthewp marked this pull request as ready for review March 12, 2026 20:29
@CaiJimmy
Copy link
Copy Markdown

https://pkg.pr.new/astro@15891

Can confirm that this has solved the problem, thank you!

@matthewp matthewp merged commit b889231 into main Mar 12, 2026
27 checks passed
@matthewp matthewp deleted the si-prerenderenv-node branch March 12, 2026 22:09
@astrobot-houston astrobot-houston mentioned this pull request Mar 12, 2026
github-actions bot pushed a commit that referenced this pull request Mar 16, 2026
…route through correct runtime (#15946)\n\nThe serializedManifestPlugin generated a new random encryption key per environment, causing key mismatch between Node prerender and workerd SSR environments. This forced PR #15891 to route server islands through the Node prerender handler, which broke access to cloudflare:workers.\n\nFix: cache the key at plugin level so all environments share it, then revert the isRouteServerIsland workaround so server islands correctly fall through to the workerd runtime.
dadezzz pushed a commit to dadezzz/ice-notes that referenced this pull request Mar 20, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@astrojs/check](https://github.com/withastro/astro/tree/main/packages/language-tools/astro-check) ([source](https://github.com/withastro/astro/tree/HEAD/packages/language-tools/astro-check)) | [`0.9.7` → `0.9.8`](https://renovatebot.com/diffs/npm/@astrojs%2fcheck/0.9.7/0.9.8) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@astrojs%2fcheck/0.9.8?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@astrojs%2fcheck/0.9.7/0.9.8?slim=true) |
| [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`6.0.4` → `6.0.5`](https://renovatebot.com/diffs/npm/astro/6.0.4/6.0.5) | ![age](https://developer.mend.io/api/mc/badges/age/npm/astro/6.0.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/astro/6.0.4/6.0.5?slim=true) |

---

### Release Notes

<details>
<summary>withastro/astro (@&#8203;astrojs/check)</summary>

### [`v0.9.8`](https://github.com/withastro/astro/blob/HEAD/packages/language-tools/astro-check/CHANGELOG.md#098)

[Compare Source](https://github.com/withastro/astro/compare/@astrojs/check@0.9.7...@astrojs/check@0.9.8)

##### Patch Changes

- [#&#8203;15892](withastro/astro#15892) [`a2f597d`](withastro/astro@a2f597d) Thanks [@&#8203;Princesseuh](https://github.com/Princesseuh)! - Fixes Astro not being able to find astro check sometimes

- Updated dependencies \[[`7b4b254`](withastro/astro@7b4b254)]:
  - [@&#8203;astrojs/language-server](https://github.com/astrojs/language-server)@&#8203;2.16.5

</details>

<details>
<summary>withastro/astro (astro)</summary>

### [`v6.0.5`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#605)

[Compare Source](https://github.com/withastro/astro/compare/astro@6.0.4...astro@6.0.5)

##### Patch Changes

- [#&#8203;15891](withastro/astro#15891) [`b889231`](withastro/astro@b889231) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fix dev routing for `server:defer` islands when adapters opt into handling prerendered routes in Astro core. Server island requests are now treated as prerender-handler eligible so prerendered pages using `prerenderEnvironment: 'node'` can load island content without `400` errors.

- [#&#8203;15890](withastro/astro#15890) [`765a887`](withastro/astro@765a887) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes `astro:actions` validation to check resolved routes, so projects using default static output with at least one `prerender = false` page or endpoint no longer fail during startup.

- [#&#8203;15884](withastro/astro#15884) [`dcd2c8e`](withastro/astro@dcd2c8e) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Avoid a `MaxListenersExceededWarning` during `astro dev` startup by increasing the shared Vite watcher listener limit when attaching content server listeners.

- [#&#8203;15904](withastro/astro#15904) [`23d5244`](withastro/astro@23d5244) Thanks [@&#8203;jlukic](https://github.com/jlukic)! - Emit the `before-hydration` script chunk for the `client` Vite environment. The chunk was only emitted for `prerender` and `ssr` environments, causing a 404 when browsers tried to load it. This broke hydration for any integration using `injectScript('before-hydration', ...)`, including Lit SSR.

- [#&#8203;15933](withastro/astro#15933) [`325901e`](withastro/astro@325901e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixes an issue where `<style>` tags inside SVG components weren't correctly tracked when enabling CSP.

- [#&#8203;15875](withastro/astro#15875) [`c43ef8a`](withastro/astro@c43ef8a) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Ensure custom prerenderers are always torn down during build, even when `getStaticPaths()` throws.

- [#&#8203;15887](withastro/astro#15887) [`1861fed`](withastro/astro@1861fed) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixes an issue where the build incorrectly leaked server entrypoint into the client environment, causing adapters to emit warnings during the build.

- [#&#8203;15888](withastro/astro#15888) [`925252e`](withastro/astro@925252e) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fix a bug where `server:defer` could fail at runtime in prerendered pages for some adapters (including Cloudflare), causing errors like `serverIslandMap?.get is not a function`.

- [#&#8203;15901](withastro/astro#15901) [`07c1002`](withastro/astro@07c1002) Thanks [@&#8203;delucis](https://github.com/delucis)! - Fixes JSON schema generation for content collection schemas that have differences between their input and output shapes.

- [#&#8203;15882](withastro/astro#15882) [`759f946`](withastro/astro@759f946) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fix `Astro.url.pathname` for the root page when using `build.format: "file"` so it resolves to `/index.html` instead of `/.html` during builds.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My43Ni4yIiwidXBkYXRlZEluVmVyIjoiNDMuNzYuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Renovate Bot <renovate@zarantonello.dev>
Co-committed-by: Renovate Bot <renovate@zarantonello.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg: astro Related to the core `astro` package (scope) pkg: integration Related to any renderer integration (scope)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants