Skip to content
TIANKAI XIE

GitHub Releases

Optional build-time activity feed using astro-loader-github-releases

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #17209 fbcfa03 Thanks @matthewp! - Hardens RSS feed generation by escaping the source and enclosure item fields. These fields are now serialized as structured XML values, ensuring that special characters in values like source.title and enclosure.type are always treated as text rather than markup, consistent with how other feed fields are handled.
withastro/astro

Patch Changes

  • #17188 675d11d Thanks @astrobot-houston! - Fixes @astrojs/upgrade showing a generic error when pnpm's minimumReleaseAge policy blocks installation. The error message now explains that pnpm's policy blocked the update and suggests running the install command manually.
withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #17189 24d2c9e Thanks @astrobot-houston! - Fixes a bug where an error thrown inside one route's getStaticPaths() would prevent other valid routes from being matched in dev mode

  • #16932 8f4a3db Thanks @fkatsuhiro! - Fixes HMR for action files during development. Editing files in src/actions/ now takes effect on the next request without requiring a dev server restart.

  • #17087 fb0ab02 Thanks @jp-knj! - Fixes localized custom error pages in i18n projects so routes like /pt/404 are used for missing localized pages and return the correct status code

withastro/astro

Minor Changes

  • #17185 d64b09b Thanks @delucis! - Adds a --no-ai flag to allow users to opt out of creating AGENTS.md and CLAUDE.md files when running create astro
withastro/astro

Patch Changes

  • #17175 7a7d879 Thanks @astrobot-houston! - Fixes astro dev OOM crashes for @astrojs/cloudflare users on Vite 8 by migrating the frontmatter scan plugin to Rolldown-compatible options.

  • #17187 0db4b57 Thanks @matthewp! - Fixes React invalid hook warning during cold SSR optimizer reload when using ClientRouter

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/starlight

Patch Changes

withastro/starlight

Minor Changes

  • #3951 1202dd4 Thanks @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

  • #3953 a935d33 Thanks @HiDeoo! - Fixes Starlight Markdown processing being potentially applied to files that should not be processed.
withastro/starlight

Minor Changes

  • #3951 1202dd4 Thanks @HiDeoo! - ⚠️ BREAKING CHANGE: The minimum supported version of Starlight is now 0.41.0

    Please use the @astrojs/upgrade command to upgrade your project:

    npx @astrojs/upgrade
withastro/astro

Patch Changes

  • #17165 3b5e994 Thanks @Princesseuh! - Fixes headings being listed twice in a page's headings metadata when an integration (such as Starlight) assigns heading IDs with its own heading pass before adding anchor links
withastro/astro

Patch Changes

  • Updated dependencies [3b5e994]:
    • @astrojs/markdown-satteri@0.3.2
withastro/astro

Patch Changes

  • #17151 ccceda3 Thanks @matthewp! - Fixes astro dev incorrectly starting in background mode for Warp terminal users. Hybrid environments like Warp are no longer treated as AI agents for auto-background detection.

  • #17158 164df87 Thanks @ematipico! - Fixes astro dev --background --host not listing the network addresses. The background server start output and astro dev status now show every exposed network URL, matching the foreground dev server.

  • #17141 d785b9d Thanks @astrobot-houston! - Fixes responsive image CSS overriding user styles defined inside CSS @layer blocks. The generated image styles are now wrapped in @layer astro.images, ensuring they have lower cascade priority than user-defined layers.

  • #17150 1a61386 Thanks @matthewp! - Fixes astro dev --background failing on Windows with "Failed to spawn background dev server process"

withastro/astro

Major Changes

Minor Changes

  • #16335 9a53f77 Thanks @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 import cacheCloudflare() 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 calling cache.invalidate() throws an error.

    Setup

    Import cacheCloudflare() from @astrojs/cloudflare/cache and 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 sets Cloudflare-CDN-Cache-Control and Cache-Tag headers, 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 96398e8 Thanks @adamchal! - Speeds up astro sync by no longer starting the Cloudflare runtime during type generation

  • #16671 fd926fd Thanks @alexanderniebuhr! - Removes deprecations warnings added in Astro v6 for Cloudflare specific Astro.locals properties.

  • #17027 241250b Thanks @ocavue! - Triggers beta prereleases for packages that are still on alpha

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/astro

