#184256fdc36e Thanks @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
#18419395d195 Thanks @astro-factory! - Fixes a typo in the error message shown when a font cssVariable is invalid
#18401484822f Thanks @danielmlr! - Fixes a bug where projects whose path contains an apostrophe (') failed to load sessions, middleware, a cache provider, or a src/fetch.ts handler
#18407a6e00be Thanks @astro-factory! - Fixes a TSCONFIG_ERROR during astro build when a parent directory contains a tsconfig.json that cannot be resolved, such as one extending astro/tsconfigs/strict without installed dependencies
#18427908f167 Thanks @astro-factory! - Fixes an Unterminated string build error when application code imports from astro/config (for example, fontProviders in a shared fonts module)
#1842840e7d54 Thanks @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
#18424617ff59 Thanks @astro-factory! - Fixes style-only HMR in .astro components 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
#1827470834bb Thanks @Princesseuh! - Fixes increasing memory usage when editing the Astro configuration while the dev server is running
#17894b7a1bd9 Thanks @Princesseuh! - Adds a new --timings flag to astro build to help you find what slows down your builds
When 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 --timings flag to your build command to print a summary once the build finishes:
Terminal window
astrobuild--timings
This is helpful to decide what to optimize first, or to compare build times before and after a change to your project.
Font 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:
This 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:
let initializedProvider:InitializedProvider|undefined;
return {
name: provider._name,
asyncinit(context) {
initializedProvider =awaitprovider(context);
},
// ...
};
}
#180150b30239 Thanks @florian-lefebvre! - Adds experimental.redirectPage, letting you provide your own src/pages/3xx.astro in place of the redirect page Astro generates in static builds.
A static site has no server to send an HTTP Location header, so Astro generates a small HTML page with a <meta http-equiv="refresh"> tag for each redirect it builds:
<p>This page has moved. <ahref={to}>Continue to {to}</a>.</p>
</body>
</html>
Your page must render a <meta http-equiv="refresh"> tag pointing at to, because in a static build that tag is the redirect. Astro logs a warning during the build if it is missing.
#18265910ee69 Thanks @astro-factory! - Adds a notFound() handler to astro/fetch and astro/hono that renders the custom 404 page when no route matches, including a prerendered 404.astro
Add it before pages() in a custom worker or server entrypoint that does not run inside App.render, such as a Hono app used directly as a Cloudflare worker. Without it, pages() and middleware() return an empty 404 with an internal X-Astro-Error header for unmatched routes. astro() already includes this handling.
image.service now also accepts a build and a runtime service. The build service optimizes images on prerendered pages when you build your site, and is also used during development. The runtime service 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:
config.image.service keeps the shape the user configured it with. When a project sets build and runtime services, config.image.service.entrypoint and config.image.service.config are undefined.
If your integration reads image.service, check for the runtime property to get the service you need:
'astro:config:done': ({ config }) => {
const { service } = config.image;
construntimeService='runtime'in service ? service.runtime : service;
if (runtimeService.entrypoint ==='astro/assets/services/sharp') {
// ...
}
},
Setting image.service with updateConfig() 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 uses build and runtime services replaces both.
The 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.
#1831371e2b24 Thanks @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 outputDirectories context:
#181777d814e5 Thanks @Princesseuh! - Lets custom prerenderers report the images used on prerendered pages
Astro now generates images on prerendered pages from the image information that a prerenderer’s getStaticPaths() and render() return. If your prerenderer wraps Astro’s default one, pass this information through:
Returning a plain array from getStaticPaths() or a plain Response from render() still works, but is deprecated: images used on those pages are not generated.
This experimental feature makes astro build render 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';
exportdefaultdefineConfig({
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 workers to a lower number:
astro.config.mjs
import { defineConfig } from'astro/config';
exportdefaultdefineConfig({
experimental: {
parallelPrerender: {
workers: 4,
},
},
});
Each worker renders as many pages at once as your build.concurrency setting 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.
#1835559b9cc0 Thanks @matthewp! - Fixes prerender errors being silently swallowed when using a custom src/fetch.ts with 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.
#181777d814e5 Thanks @Princesseuh! - Fixes original images being kept despite only width or height being read.
#18353af54bfa Thanks @astro-factory! - Fixes glob() loader swallowing rendering errors during content sync, which allowed astro build to exit successfully (code 0) even when a remark/rehype plugin threw an error
#1827123e8e28 Thanks @ArmandPhilippot! - Fixes the sync command description in astro help, which only mentioned content collections.
#1829328e7410 Thanks @astro-factory! - Fixes Astro.cache being undefined when 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
#182980e9e857 Thanks @matthewp! - Fixes astro add removing existing allowBuilds approvals from pnpm-workspace.yaml with pnpm v11.0–v11.22
#18263882dd98 Thanks @florian-lefebvre! - Refactors internal bundling and code transforms to use Vite’s Oxc-based transformWithOxc and Rolldown instead of esbuild. These packages no longer depend on esbuild directly.
#1829031f13c3 Thanks @astro-factory! - Fixes the glob() loader not reloading changed files in dev when the pattern starts with an extglob such as !(drafts)/**/*.md
#18266cba76cc Thanks @astro-factory! - Fixes a build error when a Markdown content collection entry loaded with glob({ deferRender: true }) has a layout frontmatter property. layout is now ignored for content collection entries, as documented.
#1828738f6793 Thanks @astro-factory! - Fixes astro add cloudflare failing to install dependencies with pnpm v11+ by approving the workerd build script, and shows the package manager’s error output when astro add fails to install dependencies
#18222fcf6ed6 Thanks @mingjunlu! - Fixes an issue where AVIF images were served as image/heif instead of image/avif in the dev server.
#18240de4df06 Thanks @astro-factory! - Fixes the cache() handler from astro/hono and astro/fetch throwing a TypeError when a cache provider is configured. It now registers the cache provider before rendering, so Astro.cache is available to downstream handlers like pages().
#18268547b572 Thanks @astro-factory! - Fixes security.checkOrigin rejecting cross-origin requests with non-form content types such as application/json. As documented, the check only applies to unsafe requests that have no content-type header or one of application/x-www-form-urlencoded, multipart/form-data, or text/plain.
#181665134d0f Thanks @astro-factory! - Fixes an intermittent dev server crash when using astro:actions inside a server island with adapters that use a pre-bundled SSR environment (e.g. @astrojs/cloudflare)
#180768a2df66 Thanks @astro-factory! - Fixes stale scoped styles during HMR when both markup and <style> are changed in a single save
#182522d29e7e Thanks @astro-factory! - Fixes CSS from other pages leaking into a page’s <head> in dev when the page imports a module such as astro:config/server.
#180006724575 Thanks @barclayd! - Fixes a bug where server islands containing framework components rendered empty in the dev server when using a custom src/fetch.ts
#182417c5fd6f Thanks @astro-factory! - Fixes the composable i18n() handler from astro/fetch and astro/hono returning an empty 404 for paths without a locale prefix. It now renders the custom 404 page, matching astro().
#181641a6997f Thanks @astro-factory! - Fixes CSS Module HMR in dev when a component is rendered both with and without hydration on the same page. Astro now uses path-based class name hashing in dev mode so that editing CSS declarations no longer changes the generated selectors, allowing Vite’s CSS HMR to update styles without a full page reload.
#18243dd29d62 Thanks @astro-factory! - Fixes context.props being null in middleware and endpoints when the composable astro/hono or astro/fetchactions() handler runs before middleware(), or when pages() runs without middleware()
#1819395d5d16 Thanks @astro-factory! - Fixes astro build failing on Windows with Node.js 25+ with ERR_INVALID_ARG_VALUE when clearing the output directory hits a transient EPERM error
#18220d6c13a4 Thanks @astro-factory! - Fixes type errors reported in Astro’s built-in <Picture /> and <Font /> components when type-checking a project with tsc and @astrojs/ts-content-mapper
#18133faac481 Thanks @astro-factory! - Fixes lost request state when Vite discovers server dependencies during a request in Cloudflare dev mode
#181462af4516 Thanks @astro-factory! - Fixes CSS imported from an injectScript('page') script being dropped during build
#18159e5f8fe0 Thanks @astro-factory! - Fixes a hang when a server:defer component is inside a slot of another component in an MDX content collection entry
#18246c3b42ad Thanks @astro-factory! - Fixes the glob() loader skipping content files whose paths contain # or ?
#18248b97184e Thanks @astro-factory! - Fixes a bug where page routes added with injectRoute() returned a 404 when i18n.routing.prefixDefaultLocale was true and the route path had no locale prefix
#182513415263 Thanks @astro-factory! - Fixes content collection changes being ignored in astro dev after the dev server restarts because of a config change
#18226ad54af0 Thanks @imharjot! - Fixes Astro.cookies.get() returning undefined for request cookies with empty values
#1815537ab0e4 Thanks @astro-factory! - Fixes nondeterministic ordering of the server manifest’s assets array, ensuring builds with identical inputs produce byte-identical output
#180996987261 Thanks @renovate! - Adds YAML parsing with timestamp and merge key support, and formats YAML errors consistently across Astro, Markdown, MDX, and Markdoc.
#1559564e4039 Thanks @qzio! - Improves CSRF protection by taking modern browsers headers into account
#18215941bd5e Thanks @ump45nose! - Fixes a runtime ReferenceError for inlined scripts that import a URL with /* @vite-ignore */.
Astro now inlines scripts after Vite replaces its preload markers, so ignored dynamic imports can remain inline without shipping an unresolved __VITE_PRELOAD__ reference.
#181796caa659 Thanks @matthewp! - Fixes custom View Transition direction names that are not valid CSS identifiers, such as names starting with a digit or containing spaces. These directions now match their animations correctly.
#182507eae39b Thanks @astro-factory! - Fixes a 404 for a CSS file that a dynamic import preloads when the imported module uses a component that is also a hydrated island on the same page
#181767c9d00d Thanks @astro-factory! - Fixes duplicate CSS in production builds when a component is both server-rendered and used with client:only on the same page
#18245492e95f Thanks @astro-factory! - Fixes the composable astro/fetch and astro/hono handlers (trailingSlash(), redirects(), actions(), middleware(), and pages()) so they reject over-encoded request paths with a 400 Bad Request, matching astro(). For these requests, redirects() and actions() return the 400 response instead of undefined, so no redirect is issued and no action runs.
#180780a2ab10 Thanks @manuelgruber! - Fixes Astro.rewrite() and context.rewrite() selecting the wrong route in astro dev when two dynamic routes match the same path
#18069d39eb97 Thanks @astro-factory! - Fixes a dev server dependency scan failure when an .astro file contains a literal <script in frontmatter or a template expression
#18114c17d920 Thanks @matthewp! - Fixes Astro on StackBlitz and other WebContainer environments
#18088cb767f9 Thanks @astro-factory! - Fixes a MODULE_LEVEL_DIRECTIVE warning during build caused by a stale "use astro:head-inject" directive in content collection propagated asset modules
#182472b3f73d Thanks @astro-factory! - Fixes actions returning 500 for malformed JSON request bodies and undecodable action names. A SyntaxError from invalid JSON now returns 400 (BAD_REQUEST), and a URIError from a malformed percent-encoded action name now returns 404 (NOT_FOUND).
1d9e910 Thanks @matthewp! - Validates the Host header against security.allowedDomains when using the Node adapter
#18249c7799a4 Thanks @astro-factory! - Fixes the fontsource font provider to resolve variable fonts when using the “Variable” suffix in the font name (e.g. "Inter Variable")
#18163e48da9d Thanks @astro-factory! - Fixes <video muted> losing its muted state after a ClientRouter navigation in Chrome
#18244f67e7f7 Thanks @astro-factory! - Fixes localized error pages such as src/pages/pt/404.astro returning a 200 status when rendered through the pages() handler from astro/fetch or astro/hono
#18242c5275e3 Thanks @astro-factory! - Fixes experimental_AstroContainer output including dev toolbar data-astro-source-file and data-astro-source-loc attributes when rendering components under Vitest
#177362b8b2e8 Thanks @ematipico! - Adds a new container function called renderComponent(), which renders Astro components with inlined styles and scripts.
Users must import the component with the new ?container query string:
#1806340896ac Thanks @adamchal! - Fixes incremental builds repeatedly rendering unchanged pages when modules or compiled CSS reference bundled assets.
#18053cf5d72f Thanks @Princesseuh! - Improves the astro check error shown for TypeScript 7. The command now explains that TypeScript 7 is not currently supported and provides instructions for experimentally type-checking Astro files with TypeScript 7.1 and @astrojs/ts-content-mapper.
#18086795a7e4 Thanks @ump45nose! - Fix double-escaped ampersands in Markdown image alt and title attributes. The __ASTRO_IMAGE_ round-trip now decodes the numeric (&) and named (&) character references the Markdown processors emit, so an & in an alt or title is escaped exactly once in the final HTML instead of twice.
#180740429805 Thanks @SurefireStudios! - Fix three error names that did not match their documented reference. MissingLocale, MissingIndexForInternationalization and NoManifestAvailable reported names ending in Error in the dev overlay, while their error reference pages are published under the unsuffixed names, so the name shown to users could not be found in the docs.
#180072245837 Thanks @L4XB! - Fixes the dev server re-evaluating the whole server module graph on every request. The astro:head-metadata plugin invalidated its component metadata virtual module from its own transform hook, so each evaluation of that module scheduled the next one. Adapters that run requests outside Vite’s module runner, such as @astrojs/cloudflare, paid for a full re-evaluation of the server graph on every request for the lifetime of the process.
#1809643657c4 Thanks @matthewp! - Fixes domain-based i18n routing to respect security.allowedDomains when selecting a locale from request host headers
#180438a53a8b Thanks @astro-factory! - Fixes image.responsiveStyles emitting invalid object-position CSS values for same-axis keyword pairs (top bottom, left right, etc.)
#18029c08252d Thanks @matthewp! - Runs astro dev and astro preview in the foreground when an AI agent is detected on Windows, allowing the agent to manage the process lifetime. Pass --background explicitly to request an Astro-managed background process. Agent-inferred backgrounding remains enabled on other platforms.
#17651504333c Thanks @sxzz! - Refactors internal version handling to use a smaller, ESM-native dependency
#179420bc5715 Thanks @matthewp! - Returns appropriate 400 and 404 responses from the image endpoint for invalid and missing local image paths
#17700b2222fc Thanks @winklemad! - Fixes Astro.preferredLocaleList returning an empty list when a locale is configured with the object form ({ path, codes }) and the browser sends the code with different casing or an underscore, such as en-US matching a configured en-us
#17941394ff79 Thanks @matthewp! - Fixes astro preview --ignore-lock (and astro dev --ignore-lock) being refused when run from an AI agent environment. The flag now starts the server in the foreground instead of erroring, since agent detection only inferred background mode and was never explicitly requested. An explicit --background combined with --ignore-lock still errors.
#179283277927 Thanks @ArmandPhilippot! - Fixes TypeScript autocompletion for getImage() to suggest all available predefined options.
#179283277927 Thanks @ArmandPhilippot! - Fixes a type error in getImage() options that allowed passing both widths and densities at the same time.
#179432fc7ce9 Thanks @matthewp! - Fixes a WebAssembly error when importing astro:actions in tests that run under @cloudflare/vitest-pool-workers
#180181b5a234 Thanks @astro-factory! - Fixes trailing-slash redirect response body pointing to the incoming URL instead of the redirect target. The location header was correct, but the HTML body (<meta http-equiv="refresh">, <title>, and <a> tag) contained the original request path without the trailing-slash correction or query string.
#17905eaf70fa Thanks @SudoDevStudio! - Fixes custom dev toolbar apps losing their UI after client-side navigation with <ClientRouter />.
#18011558b301 Thanks @astro-factory! - Fixes prerendered Cloudflare pages rendering as [object Object] when nodejs_compat is enabled in wrangler.toml
#17944ba08e35 Thanks @matthewp! - Fixes a regression in astro dev where writes outside the module graph (for example, @astrojs/cloudflare’s .wrangler/state files) invalidated the middleware on every request, causing repeated SSR reloads. Such writes no longer invalidate the middleware.
#17953dbbf10e Thanks @astro-factory! - Fixes a one-time page reload shortly after the first load on cold dev-server starts when a project has framework components imported from MDX content entries. MDX files are now included in the dev dependency pre-bundling scan, so their framework dependencies are bundled up front instead of being discovered (and reloaded for) at runtime.
#179554e8ad9a Thanks @matthewp! - Improves dev server startup time. The content config and dev server app module graphs now begin compiling during server creation without blocking the server from listening. Request handling waits for the shared setup result when needed, cutting astro dev ready time by roughly a third on projects with a content config.
#179980e5478d Thanks @astro-factory! - Fixes SVG <style> elements nested inside <defs> or other container elements not being hashed for CSP
#1799480f9f1d Thanks @astro-factory! - Fixes experimental.incrementalBuild restoring pages with stale CSS after a preprocessor partial changes or missing original images referenced by restored pages
#178898ae6b46 Thanks @ajfAfg! - Fixes a bug where the dev server stripped the configured base from URLs that only share a prefix with it. With base: '/s', requests to /src/... were rewritten to /rc/... and failed, breaking those pages during development.
#17953dbbf10e Thanks @astro-factory! - Fixes CSS HMR for framework components rendered through content entries after ClientRouter navigation
#179700b4dc3a Thanks @matthewp! - Improves serialization of transition animation values in generated CSS
#1799930ef3cb Thanks @astro-factory! - Fixes content collection HMR not updating prerendered pages when an adapter enables a separate prerender environment (e.g. @astrojs/cloudflare with prerenderEnvironment: 'node')
#18002312ab49 Thanks @shoutoutuoadi325! - Fixes redirect targets being corrupted when a dynamic route parameter value contains $ replacement patterns like $&
#17937e294953 Thanks @matthewp! - Fixes a bug where the glob() content loader kept stale entries in the data store after the last file in a collection was deleted. Empty collections are now pruned correctly, and the file watcher is registered in dev so the first file added to an empty collection is picked up without a restart.
#17945750b4db Thanks @matthewp! - Pre-bundles renderer server entrypoints and the default console logger during dev so they are included in the initial optimization pass, preventing a mid-request re-optimization that could crash the dev server on Cloudflare (workerd).
#17896a548223 Thanks @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. Use set:html to explicitly opt a dynamic value back into raw rendering.
#17931c1a6a89 Thanks @astro-factory! - Fixes the dev toolbar returning a 504 “Outdated Optimize Dep” error when a workspace-linked package imports a dependency that Vite’s initial scan did not discover
#1790842e9188 Thanks @astro-factory! - Fixes i18n fallback routing replacing the first substring match instead of the actual locale segment, which mangled paths like /energy/en/about into /esergy/en/about
#179364b92ddc Thanks @astro-factory! - Fixes sessions breaking in dev mode with the Cloudflare adapter when middleware is present
#17767ce7c91f Thanks @astro-factory! - Adds --ignore-lock flag to astro preview, allowing multiple preview servers to run simultaneously on different ports. This is useful for E2E testing workflows (e.g., Playwright) that need to run several preview servers at once.
Custom image services now receive Astro’s runtime logger as an extra argument. Messages logged with it are routed through the destination configured in logger and respect your log level, instead of being written straight to the console:
Custom cache providers now receive Astro’s runtime logger on the context passed to onRequest(). Messages logged with it are routed through the destination configured in logger and respect your log level, instead of being written straight to the console:
importtype { CacheProvider } from'astro';
constprovider:CacheProvider= {
name: 'my-cache',
asynconRequest({ request, url, logger }, next) {
logger.warn(`Skipping cache for ${url.pathname} because the response sets a cookie.`);
returnnext();
},
// ...
};
Astro’s built-in memoryCache() provider now uses this logger for the warnings it emits when it skips caching a response that sets cookies, and when a background revalidation fails.
🐞 Patch Changes
#17818c0b6581 Thanks @florian-lefebvre! - Updates Astro’s remaining internal warnings and errors to be written through the configured logger instead of directly to the console, when possible
#17886e747cba Thanks @matthewp! - Fixes the memory cache provider to skip responses with Vary: Cookie or Vary: *
#17885916b738 Thanks @Princesseuh! - Improves build performance for sites with a large number of pages coming from a large amount of different modules.
#1779515e2deb Thanks @matthewp! - Adds concurrent rendering support for experimental.incrementalBuild, including when using @astrojs/cloudflare
Incremental builds no longer disable caching when build.concurrency is greater than 1. Projects that set build.concurrency: 1 to keep the cache enabled can remove that workaround. Cloudflare builds also reduce serialization overhead for large prerendered pages.
#1787921c34a6 Thanks @matthewp! - Fixes missing styles, links, and scripts from content collection entries rendered inside server islands
#178613193988 Thanks @ethanstoner! - Fixes i18n fallback routes being generated with a corrupted path when the locale code also appears at the start of a later path segment. A page such as src/pages/en/enterprise.astro with fallback: { es: 'en' } produced the route /es/esterprise instead of /es/enterprise, so the fallback never matched the intended URL. Only the leading locale segment is rewritten now.
#17262f8e9458 Thanks @Princesseuh! - Fixes @astrojs/markdown-remark being pinned to an exact version.
#1787410c7e63 Thanks @astro-factory! - Fixes SSR manifest placeholder not being replaced when the server build is minified, which caused a runtime Invalid URL crash at server boot
#178692548abf Thanks @ematipico! - Fixes a case where the logger was improperly initialized at runtime in dev.
#1787876eff3d Thanks @ematipico! - Fixes browser heuristic caching for cached responses that include Last-Modified or ETag validators
#17833413a6e7 Thanks @astro-factory! - Fixes prerender conflict warnings to correctly identify the route that first rendered a duplicate pathname, instead of misattributing the conflict to an unrelated route that merely matches the URL pattern
#17872f7191cc Thanks @jx-grxf! - Fixes Markdown images in content collections rendering an empty srcset attribute when no responsive candidates are generated.
#17755157c500 Thanks @matthewp! - Fixes a bug where editing a content collection entry during astro dev on Windows kept serving stale content until the dev server was restarted. The data store now notifies the dev server directly after each write instead of relying only on the file watcher, which can miss the atomic rename that commits the write on some platforms.
#17846b441180 Thanks @Princesseuh! - Fixes importing .html files not being typed outside of .astro files
#1783132e8b44 Thanks @astro-factory! - Fixes a crash when requesting /index.html against a dynamic page route like [slug].astro
#17841c35448e Thanks @astro-factory! - Fixes SSR manifest containing stale entryModules references to prerender-only chunks that no longer exist in the final build output
#17847eb87a23 Thanks @matthewp! - Fixes set:text escaping in MDX script and style elements
#17772023b48b Thanks @matthewp! - Fixes route selection for normalized request paths in adapter and development request handling
#17819633855b Thanks @matthewp! - Updates generated and default Cloudflare compatibility_date values to match the installed runtime and requires Wrangler ^4.125.0
#17813ae26d18 Thanks @matthewp! - Fixes rewrite() and next(payload) for GET and HEAD requests with host-provided bodies
#17816a0d2fe3 Thanks @astro-factory! - Fixes the experimental svgOptimizer not generating unique per-file ID prefixes when using SVGO’s prefixIds plugin
#17719dac1768 Thanks @astrobot-houston! - Fixes session ID validation to reject non-UUID cookie values before using them as storage keys
#1777084eb7e7 Thanks @astro-factory! - Fixes --mode, --site, --base, --out-dir, --verbose, --silent, and --open flags being silently dropped when using astro dev --background or astro preview --background
#17713d035290 Thanks @wakqasahmed! - Fixes content-modules.mjs not removing entries for deleted or renamed content files, which could cause Vite to attempt to resolve non-existent modules
As part of this fix, #moduleImports is now fully rebuilt from deferredRender entries before every write, so a module import added only through the public addModuleImport() API without a corresponding deferredRender entry in the store will no longer be preserved across writes.
#17743adc750f Thanks @contactjawad! - Fixes Astro.preferredLocale and Astro.preferredLocaleList ignoring Accept-Language quality values when they are absent or 0. An entry without an explicit q= now correctly counts as quality 1.0 (per RFC 7231) and an entry with q=0 is treated as not acceptable, so the highest-quality locale is selected regardless of header order.
#17757660991c Thanks @astro-factory! - Fixes build errors showing wrong file location, missing line:col, and misleading hints when a plugin error (e.g. from MDX) is wrapped by Vite’s build error
#1778360b14ff Thanks @matthewp! - Fixes a type error when passing an image from a content collection image() schema to a component or <Image />. The schema returned by image() was missing the apng format, so it no longer matched the type of an imported image.
#17664d483125 Thanks @astrobot-houston! - Fixes an issue where Astro CSP support didn’t correctly handle cases "unsafe-inline" resource. Now when "unsafe-inline", Astro won’t emit hashes for the directive specified.
#178100fc5f65 Thanks @florian-lefebvre! - Fixes a regression in the content collections that could cause images to not be resolved
#17781aa33b44 Thanks @matthewp! - Fixes memoryCache() storing responses that set cookies through Astro.cookies or Astro.session
#177876661fbe Thanks @astro-factory! - Fixes server:defer crashing the dev server with “undefined is not a function” when a deferred component imports from astro:i18n
#17750dd0e3ac Thanks @dobrodob! - Fixes a regression where transition:persist stopped working for <audio> and <video> elements.
#17774fe1d16d Thanks @astro-factory! - Adds support for importing .apng files as image metadata for use with standard <img> elements. Astro’s image components reject APNG files to avoid removing their animation
#177998797754 Thanks @astro-factory! - Fixes i18n fallbackType: "rewrite" returning 500 instead of 404 when the fallback locale also has no matching static path for a prerendered dynamic route
#177823578d45 Thanks @Princesseuh! - Improves the performance of the Astro CLI in local by enabling Node’s module compilation cache.
#177052043e4f Thanks @astrobot-houston! - Fixes incremental builds serving cached HTML that references stale CSS filenames after a stylesheet-only edit
#177543d50dfd Thanks @astro-factory! - Fixes the dev server refusing to start in Docker containers after a restart due to PID reuse in the lock file check
#17769bbda94d Thanks @astro-factory! - Fixes a build failure when defining vite.environments.ssr in the Astro config. User-provided environment config for ssr, prerender, or client is now properly deep-merged with Astro’s internal environment settings instead of silently breaking the server entry naming.
#177760874da8 Thanks @astro-factory! - Fixes the glob() content loader failing to load files with colons in their names (e.g., Guide: Architecture.md)
#1770105763a0 Thanks @matthewp! - Fixes base path stripping to respect path-segment boundaries. With a configured base such as /docs, a request like /docs-archive/page is no longer treated as being under the base, so routing and context.url.pathname now agree on the same pathname.
#1774270b449d Thanks @Kjubikstronk! - Fixes astro build throwing TypeError: Missing parameter for dynamic routes when build.format: 'preserve' and trailingSlash: 'always' are used together. Stripping the framework-injected .html suffix dropped the trailing slash that the compiled route pattern requires, so the route no longer matched itself and its params resolved as empty.
#17703771b0a9 Thanks @astrobot-houston! - Fixes Astro.site always being undefined when rendering components via the Container API, even when site is set in astroConfig