AstroEco is Releasing…
Display your GitHub releases using astro-loader-github-releases
Minor Changes
-
#14471
4296373Thanks @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 newchunksoption 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` }, }), ],
Patch Changes
- #15199
d8e64efThanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure.
Patch Changes
-
#15199
d8e64efThanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0
Patch Changes
- #15199
d8e64efThanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure.
Patch Changes
-
2fa19c4- Improved error handling in the rendering phaseAdded 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
d8e64efThanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure. -
#15169
b803d8bThanks @rururux! - fix: fix image 500 error when moving dist directory in standalone Node -
#14622
9b35c62Thanks @aprici7y! - Fixes CSS url() references to public assets returning 404 in dev mode when base path is configured -
#15219
43df4ceThanks @matthewp! - Upgrades thediffpackage to v8
Patch Changes
- #3648
292666cThanks @maxchang3! - Prevents unwanted font size adjustments on iOS after orientation changes.
Patch Changes
- Updated dependencies [
bbb5811]:- @astrojs/markdown-remark@7.0.0-beta.1
Patch Changes
- #15184
f47c071Thanks @ematipico! - Fixes an issue where the package wasn't correctly published
Patch Changes
-
#15125
6feb0d7Thanks @florian-lefebvre! - Improves JSDoc annotations forAstroGlobal,AstroSharedContextandAPIContexttypes -
#15176
9265546Thanks @matthewp! - Fixes hydration for framework components inside MDX when usingAstro.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
6feb0d7Thanks @florian-lefebvre! - Fixes remote imagesEtagheader handling by disabling internal cache -
#15121
06261e0Thanks @ematipico! - Fixes a bug where the Astro, with the Cloudlfare integration, couldn't correctly serve certain routes in the development server. -
#15125
6feb0d7Thanks @florian-lefebvre! - Fixes images not working in development when using setups with port forwarding -
#15137
2f70bf1Thanks @matthewp! - Addslegacy.collectionsBackwardsCompatflag 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'ortype: 'data' - Config files located at
src/content/config.ts(legacy location) - Legacy entry API:
entry.slugandentry.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
6feb0d7Thanks @florian-lefebvre! - Reduces Astro’s install size by around 8 MB -
#15125
6feb0d7Thanks @florian-lefebvre! - Enables the ClientRouter to preserve the original hash part of the target URL during server side redirects. -
#15125
6feb0d7Thanks @florian-lefebvre! - BREAKING CHANGE to the experimental Fonts API onlyChanges the font format downloaded by default when using the experimental Fonts API. Additionally, adds a new
formatsconfiguration option to specify which font formats to download.Previously, Astro was opinionated about which font sources would be kept for usage, mainly keeping
woff2andwofffiles.You can now specify what font formats should be downloaded (if available). Only
woff2files are downloaded by default.What should I do?
If you were previously relying on Astro downloading the
woffformat, you will now need to specify this explicitly with the newformatsconfiguration 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
8c8aee6Thanks @HiDeoo! - Fixes an issue when importing using an import alias a file with a name matching a directory name. -
#15176
9265546Thanks @matthewp! - Fixes scripts in components not rendering when a sibling<Fragment slot="...">exists but is unused
Patch Changes
- #15125
6feb0d7Thanks @florian-lefebvre! - Improve Sveltechildrenprop type checking
Patch Changes
- #15125
6feb0d7Thanks @florian-lefebvre! - Updates Node versions data to account for v24 as the default
Patch Changes
- #15125
6feb0d7Thanks @florian-lefebvre! - Adds support for arbitrary HTML attributes on Vue components
Patch Changes
-
#15080
f67b738Thanks @gameroman! - Updateswranglerdependency to be apeerDependencyover adependency -
#15121
06261e0Thanks @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
Patch Changes
-
#15174
37ab65aThanks @florian-lefebvre! - Adds Google Icons to built-in font providersTo 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
a77c4f4Thanks @matthewp! - Fixes hydration for framework components inside MDX when usingAstro.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
9b726c4Thanks @florian-lefebvre! - BREAKING CHANGE to the experimental Fonts API onlyChanges how font providers are implemented with updates to the
FontProvidertypeThis is an implementation detail that changes how font providers are created. This process allows Astro to take more control rather than relying directly on
unifonttypes. 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 onunifonttypes will require an update to your project code.Previously, an Astro
FontProviderwas made of a config and a runtime part. It relied directly onunifonttypes, 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
unifontfont provider, you will now need to write an AstroFontProviderusing 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
9cd5b87Thanks @matthewp! - Fixes scripts in components not rendering when a sibling<Fragment slot="...">exists but is unused
Patch Changes
- #15156
9cc2c71Thanks @Princesseuh! - Fixes TypeScript plugin not working
Patch Changes
- #15131
d40ff7dThanks @Princesseuh! - Fixes extension asking for the wrong version of VS Code
Patch Changes
- #15033
dd06779Thanks @florian-lefebvre! - Updates how routes are retrieved to avoid relying on a deprecated API
Patch Changes
-
#15083
241bb31Thanks @fkatsuhiro! - Fix "Find All References" and other TypeScript features by ensuring the plugin bundle is correctly included -
#15109
e062101Thanks @Princesseuh! - Fixes syntax highlighting sometimes not working when the frontmatter or script tags ended with certain TypeScript constructs
Patch Changes
- #15016
12eb4cdThanks @rahuld109! - Adds support for arbitrary HTML attributes on Vue components
Patch Changes
- #15070
fa9c464Thanks @antonyfaris! - Improve Sveltechildrenprop type checking
Patch Changes
- #3647
9f4efc3Thanks @gerstenbergit! - Adds Greek language support
Patch Changes
-
#15079
4463a55Thanks @ascorbic! - Fixes auto-provisioning of default bindings (SESSION KV, IMAGES, and ASSETS). Default bindings are now correctly applied whether or not you have awrangler.jsonfile.
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
ee2c260Thanks @matthewp! - Adds deprecation errors forAstro.locals.runtimeproperties to help migrate from Astro v5 to v6When accessing the removed
Astro.locals.runtimeproperties on Cloudflare, developers now receive clear error messages explaining the migration path:Astro.locals.runtime.env→ Useimport { env } from "cloudflare:workers"Astro.locals.runtime.cf→ UseAstro.request.cfAstro.locals.runtime.caches→ Use the globalcachesobjectAstro.locals.runtime.ctx→ UseAstro.locals.cfContext
-
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0
Minor Changes
-
#15006
f361730Thanks @florian-lefebvre! - Adds new session driver object shapeFor 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
- #15045
31074fcThanks @ematipico! - Fixes an issue where using the Vue integration with the Cloudflare adapter resulted in some runtime errors.
Minor Changes
-
#15006
f361730Thanks @florian-lefebvre! - Adds new session driver object shapeFor 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
Minor Changes
-
#15006
f361730Thanks @florian-lefebvre! - Adds new session driver object shapeFor 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
7cac71bThanks @florian-lefebvre! - Removes an exposed internal API of the preview server -
#15039
6cc96e7Thanks @matthewp! - Fixes static content deployment by moving it to another folder, so Wrangler can tell the static and worker content apart -
#15045
31074fcThanks @ematipico! - Fixes an issue where using the Vue integration with the Cloudflare adapter resulted in some runtime errors. -
#15053
674b63fThanks @matthewp! - Excludesastro:*andvirtual: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
Major Changes
-
#15037
8641805Thanks @matthewp! - Updates the Wrangler entrypointPreviously, the
mainfield inwrangler.jsoncpointed to the built output, since Wrangler only ran in production after the build completed: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.jsoncto use the new entrypoint:{ "main": "@astrojs/cloudflare/entrypoints/server", }This single entrypoint handles both
astro devand production deployments.
Minor Changes
-
#15037
8641805Thanks @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.jsonconly 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
90c608cThanks @matthewp! - Improves prebundling of internal Astro modules -
#15030
b5aa52bThanks @ematipico! - Fixed an issue where the featureexperimental.chromeDevtoolsWorkspacewasn't supported by the new version of the adapter. -
Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0
Patch Changes
- #15036
f125a73Thanks @florian-lefebvre! - Updates how routes are retrieved to avoid relying on a deprecated API
Patch Changes
- #15004
16f3994Thanks @antonyfaris! - Fixes an issue where Svelte components used in Astro files would incorrectly report type errors when usingclient:*directives.
Minor Changes
- #14946
95c40f7Thanks @ematipico! - Removes theexperimental.cspflag and replaces it with a new configuration optionsecurity.csp- (v6 upgrade guidance)
Minor Changes
- #14946
95c40f7Thanks @ematipico! - Removes theexperimental.cspflag and replaces it with a new configuration optionsecurity.csp- (v6 upgrade guidance)
Patch Changes
- Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0
Minor Changes
- #14946
95c40f7Thanks @ematipico! - Removes theexperimental.cspflag and replaces it with a new configuration optionsecurity.csp- (v6 upgrade guidance)
Major Changes
-
#14306
141c4a2Thanks @ematipico! - Changes the API for creating a customentrypoint, replacing thecreateExports()function with a direct export pattern.What should I do?
If you're using a custom
entryPointin your Cloudflare adapter config, update your existing worker file that usescreateExports()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
entrypointusing 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
141c4a2Thanks @ematipico! - Development server now runs in workerdastro devnow 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.runtimeas shown below:Astro.locals.runtimeno longer contains theenvobject. Instead, import it directly:import { env } from 'cloudflare:workers';
Astro.locals.runtimeno longer contains thecfobject. Instead, access it directly from the request:Astro.request.cf;
Astro.locals.runtimeno longer contains thecachesobject. Instead, use the globalcachesobject directly:caches.default.put(request, response);
Astro.locals.runtimeobject is replaced withAstro.locals.cfContextwhich contains the CloudflareExecutionContext:const cfContext = Astro.locals.cfContext;
Minor Changes
-
#14306
141c4a2Thanks @ematipico! - Adds support forastro previewcommandDevelopers can now use
astro previewto 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
Patch Changes
- #14934
4264a36Thanks @antonyfaris! - Fixes an issue where Svelte 5 components used in Astro files would not have proper type checking and IntelliSense.
Patch Changes
- #14988
a3a20d8Thanks @Princesseuh! - Retries failed deploy
Patch Changes
- #14902
d8305f8Thanks @tuyuritio! - Prevents HAST-only props from being directly converted into HTML attributes
Patch Changes
- Updated dependencies [
d8305f8]:- @astrojs/markdown-remark@6.3.10
Patch Changes
- Updated dependencies [
d8305f8]:- @astrojs/markdown-remark@6.3.10
Patch Changes
- #14950
385be1bThanks @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
{ "main": "dist/_worker.js/index.js", }