Back to Colophon
Back to Colophon

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.

#astro #cloudflare #workers #migration

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#

PackageBeta cutoverStable 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#

CheckResultWhat it proved
npm testPassunit and helper coverage still green on the stable packages
npm run build:prodPassthe production-shaped Worker build still completes end to end
npm run build:previewPasspreview-shaped builds still expose the intended gated surfaces
npm run test:cspPassCSP generation still matches the Worker runtime shape
npm run test:seoPassgenerated public discovery surfaces still validate
npm run test:searchPasssearch/Pagefind generation still works
Live production spot checkProvenpublic 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
Swapped the live Worker from the Astro 6 beta stack to stable, reran the checks, and confirmed the risky part had already happened.