What Changed In Astro 7

Astro 7 is mostly about speed and making previously experimental server features stable.

flowchart TD
    astro7[Astro 7] --> build["Faster builds"]
    astro7 --> routing["Request control"]
    astro7 --> cache["Stable route caching"]
    astro7 --> agents["Agent-friendly dev"]

    build --> vite["Vite 8 + Rolldown"]
    build --> compiler["Rust .astro compiler"]
    build --> satteri["Sätteri Markdown"]
    build --> queued["Queued rendering"]

    routing --> fetchFile["src/fetch.ts"]
    cache --> astroCache["Astro.cache"]
    agents --> bg["astro dev --background"]

The Big Pieces

AreaAstro 6Astro 7
BundlerVite 7-era toolchainVite 8 with Rolldown/Oxc under the hood
.astro compilerGo compiler by defaultRust compiler only
Markdown/MDXunified pipeline by defaultSätteri by default, unified opt-in
Route cachingexperimentalstable Astro API
Advanced routingexperimentalstable and enabled by default
src/fetch.tsordinary project filereserved advanced routing entrypoint
AI dev servernormal foreground dev serveragent detection can start background mode

What Most Projects Need To Do

Most projects start here:

npx @astrojs/upgrade
npm run build

Then inspect the real failure modes:

  • build errors from stricter .astro parsing
  • missing spaces between inline elements after the compressHTML: 'jsx' default
  • Markdown plugin output changes
  • stale experimental config flags
  • accidental src/fetch.ts conflicts
  • removed @astrojs/db or astro:transitions internals

Gotcha: Vite 8 is a breaking dependency upgrade, but Astro app authors usually only feel it if they use custom Vite plugins, Vite internals, or advanced build config.

What Not To Do

Do not treat every new feature as something to adopt immediately.

FeatureDefault stance
Advanced routingIgnore until you need custom request ordering
CDN cache providersTreat as experimental host-specific integration
Sätteri plugin migrationOnly port plugins you actually need
compressHTML: true rollbackUse only if visual whitespace fixes are too risky