Skip to content

AstroEco is Releasing…

Display your GitHub releases using astro-loader-github-releases

withastro/astro

Patch Changes

  • #15017 9e7a3c8 Thanks @ixchio! - Fixes CSS double-bundling when the same CSS file is imported in both a page's frontmatter and a component's script tag

  • #15225 6fe62e1 Thanks @ematipico! - Updates to the latest version of devalue

withastro/astro

Patch Changes

  • #14863 29fd188 Thanks @drwpow! - Improves error message when using Node builtins inside Edge middlewares
withastro/astro

Minor Changes

  • #14471 4296373 Thanks @Slackluky! - Adds the ability to split sitemap generation into chunks based on customizable logic. This allows for better management of large sitemaps and improved performance. The new chunks option in the sitemap configuration allows users to define functions that categorize sitemap items into different chunks. Each chunk is then written to a separate sitemap file.

    integrations: [
      sitemap({
        serialize(item) { th
          return item
        },
        chunks: { // this property will be treated last on the configuration
          'blog': (item) => {  // will produce a sitemap file with `blog` name (sitemap-blog-0.xml)
            if (/blog/.test(item.url)) { // filter path that will be included in this specific sitemap file
              item.changefreq = 'weekly';
              item.lastmod = new Date();
              item.priority = 0.9; // define specific properties for this filtered path
              return item;
            }
          },
          'glossary': (item) => {
            if (/glossary/.test(item.url)) {
              item.changefreq = 'weekly';
              item.lastmod = new Date();
              item.priority = 0.7;
              return item;
            }
          }
    
          // the rest of the path will be stored in `sitemap-pages.0.xml`
        },
      }),
    ],
    
    
withastro/astro

Patch Changes

  • #15196 a8317c1 Thanks @ematipico! - Fixes an issue where some prendered pages weren't correctly rendered when using the Node.js adapter in middleware mode.

  • #15169 b803d8b Thanks @rururux! - fix: fix image 500 error when moving dist directory in standalone Node

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #15199 d8e64ef Thanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure.

  • Updated dependencies []:

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

Patch Changes

withastro/astro

Patch Changes

  • 2fa19c4 - Improved error handling in the rendering phase

    Added defensive validation in App.render() and #renderError() to provide a descriptive error message when a route module doesn't have a valid page function.

  • #15199 d8e64ef Thanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure.

  • #15169 b803d8b Thanks @rururux! - fix: fix image 500 error when moving dist directory in standalone Node

  • #14622 9b35c62 Thanks @aprici7y! - Fixes CSS url() references to public assets returning 404 in dev mode when base path is configured

  • #15219 43df4ce Thanks @matthewp! - Upgrades the diff package to v8

withastro/starlight

Patch Changes

  • #3648 292666c Thanks @maxchang3! - Prevents unwanted font size adjustments on iOS after orientation changes.
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #15187 bbb5811 Thanks @matthewp! - Update to Astro 6 beta

  • Updated dependencies []:

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

Patch Changes

  • Updated dependencies [bbb5811, bbb5811]:
    • @astrojs/markdown-remark@7.0.0-beta.1
    • @astrojs/prism@4.0.0-beta.1
withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • Updated dependencies [bbb5811]:
    • @astrojs/markdown-remark@7.0.0-beta.1
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

  • #15125 6feb0d7 Thanks @florian-lefebvre! - Improves JSDoc annotations for AstroGlobal, AstroSharedContext and APIContext types

  • #15176 9265546 Thanks @matthewp! - Fixes hydration for framework components inside MDX when using Astro.slots.render()

    Previously, when multiple framework components with client:* directives were passed as named slots to an Astro component in MDX, only the first slot would hydrate correctly. Subsequent slots would render their HTML but fail to include the necessary hydration scripts.

  • #15125 6feb0d7 Thanks @florian-lefebvre! - Fixes remote images Etag header handling by disabling internal cache

  • #15121 06261e0 Thanks @ematipico! - Fixes a bug where the Astro, with the Cloudlfare integration, couldn't correctly serve certain routes in the development server.

  • #15125 6feb0d7 Thanks @florian-lefebvre! - Fixes images not working in development when using setups with port forwarding

  • #15137 2f70bf1 Thanks @matthewp! - Adds legacy.collectionsBackwardsCompat flag that restores v5 backwards compatibility behavior for legacy content collections - (v6 upgrade guidance)

    When enabled, this flag allows:

    • Collections defined without loaders (automatically get glob loader)
    • Collections with type: 'content' or type: 'data'
    • Config files located at src/content/config.ts (legacy location)
    • Legacy entry API: entry.slug and entry.render() methods
    • Path-based entry IDs instead of slug-based IDs
    // astro.config.mjs
    export default defineConfig({
      legacy: {
        collectionsBackwardsCompat: true,
      },
    });

    This is a temporary migration helper for v6 upgrades. Migrate collections to the Content Layer API, then disable this flag.

  • #15125 6feb0d7 Thanks @florian-lefebvre! - Reduces Astro’s install size by around 8 MB

  • #15125 6feb0d7 Thanks @florian-lefebvre! - Enables the ClientRouter to preserve the original hash part of the target URL during server side redirects.

  • #15125 6feb0d7 Thanks @florian-lefebvre! - BREAKING CHANGE to the experimental Fonts API only

    Changes the font format downloaded by default when using the experimental Fonts API. Additionally, adds a new formats configuration option to specify which font formats to download.

    Previously, Astro was opinionated about which font sources would be kept for usage, mainly keeping woff2 and woff files.

    You can now specify what font formats should be downloaded (if available). Only woff2 files are downloaded by default.

    What should I do?

    If you were previously relying on Astro downloading the woff format, you will now need to specify this explicitly with the new formats configuration option. Additionally, you may also specify any additional file formats to download if available:

    // astro.config.mjs
    import { defineConfig, fontProviders } from 'astro/config'
    
    export default defineConfig({
        experimental: {
            fonts: [{
                name: 'Roboto',
                cssVariable: '--font-roboto',
                provider: fontProviders.google(),
    +            formats: ['woff2', 'woff', 'otf']
            }]
        }
    })
  • #15179 8c8aee6 Thanks @HiDeoo! - Fixes an issue when importing using an import alias a file with a name matching a directory name.

  • #15176 9265546 Thanks @matthewp! - Fixes scripts in components not rendering when a sibling <Fragment slot="..."> exists but is unused

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #15080 f67b738 Thanks @gameroman! - Updates wrangler dependency to be a peerDependency over a dependency

  • #15121 06261e0 Thanks @ematipico! - Fixes a bug where the Astro, with the Cloudlfare integration, couldn't correctly serve certain routes in the development server.

  • Updated dependencies []:

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

Patch Changes

  • #15164 54dc11d Thanks @HiDeoo! - Fixes an issue where the Node.js adapter could fail to serve a 404 page matching a pre-rendered dynamic route pattern.
withastro/astro