Major Changes

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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

withastro/astro

Major Changes

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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 ff7b718 Thanks @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

withastro/astro

Minor Changes

  • #17122 cbd6123 Thanks @matthewp! - Adds a default AGENTS.md file to new projects with dev server instructions and documentation links. Also creates a CLAUDE.md symlink (with hard link fallback) pointing to AGENTS.md.
withastro/astro

Major Changes

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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 9d9d516 Thanks @ocavue! - Updates @sveltejs/vite-plugin-svelte to v7. No user action is necessary.

Patch Changes

withastro/astro

Major Changes

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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

withastro/astro

Major Changes

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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

withastro/astro

Major Changes

Patch Changes

withastro/astro

Major Changes

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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

withastro/astro

Patch Changes

withastro/astro

Major Changes

  • #15819 cafec4e Thanks @delucis! - Upgrade to Vite v8

  • #16965 57ead0d Thanks @Princesseuh! - Makes 'jsx' the default value for compressHTML

    Astro 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: true for HTML-aware compression, or compressHTML: false to preserve all whitespace.

  • #16610 c63e7e4 Thanks @matthewp! - Adds background dev server management for AI coding agents.

    When an AI coding agent is detected, astro dev now 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 dev behaves 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 use astro dev stop to shut it down.

    To opt out of automatic background mode when an agent is detected, set the environment variable ASTRO_DEV_BACKGROUND=0 before running astro dev.

  • #17010 0606073 Thanks @ocavue! - Removes the @astrojs/db package as it is no longer maintained.

    The @astrojs/db package were deprecated in v6.4.5 and is now removed. This means the astro db, astro login, astro logout, astro link, and astro init CLI commands have also been removed.

    If you were using Astro DB in your project, remove @astrojs/db from 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:sqlite module (available since Node.js v22.5.0). This is a good option if you are using the Node.js adapter and were using @astrojs/db for local SQLite storage.
    • Drizzle ORM: If you were using @astrojs/db for 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).
  • #16462 c30a778 Thanks @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.rustCompiler flag used to opt into the Rust compiler. If you were setting experimental.rustCompiler in your astro.config.mjs, you can now remove it. No other action is required.

  • #16966 6650ec2 Thanks @Princesseuh! - Makes Sätteri the default Markdown processor

    Astro now renders .md files with satteri() from @astrojs/markdown-satteri, its native Markdown pipeline, instead of the remark/rehype pipeline. @astrojs/markdown-remark is no longer installed by default.

    To keep using the remark/rehype pipeline, install @astrojs/markdown-remark and 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, and markdown.remarkRehype options still work, but now require @astrojs/markdown-remark to be used.

  • #16877 3b7d76e Thanks @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.ts as default entrypoint instead of src/app.ts.

    If you were previously using this feature without a custom entrypoint, please configure fetchFile or rename your entrypoint to src/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.
    });

    fetchFile is now a top-level config option instead of being nested under experimental.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: null to disable the entrypoint if you are using src/fetch.ts for 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 10229f7 Thanks @ArmandPhilippot! - Removes deprecated APIs exported from astro:transitions.

    In Astro 6.x, some helpers available in astro:transitions and astro:transitions/client were deprecated.

    In Astro 7.0, the following APIs can no longer be used in your project:

    • TRANSITION_BEFORE_PREPARATION
    • TRANSITION_AFTER_PREPARATION
    • TRANSITION_BEFORE_SWAP
    • TRANSITION_AFTER_SWAP
    • TRANSITION_PAGE_LOAD
    • isTransitionBeforePreparationEvent()
    • 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 57dcc31 Thanks @matthewp! - Exposes getFetchState() from astro/hono as a public API

    The getFetchState() function retrieves or lazily creates a FetchState from a Hono context object. This allows third-party packages to build Hono middleware that interacts with Astro's per-request state, giving the astro/hono API the same extensibility as astro/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 300641e Thanks @florian-lefebvre! - Adds a subset field to the FontData type exposed via fontData from astro: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 f864a80 Thanks @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, and console), 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.logger is 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 0d6d644 Thanks @ematipico! - Removes the setting experimental.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 f95e58e Thanks @ascorbic! - Stabilizes route caching, removing the experimental.cache and experimental.routeRules flags and replacing them with the top-level cache and routeRules configuration 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 cache and routeRules out of the experimental block:

    // 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 .astro pages) or context.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 using routeRules, without modifying route code.

    See the route caching guide for more information.

