Astro 6 Stable, Same Worker
Swapped the live Worker from the Astro 6 beta stack to stable, reran the checks, and confirmed the risky part had already happened.
Swapped the live Worker from the Astro 6 beta stack to stable, reran the checks, and confirmed the risky part had already happened.
This was the small follow-up I was hoping for after Almost Astro 6 + Workers Cutover. The site moved to the Astro 6 beta on March 8, 2026. Astro 6 stable landed on March 10, 2026, the branch moved off the beta pins, and the production runtime stayed steady.
What actually changed
| Package | Beta cutover | Stable follow-up |
|---|---|---|
astro | ^6.0.0-beta.20 | ^6.0.1 |
@astrojs/cloudflare | ^13.0.0-beta.14 | ^13.0.1 |
@astrojs/mdx | ^5.0.0-beta.12 | ^5.0.0 |
@astrojs/react | ^5.0.0-beta.4 | ^5.0.0 |
@astrojs/rss | ^4.0.15-beta.4 | ^4.0.17 |
@astrojs/sitemap | ^3.6.1-beta.3 | ^3.7.1 |
The only real code-path surprise was not in app code. Astro 6 stable’s Cloudflare adapter is stricter about the repo-level Wrangler config, and it immediately caught the fact that wrangler.toml was still carrying old Pages-shaped assumptions. The fix was simple but useful: stop pretending that file was Pages-first and make it honestly Worker-compatible, because Astro now reads it during prerender validation.
The ecosystem patches did not all disappear. The local Keystatic compatibility patch still remains, and the tweet-embed patch still remains too. Stable cleaned up the core stack. It did not magically make every edge package catch up on the same day.
What did not change
The runtime truth stayed put.
- still Cloudflare Workers
- still the same production Worker and domains
- still
src/middleware.ts - still
ClientRouter - still Astro’s supported CSP path
- still the same production feature-flag split between public and preview-shaped builds
That is the important part. The hard migration was the runtime move from Astro 5 + Pages assumptions to Astro 6 + Workers. This follow-up did not reopen that work. It confirmed it.
What I reran
| Check | Result | What it proved |
|---|---|---|
npm test | Pass | unit and helper coverage still green on the stable packages |
npm run build:prod | Pass | the production-shaped Worker build still completes end to end |
npm run build:preview | Pass | preview-shaped builds still expose the intended gated surfaces |
npm run test:csp | Pass | CSP generation still matches the Worker runtime shape |
npm run test:seo | Pass | generated public discovery surfaces still validate |
npm run test:search | Pass | search/Pagefind generation still works |
| Live production spot check | Proven | public Worker pages still served correctly after the stable deploy |
The important interpretation
The March 8 cutover held up. Beta was where the sharp edges were. Stable was the cleanup pass that confirmed the branch was already sitting on the right runtime shape.
That is exactly what I wanted this entry to say. Same Worker. Same runtime. Same public shape. Just fewer beta suffixes, one stricter config seam flushed out into the open, and a cleaner answer to the question, “Did that earlier migration actually stick?”
Still open
- the Keystatic compatibility patch still exists and should go away when upstream support catches up
- the tweet-embed patch still exists because that package is still behind Astro 6, even though the live behavior is fixed