Patch Changes

  • #15174 37ab65a Thanks @florian-lefebvre! - Adds Google Icons to built-in font providers

    To start using it, access it on fontProviders:

    import { defineConfig, fontProviders } from 'astro/config';
    
    export default defineConfig({
      experimental: {
        fonts: [
          {
            name: 'Material Symbols Outlined',
            provider: fontProviders.googleicons(),
            cssVariable: '--font-material',
          },
        ],
      },
    });
  • #15150 a77c4f4 Thanks @matthewp! - Fixes hydration for framework components inside MDX when using Astro.slots.render()

    Previously, when multiple framework components with client:* directives were passed as named slots to an Astro component in MDX, only the first slot would hydrate correctly. Subsequent slots would render their HTML but fail to include the necessary hydration scripts.

  • #15130 9b726c4 Thanks @florian-lefebvre! - BREAKING CHANGE to the experimental Fonts API only

    Changes how font providers are implemented with updates to the FontProvider type

    This is an implementation detail that changes how font providers are created. This process allows Astro to take more control rather than relying directly on unifont types. All of Astro's built-in font providers have been updated to reflect this new type, and can be configured as before. However, using third-party unifont providers that rely on unifont types will require an update to your project code.

    Previously, an Astro FontProvider was made of a config and a runtime part. It relied directly on unifont types, which allowed a simple configuration for third-party unifont providers, but also coupled Astro's implementation to unifont, which was limiting.

    Astro's font provider implementation is now only made of a config part with dedicated hooks. This allows for the separation of config and runtime, but requires you to create a font provider object in order to use custom font providers (e.g. third-party unifont providers, or private font registeries).

    What should I do?

    If you were using a 3rd-party unifont font provider, you will now need to write an Astro FontProvider using it under the hood. For example:

    // astro.config.ts
    import { defineConfig } from "astro/config";
    import { acmeProvider, type AcmeOptions } from '@acme/unifont-provider'
    +import type { FontProvider } from "astro";
    +import type { InitializedProvider } from 'unifont';
    
    +function acme(config?: AcmeOptions): FontProvider {
    +	const provider = acmeProvider(config);
    +	let initializedProvider: InitializedProvider | undefined;
    +	return {
    +		name: provider._name,
    +		config,
    +		async init(context) {
    +			initializedProvider = await provider(context);
    +		},
    +		async resolveFont({ familyName, ...rest }) {
    +			return await initializedProvider?.resolveFont(familyName, rest);
    +		},
    +		async listFonts() {
    +			return await initializedProvider?.listFonts?.();
    +		},
    +	};
    +}
    
    export default defineConfig({
        experimental: {
            fonts: [{
    -            provider: acmeProvider({ /* ... */ }),
    +            provider: acme({ /* ... */ }),
                name: "Material Symbols Outlined",
                cssVariable: "--font-material"
            }]
        }
    });
  • #15147 9cd5b87 Thanks @matthewp! - Fixes scripts in components not rendering when a sibling <Fragment slot="..."> exists but is unused

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #15083 241bb31 Thanks @fkatsuhiro! - Fix "Find All References" and other TypeScript features by ensuring the plugin bundle is correctly included

  • #15109 e062101 Thanks @Princesseuh! - Fixes syntax highlighting sometimes not working when the frontmatter or script tags ended with certain TypeScript constructs

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/starlight

Patch Changes

withastro/astro

Patch Changes

  • #15079 4463a55 Thanks @ascorbic! - Fixes auto-provisioning of default bindings (SESSION KV, IMAGES, and ASSETS). Default bindings are now correctly applied whether or not you have a wrangler.json file.
    Previously, these bindings were only added when no wrangler config file existed. Now they are added in both cases, unless you've already defined them yourself.

  • #15075 ee2c260 Thanks @matthewp! - Adds deprecation errors for Astro.locals.runtime properties to help migrate from Astro v5 to v6

    When accessing the removed Astro.locals.runtime properties on Cloudflare, developers now receive clear error messages explaining the migration path:

    • Astro.locals.runtime.env → Use import { env } from "cloudflare:workers"
    • Astro.locals.runtime.cf → Use Astro.request.cf
    • Astro.locals.runtime.caches → Use the global caches object
    • Astro.locals.runtime.ctx → Use Astro.locals.cfContext
  • Updated dependencies []:

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

Minor Changes

  • #15006 f361730 Thanks @florian-lefebvre! - Adds new session driver object shape

    For greater flexibility and improved consistency with other Astro code, session drivers are now specified as an object:

    -import { defineConfig } from 'astro/config'
    +import { defineConfig, sessionDrivers } from 'astro/config'
    
    export default defineConfig({
      session: {
    -    driver: 'redis',
    -    options: {
    -      url: process.env.REDIS_URL
    -    },
    +    driver: sessionDrivers.redis({
    +      url: process.env.REDIS_URL
    +    }),
      }
    })

    Specifying the session driver as a string has been deprecated, but will continue to work until this feature is removed completely in a future major version. The object shape is the current recommended and documented way to configure a session driver.

withastro/astro

Patch Changes

  • #15045 31074fc Thanks @ematipico! - Fixes an issue where using the Vue integration with the Cloudflare adapter resulted in some runtime errors.
withastro/astro

Minor Changes

  • #15006 f361730 Thanks @florian-lefebvre! - Adds new session driver object shape

    For greater flexibility and improved consistency with other Astro code, session drivers are now specified as an object:

    -import { defineConfig } from 'astro/config'
    +import { defineConfig, sessionDrivers } from 'astro/config'
    
    export default defineConfig({
      session: {
    -    driver: 'redis',
    -    options: {
    -      url: process.env.REDIS_URL
    -    },
    +    driver: sessionDrivers.redis({
    +      url: process.env.REDIS_URL
    +    }),
      }
    })

    Specifying the session driver as a string has been deprecated, but will continue to work until this feature is removed completely in a future major version. The object shape is the current recommended and documented way to configure a session driver.

