AstroEco is Releasing…
Display your GitHub releases using astro-loader-github-releases
Patch Changes
-
#4264
94e0985Thanks @chrispezza! - Fixes a layout shift where the table of contents could be painted at the start of the content area and then jump to the end when a page's HTML arrived in several chunks -
#4285
6f22eddThanks @tunetheweb! - Improves hero image loading by addingfetchpriority="high"hint for browsers

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.
-
Updated dependencies []:
- @astrojs/markdown-satteri@0.4.5

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.
-
Updated dependencies [
cf27e70]:- @astrojs/prism@4.1.1

Patch Changes
-
#18422
07700d4Thanks @cyface! - Fixes the/_imageendpoint returning a 500 error whenhrefpoints to a missing file or a file that isn't an image. It now responds with a 404 or 400 instead. -
#18465
f31f143Thanks @astro-factory! - Fixes a customsrc/fetch.tsrendering truncated pages without islands or hoisted scripts inastro devwhenprerenderEnvironment: 'node'is set -
#18461
8b77891Thanks @astro-factory! - Fixes options passed tosharpImageService()being ignored when generating images at build time withimageService: 'compile' -
#18468
119263aThanks @astro-factory! - Fixesastro sync,astro check, andastro buildoverwriting the dependency cache of a runningastro devserver, which caused it to fail with "The file does not exist ... in the optimize deps directory" errors -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.4

