Astro 7.0.0 Stable Ships Vite 8, Makes the Rust Compiler Default, Adds a Background Dev Server for AI Coding Agents, and Promotes Route Caching, Advanced Routing, and Sätteri to First-Class

Astro 7.0.0 Stable Ships Vite 8, Makes the Rust Compiler Default, Adds a Background Dev Server for AI Coding Agents, and Promotes Route Caching, Advanced Routing, and Sätteri to First-Class

lschvn

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 --background to start the server as a background process explicitly.
  • astro dev stop to shut the running server down.
  • astro dev status to check whether a server is running and read the URL, PID, and uptime.
  • astro dev logs (with -f to 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.

Frequently Asked Questions

Oxc v0.137 Teaches the Minifier to Treeshake Pure Typed Arrays and Set/Map Literals, Lands an Incremental Scoping Refresh, and Fixes a React Compiler Edge Case

Oxc release crates_v0.137.0, published on 2026-06-18, ships two new minifier passes (treeshake pure typed arrays and Set/Map array literals via #23469, and inline const values for read-only vars via #22593), a long-running incremental scoping refresh that retires the LiveUsageCollector collector entirely (#23197), a friendly parser error for adjacent JSX elements (#23378), a React Compiler bug fix for computed-key imports (#23586), and two breaking changes to the ESTree config API (#23573, #23574). The minifier pass list also gets a Proxy-aware object-introspection fix (#23483) and a new Map/WeakSet/WeakMap preservation rule for string arguments (#23470). v0.137 is the first crates release since v0.135 on 2026-06-08 and the second since Bun's native React Compiler integration landed on 2026-06-20.

Oxlint v1.71 and Oxfmt v0.56 Ship the v0.137 Crates Wins, Land 18 New Linter Rules, and Tame React Lifecycle Traversal with a Streamed-Iterator Refactor

Oxlint apps_v1.71.0 and oxfmt apps_v0.56.0, both published on 2026-06-22, close out the v0.137 crates cycle. Oxlint v1.71 picks up the new treeshaking pure typed arrays minifier pass (#23469), the prefer-query-selector compound selector fix, 28 lint bug fixes (most of them Yunfei He's fixer-rewrite work), 13 performance entries anchored on a bucketed rule dispatch refactor (#23450, #23452, #23482-#23486, #23489, #23492), and the oxlint Tokio-on-LSP-only startup (#23447). Oxfmt v0.56.0 ships 9 bug fixes (CRLF normalization for `// @ts-ignore` suppressed text in #23701 and #23702, the member-chain panic fix #23698, the default-export-with-type-cast preservation #23697) and 3 formatter performance entries that remove arena copies on bigint, numeric-literal, and string-literal text. v1.71 is the first apps release since v1.70.0 on 2026-06-15, and the last one before the v0.138 crates release that will land on Monday 2026-06-29.

Related articles

More coverage with overlapping topics and tags.

Astro 7.0.0-beta.6 Stabilizes Route Caching and Promotes JSX Whitespace Compression to Default
frameworks

Astro 7.0.0-beta.6 Stabilizes Route Caching and Promotes JSX Whitespace Compression to Default

Astro 7.0.0-beta.6 (June 19, 2026) promotes the experimental route caching API to top-level stable, dropping the experimental.cache and experimental.routeRules flags in favor of a new top-level cache config and a cache helper. Beta.5 (June 18) made 'jsx' the default compressHTML mode, changing the rendered output of every site that relied on the legacy whitespace preservation. Beta.6 also pulls in @astrojs/markdown-satteri 0.3.1-beta.2.
React Router v8 Graduates Its Future Flags to Defaults, Goes ESM-Only, and Drops `react-router-dom`
frameworks

React Router v8 Graduates Its Future Flags to Defaults, Goes ESM-Only, and Drops `react-router-dom`

React Router v8.0.0 (June 17, 2026) is the first major release under the project's Open Governance model and the first on a planned yearly cadence. Every `future.v8_*` flag from v7 is now the default (always-on middleware, pass-through requests, the Vite Environment API, route-module splitting), the baseline moves to Node 22.22+, React 19.2.7+, and Vite 7+, all packages ship ESM-only with an ES2022 target, `react-router-dom` is removed, and the node adapters switch to a Remix-maintained fetch server while `create-react-router` drops its fetch polyfill for native `fetch`.
OpenAI Codex 0.141 Adds Noise-Encrypted Remote Executors, Cross-OS `PathUri`, a Plugin Marketplace, and a SQLite WAL-Reset Pin
ai

OpenAI Codex 0.141 Adds Noise-Encrypted Remote Executors, Cross-OS `PathUri`, a Plugin Marketplace, and a SQLite WAL-Reset Pin

Codex 0.141.0 (June 18, 2026) makes Noise IK the default transport between orchestrator and exec-server, ships a PathUri / NativePathString layer that round-trips POSIX, Windows-drive, and UNC paths without leaking the URI encoding, opens a `created-by-me-remote` plugin marketplace, raises the MCP tool timeout to 300 seconds, and pins the bundled SQLite to 3.51.3 to keep the WAL-reset corruption fix in place after dependency refreshes.

Comments

Log in Log in to join the conversation.

No comments yet. Be the first to share your thoughts.