GitHub Releases
Optional build-time activity feed using astro-loader-github-releases
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
Patch Changes
-
#17189
24d2c9eThanks @astrobot-houston! - Fixes a bug where an error thrown inside one route'sgetStaticPaths()would prevent other valid routes from being matched in dev mode -
#16932
8f4a3dbThanks @fkatsuhiro! - Fixes HMR for action files during development. Editing files insrc/actions/now takes effect on the next request without requiring a dev server restart. -
#17087
fb0ab02Thanks @jp-knj! - Fixes localized custom error pages in i18n projects so routes like/pt/404are used for missing localized pages and return the correct status code
Patch Changes
-
#17175
7a7d879Thanks @astrobot-houston! - Fixesastro devOOM crashes for@astrojs/cloudflareusers on Vite 8 by migrating the frontmatter scan plugin to Rolldown-compatible options. -
#17187
0db4b57Thanks @matthewp! - Fixes React invalid hook warning during cold SSR optimizer reload when using ClientRouter -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3
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
Patch Changes
- Updated dependencies [
3b5e994]:- @astrojs/markdown-satteri@0.3.2
Patch Changes
-
#17151
ccceda3Thanks @matthewp! - Fixesastro devincorrectly starting in background mode for Warp terminal users. Hybrid environments like Warp are no longer treated as AI agents for auto-background detection. -
#17158
164df87Thanks @ematipico! - Fixesastro dev --background --hostnot listing the network addresses. The background server start output andastro dev statusnow show every exposed network URL, matching the foreground dev server. -
#17141
d785b9dThanks @astrobot-houston! - Fixes responsive image CSS overriding user styles defined inside CSS@layerblocks. The generated image styles are now wrapped in@layer astro.images, ensuring they have lower cascade priority than user-defined layers. -
#17150
1a61386Thanks @matthewp! - Fixesastro dev --backgroundfailing on Windows with "Failed to spawn background dev server process"
Major Changes
Minor Changes
-
#16335
9a53f77Thanks @ascorbic! - Adds an opt-in CDN cache provider for Astro route caching on Cloudflare Workers[!WARNING]
This provider requires the Cloudflare Workers Cache feature, which is currently in private beta. It is opt-in: nothing changes unless you importcacheCloudflare()and set it as your provider. But without beta access it does not work and should not be used. Cloudflare Workers run in front of the cache, so cached responses are never served, and callingcache.invalidate()throws an error.Setup
Import
cacheCloudflare()from@astrojs/cloudflare/cacheand set it as your cache provider:import { defineConfig } from 'astro/config'; import cloudflare from '@astrojs/cloudflare'; import { cacheCloudflare } from '@astrojs/cloudflare/cache'; export default defineConfig({ adapter: cloudflare(), cache: { provider: cacheCloudflare(), }, });
The adapter automatically enables the Worker caching layer when a Cloudflare cache provider is configured. No manual wrangler.jsonc changes are needed.
Caching responses
Use
Astro.cache.set()in your pages and API routes to cache responses. The provider setsCloudflare-CDN-Cache-ControlandCache-Tagheaders, which are read by Cloudflare's built-in caching layer. Cache hits bypass Worker execution entirely, meaning your Worker is not invoked for cached 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: cacheCloudflare() }, 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 (implemented via an auto-generated path tag) await cache.invalidate({ path: '/products/123' });
Both tag-based and path-based invalidation are supported.
Patch Changes
-
#16961
96398e8Thanks @adamchal! - Speeds upastro syncby no longer starting the Cloudflare runtime during type generation -
#16671
fd926fdThanks @alexanderniebuhr! - Removes deprecations warnings added in Astro v6 for Cloudflare specific Astro.locals properties. -
#17027
241250bThanks @ocavue! - Triggers beta prereleases for packages that are still on alpha -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3
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
-
#16965
57ead0dThanks @Princesseuh! - Makes'jsx'the default value forcompressHTMLAstro now strips whitespace from your HTML using JSX rules by default, the same way frameworks like React do. Whitespace and line breaks around elements are removed, but meaningful whitespace within a single line — like a space between two inline elements — is preserved. To keep a space that would otherwise be removed, write it explicitly in your source, for example with
{" "}.This can change rendered output where whitespace between inline elements was previously meaningful. To keep Astro's earlier behavior, set
compressHTML: truefor HTML-aware compression, orcompressHTML: falseto preserve all whitespace. -
#16610
c63e7e4Thanks @matthewp! - Adds background dev server management for AI coding agents.When an AI coding agent is detected,
astro devnow automatically starts the dev server as a detached background process. This prevents the dev server from blocking the agent's terminal and allows it to continue working while the server runs.A lock file (
.astro/dev.json) is written when the dev server starts, recording the server's URL, port, and PID. This prevents duplicate servers from being started for the same project.New flag and subcommands
astro dev --background— Start the dev server as a background process (this is what runs automatically when an agent is detected).astro dev stop— Stop a running background dev server.astro dev status— Check if a dev server is running and display its URL, PID, and uptime.astro dev logs— View logs from a background dev server. Use--follow(-f) to stream new output as it's written.
These allow you to start and manage dev servers programmatically and were designed with AI coding agents in mind.
What should I do?
No action is required. If you are not using an AI coding agent,
astro devbehaves exactly as before. If you are using an agent, background mode is enabled automatically — the agent will receive the server URL and PID, and can useastro dev stopto shut it down.To opt out of automatic background mode when an agent is detected, set the environment variable
ASTRO_DEV_BACKGROUND=0before runningastro dev. -
#17010
0606073Thanks @ocavue! - Removes the@astrojs/dbpackage as it is no longer maintained.The
@astrojs/dbpackage were deprecated in v6.4.5 and is now removed. This means theastro db,astro login,astro logout,astro link, andastro initCLI commands have also been removed.If you were using Astro DB in your project, remove
@astrojs/dbfrom your project's dependencies and replace it with one of the following alternatives:- Node.js built-in SQLite: Node.js now includes a built-in
node:sqlitemodule (available since Node.js v22.5.0). This is a good option if you are using the Node.js adapter and were using@astrojs/dbfor local SQLite storage. - Drizzle ORM: If you were using
@astrojs/dbfor its Drizzle-based schema and query API, you can use Drizzle directly with any supported database. - Other database libraries: Use any database library that suits your deployment platform (e.g. Turso, PlanetScale, Neon).
- Node.js built-in SQLite: Node.js now includes a built-in
-
#16462
c30a778Thanks @Princesseuh! - Replaces the Go compiler with a Rust-based version.The Rust-based Astro compiler (
@astrojs/compiler-rs) is now the default compiler. This new compiler is faster and more reliable, leading to faster build times and iteration cycles during development.This new compiler is more strict regarding invalid syntax. For example, unclosed HTML tags will now throw an error instead of being ignored. It also does not attempt to correct semantically invalid HTML anymore, instead leaving it to the browser to handle, similar to other tools or
document.write()in JavaScript.The previous Go-based compiler has been removed, along with the
experimental.rustCompilerflag used to opt into the Rust compiler. If you were settingexperimental.rustCompilerin yourastro.config.mjs, you can now remove it. No other action is required. -
#16966
6650ec2Thanks @Princesseuh! - Makes Sätteri the default Markdown processorAstro now renders
.mdfiles withsatteri()from@astrojs/markdown-satteri, its native Markdown pipeline, instead of the remark/rehype pipeline.@astrojs/markdown-remarkis no longer installed by default.To keep using the remark/rehype pipeline, install
@astrojs/markdown-remarkand set it as your processor:// astro.config.mjs import { defineConfig } from 'astro/config'; import { unified } from '@astrojs/markdown-remark'; export default defineConfig({ markdown: { processor: unified(), }, });
The deprecated
markdown.remarkPlugins,markdown.rehypePlugins, andmarkdown.remarkRehypeoptions still work, but now require@astrojs/markdown-remarkto be used. -
#16877
3b7d76eThanks @matthewp! - Enables advanced routing by default.The advanced routing feature introduced behind a flag in v6.3.0 is no longer experimental and is now enabled by default.
This gives full control over how requests flow through your application, with first-class support for frameworks like Hono.
Advanced routing now uses
src/fetch.tsas default entrypoint instead ofsrc/app.ts.If you were previously using this feature without a custom entrypoint, please configure
fetchFileor rename your entrypoint tosrc/fetch.ts, and then remove the experimental flag from your Astro config:import { defineConfig } from 'astro/config'; export default defineConfig({ experimental { - advancedRouting: true, }, + fetchFile: 'app.ts' // optional, you only need this if you cannot rename your entrypoint. });fetchFileis now a top-level config option instead of being nested underexperimental.advancedRouting. If you were using a custom entrypoint, please update your Astro config to move its configuration:// astro.config.mjs export default defineConfig({ - experimental: { - advancedRouting: { - fetchFile: 'my-custom-entrypoint.ts', - }, - }, + fetchFile: 'my-custom-entrypoint.ts', })You can also set
fetchFile: nullto disable the entrypoint if you are usingsrc/fetch.tsfor another purpose, or don’t need advanced routing features.If you have been waiting for stabilization before using advanced routing, you can now do so.
Please see the advanced routing guide in docs for more about this feature.
-
#16725
10229f7Thanks @ArmandPhilippot! - Removes deprecated APIs exported fromastro:transitions.In Astro 6.x, some helpers available in
astro:transitionsandastro:transitions/clientwere deprecated.In Astro 7.0, the following APIs can no longer be used in your project:
TRANSITION_BEFORE_PREPARATIONTRANSITION_AFTER_PREPARATIONTRANSITION_BEFORE_SWAPTRANSITION_AFTER_SWAPTRANSITION_PAGE_LOADisTransitionBeforePreparationEvent()isTransitionBeforeSwapEvent()createAnimationScope()
What should I do?
Remove any occurrence of
createAnimationScope():-import { createAnimationScope } from 'astro:transitions';Replace any occurrence of the other APIs using the lifecycle event names directly:
-import { - TRANSITION_AFTER_SWAP, - isTransitionBeforePreparationEvent, -} from 'astro:transitions/client'; -console.log(isTransitionBeforePreparationEvent(event)); +console.log(event.type === 'astro:before-preparation'); -console.log(TRANSITION_AFTER_SWAP); +console.log('astro:after-swap');
Learn more about all utilities available in the View Transitions Router API Reference.
Minor Changes
-
#16998
57dcc31Thanks @matthewp! - ExposesgetFetchState()fromastro/honoas a public APIThe
getFetchState()function retrieves or lazily creates aFetchStatefrom a Hono context object. This allows third-party packages to build Hono middleware that interacts with Astro's per-request state, giving theastro/honoAPI the same extensibility asastro/fetch.import { Hono } from 'hono'; import { getFetchState, pages } from 'astro/hono'; const app = new Hono(); app.use(async (context, next) => { const state = getFetchState(context); state.locals.message = 'Hello from custom middleware'; await next(); }); app.use(pages()); export default app;
-
#16996
300641eThanks @florian-lefebvre! - Adds asubsetfield to theFontDatatype exposed viafontDatafromastro:assets. When using multiple font subsets (e.g.,subsets: ["latin", "korean"]), each font data entry now includes the subset name, making it possible to distinguish between font entries for different subsets that share the same weight and style. -
#16745
f864a80Thanks @ematipico! - The custom logger feature introduced behind a flag in v6.2.0 is no longer experimental and is available for general use.This feature provides better control over Astro's logging infrastructure by allowing you to replace the default console output with custom logging implementations (e.g., structured JSON). This is particularly useful for on-demand rendering when connecting to log aggregation services such as Kibana, Logstash, CloudWatch, Grafana, or Loki.
Astro provides three built-in log handlers (
json,node, andconsole), and you can also create your own.JSON logging
import { defineConfig, logHandlers } from 'astro/config'; export default defineConfig({ logger: logHandlers.json({ pretty: true, level: 'warn', }), });
Custom logger
import { defineConfig } from 'astro/config'; export default defineConfig({ logger: { entrypoint: '@org/custom-logger', }, });
Additionally,
context.loggeris now always available in API routes and middleware, even without a custom logger configured.If you were previously using this feature, please remove the experimental flag from your Astro config:
import { defineConfig } from 'astro/config'; export default defineConfig({ - experimental: { - logger: { - entrypoint: '@org/custom-logger', - }, - }, + logger: { + entrypoint: '@org/custom-logger', + }, });If you have been waiting for stabilization before using custom loggers, you can now do so.
Please see the Logger docs for more about this feature.
-
#16981
0d6d644Thanks @ematipico! - Removes the settingexperimental.queuedRendering. The new rendering engine is now stable and replaces the old one.As part of the stabilization, the queued rendering has been improved, and some features have been removed:
- The construction of the queue has been removed, instead now Astro uses a streaming approach where components are rendered and flushed as they are encountered.
- The node polling feature has been removed because it doesn't yield concrete savings.
- The content cache has been descoped, and how only tag names are cached.
If you were previously using this experimental feature, you must remove this experimental flag from your configuration as it no longer exists:
// astro.config.mjs import { defineConfig } from "astro/config"; export default defineConfig({ experimental: { - queuedRendering: {} } }); -
#17116
f95e58eThanks @ascorbic! - Stabilizes route caching, removing theexperimental.cacheandexperimental.routeRulesflags and replacing them with the top-levelcacheandrouteRulesconfiguration options.Route caching, introduced experimentally in v6.0.0, is now stable. It gives you a platform-agnostic way to cache responses from on-demand rendered pages and endpoints, based on standard HTTP caching semantics.
Update your config to move
cacheandrouteRulesout of theexperimentalblock:// astro.config.mjs import { defineConfig, memoryCache } from 'astro/config'; export default defineConfig({ - experimental: { - cache: { - provider: memoryCache(), - }, - routeRules: { - '/blog/[...path]': { maxAge: 300, swr: 60 }, - }, - }, + cache: { + provider: memoryCache(), + }, + routeRules: { + '/blog/[...path]': { maxAge: 300, swr: 60 }, + }, });Set caching directives in your routes with
Astro.cache(in.astropages) orcontext.cache(in API routes and middleware), and Astro translates them into the appropriate headers or runtime behavior depending on your configured cache provider. You can also define cache rules for routes declaratively in your config usingrouteRules, without modifying route code.See the route caching guide for more information.
Patch Changes
-
#16980
1f07343Thanks @matthewp! - Removesstate.provide(),state.resolve(),state.finalizeAll(), andApp.Providersfrom the public advanced routing API. These context provider extension points are now internal-only. If you were using them in an integration, uselocalsto share per-request state instead. -
#17111
c0f33edThanks @ematipico! - Harden the limits on the number of decoding on the URL. -
#16982
1e000e2Thanks @matthewp! - Improves the warning when accessingAstro.sessionwithout session storage configured. Thesessionproperty is now always defined on the context object, and accessing it without configuration logs a helpful message instead of silently returningundefined. -
#16335
9a53f77Thanks @ascorbic! - Adds shared helper utilities for CDN cache provider authors for route cachingExports
astro/cache/provider-utilswith helpers for building platform-specific cache-control headers, generating path-based invalidation tags, and normalizing invalidation options. These are used internally by the first-party Netlify, Vercel, and Cloudflare cache providers. -
#17095
e84ebc0Thanks @matthewp! - Improves build performance by removing an unfiltered transform hook from theastro:head-metadata-buildplugin. Head propagation modules are now identified by their module ID (?astroPropagatedAssets) instead of scanning every module's source code. -
#17041
4c4a91cThanks @iseraph-dev! - Fixes a bug where the advanced routingastro/hono/astro/fetchpages()handler returned the host framework's defaultInternal Server Errorresponse instead of rendering the custom500.astropage when a page threw during render. Unmatched requests with a prerendered (or absent) custom 404 page now render the 404 error page instead of failing the same way. -
#17097
5e340d7Thanks @iseraph-dev! - Fixes a bug where the advanced routingastro/hono/astro/fetchmiddleware()handler returned the host framework's defaultInternal Server Errorresponse instead of rendering the custom500.astropage when middleware threw. Unmatched requests with a prerendered (or absent) custom 404 page now render the 404 error page instead of failing the same way. Errors surfaced throughnext(the host framework's downstream chain) still propagate to the host's own error handler. -
#15819
cafec4eThanks @delucis! - Fixes--portflag being ignored after a Vite-triggered server restart (e.g. when a.envfile changes) -
#17104
b074a37Thanks @iseraph-dev! - Fixes the custom500.astropage receiving an emptyerrorprop when the error originated in middleware. -
#17078
04547ecThanks @astrobot-houston! - Fixes a spuriousAstro.request.headerswarning on prerendered pages whensecurity.allowedDomainsis configured. The internalallowedDomainsheader validation now skips prerendered routes, since they use synthetic requests with no real headers. -
#16603
deaaf3fThanks @alexanderniebuhr! - Removes the warning that Astro does not support vite v8, since Astro v7 does support vite v8 -
#16335
9a53f77Thanks @ascorbic! - Passes theRequestobject toCacheProvider.setHeaders()for route cachingCache providers now receive the incoming
Requestas a second argument tosetHeaders(options, request). This allows CDN providers to read the request URL, headers, and other properties when generating cache response headers, for example to auto-tag responses with their pathname for path-based invalidation. -
#17098
637a1b6Thanks @matthewp! - Fixes internal Astro headers leaking from directpages()handler responses -
#17090
3cf76c0Thanks @matthewp! - Fixes Vite and Rolldown build warnings -
#16434
ee079d4Thanks @ematipico! - Fixes an issue where i18n domains would return 404 whentrailingSlashis set tonever. -
Updated dependencies [
7e7ab87,ff7b718,241250b]:- @astrojs/markdown-satteri@0.3.1
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
Minor Changes
-
#17116
f95e58eThanks @ascorbic! - Stabilizes route caching, removing theexperimental.cacheandexperimental.routeRulesflags and replacing them with the top-levelcacheandrouteRulesconfiguration options.Route caching, introduced experimentally in v6.0.0, is now stable. It gives you a platform-agnostic way to cache responses from on-demand rendered pages and endpoints, based on standard HTTP caching semantics.
Update your config to move
cacheandrouteRulesout of theexperimentalblock:// astro.config.mjs import { defineConfig, memoryCache } from 'astro/config'; export default defineConfig({ - experimental: { - cache: { - provider: memoryCache(), - }, - routeRules: { - '/blog/[...path]': { maxAge: 300, swr: 60 }, - }, - }, + cache: { + provider: memoryCache(), + }, + routeRules: { + '/blog/[...path]': { maxAge: 300, swr: 60 }, + }, });Set caching directives in your routes with
Astro.cache(in.astropages) orcontext.cache(in API routes and middleware), and Astro translates them into the appropriate headers or runtime behavior depending on your configured cache provider. You can also define cache rules for routes declaratively in your config usingrouteRules, without modifying route code.See the route caching guide for more information.
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.
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.
Minor Changes
-
#16571
d4b0cd1Thanks @MA2153! - Sets immutable cache headers for static assetsStatic assets under
_astrocan be cached to improve performance. The adapter now automatically injects aCache-Controlheader at build time when possible.
Patch Changes
-
#16968
7a5c001Thanks @astrobot-houston! - Fixes a build crash when usingexperimental.advancedRoutingwith a customfetchFilethat statically importscffrom@astrojs/cloudflare/fetch. The circular dependency between@astrojs/cloudflare/fetchandastro/app/entrypointcausedcreateApporcreateGetEnvto beundefinedat module evaluation time. Initialization is now deferred to the firstcf()call, breaking the cycle. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3
Patch Changes
- #16985
4ecff32Thanks @maximslo! - Fixes theexperimental.loggerdestination not being used for the "Server listening on..." startup message. The logger is now resolved before the server starts listening, andadapterLoggerre-creates itself when the underlying logger changes so the startup message uses the correct destination.
Patch Changes
-
#16969
4a31f90Thanks @Princesseuh! - Adds support for Prism syntax highlighting to the Sätteri Markdown and MDX processors. Settingmarkdown.syntaxHighlightto'prism'now highlights your code blocks with Prism.// astro.config.mjs import { satteri } from '@astrojs/markdown-satteri'; export default defineConfig({ markdown: { processor: satteri(), syntaxHighlight: 'prism', }, });
Minor Changes
-
#16969
4a31f90Thanks @Princesseuh! - Adds support for Prism syntax highlighting to the Sätteri Markdown and MDX processors. Settingmarkdown.syntaxHighlightto'prism'now highlights your code blocks with Prism.// astro.config.mjs import { satteri } from '@astrojs/markdown-satteri'; export default defineConfig({ markdown: { processor: satteri(), syntaxHighlight: 'prism', }, });
Patch Changes
-
#16922
7dce185Thanks @astrobot-houston! - Fixes prerendered pages returning 404 when usingbuild.format: 'file'orbuild.format: 'preserve'with the Node adapter in standalone mode.Previously, clean URLs like
/aboutwould fail to resolve toabout.htmlon disk, because the static file handler only supported the defaultdirectoryformat (about/index.html). Now the handler correctly resolves clean URLs to.htmlfiles when the build format produces them.
Patch Changes
-
#16693
9e6edc2Thanks @ArmandPhilippot! - Fixes a link in the documentation specifying where to open an issue for the adapter. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.3
Patch Changes
-
#3910
dddf405Thanks @andreialba! - Improves Romanian UI translations -
#3924
02f2ce1Thanks @BouRock! - Improves Turkish UI translations -
#3928
11a7ed2Thanks @delucis! - Updates Pagefind to v1.5 and adds support for Pagefind’s newdiacriticSimilarityandmetaWeightsadvanced ranking options -
#3927
e944870Thanks @HiDeoo! - Refactors internal file path handling for Starlight content collections.
0.10.0
Minor Changes
- #16848
f732f3cThanks @Princesseuh! - Addsmarkdown,frontmatter, andshikihelper modules, shared by Astro's content pipeline.
1.0.6
Patch Changes
-
#16848
f732f3cThanks @Princesseuh! - Removes@astrojs/markdown-remarkfrom@astrojs/markdoc's dependencies in favour of Astro's internal markdown utilities now that Astro's Markdown support is processor agnostic. -
Updated dependencies [
f732f3c]:- @astrojs/internal-helpers@0.10.0
7.2.0
Minor Changes
-
#16848
f732f3cThanks @Princesseuh! - Adds a newmarkdown.processorconfiguration option, allowing you to choose an alternative Markdown processor.Websites with many Markdown/MDX files tend to be slow to build because the unified ecosystem (e.g., remark, rehype) is slow to process. This feature introduces the ability to replace this part of the build pipeline with another processor.
The default processor is
unified(). This means that existing configurations remain unchanged and your remark/rehype plugins continue to work.// astro.config.mjs import { defineConfig } from 'astro/config'; import { unified } from '@astrojs/markdown-remark'; import remarkToc from 'remark-toc'; export default defineConfig({ markdown: { processor: unified({ remarkPlugins: [remarkToc], }), }, });
In addition to this new configuration option, Astro provides a new alternative processor based on Rust: Sätteri. You can choose to use it now by installing
@astrojs/markdown-satteri, importing thesatteri()processor, and adapting your existing configuration:// astro.config.mjs import { defineConfig } from 'astro/config'; import { satteri } from '@astrojs/markdown-satteri'; export default defineConfig({ markdown: { processor: satteri({ features: { directive: true }, }), }, });
This processor does not support the remark and rehype plugins. This means you may need to convert them to MDAST or HAST plugins to retain your current functionality.
The existing top-level
markdown.remarkPlugins,markdown.rehypePlugins,markdown.remarkRehype,markdown.gfm, andmarkdown.smartypantsoptions still work, but are now deprecated and will be removed in a future major update. The matchingremarkPlugins,rehypePlugins, andremarkRehypeoptions on the MDX integration are also deprecated for the same reason. To anticipate their removal, move them ontounified({...})(or your preferred plugin processor) :// astro.config.mjs import { defineConfig } from 'astro/config'; import remarkToc from 'remark-toc'; import rehypeSlug from 'rehype-slug'; + import { unified } from '@astrojs/markdown-remark'; export default defineConfig({ markdown: { + processor: unified({ + remarkPlugins: [remarkToc], + rehypePlugins: [rehypeSlug], + remarkRehype: true, + gfm: true, + smartypants: true, + }), - remarkPlugins: [remarkToc], - rehypePlugins: [rehypeSlug], - remarkRehype: true, - gfm: true, - smartypants: true, }, });For more information on enabling and using this feature in your project, see our Markdown guide. To give feedback on this new Rust processor, see the Native Markdown / MDX parsing and processing RFC.
Patch Changes
- Updated dependencies [
f732f3c]:- @astrojs/internal-helpers@0.10.0
Patch Changes
- Updated dependencies [
f732f3c]:- @astrojs/internal-helpers@0.10.0
- @astrojs/underscore-redirects@1.0.3
Patch Changes
- Updated dependencies [
f732f3c]:- @astrojs/internal-helpers@0.10.0
Patch Changes
- Updated dependencies [
f732f3c]:- @astrojs/internal-helpers@0.10.0
Patch Changes
- Updated dependencies [
f732f3c]:- @astrojs/internal-helpers@0.10.0
Major Changes
-
Remove the
userCommitmode from build-time and live release loaders because GitHub no longer includes commit summaries in publicPushEventpayloads. Themode: 'repoList'discriminator is also removed because repository-list loading is now the only supported behavior (c0089f2) -
Move live loaders to the
/livesubpath.liveGithubReleasesLoaderis no longer exported from the package root, so import it from the/livesubpath instead: (c0089f2)import { liveGithubReleasesLoader } from "astro-loader-github-releases/live";
This keeps the package root focused on build-time loaders and prevents build-time users from loading live runtime dependencies such as
astro:env/server. -
Use Astro's adapter-backed
getSecret()for live loader GitHub tokens instead ofimport.meta.env, avoiding build-time inlining and allowing runtime-provided secrets to be read per request (c0089f2) -
Implement the Astro 6 migration change where schema types are inferred instead of generated, while preserving accurate
entryReturnTypeinference and avoiding Zod 4 internal type leakage in published declarations (c0089f2) -
Astro v6.0 upgrades to Zod 4. Based on the Zod 4 changelog and the need to keep compatibility with older Astro versions, update schemas by: (
c0089f2)- Replace object intersection with
extend()for the extended post schema
- Replace object intersection with
Major Changes
-
Update the default Instagram API version from
v23.0tov25.0(c0089f2) -
Move live loaders to the
/livesubpath.liveInsMediasLoaderis no longer exported from the package root, so import it from the/livesubpath instead: (c0089f2)import { liveInsMediasLoader } from "astro-loader-ins-medias/live";
This keeps the package root focused on build-time loaders and prevents build-time users from loading live runtime dependencies such as
astro:env/server. -
Use Astro's adapter-backed
getSecret()for live loader GitHub tokens instead ofimport.meta.env, avoiding build-time inlining and allowing runtime-provided secrets to be read per request (c0089f2) -
Astro v6.0 upgrades to Zod 4. Based on the Zod 4 changelog and the need to keep compatibility with older Astro versions, update schemas by: (
c0089f2)- Replace
passthrough()usage withcatchall(z.unknown())to keep allowing extra fields without requiring Zod 4-onlyz.looseObject()
- Replace
Patch Changes
- Implement the Astro 6 migration change where schema types are inferred instead of generated, while preserving accurate loader-based entry data inference and avoiding Zod 4 internal type leakage in published declarations (
c0089f2)
Patch Changes
-
Implement the Astro 6 migration change where schema types are inferred instead of generated, while preserving accurate loader-based entry data inference and avoiding Zod 4 internal type leakage in published declarations (
c0089f2) -
Astro v6.0 upgrades to Zod 4. Based on the Zod 4 changelog and the need to keep compatibility with older Astro versions, update schemas by: (
c0089f2)- Replace
passthrough()usage withcatchall(z.unknown())to keep allowing extra fields without requiring Zod 4-onlyz.looseObject(); - Replace
z.any()label entries withz.unknown()to avoid leakinganyinto inferred entry data; - Replace object intersection with
extend()for the extended post schema; - Intentionally keep deprecated string format methods such as
z.string().url()andz.string().datetime()for compatibility with older Astro/Zod versions.
- Replace
-
Add config-specific loader overloads so
fetchThreadandfetchOnlyAuthorRepliesinfer the matching entry data shape (c0089f2) -
Use the public
@atproto/apiAppBskyFeedDefsexports and type guards instead of internaldist/client/typesimports (c0089f2) -
Relax the thread schema for raw nested replies and optional Bluesky author fields that the API can omit (
c0089f2) -
Cache by the full parsed loader config instead of only
urisso rendering and thread option changes trigger a reload (c0089f2) -
Preserve stack traces in loader error logs so failures remain debuggable (
c0089f2)
Major Changes
-
Move live loaders to the
/livesubpath.liveGithubPrsLoaderis no longer exported from the package root, so import it from the/livesubpath instead: (41b7369)import { liveGithubPrsLoader } from "astro-loader-github-prs/live";
This keeps the package root focused on build-time loaders and prevents build-time users from loading live runtime dependencies such as
astro:env/server -
Use Astro's adapter-backed
getSecret()for live loader GitHub tokens instead ofimport.meta.env, avoiding build-time inlining and allowing runtime-provided secrets to be read per request (41b7369) -
Implement the Astro 6 migration change where schema types are inferred instead of generated, while preserving accurate loader-based entry data inference and avoiding Zod 4 internal type leakage in published declarations (
41b7369)
Patch Changes
- #16496
4d79750Thanks @fkatsuhiro! - Fixed an issue where type errors occurred during testing library type checks because Astro overrides Svelte 5 component types.
Patch Changes
- #16837
783c4a6Thanks @jdevalk! - Improves<lastmod>accuracy in the sitemap index. Each<sitemap>entry insitemap-index.xmlis now stamped with the most recentlastmodof the URLs in the child sitemap it points to, instead of repeating a single global date on every entry. When a child sitemap has no per-URLlastmod, the entry falls back to thelastmodoption as before. This gives search engines a per-file freshness signal, so they can tell which child sitemaps actually changed without refetching all of them.
Patch Changes
- #16719
2b1df12Thanks @alexisintech! - fix MDX syntax highlighting for indented astro codeblocks
Patch Changes
- Updated dependencies [
d365c97]:- @astrojs/internal-helpers@0.9.1
Patch Changes
- #16627
5778cb7Thanks @Princesseuh! - Fixes unintended dependency on thetypescriptpackage being available to the language server
Patch Changes
- #16260
354e231Thanks @gameroman! - Refactors internal config logic to remove thedlvdependency in favor of native logic
Minor Changes
-
#16289
5d580c0Thanks @maxmalkin! - Adds a newgetDbError()helper exported fromastro:db. It walks the error.causechain and returns the underlyingLibsqlError, orundefinedif the error did not originate from libSQL. This is needed becausedrizzle-orm0.44+ wraps query errors in aDrizzleQueryErrorwhose.causeis the realLibsqlError.Upgrading
Code that reads
.codeor.messageafter catching a database error should migrate fromisDbError()togetDbError():// Before import { isDbError } from 'astro:db'; try { await db.insert(MyTable).values({ ... }); } catch (e) { if (isDbError(e)) { console.error(e.code, e.message); } } // After import { getDbError } from 'astro:db'; try { await db.insert(MyTable).values({ ... }); } catch (e) { const dbError = getDbError(e); if (dbError) { console.error(dbError.code, dbError.message); } }
isDbError()is still exported and still returnstruefor wrapped errors, but its return type is nowbooleaninstead of theerr is LibsqlErrortype predicate. Code that relied on the narrowing to access.codeor.messagedirectly will now produce a TypeScript error pointing you togetDbError().
Patch Changes
- #16289
5d580c0Thanks @maxmalkin! - Fixes a SQL injection vulnerability by updatingdrizzle-ormto^0.45.2, patching GHSA-gpj5-g38j-94v9 (CVE-2026-39356).
🚀 Features
- Add loader to
/highlightspage - by @lin-stephanie (2fe1f) - frontmatter:
- Support auto-generating
minutesReadwhen true and hiding it when false; allow emptyredirectto disable redirection - by @lin-stephanie (92dba) - Add
coverandcoverAltfields to support post cover - by @lin-stephanie (71ade)
- Support auto-generating
- tag:
- Add tag sidebar for
ListViewandCardView- by @lin-stephanie in #68 (57736)
- Add tag sidebar for
🐞 Bug Fixes
- Prevent white flash when switching to dark mode on Chrome 140+, keep Safari 18+ unaffected - by @lin-stephanie in #45 (c0547)
- astro: Prevent reset styles from overriding custom css after build - by @lin-stephanie (665c9)
- 92dba84 & 71ade35 - by @lin-stephanie (46fbf)
- Prevent right desktop aside shift when search panel toggles - by @lin-stephanie (2580b)
- Initialize theme earlier in
Head& prevent duplicate system theme listeners - by @lin-stephanie (74012) - Issues from latest dependency update and others - by @lin-stephanie (05786)
🏡 Chore
- eslint: Migrate to defineConfig & remove redundant eslintRecommended - by @lin-stephanie (da105)
- Simplify tag ui in ListItem - by @lin-stephanie (eb8cd)
- Update docs - by @lin-stephanie (51b98)
- Update deps & GitHub actions (exclude ESLint/Astro) - by @lin-stephanie (3dcc3)
View changes on GitHub
Patch Changes
- #16257
e0b240eThanks @gameroman! - Removeddebugdependency
Patch Changes
- #16265
7fe40bcThanks @ChrisLaRocque! - Updates@qwik.dev/partytownto 0.13.2
Patch Changes
- #16034
814406dThanks @alexanderniebuhr! - Fixes generated redirect files to respect Astro’strailingSlashconfiguration, so redirect routes work with the expected URL format in built output instead of returning a 404 when accessed with a trailing slash.
Last fetched: | Scheduled refresh: Every Saturday
See astro-loaders documentation to configure your own
Inspired by releases.antfu.me