Patch Changes

  • #16980 1f07343 Thanks @matthewp! - Removes state.provide(), state.resolve(), state.finalizeAll(), and App.Providers from the public advanced routing API. These context provider extension points are now internal-only. If you were using them in an integration, use locals to share per-request state instead.

  • #17111 c0f33ed Thanks @ematipico! - Harden the limits on the number of decoding on the URL.

  • #16982 1e000e2 Thanks @matthewp! - Improves the warning when accessing Astro.session without session storage configured. The session property is now always defined on the context object, and accessing it without configuration logs a helpful message instead of silently returning undefined.

  • #16335 9a53f77 Thanks @ascorbic! - Adds shared helper utilities for CDN cache provider authors for route caching

    Exports astro/cache/provider-utils with 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 e84ebc0 Thanks @matthewp! - Improves build performance by removing an unfiltered transform hook from the astro:head-metadata-build plugin. Head propagation modules are now identified by their module ID (?astroPropagatedAssets) instead of scanning every module's source code.

  • #17041 4c4a91c Thanks @iseraph-dev! - Fixes a bug where the advanced routing astro/hono / astro/fetch pages() handler returned the host framework's default Internal Server Error response instead of rendering the custom 500.astro page 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 5e340d7 Thanks @iseraph-dev! - Fixes a bug where the advanced routing astro/hono / astro/fetch middleware() handler returned the host framework's default Internal Server Error response instead of rendering the custom 500.astro page 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 through next (the host framework's downstream chain) still propagate to the host's own error handler.

  • #15819 cafec4e Thanks @delucis! - Fixes --port flag being ignored after a Vite-triggered server restart (e.g. when a .env file changes)

  • #17104 b074a37 Thanks @iseraph-dev! - Fixes the custom 500.astro page receiving an empty error prop when the error originated in middleware.

  • #17078 04547ec Thanks @astrobot-houston! - Fixes a spurious Astro.request.headers warning on prerendered pages when security.allowedDomains is configured. The internal allowedDomains header validation now skips prerendered routes, since they use synthetic requests with no real headers.

  • #16603 deaaf3f Thanks @alexanderniebuhr! - Removes the warning that Astro does not support vite v8, since Astro v7 does support vite v8

  • #16335 9a53f77 Thanks @ascorbic! - Passes the Request object to CacheProvider.setHeaders() for route caching

    Cache providers now receive the incoming Request as a second argument to setHeaders(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 637a1b6 Thanks @matthewp! - Fixes internal Astro headers leaking from direct pages() handler responses

  • #17090 3cf76c0 Thanks @matthewp! - Fixes Vite and Rolldown build warnings

  • #16434 ee079d4 Thanks @ematipico! - Fixes an issue where i18n domains would return 404 when trailingSlash is set to never.

  • Updated dependencies [7e7ab87, ff7b718, 241250b]:

    • @astrojs/markdown-satteri@0.3.1
withastro/astro

Major Changes

Minor Changes

  • #16335 9a53f77 Thanks @ascorbic! - Adds a CDN cache provider for Astro route caching on Netlify

    Setup

    Import cacheNetlify() from @astrojs/netlify/cache and 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

  • #17027 241250b Thanks @ocavue! - Triggers beta prereleases for packages that are still on alpha

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/astro

Major Changes

Minor Changes

  • #16335 9a53f77 Thanks @ascorbic! - Adds a CDN cache provider for Astro route caching on Vercel

    Setup

    Import cacheVercel() from @astrojs/vercel/cache and 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 sets Vercel-CDN-Cache-Control and Vercel-Cache-Tag headers 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

withastro/astro

Major Changes

Patch Changes

withastro/astro

Patch Changes

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

  • #17027 241250b Thanks @ocavue! - Triggers beta prereleases for packages that are still on alpha

withastro/astro

Minor Changes

  • #17116 f95e58e Thanks @ascorbic! - Stabilizes route caching, removing the experimental.cache and experimental.routeRules flags and replacing them with the top-level cache and routeRules configuration 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 cache and routeRules out of the experimental block:

    // 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 .astro pages) or context.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 using routeRules, without modifying route code.

    See the route caching guide for more information.

Patch Changes

  • #17090 3cf76c0 Thanks @matthewp! - Fixes Vite and Rolldown build warnings

  • Updated dependencies [7e7ab87]:

    • @astrojs/markdown-satteri@0.3.1-beta.2
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #16961 96398e8 Thanks @adamchal! - Speeds up astro sync by no longer starting the Cloudflare runtime during type generation

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/astro

Minor Changes

  • #17122 cbd6123 Thanks @matthewp! - Adds a default AGENTS.md file to new projects with dev server instructions and documentation links. Also creates a CLAUDE.md symlink (with hard link fallback) pointing to AGENTS.md.
withastro/astro

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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.

withastro/astro

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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.

withastro/astro

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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.

withastro/astro

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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.

withastro/astro

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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.

withastro/astro

Minor Changes

  • #17093 4585fe5 Thanks @Princesseuh! - Replaces the import entrypoint of getContainerRenderer()

    A new container-renderer entrypoint exporting getContainerRenderer() 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.

withastro/astro

Patch Changes

  • #17054 d426b67 Thanks @astrobot-houston! - Fixes an issue where Astro files with non-ASCII characters in their name weren't correctly served after the build.
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #17018 1310277 Thanks @matthewp! - Hardens remotePatterns regex generation to match canonical wildcard semantics more strictly

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/starlight

Minor Changes

  • #3923 edf2e6b Thanks @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-satteri package and configuring it in your astro.config.mjs file:

    // 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

withastro/astro

Patch Changes

  • #16964 b048826 Thanks @Princesseuh! - Deprecates the @astrojs/db integration. 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.
withastro/astro

Minor Changes

  • #16571 d4b0cd1 Thanks @MA2153! - Sets immutable cache headers for static assets

    Static assets under _astro can be cached to improve performance. The adapter now automatically injects a Cache-Control header at build time when possible.

Patch Changes

  • #16968 7a5c001 Thanks @astrobot-houston! - Fixes a build crash when using experimental.advancedRouting with a custom fetchFile that statically imports cf from @astrojs/cloudflare/fetch. The circular dependency between @astrojs/cloudflare/fetch and astro/app/entrypoint caused createApp or createGetEnv to be undefined at module evaluation time. Initialization is now deferred to the first cf() call, breaking the cycle.

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/astro

Patch Changes

  • #16985 4ecff32 Thanks @maximslo! - Fixes the experimental.logger destination not being used for the "Server listening on..." startup message. The logger is now resolved before the server starts listening, and adapterLogger re-creates itself when the underlying logger changes so the startup message uses the correct destination.
withastro/astro

Patch Changes

  • #16969 4a31f90 Thanks @Princesseuh! - Adds support for Prism syntax highlighting to the Sätteri Markdown and MDX processors. Setting markdown.syntaxHighlight to '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',
      },
    });