Patch Changes

  • Updated dependencies []:
    • @astrojs/underscore-redirects@1.0.0
withastro/astro

Minor Changes

  • #15006 f361730 Thanks @florian-lefebvre! - Adds new session driver object shape

    For greater flexibility and improved consistency with other Astro code, session drivers are now specified as an object:

    -import { defineConfig } from 'astro/config'
    +import { defineConfig, sessionDrivers } from 'astro/config'
    
    export default defineConfig({
      session: {
    -    driver: 'redis',
    -    options: {
    -      url: process.env.REDIS_URL
    -    },
    +    driver: sessionDrivers.redis({
    +      url: process.env.REDIS_URL
    +    }),
      }
    })

    Specifying the session driver as a string has been deprecated, but will continue to work until this feature is removed completely in a future major version. The object shape is the current recommended and documented way to configure a session driver.

Patch Changes

  • #15044 7cac71b Thanks @florian-lefebvre! - Removes an exposed internal API of the preview server

  • #15039 6cc96e7 Thanks @matthewp! - Fixes static content deployment by moving it to another folder, so Wrangler can tell the static and worker content apart

  • #15045 31074fc Thanks @ematipico! - Fixes an issue where using the Vue integration with the Cloudflare adapter resulted in some runtime errors.

  • #15053 674b63f Thanks @matthewp! - Excludes astro:* and virtual:astro:* from client optimizeDeps in core. Needed for prefetch users since virtual modules are now in the dependency graph.

  • Updated dependencies []:

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

Major Changes

  • #15037 8641805 Thanks @matthewp! - Updates the Wrangler entrypoint

    Previously, the main field in wrangler.jsonc pointed to the built output, since Wrangler only ran in production after the build completed:

    {
      "main": "dist/_worker.js/index.js",
    }

    Now that Wrangler runs in both development (via workerd) and production, Astro provides a default entrypoint that works for both scenarios.

    What should I do?

    Update your wrangler.jsonc to use the new entrypoint:

    {
      "main": "@astrojs/cloudflare/entrypoints/server",
    }

    This single entrypoint handles both astro dev and production deployments.

Minor Changes

  • #15037 8641805 Thanks @matthewp! - The Wrangler configuration file is now optional. If you don't have custom Cloudflare bindings (KV, D1, Durable Objects, etc.), Astro will automatically generate a default configuration for you.

    What should I do?

    If your wrangler.jsonc only contains basic configuration like this:

    {
      "main": "@astrojs/cloudflare/entrypoints/server",
      "compatibility_date": "2025-05-21",
      "assets": {
        "directory": "./dist",
        "binding": "ASSETS",
      },
    }

    You can safely delete the file. Astro will handle this configuration automatically.

    You only need a wrangler config file if you're using:

    • KV namespaces
    • D1 databases
    • Durable Objects
    • R2 buckets
    • Environment variables
    • Custom compatibility flags
    • Other Cloudflare-specific features

Patch Changes

  • #15026 90c608c Thanks @matthewp! - Improves prebundling of internal Astro modules

  • #15030 b5aa52b Thanks @ematipico! - Fixed an issue where the feature experimental.chromeDevtoolsWorkspace wasn't supported by the new version of the adapter.

  • Updated dependencies []:

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

Patch Changes

withastro/astro

Patch Changes

  • #15004 16f3994 Thanks @antonyfaris! - Fixes an issue where Svelte components used in Astro files would incorrectly report type errors when using client:* directives.
withastro/astro

Patch Changes

withastro/astro

Minor Changes

withastro/astro

Minor Changes

Patch Changes

  • Updated dependencies []:
    • @astrojs/underscore-redirects@1.0.0
withastro/astro

Minor Changes

withastro/astro

Patch Changes

withastro/astro

