Astro 7.0.0 stable shipped on June 22, 2026, ten weeks after the first 7.0 alpha and one beta past the beta.6 article we ran on 2026-06-20. The release promotes almost every long-running experimental API to stable, swaps the toolchain over to Vite 8, and bakes two new workflows into the default project: a background dev server designed for AI coding agents, and an AGENTS.md file at the root of every new project (with a CLAUDE.md symlink pointing at it).
The whole 7.0 line has been telegraphing this release. The Rust compiler graduated from experimental behind a flag, Sätteri moved Markdown off JavaScript and onto a native Rust pipeline, advanced routing replaced the legacy SSR entrypoint, and the cache layer that shipped experimentally in v6.0 is now a stable top-level config. Stable just means the migration is mechanical; the breaking changes (compressHTML: 'jsx', the @astrojs/db removal, the dropped transition helpers, the major bumps on every integration) are real.
Vite 8 and the Rust compiler both become the default
The Vite 8 upgrade (PR #15819, delucis) and the Rust compiler promotion (PR #16462, Princesseuh) are the two foundational changes in the release. The previous beta builds needed experimental.rustCompiler: true in the config; 7.0 removes the Go-based compiler entirely, so the flag is gone with it. The release notes describe the Rust compiler as "faster and more reliable", and the new strictness is a real behaviour change: unclosed HTML tags now throw rather than being silently ignored, and semantically invalid HTML is left for the browser to handle, the same way document.write() does.
The Sätteri Markdown pipeline (Princesseuh) is now the default, and @astrojs/markdown-remark is no longer installed by default. The release pins @astrojs/markdown-satteri@0.3.1. The markdown.remarkPlugins, markdown.rehypePlugins, and markdown.remarkRehype config options still work, but only when @astrojs/markdown-remark is explicitly installed and used. The beta.4 article on Sätteri defaulting walks through the migration in detail; the beta.6 article covers the compressHTML: 'jsx' flip and the route caching promotion from experimental.
Background dev server for AI coding agents
The most agent-specific change in 7.0 is a new background mode for astro dev (PR #16610, matthewp). When Astro detects an AI coding agent (the detector checks a small set of known environment variables and CLI markers), astro dev automatically starts the dev server as a detached background process instead of blocking the agent's terminal. A lock file at .astro/dev.json records the server's URL, port, and PID, and three new subcommands ship alongside:
astro dev --backgroundto start the server as a background process explicitly.astro dev stopto shut the running server down.astro dev statusto check whether a server is running and read the URL, PID, and uptime.astro dev logs(with-fto follow) to read the server output.
The release notes are explicit about opt-out: set ASTRO_DEV_BACKGROUND=0 before astro dev to force foreground behaviour even when an agent is detected. The motivation, also from the PR description, is that AI coding agents cannot usefully hold a foreground dev server in their terminal: a server that is bound to a TTY disappears when the agent moves to the next task, and a server that is not bound holds the port hostage for the next agent iteration.
AGENTS.md and CLAUDE.md in every new project
In the same release wave, create-astro@5.1.0 (PR #17122, matthewp) now writes a default AGENTS.md file into every new project after the template copy step. The generated file is short on purpose:
# Development
Start the dev server in background mode:
astro dev --background
Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`.
# Documentation
Full documentation: https://docs.astro.build
Commonly needed references:
- Routing
- Astro Components
- Content Collections
- Internationalization
create-astro also creates a CLAUDE.md file at the project root pointing at the same content, via fs.symlinkSync('AGENTS.md', claudePath) with an fs.linkSync hard-link fallback if the symlink call fails on the host filesystem. Both files end up holding the same Astro onboarding content, and any AI coding agent that looks for either filename (AGENTS.md for the open AGENTS.md convention used by Codex and others, CLAUDE.md for Claude Code) will pick it up. This is the first major framework scaffolder to ship an AGENTS.md file by default; the Vite ecosystem has been converging on the filename since Codex made it a convention in early 2026.
Route caching, advanced routing, and the custom logger all graduate
Three long-running experimental features graduate to stable in 7.0. Route caching (PR #17116, ascorbic) moves out of experimental.cache and experimental.routeRules into top-level cache and routeRules config blocks. The first-party cache providers cacheNetlify() (durable cache, shared across edge nodes) and cacheVercel() (Vercel-CDN-Cache-Control + Vercel-Cache-Tag) ship in the same release as separate entrypoints in the @astrojs/netlify/cache and @astrojs/vercel/cache modules. A shared helper module astro/cache/provider-utils is exported for third-party provider authors.
Advanced routing (PR #16877, matthewp) drops the experimental.advancedRouting flag. The default entrypoint is now src/fetch.ts instead of src/app.ts, and the fetchFile option moves to the top level of the config. The custom logger feature (PR #16745, ematipico) is also stable, with built-in logHandlers.json, logHandlers.node, and logHandlers.console handlers plus a third-party entrypoint path for structured logging against Kibana, Logstash, CloudWatch, Grafana, or Loki.
The experimental.queuedRendering flag (PR #16981, ematipico) is removed because the streaming replacement is now the default rendering engine; the queue construction and node polling are gone, and only the tag cache survives in a smaller form.
@astrojs/db is gone
@astrojs/db, deprecated in v6.4.5, is removed in 7.0. The CLI commands that depended on it (astro db, astro login, astro logout, astro link, astro init) are gone too. The migration paths the release notes call out: node:sqlite (available since Node.js 22.5.0) for local SQLite storage under the Node adapter, Drizzle ORM for the schema and query API, or any other database library if you target Turso, PlanetScale, Neon, or similar.
The deprecated transition helpers in astro:transitions and astro:transitions/client (TRANSITION_BEFORE_PREPARATION, TRANSITION_AFTER_PREPARATION, TRANSITION_BEFORE_SWAP, TRANSITION_AFTER_SWAP, TRANSITION_PAGE_LOAD, isTransitionBeforePreparationEvent(), isTransitionBeforeSwapEvent(), createAnimationScope()) are also removed. The lifecycle event names are the canonical API now: event.type === 'astro:before-preparation', and so on.
Every integration bumps a major version
The 7.0 stable wave ships the major bumps in lockstep. @astrojs/vue@7.0.0, @astrojs/react@6.0.0, @astrojs/svelte@9.0.0 (also pulls in @sveltejs/vite-plugin-svelte v7), @astrojs/preact@6.0.0, @astrojs/solid-js@7.0.0, and the MDX integration all carry the Vite 8 upgrade plus a new container-renderer entrypoint that holds the getContainerRenderer() export; importing from the package root still works but logs a deprecation warning. The server adapter majors are @astrojs/vercel@11.0.0 (with cacheVercel()), @astrojs/netlify@8.0.0 (with cacheNetlify()), and @astrojs/node@11.0.0 (patches only; non-ASCII filename serving, the astrobot-houston patch).
The new Container API entrypoint is worth highlighting because it is a real bundle-size win. A typical SSR app that only uses the Container API was importing the entire integration package (@astrojs/react with the full client runtime, server runtime, types, and JSX factory) just to call getContainerRenderer(). The new @astrojs/react/container-renderer entrypoint ships only the Container API surface, and the equivalent paths exist for @astrojs/preact/container-renderer, @astrojs/svelte/container-renderer, @astrojs/solid-js/container-renderer, @astrojs/vue/container-renderer, and the MDX integration. Most apps will not need to change anything; the change pays off for library authors and integration authors who want to keep their dependency footprint tight.
What to watch
The Astro team's pattern over the 7.0 cycle has been to graduate one or two experimental features per beta and roll the migration into the next stable. Two follow-ups are likely in the next two to four weeks. The first is the astro@7.0.1 and astro@7.0.2 patches that usually follow a stable release and tend to fix the compressHTML: 'jsx' regressions that only show up on real-world content (markdown tables with surrounding inline elements, MDX components that emit raw whitespace, etc.). The second is the create-astro updates that extend the AGENTS.md content with per-template notes; the scaffold currently only writes the same generic Astro context for every template, and the team has hinted that template-specific notes will follow in create-astro@5.2.0.