withastro/astro

Minor Changes

  • #16969 4a31f90 Thanks @Princesseuh! - Adds support for Prism syntax highlighting to the Sätteri Markdown and MDX processors. Setting markdown.syntaxHighlight to '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',
      },
    });
withastro/astro

Minor Changes

  • #16549 9d9d516 Thanks @ocavue! - Updates @sveltejs/vite-plugin-svelte to v7. No user action is necessary.
withastro/astro

Patch Changes

  • #16922 7dce185 Thanks @astrobot-houston! - Fixes prerendered pages returning 404 when using build.format: 'file' or build.format: 'preserve' with the Node adapter in standalone mode.

    Previously, clean URLs like /about would fail to resolve to about.html on disk, because the static file handler only supported the default directory format (about/index.html). Now the handler correctly resolves clean URLs to .html files when the build format produces them.

withastro/astro

Patch Changes

  • #16693 9e6edc2 Thanks @ArmandPhilippot! - Fixes a link in the documentation specifying where to open an issue for the adapter.

  • Updated dependencies []:

    • @astrojs/underscore-redirects@1.0.3
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/starlight

Patch Changes

withastro/astro

0.10.0

Minor Changes

  • #16848 f732f3c Thanks @Princesseuh! - Adds markdown, frontmatter, and shiki helper modules, shared by Astro's content pipeline.
