•
6 min read

System Upgrade: Astro 7.4.8

This site’s Astro stack was updated on November 9, 2026, using npx @astrojs/upgrade. Two integrations moved up a major version, @astrojs/mdx and @astrojs/react. Everything else received minor or patch releases. The new Astro release also raises the minimum Node.js version.

What changed

PackageFromToRelease type
astro7.2.07.4.8Minor
@astrojs/mdx7.0.58.1.3Major
@astrojs/react6.0.27.1.5Major
@astrojs/markdown-remark7.3.17.3.6Patch
@astrojs/sitemap3.7.33.7.4Patch
@astrojs/check0.9.100.9.12Patch
@astrojs/rss4.0.194.0.19Unchanged

Node.js 22.23.4 minimum

Astro 7.4.0 raised the minimum supported Node.js version to 22.22.0. Astro 7.4.2 raised it again to 22.23.4, the Node.js 22 LTS release from October 21, 2026, which carries the fixes from the October 2026 Node.js security releases. Astro’s Node.js support policy lets the core team raise the minimum Maintenance LTS version in a patch release when a disclosed Node.js security flaw affects Astro, which is why this bump shipped as a patch. The same minimum applies to @astrojs/mdx 8.1.1 and @astrojs/react 7.1.1.

@astrojs/mdx 8 (major)

  • MDX processing moved to the Markdown processor. @astrojs/mdx is still required for MDX support, but it now hands .mdx files to the configured Markdown processor. Projects without an explicitly installed processor need no changes. Projects using unified() need @astrojs/markdown-remark 7.3.0 or later, and projects using satteri() need @astrojs/markdown-satteri 0.4.0 or later (8.0.0).
  • Deprecated plugin options now warn. The remarkPlugins, rehypePlugins, recmaPlugins, and remarkRehype options still apply under unified(). When a processor does not run them, MDX now logs a warning instead of dropping them silently (8.0.0).
  • extendMarkdownConfig: false uses a clean processor. In that case .mdx files now use a clean default processor instead of markdown.processor (8.0.0).
  • Patch releases fixed an incompatibility with Astro versions that bundle an older @astrojs/markdown-satteri and improved the error message that points to updating astro (8.0.2), and added YAML timestamp and merge key support (8.0.3).

@astrojs/react 7 (major)

  • Oxc replaces Babel. The integration now uses @vitejs/plugin-react v6, with Oxc handling JSX and Fast Refresh. The babel option on react() is removed. Custom Babel transforms move to @rolldown/plugin-babel under vite.plugins (7.0.0).
  • Opt-in React Compiler. react({ compiler: true }) enables the Oxc-based React Compiler, which memoizes client components and hooks. It requires oxc-transform-react. Server rendering is not compiled (7.0.0).
  • Patch releases fixed duplicate React.useId() values when experimentalDisableStreaming is enabled (7.1.2), preserved component-rendered stylesheet, preload, and modulepreload links in React island output (7.1.3), and widened the oxc-transform-react peer dependency range (7.1.5).

astro 7.2.0 to 7.4.8

7.3.0

  • astro preview --ignore-lock allows several preview servers to run at once on different ports.
  • Custom image services and cache providers receive Astro’s runtime logger.
  • Builds are faster for sites with many pages coming from many different modules.
  • i18n fallback routes keep the correct path when the locale code also starts a later path segment.

7.3.3

  • svgo updated to 4.0.2 to resolve a security advisory.

7.4.0

  • astro build --timings prints a summary after the build to show what slows it down, such as integrations, Markdown processor plugins, image processing, or syntax highlighting.
  • Experimental parallel prerendering (experimental.parallelPrerender) renders static pages across multiple CPU cores.
  • Experimental custom redirect page (experimental.redirectPage) lets src/pages/3xx.astro replace the generated redirect page in static builds.
  • image.service accepts separate build and runtime services.
  • Font providers gain an optional getFontProperties() callback, which Astro uses to warn about font values a provider cannot serve.
  • astro/fetch and astro/hono gain a notFound() handler for custom server entrypoints.
  • Minimum Node.js raised to 22.22.0.

7.4.2

  • Minimum Node.js raised to 22.23.4.

7.4.5

  • String tag names in dynamic .astro tags, JSX, and MDX render more strictly. A string that does not start with a valid element name now throws an error instead of producing invalid HTML.

The remaining releases in this range are patch releases.

@astrojs/markdown-remark 7.3.6

  • YAML frontmatter parsing supports timestamps and merge keys (7.3.2).
  • Code blocks in languages ending in a symbol, such as c#, c++, and f#, highlight with the correct language (7.3.2).
  • Markdown processing and syntax highlighting report measurements to astro build --timings (7.3.3).
  • Prism code blocks in languages Prism does not support, such as vue or svelte, display as plain text, and the language name is escaped in the generated class and data-language attributes (7.3.5).

@astrojs/sitemap 3.7.4

  • The homepage URL keeps its trailing slash (https://example.com/) when trailingSlash is "never" or build.format is "file" (3.7.4).

@astrojs/check 0.9.12

  • The astro-check binary respects flags such as --help, --root, --watch, and --tsconfig again (0.9.12).
  • astro check --watch keeps running when the project path contains node_modules or .git (0.9.11).
  • The --preserveWatchOutput help text matches the flag’s behavior (0.9.11).

Playwright 1.65

playwright and playwright-core moved from 1.63.0 to 1.65.0 with npm update. Running npx playwright install afterward downloaded the browser versions that Playwright 1.65 uses.

BrowserPlaywright 1.63Playwright 1.65
Chromium153.0.8010.12158.0.8127.18
Firefox155.0159.0
WebKit26.627.2
  • 1.64 added page.webmcp for testing tools a page registers through the experimental WebMCP API, custom video frame rates with VP9 encoding, Locator.within(), a --shuffle option, and a default option for test projects. Its breaking changes: device descriptors now pass through their screen setting, JSX in test files follows tsconfig.json, --update-snapshots=missing now passes the run, and elements inside hidden iframes count as hidden.
  • 1.65 runs the test runner under Bun with --bun, adds a failures reporter and an onlyFailures option, and adds an -exclusive- test lock. Its breaking changes include TypeScript class fields following useDefineForClassFields, actions waiting for elements to stop being inert, cookie matching that follows RFC 6265, and proxy credentials no longer being sent to websites. Playwright no longer tests on Node.js 20.

Changelogs and notes