AstroEco is Releasing…
Display your GitHub releases using astro-loader-github-releases


Minor Changes
-
#17302
5f4dc03Thanks @astrobot-houston! - Adds a newdeferRenderoption to theglob()content loaderWhen set to
true, renderable entries (such as Markdown) are not rendered during content sync. Instead, rendering is deferred until the entry is actually rendered in a page, using the same on-demand path that.mdxfiles already use.This reduces memory usage during
astro buildfor large collections whose rendered output is much larger than the source — for example, Markdown that uses heavy rehype plugins likerehype-katex. Such builds could previously run out of memory while storing the eagerly-rendered HTML for every entry.// src/content.config.ts import { defineCollection } from 'astro:content'; import { glob } from 'astro/loaders'; const docs = defineCollection({ loader: glob({ pattern: '**/*.md', base: 'src/content/docs', deferRender: true }), });
By default
deferRenderisfalse, preserving the existing behavior of rendering entries eagerly during sync so their rendered HTML can be cached across builds. -
#17296
30698a2Thanks @ematipico! - Adds a new experimentalcollectionStorageoption for controlling how the content layer persists its data storeBy default, Astro serializes the entire content layer data store to a single file (
.astro/data-store.json). For very large content collections, this file can grow large enough to hit platform file-size limits.Set
experimental.collectionStorage: 'chunked'to instead split the data store across many smaller, content-addressed files inside a.astro/data-store/directory, described by a manifest:// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ experimental: { collectionStorage: 'chunked', }, });
Because each part file is named by a hash of its contents, unchanged parts keep the same name across builds and are not rewritten, and identical parts are deduplicated. The default value is
'single-file', which preserves the current behavior. -
#17214
44c4989Thanks @ematipico! - Adds support for the more specific CSP directivesscript-src-elem,script-src-attr,style-src-elem, andstyle-src-attrthrough a newkindoption.Previously,
CSPwas only scoped to genericscript-src/style-srcdirectives. Now each source or hash can be scoped to a narrower directive — for example, to allow inlinestyleattributes (such as those fromdefine:varsor Shiki) without loosening the policy for your<style>and<link>elements.Scoping sources and hashes in your config
Each entry in
resourcesandhashescan be an object with akindproperty. Depending on whether you usescriptDirectiveorstyleDirective,"element"targetsscript-src-elemorstyle-src-elem,"attribute"targetsscript-src-attrorstyle-src-attr, and"default"(the same as a bare string or hash) targetsscript-srcorstyle-src.// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ security: { csp: { scriptDirective: { resources: [{ resource: 'https://cdn.example.com', kind: 'element' }], }, styleDirective: { resources: [{ resource: "'unsafe-inline'", kind: 'attribute' }], }, }, }, });
Scoping at runtime
The same
kindoption is available on the runtime CSP API, where the existing methods now also accept an object:ctx.csp.insertScriptResource({ resource: 'https://cdn.example.com', kind: 'element' }); ctx.csp.insertStyleResource({ resource: "'unsafe-inline'", kind: 'attribute' });
-
#17258
84814d4Thanks @astrobot-houston! - Adds a newformat()option to thepaginateutility. Theformat()option is a function that accepts the current URL of the page, and returns a new URL.For example, when your host only supports URLs using the
.htmlextension, you can useformat()to add it to the generated URLs:--- export async function getStaticPaths({ paginate }) { // Load your data with fetch(), getCollection(), etc. const response = await fetch(`https://pokeapi.co/api/v2/pokemon?limit=150`); const result = await response.json(); const allPokemon = result.results; // Return a paginated collection of paths for all items return paginate(allPokemon, { pageSize: 10, format: (url) => `${url}.html`, }); } const { page } = Astro.props; ---
-
#17331
7db6420Thanks @matthewp! - Adds a--ignore-lockflag toastro devfor starting a dev server without checking or writing the lock file, so it can run alongside an already-running dev server for the same project.The new instance is not tracked by
astro dev stop,astro dev status, orastro dev logs.--ignore-lockcannot be combined with--background(or an auto-detected AI agent environment, which runs dev servers in the background automatically) or--force, since those rely on the lock file.astro dev --ignore-lock
-
#17389
16de021Thanks @florian-lefebvre! - Allows passing URL entrypoints when configuring the loggerMatching other APIs like session drivers or font providers, the logger entrypoint can now be a URL:
import { defineConfig } from 'astro/config'; export default defineConfig({ logger: { entrypoint: new URL('./logger.js', import.meta.url), }, });
Patch Changes
-
#17332
4407483Thanks @astrobot-houston! - Fixes the JSON logger crashing withprocess is not definedin non-Node runtimes like Cloudflare's workerd. The JSON logger now usesconsole.log/console.errorinstead ofprocess.stdout/process.stderr, matching the pattern already used by the console logger. -
#17391
186a1e7Thanks @florian-lefebvre! - Fixes a case where an integration could not update the logger withupdateConfig() -
#17394
d9f99e1Thanks @matthewp! - Fixes element-specific CSP directives to preserve the existing behavior of configured script and style resources -
#17374
b2d1b3eThanks @astrobot-houston! - Fixes dev server returning 404 for?urlimported assets when accessed via browser navigation -
#17390
ed71eafThanks @florian-lefebvre! - Removes an unused and undocumented generic from theAstroLoggerDestinationtype -
#17393
092da56Thanks @matthewp! - Hardens generated transition styles, development metadata, and server island URLs when embedding dynamic values


Patch Changes
-
#17286
a249317Thanks @astrobot-houston! - Fixes the first browser visit afterastro devstarts triggering an immediate full page reload -
#17369
a94d4a5Thanks @adamchal! - Fixes an issue where a client island could permanently fail to hydrate if the first attempt to load its component failed. Islands now reliably recover from transient import failures, which previously did not work for React components duringastro dev.

Patch Changes
-
#17368
ee74c28Thanks @matthewp! - Fixes the generated Netlify Image CDNremote_imagespatterns so that regex metacharacters (such as.) inimage.remotePatterns(hostname,pathname) andimage.domainsare matched literally instead of behaving like wildcards. This makes the generated patterns consistent with how Astro matches these values elsewhere. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3

Patch Changes
-
#17363
3f4efc5Thanks @astrobot-houston! - Fixesastro preview --opennot opening a browser when using an adapter with a custom preview entrypoint, such as@astrojs/cloudflare -
#17313
e2e319dThanks @ronits2407! - Exposes theAstroRuntimeLoggerinterface to allow users to properly type the logger functions at runtime. -
#17328
025cc74Thanks @matthewp! - Fixesastro dev --forcenot replacing an already-running dev server -
#17353
2bba277Thanks @ematipico! - Updates the Astro compiler to the latest version, which fixes many regressions. Refer to the changelog for more details. -
#17344
79a41e0Thanks @adamchal! - Improves rendering performance for pages with many component instances, such as repeated MDX<Content />components. -
Updated dependencies [
64b0d66]:- @astrojs/markdown-satteri@0.3.4

Patch Changes
- #17345
5196fb4Thanks @kkhys! - Fixes an opaqueCannot read properties of undefined (reading 'fileExists')crash whenastro checkruns against the TypeScript 7 native compiler. The native compiler does not ship the programmatic API the checker relies on yet, soastro checknow fails early with a clear message pointing to the tracking issue instead.

Patch Changes
-
#17363
3f4efc5Thanks @astrobot-houston! - Fixesastro preview --opennot opening a browser when using an adapter with a custom preview entrypoint, such as@astrojs/cloudflare -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3

Patch Changes
- #17341
64b0d66Thanks @Princesseuh! - Fixes customprecomponents not applying to syntax-highlighted code blocks when using the Sätteri Markdown processor with MDX.

Patch Changes
- #17341
64b0d66Thanks @Princesseuh! - Fixes customprecomponents not applying to syntax-highlighted code blocks when using the Sätteri Markdown processor with MDX.

Patch Changes
-
#17318
23a4120Thanks @astrobot-houston! - Fixes CSS module scoped-name hash mismatch inastro devwhen usingvite.css.transformer: 'lightningcss'with content collections. Previously, a component importing a CSS module and rendered via content collectionrender()would get different class name hashes in the element and the injected<style>tag, causing styles not to apply. -
#17323
4298883Thanks @ematipico! - Fixes a dev server memory leak which caused Node.js to emit warnings in the console. -
#17323
4298883Thanks @ematipico! - Fixes a dev server crash when a.htmlor/index.htmlsuffixed request (such as thosenetlify devprobes as pretty-URL fallbacks) matched a dynamic endpoint route, causing aTypeError: Missing parametererror -
#17325
cebc404Thanks @astrobot-houston! - Fixes a bug where CSS@importrules could end up mid-stylesheet after inline CSS chunks were merged during build, causing browsers to silently ignore them -
#17323
4298883Thanks @ematipico! - Fixes a build regression that could leave unresolved preload markers in inlined scripts with external dynamic imports -
Updated dependencies [
4298883,4298883]:- @astrojs/telemetry@3.3.3

Patch Changes
-
#17323
4298883Thanks @ematipico! - Fixes build-time image optimization ignoring a custom image service registered by an integrationPreviously, when using
imageService: 'compile'orimageService: 'custom', a custom image service was only respected if it was set directly in theimage.serviceoption ofastro.config. If an integration registered the service instead, images were silently optimized with the default Sharp service at build time. A custom image service now transforms your images at build time no matter how it was configured. -
#17323
4298883Thanks @ematipico! - Prebundlesastro/componentsand the<ClientRouter />transition runtime modules in the dev server environment so pages using them no longer trigger a mid-session dep optimizer reload, which caused React "Invalid hook call" errors in islands on the first request after a cold cache -
#17323
4298883Thanks @ematipico! - Fixes an issue wherevarsweren't available at build time. Now the adapter loadsvarsfrom the Wrangler config soastro:envpublic variables resolve at build time -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3

Patch Changes
-
#17323
4298883Thanks @ematipico! - Refactors internal WSL detection by removing theis-wsldependency. -
#17323
4298883Thanks @ematipico! - Replacedwhich-pm-runsdependency withpackage-manager-detector

🚨 Breaking Changes
- Upgrade from Astro 5.14.4 to Astro 7.0.6 and more - by @lin-stephanie in #77 (f1712)
View changes on GitHub

Patch Changes
-
Expand the Astro peer range from
>=4.14.0 <7.0.0to>=4.14.0 <8.0.0so Astro 7 projects can install the loader without peer dependency conflicts. (70b8058) -
Migrate the package build from inline
tsupscripts andpostbuild.graphqlcopying totsdown --watch/tsdownwithtsdown.config.ts, keepastro:env/serverexternal throughdeps.neverBundle, disable declaration/source maps, and mark the package as side-effect free for better tree-shaking. (70b8058)

Patch Changes
-
Expand the Astro peer range from
>=4.14.0 <7.0.0to>=4.14.0 <8.0.0so Astro 7 projects can install the loader without peer dependency conflicts. (70b8058) -
Migrate the package build from inline
tsupscripts andpostbuild.graphqlcopying totsdown --watch/tsdownwithtsdown.config.ts, keepastro:env/serverexternal throughdeps.neverBundle, disable declaration/source maps, and mark the package as side-effect free for better tree-shaking. (70b8058)

Patch Changes
-
Expand the Astro peer range from
>=4.14.0 <7.0.0to>=4.14.0 <8.0.0so Astro 7 projects can install the loader without peer dependency conflicts. (70b8058) -
Migrate the package build from inline
tsupscripts andpostbuild.graphqlcopying totsdown --watch/tsdownwithtsdown.config.ts, keepastro:env/serverexternal throughdeps.neverBundle, disable declaration/source maps, and mark the package as side-effect free for better tree-shaking. (70b8058)

Patch Changes
-
Expand the Astro peer range from
>=4.14.0 <7.0.0to>=4.14.0 <8.0.0so Astro 7 projects can install the loader without peer dependency conflicts. (70b8058) -
Relax Release identifier validation from fixed 16-character Base64 node IDs to GitHub global node IDs such as
RE_..., reuse shared URL regexes, and document live entry identifiers asstring | object. (70b8058) -
Update GraphQL Code Generator (
codegen.config.ts) to emit typed string documents with pure annotations, operation-only types, pre-resolved result shapes, type-only imports, string-union enums, and a scoped post-generation formatter forsrc/graphql/gen/operations.ts. (70b8058) -
Replace
graphql#printcalls withString(...)because generated documents are now typed string documents instead of GraphQL AST documents. (70b8058) -
Migrate the package build from inline
tsupscripts andpostbuild.graphqlcopying totsdown --watch/tsdownwithtsdown.config.ts, keepastro:env/serverexternal throughdeps.neverBundle, disable declaration/source maps, and mark the package as side-effect free for better tree-shaking. (70b8058) -
Add
__typenameto the release GraphQL fragment and use it ingetValidReleaseNode()so lookups only map realReleasenodes before stripping the typename from returned data. (70b8058) -
Return an
INVALID_IDENTIFIERloader error when live release entry lookups by node ID, URL or{ owner, repo, tagName }do not resolve to a GitHub Release, instead of returning an empty result. (70b8058) -
Align README with the updated runtime behavior. (
70b8058)

Patch Changes
-
Expand the Astro peer range from
>=4.14.0 <7.0.0to>=4.14.0 <8.0.0so Astro 7 projects can install the loader without peer dependency conflicts. (70b8058) -
Normalize PR search construction by prefixing
type:pronly when neithertype:prnoris:pris present, and preserve existing positive or negativecreated:qualifiers when applyingmonthsBack. (70b8058) -
Relax PR identifier validation from fixed 16-character Base64 node IDs to GitHub global node IDs such as
PR_..., reuse shared URL regexes, and document live entry identifiers asstring | object. (70b8058) -
Update GraphQL Code Generator (
codegen.config.ts) to emit typed string documents with pure annotations, operation-only types, pre-resolved result shapes, type-only imports, string-union enums, and a scoped post-generation formatter forsrc/graphql/gen/operations.ts. (70b8058) -
Replace
graphql#printcalls withString(...)because generated documents are now typed string documents instead of GraphQL AST documents. (70b8058) -
Migrate the package build from inline
tsupscripts andpostbuild.graphqlcopying totsdown --watch/tsdownwithtsdown.config.ts, keepastro:env/serverexternal throughdeps.neverBundle, disable declaration/source maps, and mark the package as side-effect free for better tree-shaking. (70b8058) -
Add
__typenameto the PR GraphQL fragment and use it ingetValidPrNode()so lookups only map realPullRequestnodes before stripping the typename from returned data. (70b8058) -
Return an
INVALID_IDENTIFIERloader error when live PR entry lookups by node ID, URL or{ owner, repo, number }do not resolve to a GitHub PR, instead of returning an empty result. (70b8058) -
Align README with the updated runtime behavior. (
70b8058)
Patch Changes
- #3911
1686eccThanks @timothyjordan! - Keeps keyboard focus inside the mobile menu while it is open, preventing focus moving to hidden interactive elements in page content.

Patch Changes
- #17059
60cb289Thanks @dupontcyborg! - Update volar-service-* dependencies from 0.0.70 to 0.0.71 to pull in yaml-language-server 1.23.0 and yaml 2.8.3, resolving CVE-2026-33532 (GHSA-48c2-rrv3-qjmp), a denial-of-service vulnerability in yaml <2.8.3.

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- #17270
0142964Thanks @FrancoKaddour! - Fix@astrojs/solid-jsincorrectly claiming Svelte 5 components compiled with the newer$$rendererprop (instead of the legacy$$payload). Projects mixing Solid and Svelte could see Svelte components silently rendered as empty strings by the Solid renderer.

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1
- @astrojs/markdown-remark@7.2.1

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1
- @astrojs/underscore-redirects@1.0.3

Patch Changes
-
#17252
eb6f97eThanks @matthewp! - Fixes trailing-slash handling for request paths that begin with a backslashWith
trailingSlash: 'always', the standalone Node server could append a trailing slash to a request path that begins with a backslash (for example/\example.com/foo) and echo that path back in theLocationheader of a301response. Because browsers resolve a leading\the same way as/, the resultingLocationcould point off-site.Such paths are now recognized as internal paths, matching the existing handling for paths that begin with
//, so they are no longer rewritten with a trailing slash. -
Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- #17259
ed6bea5Thanks @astrobot-houston! - Fixes proxy support by respectingHTTP_PROXYandHTTPS_PROXYenvironment variables when downloading templates. On Node.js v22.21.0+ and v24.5.0+,create-astronow automatically enables the--use-env-proxyflag so that nativefetch()routes requests through the configured proxy.

Patch Changes
-
#17252
eb6f97eThanks @matthewp! - Fixes trailing-slash handling for request paths that begin with a backslashWith
trailingSlash: 'always', the standalone Node server could append a trailing slash to a request path that begins with a backslash (for example/\example.com/foo) and echo that path back in theLocationheader of a301response. Because browsers resolve a leading\the same way as/, the resultingLocationcould point off-site.Such paths are now recognized as internal paths, matching the existing handling for paths that begin with
//, so they are no longer rewritten with a trailing slash.

Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1
- @astrojs/underscore-redirects@1.0.3


Patch Changes
- Updated dependencies [
eb6f97e]:- @astrojs/internal-helpers@0.10.1

Patch Changes
- #17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies.

Patch Changes
- #17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies.

Patch Changes
- #17254
2cffae1Thanks @astrobot-houston! - Fixes syntax highlighting breaking when using CSS@propertyat-rules inside<style>blocks. The</style>closing tag and all subsequent blocks are now correctly recognized regardless of CSS content.

Patch Changes
- #17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies.

Patch Changes
- #17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies.

Patch Changes
- #17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies.

Minor Changes
-
#17099
fdab7ceThanks @adamchal! - Adds configured image service support with thecompileandcustomoptions.The Cloudflare adapter supports various options that affect how images are processed for both pre-rendered and on-demand routes:
- Setting
imageService: 'compile'now ensures it is used for pre-rendered routes. When no custom image service is defined, the behavior remains unchanged. - With
imageService: 'custom', assets are now processed at build time for pre-rendered routes. If you have configured an image service, it will be bundled to handle images at runtime; otherwise, the behavior remains unchanged. - The other
imageServiceoptions remain unchanged.
Learn more about the image service options available in the Cloudflare adapter guide.
- Setting
Patch Changes
-
#17236
c411200Thanks @matthewp! - Prevents warnings in the Cloudflare adapter about optimizing the@astrojs/cloudflare/entrypoints/servermodule in dev. -
#17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3

Patch Changes
- #17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies.

Minor Changes
-
#17245
f56d9e7Thanks @astrobot-houston! - AddsedgeFunctionsto thedevFeaturesadapter option, allowing users to disable Netlify Edge Function emulation duringastro devSome npm packages that access the filesystem at initialization (e.g.
node-html-parser) fail inside the edge function sandbox with "Reading or writing files with Edge Functions is not supported yet." You can now disable edge function emulation to avoid this error:import netlify from '@astrojs/netlify'; import { defineConfig } from 'astro/config'; export default defineConfig({ adapter: netlify({ devFeatures: { edgeFunctions: false, }, }), });
Edge functions will still work in production builds and via
netlify dev.
Patch Changes
-
#17249
02b73b0Thanks @ematipico! - Fixes an issue where thepeerDependenciesfield used incorrect dependencies. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3
Patch Changes
-
#4008
58a3520Thanks @FrancoKaddour! - Fixes the table of contents overflowing the right edge of the viewport when a custom--sl-content-widthvalue exceeds available space -
#4015
bdbfffcThanks @delucis! - Fixes an issue where aside icons were rendered incorrectly in projects where Astro’s MDX integration had optimization disabled

Patch Changes
-
#17049
ffceaa2Thanks @astrobot-houston! - Fixes prerender errors being silently swallowed when pages throw during rendering in workerd, causingastro buildto exit 0 and emit truncated HTML. The response body is now fully buffered inside workerd before being sent back to the build process, so streaming errors are caught and surfaced as build failures with clear error messages. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3

Patch Changes
- #17205
e37dfe2Thanks @astrobot-houston! - Fixes dependency installation when creating Astro projects with pnpm 11+

Patch Changes
- #17209
fbcfa03Thanks @matthewp! - Hardens RSS feed generation by escaping thesourceandenclosureitem fields. These fields are now serialized as structured XML values, ensuring that special characters in values likesource.titleandenclosure.typeare always treated as text rather than markup, consistent with how other feed fields are handled.

Patch Changes
- #17188
675d11dThanks @astrobot-houston! - Fixes@astrojs/upgradeshowing a generic error when pnpm'sminimumReleaseAgepolicy blocks installation. The error message now explains that pnpm's policy blocked the update and suggests running the install command manually.

Patch Changes
- #17142
973ea49Thanks @astrobot-houston! - Fixes a crash when rendering shiki-highlighted code blocks inside list items

Minor Changes
-
#3951
1202dd4Thanks @HiDeoo! - Adds support for Astro v7, drops support for Astro v6.Upgrade Astro and dependencies
⚠️ BREAKING CHANGE: Astro v6 is no longer supported. Make sure you update Astro and any other official integrations at the same time as updating Starlight:npx @astrojs/upgrade
Community Starlight plugins and Astro integrations may also need to be manually updated to work with Astro v7. If you encounter any issues, please reach out to the plugin or integration author to see if it is a known issue or if an updated version is being worked on.
⚠️ BREAKING CHANGE: This release drops official support for Chromium-based browsers prior to version 111 (released 07 March 2023) and Safari-based browsers prior to version 16.4 (released 27 March 2023). You can find a list of currently supported browsers and their versions using this browserslist query.
Patch Changes

Patch Changes
- #17165
3b5e994Thanks @Princesseuh! - Fixes headings being listed twice in a page'sheadingsmetadata when an integration (such as Starlight) assigns heading IDs with its own heading pass before adding anchor links

Major Changes
Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.
Patch Changes

Major Changes
Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning. -
#17129
ff7b718Thanks @Princesseuh! - Adds support for modifying frontmatter programmatically with the default Markdown processor.A Sätteri plugin can now read and mutate
ctx.data.astro.frontmatter, and Astro uses the result as the page's frontmatter, in both Markdown and MDX.
Patch Changes
-
#17124
7e7ab87Thanks @Princesseuh! - Updatessatterito0.9.0. See the Sätteri changelog for details. -
#17027
241250bThanks @ocavue! - Triggers beta prereleases for packages that are still on alpha


Major Changes
Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning. -
#16549
9d9d516Thanks @ocavue! - Updates@sveltejs/vite-plugin-svelteto v7. No user action is necessary.
Patch Changes

Major Changes
Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.
Patch Changes

Major Changes
Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.
Patch Changes


Major Changes
Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.
Patch Changes

Patch Changes
-
#17124
7e7ab87Thanks @Princesseuh! - Updatessatterito0.9.0. See the Sätteri changelog for details. -
#17129
ff7b718Thanks @Princesseuh! - Adds support for modifying frontmatter programmatically with the default Markdown processor.A Sätteri plugin can now read and mutate
ctx.data.astro.frontmatter, and Astro uses the result as the page's frontmatter, in both Markdown and MDX. -
#17027
241250bThanks @ocavue! - Triggers beta prereleases for packages that are still on alpha

Major Changes
Minor Changes
-
#16335
9a53f77Thanks @ascorbic! - Adds a CDN cache provider for Astro route caching on NetlifySetup
Import
cacheNetlify()from@astrojs/netlify/cacheand set it as your cache provider:import { defineConfig } from 'astro/config'; import netlify from '@astrojs/netlify'; import { cacheNetlify } from '@astrojs/netlify/cache'; export default defineConfig({ adapter: netlify(), cache: { provider: cacheNetlify(), }, });
Caching responses
Use
Astro.cache.set()in your pages and API routes to cache responses on Netlify's edge network. The provider uses Netlify's durable cache so cached responses are shared across all edge nodes, reducing function invocations.--- Astro.cache.set({ maxAge: 300, tags: ['products'] }); const data = await fetchProducts(); --- <ProductList items={data} />
You can also set cache rules for groups of routes in your config:
cache: { provider: cacheNetlify() }, routeRules: { '/products/[...slug]': { maxAge: 3600, tags: ['products'] }, '/api/[...path]': { maxAge: 60, swr: 600 }, },
Invalidation
Purge cached responses by tag or path from any API route or server endpoint:
// src/pages/api/purge.ts export async function POST({ request, cache }) { await cache.invalidate({ tags: ['products'] }); return new Response('Purged'); } // Path-based invalidation await cache.invalidate({ path: '/products/123' });
Both tag-based and path-based invalidation are supported.
Patch Changes

Major Changes
Minor Changes
-
#16335
9a53f77Thanks @ascorbic! - Adds a CDN cache provider for Astro route caching on VercelSetup
Import
cacheVercel()from@astrojs/vercel/cacheand set it as your cache provider:import { defineConfig } from 'astro/config'; import vercel from '@astrojs/vercel'; import { cacheVercel } from '@astrojs/vercel/cache'; export default defineConfig({ adapter: vercel(), cache: { provider: cacheVercel(), }, });
Caching responses
Use
Astro.cache.set()in your pages and API routes to cache responses on Vercel's edge network. The provider setsVercel-CDN-Cache-ControlandVercel-Cache-Tagheaders on responses.--- Astro.cache.set({ maxAge: 300, tags: ['products'] }); const data = await fetchProducts(); --- <ProductList items={data} />
You can also set cache rules for groups of routes in your config:
cache: { provider: cacheVercel() }, routeRules: { '/products/[...slug]': { maxAge: 3600, tags: ['products'] }, '/api/[...path]': { maxAge: 60, swr: 600 }, },
Invalidation
Purge cached responses by tag or path from any API route or server endpoint:
// src/pages/api/purge.ts export async function POST({ request, cache }) { await cache.invalidate({ tags: ['products'] }); return new Response('Purged'); } // Path-based invalidation await cache.invalidate({ path: '/products/123' });
Both tag-based and path-based invalidation are supported. Tag invalidation is a soft invalidation, marking cached responses as stale so they can be revalidated in the background via stale-while-revalidate.
Patch Changes



Patch Changes
- #17124
7e7ab87Thanks @Princesseuh! - Updatessatterito0.9.0. See the Sätteri changelog for details.

Patch Changes
- #17124
7e7ab87Thanks @Princesseuh! - Updatessatterito0.9.0. See the Sätteri changelog for details.


Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.

Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.

Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.

Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.

Minor Changes
-
#17093
4585fe5Thanks @Princesseuh! - Replaces the import entrypoint ofgetContainerRenderer()A new
container-rendererentrypoint exportinggetContainerRenderer()has been added to the following integrations: React, Preact, Svelte, SolidJS, Vue, and MDX. This prevents bundlers from trying to bundle unrelated exports from the package root when only the Container API is used.If you are using the Container API, update your import statements to use the new entrypoint. The following example updates the
getContainerRenderer()import for React:- import { getContainerRenderer } from '@astrojs/react'; + import { getContainerRenderer } from '@astrojs/react/container-renderer';
Importing
getContainerRenderer()from the package root still works, but is now deprecated and logs a warning.

Patch Changes
- #17054
d426b67Thanks @astrobot-houston! - Fixes an issue where Astro files with non-ASCII characters in their name weren't correctly served after the build.










Minor Changes
-
#3923
edf2e6bThanks @Princesseuh! - Adds support for Astro 6.4 and the new Sätteri Markdown processor.It is now possible to opt into using Astro's 6.4 Sätteri Markdown processor by installing the
@astrojs/markdown-satteripackage and configuring it in yourastro.config.mjsfile:// astro.config.mjs import { defineConfig } from 'astro/config'; import { satteri } from '@astrojs/markdown-satteri'; export default defineConfig({ markdown: { processor: satteri(), }, });
⚠️ BREAKING CHANGE: The minimum supported version of Astro is now v6.4.5.Please update Starlight and Astro together:
npx @astrojs/upgrade
Community Starlight plugins and Astro integrations may also need to be manually updated to work with Sätteri. If you encounter any issues, please reach out to the plugin or integration author to see if it is a known issue or if an updated version is being worked on.
Patch Changes
- #3923
edf2e6bThanks @Princesseuh! - Updates Expressive Code to version 0.43.1.

Patch Changes
- #16964
b048826Thanks @Princesseuh! - Deprecates the@astrojs/dbintegration. We no longer have the bandwidth to maintain this package, and we recommend that users directly use the database client of their choice (Drizzle, Kysely, etc.) in their Astro projects instead.



Last fetched: | Scheduled refresh: Every Saturday
See Customizing GitHub Activity Pages to configure your own
Inspired by releases.antfu.me