withastro/astro

1.0.6

Patch Changes

  • #16848 f732f3c Thanks @Princesseuh! - Removes @astrojs/markdown-remark from @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
withastro/astro

7.2.0

Minor Changes

  • #16848 f732f3c Thanks @Princesseuh! - Adds a new markdown.processor configuration 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 the satteri() 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, and markdown.smartypants options still work, but are now deprecated and will be removed in a future major update. The matching remarkPlugins, rehypePlugins, and remarkRehype options on the MDX integration are also deprecated for the same reason. To anticipate their removal, move them onto unified({...}) (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
withastro/astro

Patch Changes

  • Updated dependencies [f732f3c]:
    • @astrojs/internal-helpers@0.10.0
    • @astrojs/underscore-redirects@1.0.3
withastro/astro

Patch Changes

  • Updated dependencies [f732f3c]:
    • @astrojs/internal-helpers@0.10.0
withastro/astro

Patch Changes

  • Updated dependencies [f732f3c]:
    • @astrojs/internal-helpers@0.10.0
withastro/astro

Patch Changes

  • Updated dependencies [f732f3c]:
    • @astrojs/internal-helpers@0.10.0
lin-stephanie/astro-loaders
Sub logo

Major Changes

  • Remove the userCommit mode from build-time and live release loaders because GitHub no longer includes commit summaries in public PushEvent payloads. The mode: 'repoList' discriminator is also removed because repository-list loading is now the only supported behavior (c0089f2)

  • Move live loaders to the /live subpath. liveGithubReleasesLoader is no longer exported from the package root, so import it from the /live subpath 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 of import.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 entryReturnType 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 object intersection with extend() for the extended post schema
lin-stephanie/astro-loaders

Major Changes

  • Update the default Instagram API version from v23.0 to v25.0 (c0089f2)

  • Move live loaders to the /live subpath. liveInsMediasLoader is no longer exported from the package root, so import it from the /live subpath 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 of import.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 with catchall(z.unknown()) to keep allowing extra fields without requiring Zod 4-only z.looseObject()
lin-stephanie/astro-loaders

Patch Changes

lin-stephanie/astro-loaders

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 with catchall(z.unknown()) to keep allowing extra fields without requiring Zod 4-only z.looseObject();
    • Replace z.any() label entries with z.unknown() to avoid leaking any into inferred entry data;
    • Replace object intersection with extend() for the extended post schema;
    • Intentionally keep deprecated string format methods such as z.string().url() and z.string().datetime() for compatibility with older Astro/Zod versions.
  • Add config-specific loader overloads so fetchThread and fetchOnlyAuthorReplies infer the matching entry data shape (c0089f2)

  • Use the public @atproto/api AppBskyFeedDefs exports and type guards instead of internal dist/client/types imports (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 uris so rendering and thread option changes trigger a reload (c0089f2)

  • Preserve stack traces in loader error logs so failures remain debuggable (c0089f2)

lin-stephanie/astro-loaders
Sub logo

Major Changes

  • Move live loaders to the /live subpath. liveGithubPrsLoader is no longer exported from the package root, so import it from the /live subpath 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 of import.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)

withastro/astro

Patch Changes

  • #16827 90ee151 Thanks @matthewp! - Fixes a crash in the language server and astro check when using TypeScript project references with .vue or .svelte files
withastro/astro

Patch Changes

  • #16496 4d79750 Thanks @fkatsuhiro! - Fixed an issue where type errors occurred during testing library type checks because Astro overrides Svelte 5 component types.
withastro/astro

Patch Changes

  • #16837 783c4a6 Thanks @jdevalk! - Improves <lastmod> accuracy in the sitemap index. Each <sitemap> entry in sitemap-index.xml is now stamped with the most recent lastmod of 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-URL lastmod, the entry falls back to the lastmod option 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.
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #16661 03b8f7f Thanks @ocavue! - Updates typescript to v6. No changes are needed from users.

  • Updated dependencies [03b8f7f]:

    • @astrojs/yaml2ts@0.2.4
withastro/astro