Major Changes

  • #14306 141c4a2 Thanks @ematipico! - Changes the API for creating a custom entrypoint, replacing the createExports() function with a direct export pattern.

    What should I do?

    If you're using a custom entryPoint in your Cloudflare adapter config, update your existing worker file that uses createExports() to reflect the new, simplified pattern:

    my-entry.ts

    import type { SSRManifest } from 'astro';
    import { App } from 'astro/app';
    import { handle } from '@astrojs/cloudflare/handler';
    import { DurableObject } from 'cloudflare:workers';
    
    class MyDurableObject extends DurableObject<Env> {
      constructor(ctx: DurableObjectState, env: Env) {
        super(ctx, env);
      }
    }
    
    export function createExports(manifest: SSRManifest) {
      const app = new App(manifest);
      return {
        default: {
          async fetch(request, env, ctx) {
            await env.MY_QUEUE.send('log');
            return handle(manifest, app, request, env, ctx);
          },
          async queue(batch, _env) {
            let messages = JSON.stringify(batch.messages);
            console.log(`consumed from our queue: ${messages}`);
          },
        } satisfies ExportedHandler<Env>,
        MyDurableObject: MyDurableObject,
      };
    }

    To create the same custom entrypoint using the updated API, export the following function instead:

    my-entry.ts

    import { handle } from '@astrojs/cloudflare/utils/handler';
    
    export default {
      async fetch(request, env, ctx) {
        await env.MY_QUEUE.send("log");
        return handle(manifest, app, request, env, ctx);
      },
      async queue(batch, _env) {
        let messages = JSON.stringify(batch.messages);
        console.log(`consumed from our queue: ${messages}`);
      }
    } satisfies ExportedHandler<Env>,

    The manifest is now created internally by the adapter.

  • #14306 141c4a2 Thanks @ematipico! - Development server now runs in workerd

    astro dev now runs your Cloudflare application using Cloudflare's workerd runtime instead of Node.js. This means your development environment is now a near-exact replica of your production environment—the same JavaScript engine, the same APIs, the same behavior. You'll catch issues during development that would have only appeared in production, and features like Durable Objects, Workers Analytics Engine, and R2 bindings work exactly as they do on Cloudflare's platform.

    To accommodate this major change to your development environment, this update includes breaking changes to Astro.locals.runtime, removing some of its properties.

    What should I do?

    Update occurrences of Astro.locals.runtime as shown below:

    • Astro.locals.runtime no longer contains the env object. Instead, import it directly:
      import { env } from 'cloudflare:workers';
    • Astro.locals.runtime no longer contains the cf object. Instead, access it directly from the request:
      Astro.request.cf;
    • Astro.locals.runtime no longer contains the caches object. Instead, use the global caches object directly:
      caches.default.put(request, response);
    • Astro.locals.runtime object is replaced with Astro.locals.cfContext which contains the Cloudflare ExecutionContext:
      const cfContext = Astro.locals.cfContext;

Minor Changes

  • #14306 141c4a2 Thanks @ematipico! - Adds support for astro preview command

    Developers can now use astro preview to test their Cloudflare Workers application locally before deploying. The preview runs using Cloudflare's workerd runtime, giving you a staging environment that matches production exactly—including support for KV namespaces, environment variables, and other Cloudflare-specific features.

Patch Changes

  • Updated dependencies []:
    • @astrojs/underscore-redirects@1.0.0
withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • #14934 4264a36 Thanks @antonyfaris! - Fixes an issue where Svelte 5 components used in Astro files would not have proper type checking and IntelliSense.
withastro/astro

Patch Changes

withastro/astro

Patch Changes

withastro/astro

Patch Changes

  • Updated dependencies [d8305f8]:
    • @astrojs/markdown-remark@6.3.10
withastro/astro

Patch Changes

  • Updated dependencies [d8305f8]:
    • @astrojs/markdown-remark@6.3.10
withastro/starlight

Patch Changes

  • #3603 30f6e7f Thanks @delucis! - Fixes support for providing an absolute URL to Starlight’s favicon configuration option
withastro/astro

Patch Changes

  • #14950 385be1b Thanks @dvelasquez! - Fixes an issue with the volar-service-emmet that was pointing to a github username/repository instead of a npm package. This type of dependencies are not supported for Deno installations and it can break in enterprise environments that use private registries or don't have access to public github.

Last fetched:  |  Scheduled refresh: Every Saturday

See Customizing GitHub Activity Pages to configure your own

Inspired by releases.antfu.me