Patch Changes
-
#18430
dda9ec3Thanks @Abhirup-99! - Speeds up content sync withexperimental.collectionStorage: "chunked"by computing each character's UTF-8 width from its code point instead of encoding every character throughTextEncoder. On a store of ~44k entries this cuts the chunking step from about 60 seconds to well under a second, with byte-identical output. -
#18438
5e0eaa4Thanks @astro-factory! - Fixesastro devwith@astrojs/cloudflarefailing withCalling `require` for "node-fetch"when a server dependency such ascross-fetchrequiresnode-fetch -
#18376
a4e201dThanks @okxint! - Fixesastro devtreating a stale lock file containing a Linux thread ID as a running Astro server. A successful process lookup with no matching PID now marks the lock as stale, preventingastro dev stopandastro dev --forcefrom killing the unrelated process that owns the thread. -
#18467
d1fb7d3Thanks @astro-factory! - Fixes thedefineConfig()types fori18n.defaultLocale,i18n.fallback, andi18n.domainsso they accept a custom locale'spathinstead of itscodes, matching how Astro validates and uses these values -
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.
-
#18451
7a0ba6fThanks @DenisCDev! - Fixesastro sync,astro checkandastro buildreplacing the optimized dependencies of a dev server running in the same project, which broke framework islands in that dev server until it was restarted with--force -
#18336
e943003Thanks @astro-factory! - Fixes inline styles in dev so that framework-transformed CSS is used, such as scoped styles andv-bind()in Vue single-file components -
#18399
829fc00Thanks @astro-factory! - Fixes a dev server error (Could not find server component name) for aserver:deferisland that importsastro:actionsorastro:config/server, when its page was not the first island page loaded after starting the server -
#18330
4db9e0dThanks @Samuteg! - Fixes theastro:env/servervirtual module being generated with invalid JS in dev when any environment variable contains$replacement patterns ($`,$&,$',$1, …). The inlined env JSON was passed as a string toString.replace, so e.g. theKITTY_PUBLIC_KEYvalue set by default in Kitty terminals corrupted the module and broke dev withFailed to parse source for import analysis -
Updated dependencies [
cf27e70]:- @astrojs/telemetry@3.4.1
- @astrojs/markdown-satteri@0.4.5

Patch Changes
- Updated dependencies [
cf27e70]:- @astrojs/prism@4.1.1

Patch Changes
- Updated dependencies [
cf27e70]:- @astrojs/prism@4.1.1

Patch Changes
- #18455
7af66fcThanks @astro-factory! - Fixes theastro-checkbinary ignoring its first two command-line arguments, so flags such as--help,--root,--watch, and--tsconfigare respected again. If your scripts padded the arguments to work around this (for example,astro-check -- -- --tsconfig ./tsconfig.app.json), remove the padding. - Updated dependencies [
044148d]:- @astrojs/language-server@2.17.3

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.
-
#18466
d7f5c54Thanks @astro-factory! - Fixes@astrojs/upgrade [version]ignoring an exact version number (for examplenpx @astrojs/upgrade 7.3.8) and upgrading to the latest release instead

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
- #18460
044148dThanks @Princesseuh! - Speeds upastro checkby skipping a 10 ms editor-cancellation wait that ran before checking each file

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.


Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
-
#18475
cf27e70Thanks @ematipico! - Bumps the minimum supported Node.js version to 22.23.4, which includes the fixes from the October 2026 Node.js security releasesThis is a patch release because the Node.js support and upgrade policy allows the Core team to raise the minimum Maintenance LTS version in a patch release when a disclosed and fixed Node.js security flaw affects Astro.

Patch Changes
- #18462
f170236Thanks @ematipico! - Updates the@cloudflare/vite-pluginto the latest. The dependency isn't pinned anymore.

Patch Changes
-
#18450
2938cdbThanks @ematipico! - Updates the peer dependency ofastroto7.4.0. You no longer need to install7.4.0-betaanymore. -
#18450
2938cdbThanks @ematipico! - Updates@cloduflare/vite-pluginto2.0.0-beta.v.1. -
#18196
e6a2e90Thanks @swissky! - Fails the build with a migration hint when a project has awrangler.json,wrangler.jsonc, orwrangler.tomlfile but nocloudflare.config.ts. Previously the build succeeded and the Worker name, bindings, and entrypoint from the Wrangler file were silently ignored. Runnpx cf migrate --bundler viteto generatecloudflare.config.tsfrom your existing Wrangler configuration.

Patch Changes
- #18398
9731465Thanks @ump45nose! - Fixes Vue SSR concatenating Astro slot HTML character by character when the slot value is a String object (Astro's SlotString). StaticHtml now coerces the value withString(...)before passing it toinnerHTML.



Patch Changes
- #18351
9669d81Thanks @astro-factory! - FixesCannot find package 'prismjs'errors whenprismjsisn't hoisted, such as with pnpm's global virtual store orhoist=false - Updated dependencies []:
- @astrojs/underscore-redirects@1.0.4

Patch Changes
-
#18445
d736df7Thanks @astro-factory! - Fixes the--preserveWatchOutputhelp text, which described the opposite of the flag's behavior. Setting it totruekeeps output between checks in watch mode. -
#18444
c55134cThanks @astro-factory! - Fixesastro check --watchexiting immediately when the project path containsnode_modulesor.git

Patch Changes
-
#18425
6fdc36eThanks @astro-factory! - Preserves the last modified date of cached optimized images and incrementally restored build output when copying them into the build output on all platforms -
#18419
395d195Thanks @astro-factory! - Fixes a typo in the error message shown when a fontcssVariableis invalid -
#18401
484822fThanks @danielmlr! - Fixes a bug where projects whose path contains an apostrophe (') failed to load sessions, middleware, a cache provider, or asrc/fetch.tshandler -
#18407
a6e00beThanks @astro-factory! - Fixes aTSCONFIG_ERRORduringastro buildwhen a parent directory contains atsconfig.jsonthat cannot be resolved, such as one extendingastro/tsconfigs/strictwithout installed dependencies -
#18427
908f167Thanks @astro-factory! - Fixes anUnterminated stringbuild error when application code imports fromastro/config(for example,fontProvidersin a shared fonts module) -
#18428
40e7d54Thanks @astro-factory! - Fixes missing styles in production builds for conditionally rendered framework components (e.g. Svelte components inside{#if}blocks) imported by a hydrated island -
#18424
617ff59Thanks @astro-factory! - Fixes style-only HMR in.astrocomponents falling back to a full page reload when a PostCSS plugin (such as@unocss/postcss) lists the component as a dependency of its own style -
#18274
70834bbThanks @Princesseuh! - Fixes increasing memory usage when editing the Astro configuration while the dev server is running

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.

Patch Changes
- Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.

Patch Changes
- #18335
7526077Thanks @lx3133584! - Fix silent exit with code 0 on EADDRINUSE in standalone mode - Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0

Patch Changes
- Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0
- @astrojs/underscore-redirects@1.0.4

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.
Patch Changes
- Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0
- @astrojs/markdown-satteri@0.4.4

Minor Changes
-
#18177
7d814e5Thanks @Princesseuh! - Updates image handling for Astro 7.4. Requiresastro@^7.4.0 -
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.
Patch Changes

Minor Changes
-
#18177
7d814e5Thanks @Princesseuh! - Reworks image processing on prerendered pages to use Astro's built-in image pipeline. Requiresastro@^7.4.0Images on prerendered pages now behave the same as on other adapters. Images optimized with the Cloudflare Images binding are now properly cached between builds, and image options such as
assetQueryParamsandbuild.assetsPrefixare applied the same way as everywhere else.
Patch Changes
- Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0
- @astrojs/underscore-redirects@1.0.4

Minor Changes
-
#17894
b7a1bd9Thanks @Princesseuh! - Adds a new--timingsflag toastro buildto help you find what slows down your buildsWhen a build takes longer than expected, it can be hard to tell whether the cause is an integration, a Markdown processor plugin, image processing, or even syntax highlighting. Add the
--timingsflag to your build command to print a summary once the build finishes:astro build --timings
This is helpful to decide what to optimize first, or to compare build times before and after a change to your project.
-
#17830
a937b0dThanks @florian-lefebvre! - Adds a new optionalgetFontProperties()callback to font providersFont providers can now expose the weights, styles, subsets and formats a font family actually has. Astro uses it when resolving your font configuration to warn about values a provider cannot serve, for example a weight a font family does not offer.
All built-in providers implement it. If you maintain a custom font provider, implementing this callback is optional for now but it will be required in Astro 8:
import type { FontProvider } from 'astro'; const provider: FontProvider = { name: 'my-provider', resolveFont: ({ familyName }) => { // ... }, getFontProperties: ({ familyName }) => ({ weights: ['400', '700'], styles: ['normal', 'italic'], subsets: ['latin'], formats: ['woff2'], }), };
-
#17830
a937b0dThanks @florian-lefebvre! - Adds afetch()function to the font providerinit()contextThis function requests a provider API, retrying transient failures and more. It lets providers that wrap a 3rd-party unifont provider pass the context to it directly:
import type { FontProvider } from 'astro'; import type { InitializedProvider } from 'unifont'; import { acmeProvider } from '@acme/unifont-provider'; export function acmeFontProvider(): FontProvider { const provider = acmeProvider(); let initializedProvider: InitializedProvider | undefined; return { name: provider._name, async init(context) { initializedProvider = await provider(context); }, // ... }; }
-
#18015
0b30239Thanks @florian-lefebvre! - Addsexperimental.redirectPage, letting you provide your ownsrc/pages/3xx.astroin place of the redirect page Astro generates in static builds.A static site has no server to send an HTTP
Locationheader, so Astro generates a small HTML page with a<meta http-equiv="refresh">tag for each redirect it builds:- Your
redirectsentries Astro.redirect()calls in prerendered pages- i18n redirects
That page's markup, wording, and refresh delay were fixed, so you could not brand or translate it.
To enable this feature, add the experimental flag to your Astro config:
// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ experimental: { redirectPage: true, }, });
Then create
src/pages/3xx.astro. Astro renders it once per redirect, passing that redirect's details as props:--- // src/pages/3xx.astro import type { RedirectPageProps as Props } from 'astro'; const { from, to, status, delay } = Astro.props; --- <html lang="en"> <head> <meta http-equiv="refresh" content={`${delay};url=${to}`} /> <meta name="robots" content="noindex" /> <title>Redirecting…</title> </head> <body> <p>This page has moved. <a href={to}>Continue to {to}</a>.</p> </body> </html>
Your page must render a
<meta http-equiv="refresh">tag pointing atto, because in a static build that tag is the redirect. Astro logs a warning during the build if it is missing.See the experimental redirect page documentation for more information.
- Your
-
#18265
910ee69Thanks @astro-factory! - Adds anotFound()handler toastro/fetchandastro/honothat renders the custom 404 page when no route matches, including a prerendered404.astroAdd it before
pages()in a custom worker or server entrypoint that does not run insideApp.render, such as a Hono app used directly as a Cloudflare worker. Without it,pages()andmiddleware()return an empty 404 with an internalX-Astro-Errorheader for unmatched routes.astro()already includes this handling.import { Hono } from 'hono'; import { notFound, pages } from 'astro/hono'; import { cf } from '@astrojs/cloudflare/hono'; const app = new Hono(); app.use(cf()); app.use(notFound()); app.use(pages()); export default app;
-
#18177
7d814e5Thanks @Princesseuh! - Adds support for separatebuildandruntimeimage servicesimage.servicenow also accepts abuildand aruntimeservice. Thebuildservice optimizes images on prerendered pages when you build your site, and is also used during development. Theruntimeservice handles images on on-demand rendered pages and the image endpoint of your deployed site.The following example uses Sharp to optimize images on prerendered pages, and an image CDN for on-demand rendered pages:
// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ image: { service: { build: { entrypoint: 'astro/assets/services/sharp' }, runtime: { entrypoint: 'my-image-cdn-service' }, }, }, });
Changes for integration authors
config.image.servicekeeps the shape the user configured it with. When a project setsbuildandruntimeservices,config.image.service.entrypointandconfig.image.service.configareundefined.If your integration reads
image.service, check for theruntimeproperty to get the service you need:'astro:config:done': ({ config }) => { const { service } = config.image; const runtimeService = 'runtime' in service ? service.runtime : service; if (runtimeService.entrypoint === 'astro/assets/services/sharp') { // ... } },
Setting
image.servicewithupdateConfig()replaces the existing service instead of merging with it when the two use different shapes. For example, setting a single service in a project that usesbuildandruntimeservices replaces both. -
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.
-
#18313
71e2b24Thanks @matthewp! - Allows integrations to control where Astro writes client, server, and prerender build output.Custom prerenderers can access the final output locations through the new
outputDirectoriescontext:setPrerenderer((defaultPrerenderer, { outputDirectories }) => { const { client, server, prerender } = outputDirectories return createPrerenderer({ defaultPrerenderer, client, server, prerender, }) })
-
#18177
7d814e5Thanks @Princesseuh! - Lets custom prerenderers report the images used on prerendered pagesAstro now generates images on prerendered pages from the image information that a prerenderer's
getStaticPaths()andrender()return. If your prerenderer wraps Astro's default one, pass this information through:setPrerenderer((defaultPrerenderer) => ({ name: 'my-prerenderer', async setup() { await defaultPrerenderer.setup?.(); }, async getStaticPaths() { const result = await defaultPrerenderer.getStaticPaths(); const { paths, metadata } = Array.isArray(result) ? { paths: result } : result; return { paths: paths.filter(({ pathname }) => !pathname.startsWith('/drafts')), metadata }; }, render(request, options) { return defaultPrerenderer.render(request, options); }, async teardown() { await defaultPrerenderer.teardown?.(); }, }));
Returning a plain array from
getStaticPaths()or a plainResponsefromrender()still works, but is deprecated: images used on those pages are not generated. -
#17932
b905ff1Thanks @Princesseuh! - Adds support for experimental parallel prerenderingThis experimental feature makes
astro buildrender your static pages in parallel, using multiple CPU cores at once instead of one. On sites with many pages, this can significantly reduce build times, at the cost of higher memory usage.To enable this feature, add the experimental flag in your Astro config:
// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ experimental: { parallelPrerender: true, }, });
By default, Astro uses all available CPU cores but one. Each additional worker increases the memory used by your build. If your build runs out of memory, or does not get faster, set
workersto a lower number:// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ experimental: { parallelPrerender: { workers: 4, }, }, });
Each worker renders as many pages at once as your
build.concurrencysetting allows.This feature has no effect when your adapter provides its own way of prerendering pages. Among official adapters, this only applies to
@astrojs/cloudflare. Astro logs a warning during the build when the flag is ignored.For more information on enabling and using this feature in your project, see the experimental parallel prerendering docs.
Patch Changes
-
#18313
71e2b24Thanks @matthewp! - Fixes deployment integrations being unable to use Vite manifests when preparing build output -
#18270
0c3bf11Thanks @ArmandPhilippot! - Fixes the JSDoc for CSP utilities to point to the render context reference in docs. -
#18368
1f04637Thanks @43081j! - Replaces internal use offind-procwithtinyps. -
#18355
59b9cc0Thanks @matthewp! - Fixes prerender errors being silently swallowed when using a customsrc/fetch.tswith an adapter that prerenders in its own runtime, such as@astrojs/cloudflare. Previously, a page that threw during prerendering was written as an empty HTML file and the build succeeded. The build now fails with the underlying error. -
#18177
7d814e5Thanks @Princesseuh! - Fixes original images being kept despite onlywidthorheightbeing read. -
#18353
af54bfaThanks @astro-factory! - Fixesglob()loader swallowing rendering errors during content sync, which allowedastro buildto exit successfully (code 0) even when a remark/rehype plugin threw an error -
#18271
23e8e28Thanks @ArmandPhilippot! - Fixes thesynccommand description inastro help, which only mentioned content collections. -
Updated dependencies [
b7a1bd9,2715958]:- @astrojs/internal-helpers@0.13.0
- @astrojs/markdown-satteri@0.4.4
- @astrojs/telemetry@3.4.0

Patch Changes
- #17894
b7a1bd9Thanks @Princesseuh! - Adds the measurements thatastro build --timingsreports for Markdown processing and syntax highlighting. - Updated dependencies [
b7a1bd9,2715958]:- @astrojs/internal-helpers@0.13.0
- @astrojs/prism@4.1.0

Patch Changes
- #17894
b7a1bd9Thanks @Princesseuh! - Adds the measurements thatastro build --timingsreports for Markdown processing and syntax highlighting. - Updated dependencies [
b7a1bd9,2715958]:- @astrojs/internal-helpers@0.13.0
- @astrojs/prism@4.1.0

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.
Patch Changes
- Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0

Minor Changes
-
#18389
c96d07eThanks @renovate! - Adds support for Preact v11 -
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.
Patch Changes
- Updated dependencies [
b7a1bd9]:- @astrojs/internal-helpers@0.13.0

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.

Minor Changes
- #17894
b7a1bd9Thanks @Princesseuh! - Adds the measurements thatastro build --timingsreports for Markdown processing and syntax highlighting.

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.
Patch Changes
- #18218
acc0460Thanks @KTrain5169! -create-astrono longer places aCLAUDE.mdin projects, as Claude Code now supportsAGENTS.md.

Minor Changes
-
#18277
2715958Thanks @florian-lefebvre! - Increases the minimum Node.js version to 22.22.0The minimum supported Node.js version is now 22.22.0, the latest Node.js 22 release supported by StackBlitz. This change is in line with Astro's Node.js support policy.

Patch Changes
- #18339
fcc050cThanks @astro-factory! - Fixes on-demand routes failing with "Cannot find native binding" on Vercel, caused by the serverless function loadingrolldownat runtime
Patch Changes
-
#4252
40a2584Thanks @olafur-andri! - Adds Icelandic language support -
#4229
e4a3d82Thanks @HiDeoo! - Fixes a potential issue with icons being cut off in Firefox when pinch-zooming. -
#4226
fb562ddThanks @HiDeoo! - Fixes an issue where pages not importing components from@astrojs/starlight/componentsincluded styles of Starlight components used on other pages. -
#4250
531af7dThanks @HiDeoo! - FixesFailed to resolve dependencywarnings logged when running the development server in projects using the Cloudflare adapter. -
#4229
e4a3d82Thanks @HiDeoo! - Fixes thecodePenandnodeicons slightly extending beyond their bounding box.

Patch Changes
- #18263
882dd98Thanks @florian-lefebvre! - Refactors internal bundling and code transforms to use Vite's Oxc-basedtransformWithOxcand Rolldown instead of esbuild. These packages no longer depend on esbuild directly.

Patch Changes
- #18263
882dd98Thanks @florian-lefebvre! - Refactors internal bundling and code transforms to use Vite's Oxc-basedtransformWithOxcand Rolldown instead of esbuild. These packages no longer depend on esbuild directly. - Updated dependencies []:
- @astrojs/underscore-redirects@1.0.4

Patch Changes
- #18263
882dd98Thanks @florian-lefebvre! - Refactors internal bundling and code transforms to use Vite's Oxc-basedtransformWithOxcand Rolldown instead of esbuild. These packages no longer depend on esbuild directly.

Patch Changes
- #18263
882dd98Thanks @florian-lefebvre! - Refactors internal bundling and code transforms to use Vite's Oxc-basedtransformWithOxcand Rolldown instead of esbuild. These packages no longer depend on esbuild directly.

Patch Changes
- #18263
882dd98Thanks @florian-lefebvre! - Removes the automaticallowScriptsandallowBuildspre-approval from generated projects. Astro's dependencies no longer run install scripts, so the workaround is no longer needed.

Patch Changes
-
#18293
28e7410Thanks @astro-factory! - FixesAstro.cachebeingundefinedwhen a custom 404 or 500 page is rendered by the error handler, for example after a request to an API route with an HTTP method the route doesn't export -
#18298
0e9e857Thanks @matthewp! - Fixesastro addremoving existingallowBuildsapprovals frompnpm-workspace.yamlwith pnpm v11.0–v11.22 -
#18263
882dd98Thanks @florian-lefebvre! - Refactors internal bundling and code transforms to use Vite's Oxc-basedtransformWithOxcand Rolldown instead of esbuild. These packages no longer depend on esbuild directly. -
#18290
31f13c3Thanks @astro-factory! - Fixes theglob()loader not reloading changed files in dev when the pattern starts with an extglob such as!(drafts)/**/*.md

Patch Changes
- #18180
6fb83daThanks @matthewp! - Fixes Netlify Image CDN patterns generated fromimage.remotePatternspathnames ending in/**so they only match paths below that directory, consistent with Astro's own pattern matching. Previously, a pattern like/public/**also matched sibling paths sharing the prefix, such as/public-assets/. - Updated dependencies []:
- @astrojs/underscore-redirects@1.0.4

Patch Changes
- #18110
ffdf774Thanks @Princesseuh! - Fix organize imports for Astro files whose frontmatter ends with imports.

Patch Changes
-
#18266
cba76ccThanks @astro-factory! - Fixes a build error when a Markdown content collection entry loaded withglob({ deferRender: true })has alayoutfrontmatter property.layoutis now ignored for content collection entries, as documented. -
#18287
38f6793Thanks @astro-factory! - Fixesastro add cloudflarefailing to install dependencies with pnpm v11+ by approving theworkerdbuild script, and shows the package manager's error output whenastro addfails to install dependencies -
#18222
fcf6ed6Thanks @mingjunlu! - Fixes an issue where AVIF images were served asimage/heifinstead ofimage/avifin the dev server. -
#18240
de4df06Thanks @astro-factory! - Fixes thecache()handler fromastro/honoandastro/fetchthrowing aTypeErrorwhen a cache provider is configured. It now registers the cache provider before rendering, soAstro.cacheis available to downstream handlers likepages(). -
#18268
547b572Thanks @astro-factory! - Fixessecurity.checkOriginrejecting cross-origin requests with non-form content types such asapplication/json. As documented, the check only applies to unsafe requests that have nocontent-typeheader or one ofapplication/x-www-form-urlencoded,multipart/form-data, ortext/plain.

Patch Changes
- #18254
36f3a0cThanks @astro-factory! - Fixes middleware rewrites returning 404 instead of 200 when the 404 page is server-rendered - Updated dependencies [
6987261,62b13ba]:- @astrojs/internal-helpers@0.12.0






Patch Changes
-
#18099
6987261Thanks @renovate! - Adds YAML parsing with timestamp and merge key support, and formats YAML errors consistently across Astro, Markdown, MDX, and Markdoc. -
#18139
d047b5cThanks @breken-ai! - Fixes Markdown code blocks with languages ending in a symbol, such asc#,c++, andf#, being highlighted ascorf -
Updated dependencies [
6987261,62b13ba]:- @astrojs/internal-helpers@0.12.0





Patch Changes
- #18210
62b13baThanks @edmundhung! - Allows Astro CLI commands to install tagged package versions






Patch Changes
-
#4149
fa10e87Thanks @ematipico! - Optimizes rendering of large nested sidebars -
#4215
f791de6Thanks @HiDeoo! - Adds a newseti:coffeeicon for CoffeeScript files in the<FileTree>component. -
#4215
f791de6Thanks @HiDeoo! - Fixes<FileTree>icons for.ejsandnpm-debug.logfiles displaying the default file icon.

Patch Changes
- #18036
f4444ebThanks @astro-factory! - Fixes an incompatibility where@astrojs/mdxv8 could be installed withastroversions that bundle an older@astrojs/markdown-satterilacking MDX support. Also improves the error message when the processor is too old to suggest updatingastroitself. - Updated dependencies [
3fd16ee,8358d59]:- @astrojs/markdown-satteri@0.4.2

Patch Changes
-
#17946
3fd16eeThanks @odysseus0! - Fix syntax highlighting for fenced code blocks when raw HTML is enabled. -
#18046
8358d59Thanks @Princesseuh! - FixessatteriHeadingIdsPluginsharing Slugger state across documents when reused as a user hast plugin, which caused headings with the same text in different posts to receive incorrect numeric suffixes

Minor Changes
- #18050
cea7da5Thanks @Princesseuh! - Adds the initial release of the TypeScript content mapper for Astro files.


Major Changes
-
#17951
e5b0ac4Thanks @hanford! - Migrates the React integration to@vitejs/plugin-reactv6, using Oxc for JSX and Fast Refresh. Removes thebabelintegration option; projects with custom Babel transforms must configure@rolldown/plugin-babelundervite.pluginsinstead.Adds an opt-in
compileroption for the Oxc-based React Compiler. Installoxc-transform-reactand enable it in your Astro config:import react from '@astrojs/react'; export default { integrations: [react({ compiler: true })], };
The compiler memoizes client components and hooks. Server rendering is not compiled. The target defaults to the installed React major version; React 17 and 18 projects also need
react-compiler-runtimeinstalled. Pass an options object to configure the compiler, for examplecompiler: { compilationMode: 'annotation' }. The integration'sincludeandexcludeoptions apply, and dependencies and Astro files are excluded.Migrating custom Babel transforms
The integration uses
@vitejs/plugin-reactv6 and Oxc for JSX and Fast Refresh. Thebabelintegration option has been removed in this major release.If you use custom Babel transforms, install
@rolldown/plugin-babeland@babel/core, keeping your existing Babel plugins and presets installed:pnpm add -D @rolldown/plugin-babel @babel/core
Move your Babel plugins and presets from
react({ babel: ... })tobabel()invite.plugins. For example, migrate a project usingbabel-plugin-styled-componentsfrom:import react from '@astrojs/react'; import { defineConfig } from 'astro/config'; export default defineConfig({ integrations: [react({ babel: { plugins: ['babel-plugin-styled-components'] } })], });
To:
import react from '@astrojs/react'; import babel from '@rolldown/plugin-babel'; import { defineConfig } from 'astro/config'; export default defineConfig({ integrations: [react()], vite: { plugins: [ babel({ plugins: ['babel-plugin-styled-components'], }), ], }, });
This also works with
react({ compiler: true }). Babel runs before Oxc transforms TypeScript and JSX. The Babel plugin automatically enables parsing for.jsx,.ts, and.tsxfiles. It does not loadbabel.config.jsor.babelrcfiles; pass the options directly tobabel(). The oldbabelcallback is not supported; use the plugin'soverridesand preset hooks for conditional transforms.Do not enable
babel-plugin-react-compileron the same components as the Oxc compiler.

Patch Changes
- #4211
33e21ecThanks @HiDeoo! - Fixes a potential page freeze due to table of contents highlighting when a<PageTitle>component override does not render a heading with the requiredid="_top".

Patch Changes
- #17985
7a6e7f7Thanks @astro-factory! - Fixes Vue render-function components failing to build when@astrojs/reactis also enabled. React's renderercheckno longer crashes on non-React object components, and Vue'schecknow recognizesdefineComponent()components that use asetupfunction returning a render function.



Minor Changes
-
#17676
49d4294Thanks @Princesseuh! - Improves type checking and editor support for.astrofiles.The language server now uses our all-new Biome powered
astro2tsximplementation. This new version has much better support for incomplete syntax, generic types and various edge cases.In the vast majority of cases, no changes should be required to your code, and any change should be the result of more accurate types or behavior.
Patch Changes


Minor Changes
-
#17676
49d4294Thanks @Princesseuh! - Improves type checking and editor support for.astrofiles.The language server now uses our all-new Biome powered
astro2tsximplementation. This new version has much better support for incomplete syntax, generic types and various edge cases.In the vast majority of cases, no changes should be required to your code, and any change should be the result of more accurate types or behavior.
Patch Changes

Patch Changes
- #17985
7a6e7f7Thanks @astro-factory! - Fixes Vue render-function components failing to build when@astrojs/reactis also enabled. React's renderercheckno longer crashes on non-React object components, and Vue'schecknow recognizesdefineComponent()components that use asetupfunction returning a render function.

Patch Changes
- #17896
a548223Thanks @matthewp! - Fixes<script>/<style>rendering in MDX so that only literal content (including content injected by remark/rehype plugins) is treated as trusted markup. A dynamic value passed as a<script>/<style>child (e.g.<script>{value}</script>) is now escaped like any other element's content instead of being rendered raw. Useset:htmlto explicitly opt a dynamic value back into raw rendering.

Patch Changes
- #17896
a548223Thanks @matthewp! - Fixes<script>/<style>rendering in MDX so that only literal content (including content injected by remark/rehype plugins) is treated as trusted markup. A dynamic value passed as a<script>/<style>child (e.g.<script>{value}</script>) is now escaped like any other element's content instead of being rendered raw. Useset:htmlto explicitly opt a dynamic value back into raw rendering.
Last fetched: | Scheduled refresh: Every Saturday
See Customizing GitHub Activity Pages to configure your own
Inspired by releases.antfu.me