Patch Changes

  • #16661 03b8f7f Thanks @ocavue! - Updates typescript to v6. No changes are needed from users.

  • Updated dependencies [03b8f7f]:

    • @astrojs/yaml2ts@0.2.4
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #15723 9256345 Thanks @rururux! - Updates internal type usage from @astrojs/prism.

  • Updated dependencies [d365c97, 9256345, 9256345]:

    • @astrojs/internal-helpers@0.9.1
    • @astrojs/markdown-remark@7.1.2
    • @astrojs/prism@4.0.2
withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • Updated dependencies [d365c97]:
    • @astrojs/internal-helpers@0.9.1
withastro/astro

Patch Changes

  • #15723 9256345 Thanks @rururux! - Fixes an issue where the <Prism /> component failed to work in Cloudflare Workers.
withastro/astro

Patch Changes

  • #15723 9256345 Thanks @rururux! - Updates internal type usage from @astrojs/prism.

  • Updated dependencies [d365c97, 9256345]:

    • @astrojs/internal-helpers@0.9.1
    • @astrojs/prism@4.0.2
withastro/astro

Patch Changes

  • #16544 d365c97 Thanks @matthewp! - Tightens isRemotePath() to reject control characters after a leading slash and fixes the dev image endpoint origin check
withastro/starlight

Patch Changes

  • #3890 2d05e18 Thanks @tats-u! - Fixes CSS selector for text-autospace styles in Chromium browsers
withastro/astro

Patch Changes

  • #16627 5778cb7 Thanks @Princesseuh! - Fixes unintended dependency on the typescript package being available to the language server
withastro/astro

Patch Changes

  • #16260 354e231 Thanks @gameroman! - Refactors internal config logic to remove the dlv dependency in favor of native logic
withastro/astro

Patch Changes

  • #16534 5cf6c51 Thanks @matthewp! - Fixes compatibility with Zod 4.4.0 for the server config property and error formatting
withastro/astro

Major Changes

Patch Changes

withastro/astro

Major Changes

Patch Changes

withastro/astro

Major Changes

withastro/astro

Major Changes

withastro/astro

Major Changes

withastro/astro

Minor Changes

  • #16289 5d580c0 Thanks @maxmalkin! - Adds a new getDbError() helper exported from astro:db. It walks the error .cause chain and returns the underlying LibsqlError, or undefined if the error did not originate from libSQL. This is needed because drizzle-orm 0.44+ wraps query errors in a DrizzleQueryError whose .cause is the real LibsqlError.

    Upgrading

    Code that reads .code or .message after catching a database error should migrate from isDbError() to getDbError():

    // 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 returns true for wrapped errors, but its return type is now boolean instead of the err is LibsqlError type predicate. Code that relied on the narrowing to access .code or .message directly will now produce a TypeScript error pointing you to getDbError().

Patch Changes

withastro/astro

Patch Changes

  • #16471 f56bb3f Thanks @delucis! - Adds support for TypeScript v6 to peer dependencies range

  • Updated dependencies [8c62159]:

    • @astrojs/language-server@2.16.7
withastro/astro

Patch Changes

  • #15908 8c62159 Thanks @felmonon! - Keep generated AstroComponent suffixes in language-server output while rewriting .astro auto-import suggestions and edits back to the expected component name.
withastro/astro

Patch Changes

  • #16424 3fcdaf1 Thanks @matthewp! - Improves how @astrojs/upgrade spawns package manager commands so it uses the same Windows command resolution as create-astro
withastro/astro

Patch Changes

  • #16419 f3485c3 Thanks @matthewp! - Hardens nested object and package metadata lookups to ignore prototype keys in content handling and project scaffolding

  • Updated dependencies [99464ed, f3485c3]:

    • @astrojs/internal-helpers@0.9.0
withastro/astro

Minor Changes

  • #16419 f3485c3 Thanks @matthewp! - Hardens nested object and package metadata lookups to ignore prototype keys in content handling and project scaffolding

Patch Changes

withastro/astro

Patch Changes

  • #16419 f3485c3 Thanks @matthewp! - Hardens nested object and package metadata lookups to ignore prototype keys in content handling and project scaffolding
lin-stephanie/astro-antfustyle-theme

   🚀 Features

   🐞 Bug Fixes

   🏡 Chore

    View changes on GitHub
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #16034 814406d Thanks @alexanderniebuhr! - Fixes generated redirect files to respect Astro’s trailingSlash configuration, 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