Skip to content

AstroEco is Contributing…

Display your GitHub pull requests using astro-loader-github-prs

withastro/astro

Changes

issue: #15062

This PR restores TypeScript-related features (e.g., "Find All References") by ensuring the ts-plugin-bundle is correctly included in the VSIX package.

  • The Problem: The ts-plugin-bundle was being deleted during the build process. This issue was not present in v2.15.x, suggesting that the recent monorepo migration caused the build pipeline to delete manually created folders in node_modules.
  • The Fix: Changed the output location of the bundle to the dist directory to prevent it from being deleted during the production build/prune steps.

Testing

I verified this change by comparing the contents of the generated .vsix package before and after the fix.

Test Steps:

  1. Generate the extension package using npx vsce package --no-dependencies.
  2. Inspect the contents of the .vsix file using unzip -l.

Before Implementation

スクリーンショット 2025-12-27 0 19 26

The astro-ts-plugin-bundle was missing from the package (as shown in the screenshot below). grep returned no results.

After Implementation

スクリーンショット 2025-12-26 16 02 21

The extension/dist/astro-ts-plugin-bundle/index.js is correctly included in the package.

Docs

withastro/astro

Changes

  • adds new stub GITIGNORE to cli
  • ensures new stub exists or else creates it for certain adapters
  • includes .vercel/ to stub when using vercel adapter

Closes #15058

Testing

There don't seem to be existing tests for this area of the code but to make sure it worked I ran the code path to create the vercel adapter on a fresh test project locally

Docs

I don't think this will affect a user's behavior so I haven't added docs to this PR

/cc @withastro/maintainers-docs for feedback!

withastro/astro

Changes

Move wrangler to peer dependencies

Testing

Existing tests should pass

Docs

Not necessary

withastro/astro

Changes

Previously the CLoudflare adapter applied a default config if there was no wrangler config file. This PR changes the behaviour to always apply defaults, which are merged with the user config. This allows us to auto-provision bindings for sessions, assets and images.

Testing

Added lots of tests: unit tests for the config handling, and integraiton tests for sessions and images.

Docs

Updates the JSDocs for the cloudflare adapter config.

I'm working on an update to the adapter docs that will include this.

withastro/astro

Per request in Discord, adds errors to each of these getters instructing users what to use instead.

Changes

  • runtime.env -> import { env } from 'cloudflare:workers'
  • runtime.cf -> Astro.request.cf
  • runtime.caches -> global caches object
  • runtime.ctx -> Astro.locals.cfContext

Testing

N/A

Docs

N/A, already documented.

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

next is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on next.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

astro@6.0.0-alpha.5

Patch Changes

  • #15064 caf5621 Thanks @ascorbic! - Fixes a bug that caused incorrect warnings of duplicate entries to be logged by the glob loader when editing a file

  • #15073 2a39c32 Thanks @ascorbic! - Don't log an error when there is no content config

@astrojs/cloudflare@13.0.0-alpha.4

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.
  • Updated dependencies []:
    • @astrojs/underscore-redirects@1.0.0
withastro/astro

Changes

Currently we log an error when building if no content config is found. This shouldn;t be an error state. This PR changes the sync command to silently return if there is no config.

Testing

Added a test

Docs

withastro/astro

This PR contains the following updates:

Package Change Age Confidence
alpinejs (source) ^3.15.2 -> ^3.15.3 age confidence
eslint (source) ^9.39.1 -> ^9.39.2 age confidence
fast-xml-parser ^5.3.2 -> ^5.3.3 age confidence
preact (source) ^10.28.0 -> ^10.28.1 age confidence
sass ^1.96.0 -> ^1.97.1 age confidence
shiki (source) ^3.19.0 -> ^3.20.0 age confidence
smol-toml ^1.5.2 -> ^1.6.0 age confidence
svelte (source) ^5.45.10 -> ^5.46.0 age confidence
turbo (source) ^2.6.3 -> ^2.7.2 age confidence
typescript-eslint (source) ^8.49.0 -> ^8.50.1 age confidence
vue (source) ^3.5.25 -> ^3.5.26 age confidence

Release Notes

alpinejs/alpine (alpinejs)

v3.15.3

Compare Source

Changes

  • Improve evaluator #​4711
  • fix add support for ShadowRoot in findClosest function and export of injectMagics/initInterceptors #​4699
  • fix(docs): initialise data, fix typo in x-on example #​4701
eslint/eslint (eslint)

v9.39.2

Compare Source

NaturalIntelligence/fast-xml-parser (fast-xml-parser)

v5.3.3: bug fix and performance improvements

Compare Source

  • fix #​775: transformTagName with allowBooleanAttributes adds an unnecessary attribute
  • Performance improvement for stopNodes (By Maciek Lamberski)
preactjs/preact (preact)

v10.28.1

Compare Source

Fixes

sass/dart-sass (sass)

v1.97.1

Compare Source

v1.97.0

Compare Source

  • Add support for the display-p3-linear color space.
shikijs/shiki (shiki)

v3.20.0

Compare Source

   🚀 Features
   🐞 Bug Fixes
   🏎 Performance
    View changes on GitHub
squirrelchat/smol-toml (smol-toml)

v1.6.0

Compare Source

As of this version, smol-toml now supports the newly released TOML 1.1.0 specification!

Highlights

Multiline inline tables

TOML 1.1.0 now allows inline tables to have newlines, as well as trailing commas.

database = {
  driver = "postgresql",
  server = {
    host = "127.0.0.1",
    port = 3307,
  },
}
Omitting seconds in datetime and time

TOML 1.1.0 renders the seconds component of time elements optional.

datetime-tz = 1979-05-27 07:32Z
datetime = 2001-09-21 10:17
time = 13:37
New string escapes

Strings now support 2 additional escape sequences:

  • \xHH for code points between 0 and 255
  • \e for the escape character (U+001B)

What's Changed

Full Changelog: squirrelchat/smol-toml@v1.5.2...v1.6.0

sveltejs/svelte (svelte)

v5.46.0

Compare Source

Minor Changes
  • feat: Add csp option to render(...), and emit hashes when using hydratable (#​17338)
vercel/turborepo (turbo)

v2.7.2: Turborepo v2.7.2

Compare Source

What's Changed

Docs
Examples
  • examples(dev-deps): bump turbo from 2.6.3 to 2.7.1 in /examples/with-shell-commands in the with-shell-commands group by @​dependabot[bot] in #​11291
  • examples(dev-deps): bump the with-svelte group in /examples/with-svelte with 3 updates by @​dependabot[bot] in #​11292
  • examples(deps): bump the basic group in /examples/basic with 4 updates by @​dependabot[bot] in #​11293
Changelog

Full Changelog: vercel/turborepo@v2.7.1...v2.7.2

v2.7.1: Turborepo v2.7.1

Compare Source

What's Changed

Docs
Examples
Changelog

New Contributors

Full Changelog: vercel/turborepo@v2.7.0...v2.7.1

v2.7.0: Turborepo v2.7.0

Compare Source

What's Changed

Docs
create-turbo
turbo-ignore
eslint
@​turbo/repository
Examples
  • examples(dev-deps): bump turbo from 2.6.1 to 2.6.3 in /examples/with-shell-commands by @​dependabot[bot] in #​11217
  • examples(dev-deps): bump the basic group in /examples/basic with 2 updates by @​dependabot[bot] in #​11218
  • examples(dev-deps): bump the with-svelte group in /examples/with-svelte with 3 updates by @​dependabot[bot] in #​11219
  • examples: Use slim image (debian) for prepare and builder stage, use latest no… by @​mrr11k in #​11228
  • examples(dev-deps): bump the with-svelte group in /examples/with-svelte with 2 updates by @​dependabot[bot] in #​11254
  • examples(dev-deps): bump typescript-eslint from 8.48.1 to 8.49.0 in /examples/basic in the basic group by @​dependabot[bot] in #​11253
  • examples(deps): bump react from 19.2.0 to 19.2.3 in /examples/non-monorepo by @​dependabot[bot] in #​11255
Changelog

New Contributors

Full Changelog: vercel/turborepo@v2.6.3...v2.7.0

typescript-eslint/typescript-eslint (typescript-eslint)

v8.50.1

Compare Source

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our versioning strategy and releases on our website.

v8.50.0

Compare Source

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our versioning strategy and releases on our website.

vuejs/core (vue)

v3.5.26

Compare Source

Bug Fixes
Performance Improvements

Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

withastro/astro

Changes

When a Svelte component types its children prop as Snippet, Astro may still type passed children as any when using elements or string for text. Which can produce false-positive TypeScript errors (e.g. string is not assignable to Snippet) even though Svelte treats passed children as snippets.

With these changes, Astro respects the children type declared by the Svelte component. Additionally, if a component references children but doesn’t explicitly type it, we default children to Snippet to mirror Svelte’s implicit prop behavior.

Known limitation: we still can’t reliably error when a component doesn’t accept children but is used with element/multiple children. Astro’s element-children typing currently becomes any, which prevents TypeScript from catching those cases. Text-only children are typed as string, so TypeScript can still flag that scenario. This could be improved in the future by tightening the type Astro uses for one or multiple element children.

For example, given:

<script lang="ts">
  const value = $state();
</script>

<p>hello world</p>

The Svelte component above should error if it’s used with children. With current limitations, we do error for text children:

<Empty>Hello</Empty>

but not for this:

<Empty><p>Hello</p></Empty>
<!-- or -->
<Empty>
  <p>Hello</p>
  <p>Hello</p>
</Empty>

Other than the example above, it should respect the type defined in the Svelte component.

Overall, this should improve the Svelte integration’s type-checking and catch more cases than before.

Fixes #15040

Testing

Added a new test to check the children prop.

Docs

withastro/astro

Changes

Adding the ASTRO_DB_APP_TOKEN secret to the environment in a CD workflow for pushing Astro DB migrations to a remote server creates a security vulnerability for repos hosted on some platforms like GitHub. The issue is that you cannot selectively block PRs from forked repos to segregate trusted and untrusted contributions. Both will run in the established CI / CD workflows. When the CD job checks out such a forked repo, untrusted code then has access to the ASTRO_DB_APP_TOKEN secret that is only needed by the npm astro db commands. With the addition of a --db-app-token flag for the astro db commands, that secret can be securely passed to the executable.

Testing

Added unit and integration tests for the changeset for happy path, error condition, and edge cases.

Docs

Docs updated in PR #12965

withastro/starlight

Description

Related to the Add Accessibility Statemement (#3616) discussion 🙂

withastro/astro

Changes

#14901 added a check for duplicate IDs to the glob() loader. However this caused false warnings, because when a file is edited, the existing entry is not removed before applying changes.

This PR changes the warnign to first check that the filename is different, ensuring it only warns for different files with the same ID.

Testing

Adds tests for the false positive, but also adds tests for the warning added in #14901. Claude wrote the tests and I checked them

Docs

Just a bugfix

withastro/astro

Changes

Allows creation of partitioned cookies, https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Privacy_sandbox/Partitioned_cookies.

This is provided in the underlying library:
https://github.com/jshttp/cookie?tab=readme-ov-file#partitioned

Testing

  • Added unit tests
  • Using this patch on my own servers

Docs

Will need to update https://docs.astro.build/en/reference/api-reference/#cookies

/cc @withastro/maintainers-docs for feedback!

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

next is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on next.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

astro@6.0.0-alpha.4

Major Changes

Patch Changes

  • #15054 22db567 Thanks @matthewp! - Improves zod union type error messages to show expected vs received types instead of generic "Invalid input"
withastro/astro

Testing

Skipping this test which fails 50+% of the time, causing us to need to rerun tests to get clean PRs.

This is particularly bad for outside contributors who don't know that tests can be flakey.

Will re-enable when the flakiness can be dealt with.

withastro/astro

Changes

This PR further reduce code branching between DevApp and AstroServerApp.

  • The two classes had the same renderError code, so I created a renderDevError inside the BaseApp and use the variable import.meta.env.DEV, and use renderDevError when it's true, otherwise it uses the previous function. Both DevApp and AstroServerApp don't need to use a custom renderError anymore
  • The function AstroServerapp.handleRequest has been moved into a file that belongs to the astro server plugin. I renamed to prepareRequest. It accepts a callback that we can use to call app.render

Testing

Current tests should still pass.

Docs

N/A

withastro/astro

Changes

  • Updates the @capsizecss/unpack and fontace utilities used by Astro’s experimental font features
  • These two new versions both switch from using fontkit to fontkitten under the hood which reduces Astro’s install size by almost 8 MB. See:
  • The @capsizecss/unpack update is a major but the breaking changes don’t impact us (switches to ESM-only and moves the fromFile() API we don’t use to a new entrypoint)

Testing

Existing tests should pass

Docs

N/A — no user-facing impact other than smaller installs.

withastro/astro

Changes

  • Zod issues have an optional message that is a good message in case of unions. Use it.

Testing

  • Updated existing tests with more descriptive messages.

Docs

N/A, bug fix.

withastro/astro

Changes

  • Moves astro:* and virtual:astro:* exclusion to core.
  • This is needed because prefetch gets optimized for the client and virtual:astro:adapter-config/client is part of the dep graph.

Testing

  • Verified this fixes astro.build

Docs

N/A

withastro/astro

Changes

So Vite actually exposes a method that allows you to check if a file is authorized or not in its dev server, this is pretty neat however it requires a resolved config because it uses some of the properties. Since the image endpoint runs in the user's code, we can only expose this through a Vite plugin, but it's not the first time we do that, so it's ok.

Testing

Added a few tests

Docs

N/A

withastro/astro

Changes

  • Fixes the main entrypoint to the new one.
  • Hardcodes the compatibility_date to the one we have in the cloudflare integration.
  • Removes compatibility_flags which is no longer needed.

Testing

Test manually.

Docs

N/A

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

next is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on next.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

astro@6.0.0-alpha.3

Major Changes

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

  • #15047 5580372 Thanks @matthewp! - Fixes wrangler config template in astro add cloudflare to use correct entrypoint and compatibility date

  • #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.

@astrojs/cloudflare@13.0.0-alpha.3

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

@astrojs/netlify@7.0.0-alpha.4

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

@astrojs/node@10.0.0-alpha.3

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.

@astrojs/vue@6.0.0-alpha.1

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

Changes

  • Renames AstroDevPipeline to RunnablePipeline, as an analogy of the vite runnable dev environment
  • Renames DevApp to NonRunnablePipeline, as an analogy of the vite non-runnable dev environment
  • Removes handleRoute from AstroServerApp, and uses render instead (reduced code branching)
  • Fixes the Cloudflare + Vue bug, by renaming the virtual module to use our internal virtual:astro:* nomenclature. This fixes it because the Cloudflare adapter pre-bundles all virtual l modules that start with virtual:astro:*

Testing

CI should stay green

Docs

N/A

withastro/astro

Changes

Testing

Manually, should pass

Docs

Changeset

withastro/astro

Changes

  • Previously the default layout was dist/_worker.js/ as the worker and static files in dist/. That caused Wrangler to see the entire dist/ folder as being static content, including the worker, so no worker would be deployed.
    • Fix is to move the static stuff to dist/client/. Confirmed this fixes it.
  • Updated the automatic wrangler config to remove the id for KV. With this it errors as the id doesn't exist. Without it will automatically create one.

Testing

  • Tested manually.

Docs

N/A

withastro/astro

Changes

This is an identical fix to #15032 -- unfortunately, the problem occurred twice in the code and I only caught it in one place!

Testing

No tests

Docs

For rendering in docs

withastro/astro

This documents a few changes based on user feedback.

Docs

  • The optional wrangler config.
  • The new entrypoint which replaces pointing the main to the built worker.
  • Better explanation for the Astro.locals.runtime changes. Users missed that in the changelog so wanted to highlight it all better.
withastro/astro

Changes

Testing

Docs

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

next is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on next.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@astrojs/cloudflare@13.0.0-alpha.2

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

astro@6.0.0-alpha.2

Patch Changes

@astrojs/sitemap@3.6.1-alpha.1

Patch Changes

withastro/astro

Changes

Testing

Manually with a preview

Docs

Changeset

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

astro@5.16.7

Patch Changes

@astrojs/sitemap@3.6.1

Patch Changes

withastro/astro

Changes

  • fixes a bug where the feature experimental.chromeDevtoolsWorkspace wasn't supported anymore by the Cloudflare adapter because the handling was done inside the astro dev server code path. I fixed it by moving the implementation inside a vite plugin, which is added to createVite.
  • Reduced the code duplication of the patch overlay logic. It was added twice: once as a plugin inside createVite and again in the astro server vite plugin. Now we have only one instance. I removed the use of opts.ssr because we already use applyToEnvironment
  • Removed the use of the module loader in some places. This is part of removing AstroServerApp
  • Added the same logic for CSS we use in DevApp inside AstroServerApp. This is part of removing AstroServerApp from the codebase

Testing

Manually tested the cloudflare fixture. Manually tested examples/blog.

CI should stay green

Docs

N/A

withastro/astro

Changes

This updates our JSDoc for the new CSP entries so that they show at the appropriate header depth.

Also adds a missing code example that didn't get added to the original entry.

Testing

No tests.

Docs

This PR is for proper rendering in docs.

withastro/starlight

Description

Added the STACKIT Docs as showcase: https://docs.stackit.cloud/

withastro/astro

Changes

Bit of a wasteful code, but this is only way I figured out to make it work in every case since we don't have access to Vite.

Fix #14766

Testing

There's a test for what the original PR tried to fix already. I don't think this necessarily warrant a new test because there's not exactly a real issue underneath here. I think some people were confused by the error message, some by the alias regression etc.

Docs

N/A

withastro/astro

Changes

  • Cloudflare does some prebundling, and Astro entrypoints (like astro/runtime and astro/app are prebundled. We need to exclude the virtual modules which can't be prebundled by esbuild.

Testing

This is based on a demo app that failed without this config.

Docs

N/A, bug fix

withastro/astro

Changes

Testing

N/A

Docs

Changeset

withastro/astro

Changes

Adds a new retainBody option to the glob() loader to allow reducing the size of the data store.

Currently, the glob() loader stores the raw body of each content file in entry.body, in addition to the rendered HTML in entry.rendered.html.

The retainBody option defaults to true, but you can set it to false to prevent the raw body of content files from being stored in the data store. This significantly reduces the deployed size of the data store and helps avoid hitting size limits for sites with very large collections. This has caused issues for some very large sites, which have hit the maximum JSON string size.

The rendered body will still be available in the entry.rendered.html property for markdown files, and the entry.filePath property will still point to the original file. For MDX collections this will dramatically reduce the size of the collection, as there will no longer be any body retained in the store.

import { defineCollection } from 'astro:content';
import { glob } from 'astro/loaders';

const blog = defineCollection({
  loader: glob({
    pattern: '**/*.md',
    base: './src/content/blog',
    retainBody: false
  }),
});

When retainBody is false, entry.body will be undefined instead of containing the raw file contents.

Testing

Docs

withastro/astro

This PR contains the following updates:

Package Change Age Confidence
@tailwindcss/vite (source) ^4.1.17 -> ^4.1.18 age confidence
devalue ^5.5.0 -> ^5.6.1 age confidence
expect-type ^1.2.2 -> ^1.3.0 age confidence
fast-xml-parser ^5.3.2 -> ^5.3.3 age confidence
publint (source) ^0.3.15 -> ^0.3.16 age confidence
sass ^1.94.2 -> ^1.96.0 age confidence
svelte (source) ^5.45.5 -> ^5.45.10 age confidence
tailwindcss (source) ^4.1.17 -> ^4.1.18 age confidence
typescript-eslint (source) ^8.48.1 -> ^8.49.0 age confidence

Release Notes

tailwindlabs/tailwindcss (@​tailwindcss/vite)

v4.1.18

Compare Source

Fixed
  • Ensure validation of source(…) happens relative to the file it is in (#​19274)
  • Include filename and line numbers in CSS parse errors (#​19282)
  • Skip comments in Ruby files when checking for class names (#​19243)
  • Skip over arbitrary property utilities with a top-level ! in the value (#​19243)
  • Support environment API in @tailwindcss/vite (#​18970)
  • Preserve case of theme keys from JS configs and plugins (#​19337)
  • Write source maps correctly on the CLI when using --watch (#​19373)
  • Handle special defaults (like ringColor.DEFAULT) in JS configs (#​19348)
  • Improve backwards compatibility for content theme key from JS configs (#​19381)
  • Upgrade: Handle future and experimental config keys (#​19344)
  • Try to canonicalize any arbitrary utility to a bare value (#​19379)
  • Validate candidates similarly to Oxide (#​19397)
  • Canonicalization: combine text-* and leading-* classes (#​19396)
  • Correctly handle duplicate CLI arguments (#​19416)
  • Don’t emit color-mix fallback rules inside @keyframes (#​19419)
  • CLI: Don't hang when output is /dev/stdout (#​19421)
sveltejs/devalue (devalue)

v5.6.1

Compare Source

Patch Changes
  • 2161d44: fix: add hasOwn check before calling reviver

v5.6.0

Compare Source

Minor Changes
  • a3d09d4: feat: expose DevalueError for instanceof checks in catch clauses
  • a3d09d4: feat: add value and root properties in DevalueError instances
mmkal/expect-type (expect-type)

v1.3.0

Compare Source

What's Changed

Full Changelog: mmkal/expect-type@v1.2.2...v1.3.0

NaturalIntelligence/fast-xml-parser (fast-xml-parser)

v5.3.3: bug fix and performance improvements

Compare Source

  • fix #​775: transformTagName with allowBooleanAttributes adds an unnecessary attribute
  • Performance improvement for stopNodes (By Maciek Lamberski)
publint/publint (publint)

v0.3.16

Compare Source

Patch Changes
  • Re-enable file existence checks for TS and TSX files if they do not use custom conditions. In v0.3.10, this was done unconditionally instead which missed catching possible file typos if only common conditions are used. (7b1408e)
sass/dart-sass (sass)

v1.96.0

Compare Source

  • Allow numbers with complex units (more than one numerator unit or more than
    zero denominator units) to be emitted to CSS. These are now emitted as
    calc() expressions, which now support complex units in plain CSS.

v1.95.1

Compare Source

  • No user-visible changes.

v1.95.0

Compare Source

  • Add support for the CSS-style if() function. In addition to supporting the
    plain CSS syntax, this also supports a sass() query that takes a Sass
    expression that evaluates to true or false at preprocessing time depending
    on whether the Sass value is truthy. If there are no plain-CSS queries, the
    function will return the first value whose query returns true during
    preprocessing. For example, if(sass(false): 1; sass(true): 2; else: 3)
    returns 2.

  • The old Sass if() syntax is now deprecated. Users are encouraged to migrate
    to the new CSS syntax. if($condition, $if-true, $if-false) can be changed to
    if(sass($condition): $if-true; else: $if-false).

    See the Sass website for details.

  • Plain-CSS if() functions are now considered "special numbers", meaning that
    they can be used in place of arguments to CSS color functions.

  • Plain-CSS if() functions and attr() functions are now considered "special
    variable strings" (like var()), meaning they can now be used in place of
    multiple arguments or syntax fragments in various CSS functions.

v1.94.3

Compare Source

  • Fix the span reported for standalone % expressions followed by whitespace.
sveltejs/svelte (svelte)

v5.45.10

Compare Source

Patch Changes
  • fix: race condition when importing AsyncLocalStorage (#​17350)

v5.45.9

Compare Source

Patch Changes
  • fix: correctly reschedule deferred effects when reviving a batch after async work (#​17332)

  • fix: correctly print !doctype during print (#​17341)

v5.45.8

Compare Source

Patch Changes
  • fix: set AST root.start to 0 and root.end to template.length (#​17125)

  • fix: prevent erroneous state_referenced_locally warnings on prop fallbacks (#​17329)

v5.45.7

Compare Source

Patch Changes
  • fix: Add <textarea wrap="off"> as a valid attribute value (#​17326)

  • fix: add more css selectors to print() (#​17330)

  • fix: don't crash on hydratable serialization failure (#​17315)

v5.45.6

Compare Source

Patch Changes
  • fix: don't issue a11y warning for <video> without captions if it has no src (#​17311)

  • fix: add srcObject to permitted <audio>/<video> attributes (#​17310)

typescript-eslint/typescript-eslint (typescript-eslint)

v8.49.0

Compare Source

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our versioning strategy and releases on our website.


Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

withastro/astro

This fixes a regression where redirects with dynamic params (like /foo/bar/[a]/[b]/foo/baz/[...spread]) fail during static builds with GetStaticPathsRequired error.

The issue: redirect routes with dynamic params were inheriting the default prerender setting. When the destination uses spread syntax or doesn't exist, redirectRoute is undefined, so prerender detection skips them — leaving them marked as static. The build then tries to call getStaticPaths() on a route that doesn't have it.

Changes

  • Closes #14709
  • Set prerender: false for any redirect with dynamic params
  • Static redirects (no params) continue to use the default config

That's it — one line.

Testing

Ran the existing redirect test suite:

All tests pass. The existing static output tests already cover dynamic redirects to spread routes (see redirects.test.js lines 127-134).

Docs

No docs needed — this is a bug fix restoring expected behavior.

withastro/astro

Fixes #14991

Problem

When CSS was imported in both a page's frontmatter and a component's script tag, it was bundled twice in production builds.

Solution

Added content-based deduplication that checks existing styles before adding new ones.

Testing

  • New test: test/css-double-bundle.test.js
  • New fixture: test/fixtures/css-double-bundle/
  • All existing CSS tests pass
withastro/astro

Summary

Fixes #14686

Vue components can accept arbitrary HTML attributes via $attrs fallthrough (Vue docs), but the generated TypeScript types didn't include these attributes. This caused false TypeScript errors when passing attributes like class or style to Vue components, even though they work correctly at runtime.

Changes

  1. Created vue-shims.d.ts with a PropsWithHTMLAttributes<T> type helper that combines:

    • Component props (T)
    • HTML attributes (astroHTML.JSX.HTMLAttributes)
    • Astro client directives (AstroClientDirectives)
  2. Updated editor.cts to wrap all generated props types with PropsWithHTMLAttributes<T>

Testing

Vue components now accept standard HTML attributes without TypeScript errors:

---
import MyButton from './MyButton.vue';
---
<MyButton class="large" style="color: red" id="my-btn" />
withastro/astro

RFC / Context: Dev Toolbar: allow configuring default position roadmap#1277

DX / Quality of life tweak for dev toolbar placement.

Changes

Adds optional devToolbar.placement configuration option.

  • New config property: devToolbar.placement accepts 'bottom-left', 'bottom-center', or 'bottom-right'

  • Priority: defaultSettingsconfiglocalStorage (user's UI choice still wins)

  • Use case: Sites with bottom-center UI elements (chat widgets, cookie banners) can set a project-wide default that persists across team members and localStorage clears

    Example: image

    Before this PR, it would require manually setting the placement every time localStorage is cleared. Doesn't persist as a project default.

Exampe usage, astro.config.mjs:

export default defineConfig({
  devToolbar: {
    placement: 'bottom-left',
  },
});

Files changed

File Change
types/public/toolbar.ts Export DevToolbarPlacement type
types/public/config.ts Add placement to interface with JSDoc
core/config/schemas/base.ts Add Zod schema validation
vite-plugin-astro-server/pipeline.ts Pass placement to client metadata
runtime/client/dev-toolbar/settings.ts Implement priority chain
test/units/config/config-validate.test.js Add validation tests

Testing

  • Added unit tests for config validation:
    • Valid placement values are accepted
    • Invalid placement values are rejected
    • Omitting placement is allowed (optional)

Testing only test/units/config/config-validate.test.js:

pnpm:

pnpm --filter=astro exec astro-scripts test "test/units/config/config-validate.test.js"

npm:

node --test packages/astro/test/units/config/config-validate.test.js

Docs

@withastro/maintainers-docs for feedback, Documentation needed for:

  • Configuration reference: new devToolbar.placement option
  • Default value: 'bottom-center'
  • Behavior: config acts as default, localStorage overrides persist user choice
withastro/astro

Changes

Adds an Astro.CustomImageProps interface that users can extend to support additional props in <Image>, <Picture>, and getImage(). Handling non-standard props is already supported in the Image Service API, there’s just no way to type them.

For example, with this PR, an image service that supports blurring images can add a custom blur prop:

// example.d.ts
declare namespace Astro {
  interface CustomImageProps {
    /** Apply a Gaussian blur with this radius to the image. */
    blur?: number;
  }
}

Notes:

  • This is a single interface that extends all three APIs (<Image>, <Picture>, and getImage()). Maybe hypothetically someone only wants to extend one of these? But I feel like if you’re saying any of these APIs should behave differently, you may want to export specific wrapper components/functions instead of reusing Astro’s.
  • getImage() uses a different type from the components, which doesn’t seem to share anything even though many of the properties overlap, so this required a separate change to the ImageTransform type.

Testing

Tested by patching node_modules in a project with a custom image service.

Docs

Includes a changeset and has an accompanying docs PR: withastro/docs#12897
/cc @withastro/maintainers-docs for feedback!

withastro/astro

Changes

  • None, just test

Testing

  • Use the workspace version of @astrojs/sitemap.

Docs

N/A

withastro/astro

Changes

This fixes syntax for the new CSP docs in configuration reference by adding @docs to some entries on which it was missing

Testing

No tests (doesn't render in current docs without this)

Docs

Just for docs!

withastro/astro

Changes

  • Closes #14967
  • Remove the test driver as it was only used by us internally. There's another way to test now
  • Other driver shape from v5 still work (will be removed in v7)
  • New driver shape in v6
  • Moves a few things around to keep session stuff together

Testing

  • Existing tests pass
  • Types for defineConfig() manually tested

Docs

withastro/astro

Changes

When svelte2tsx generates types for components without props (or strict Svelte 5 components), it often includes a Record<string, never> index signature to forbid arbitrary props. This conflicted with Astro's client:* directives, causing false positive type errors. To fix the type error, we conditionally remove that strict index signature while preserving other prop types.

Testing

Added a new test to check client directives.

Docs

withastro/astro

Changes

This updates the links to the upgrade guide in all the v6 changesets (and ones already published in the changelog) to point to v6.docs.astro.build instead of deploy-preview-12322--astro-docs-2.netlify.app.

(I don't think this PR itself needs a changeset? The PR deploy preview links still work, and will for the entire beta period, but we'll use these going forward so they're easier for people to access.)

Notes:

  • from now on, we will use this v6.docs.astro.build/en/guides/upgrade-to/v6/# URL format for all v6 changesets that link to the upgrade guide
  • When releasing v6 (stable), we will make a similar PR that removes the v6. from the URL so that these changelog entries all point to regular docs.

Testing

Visited a few links to make sure they work.

Docs

does not require docs.

withastro/astro

Changes

  • Follows #14995
  • Updates transform hooks when applicable
  • Biggest change I think is I had to split the vite plugin for .astro files to have more efficient filters

Testing

Should pass

Docs

N/A, internal refactor

withastro/astro

Changes

Fixes current tests and updates the contribution guide to help triage possible issues when triaging/creating tests

Testing

CI should stay green

Docs

withastro/astro

This documents the server build process to explain the steps and which environments get built in which order and why.

Testing

N/A

withastro/starlight

Description

I should be forbidden of creating workflows…

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

astro@5.16.6

Patch Changes

  • #14982 6849e38 Thanks @Princesseuh! - Fixes images outside the project directory not working when using astro:assets in development mode

  • #14987 9dd9fca Thanks @Princesseuh! - Fixes SVGs not working in dev mode when using the passthrough image service

  • #15014 a178422 Thanks @delucis! - Adds support for extending the type of the props accepted by Astro’s <Image> component, <Picture> component, and getImage() API.

@astrojs/svelte@7.2.4

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

Description

This one is pretty self-explanatory and makes sense in this context, my brain used yaml-style comments while this script is actually run in a JavaScript context 🙈

withastro/astro

Changes

What the title says, the announcement script needs it

Testing

We'll see

Docs

N/A

withastro/starlight

Description

Feels like "déjà vu", but this PR is a new attempt to get preview releases working. I noticed 2 issues:

  • In the Get preview packages step (which we've never hit before), I noticed while reading the code that I improperly named a variable.
  • While reading the changesets CLI code, I noticed that the comparison is is done using a ref that is defined if the --since flag is used (or if the deprecated --sinceMaster is used). This is not our case and when it's not defined, it fallbacks to config.baseBranch. After checking out, the Astro repo sets it to origin/main, while our repo uses main.
withastro/astro

Changes

  • See https://rolldown.rs/apis/plugin-hook-filters
  • Rolldown introduced a new way of filtering some hooks in order to be more efficient. This API has been backported to rollup so it's fine to adopt it now
  • This is mostly a 1-1 port. I improved the filters when I had to opportunity to. That can make a huge diff (eg. vite-plugin-config-alias load hook ran twice as less in my test)
  • It converts all relevant resolveId and load hooks. I didn't want to include transform to avoid making it more complicated than it already is. There will be another PR for it entirely (#15000)
  • Regexes are the key. I used Chatgpt and Regex101 to help write them
  • Review this PR without whitespace changes!
  • This PR contains a lot of unrelated diffs because of formatting, not much I can do about unfortunately until the zod 4 is merged

Testing

Should pass

Docs

N/A, internal refactor

withastro/astro

Changes

  • Updates the action that checks dependency sizes on PRs
  • This release adds proper support for use with the pull_request_target trigger we use (see e18e/action-dependency-diff#95)

Testing

n/a

Docs

n/a

withastro/starlight

Description

This PR fixes our currently broken preview release workflow by ensuring a full Git history is fetched during the checkout step.

While shallow clones are extended during the release process, this code path seems to not be hit when running changeset status. Here is a side-by-side comparison of running that command in a full clone vs a shallow clone:

image
withastro/astro

Changes

What the title says

Testing

N/A

Docs

N/A

withastro/astro

Changes

Testing

Should pass

Docs

withastro/astro

Changes

Fixes #14962

Testing

Added a test

Docs

N/A

withastro/astro

Changes

  • jsdocs annotations with zod have a problem that make them not to be reflected after z.infer
  • This PR duplicates the types and schemas
  • It also makes the schema merging more efficient, per zod docs

Testing

Adds type tests to make sure types and schemas remain in sync

Docs

Changeset

withastro/astro

Changes

  • Removed the compatibility flags from our tests
  • Updated the cloudflare plugin to the latest, and use their latest feature: programmatic configuration

Testing

  • Manually built the updated fixtures, and now warnings regarding compatibility flags are emitted.
  • Current tests should pass

Docs

Should we update the docs about the default configuration?

withastro/astro

Changes

When an image is using @fs, we can fetch it directly through Vite, that way it'll automatically respect Vite's limitations in regard to which files are allowed to be loaded.

Fixes #14957
Fixes #14937

Testing

We had a test for this already, but it didn't fetch the images (mostly because it was about path construction back in the day) so I updated it to actually try to fetch them

Docs

N/A

withastro/astro

This PR contains the following updates:

Package Change Age Confidence
@vue/compiler-sfc (source) ^3.5.24 -> ^3.5.25 age confidence
astro (source) ^5.16.0 -> ^5.16.4 age confidence
preact (source) ^10.27.2 -> ^10.28.0 age confidence
svelte (source) ^5.43.14 -> ^5.45.5 age confidence
svelte (source) 5.43.14 -> 5.45.5 age confidence
vue (source) ^3.5.24 -> ^3.5.25 age confidence

Release Notes

withastro/astro (astro)

v5.16.4

Compare Source

Patch Changes
  • #​14940 2cf79c2 Thanks @​ematipico! - Fixes a bug where Astro didn't properly combine CSP resources from the csp configuration with those added using the runtime API (Astro.csp.insertDirective()) to form grammatically correct CSP headers

    Now Astro correctly deduplicate CSP resources. For example, if you have a global resource in the configuration file, and then you add a
    a new one using the runtime APIs.

v5.16.3

Compare Source

Patch Changes
  • #​14889 4bceeb0 Thanks @​florian-lefebvre! - Fixes actions types when using specific TypeScript configurations

  • #​14929 e0f277d Thanks @​matthewp! - Fixes authentication bypass via double URL encoding in middleware

    Prevents attackers from bypassing path-based authentication checks using multi-level URL encoding (e.g., /%2561dmin instead of /%61dmin). Pathnames are now validated after decoding to ensure no additional encoding remains.

v5.16.2

Compare Source

Patch Changes

v5.16.1

Compare Source

Patch Changes
sveltejs/svelte (svelte)

v5.45.5

Compare Source

Patch Changes
  • fix: correctly reconcile each blocks after outroing branches are resumed (#​17258)

  • fix: destroy each items after siblings are resumed (#​17258)

v5.45.4

Compare Source

Patch Changes
  • chore: move DOM-related effect properties to effect.nodes (#​17293)

  • fix: allow $props.id() to occur after an await (#​17285)

  • fix: keep reactions up to date even when read outside of effect (#​17295)

v5.45.3

Compare Source

Patch Changes
  • add props to state_referenced_locally (#​17266)

  • fix: preserve node locations for better sourcemaps (#​17269)

  • fix: handle cross-realm Promises in hydratable (#​17284)

v5.45.2

Compare Source

Patch Changes
  • fix: array destructuring after await (#​17254)

  • fix: throw on invalid {@&#8203;tag}s (#​17256)

v5.45.1

Compare Source

Patch Changes
  • fix: link offscreen items and last effect in each block correctly (#​17240)

v5.45.0

Compare Source

Minor Changes

v5.44.1

Compare Source

Patch Changes
  • fix: await blockers before initialising const (#​17226)

  • fix: link offscreen items and last effect in each block correctly (#​17244)

  • fix: generate correct code for simple destructurings (#​17237)

  • fix: ensure each block animations don't mess with transitions (#​17238)

v5.44.0

Compare Source

Minor Changes

v5.43.15

Compare Source

Patch Changes
  • fix: don't execute attachments and attribute effects eagerly (#​17208)

  • chore: lift "flushSync cannot be called in effects" restriction (#​17139)

  • fix: store forked derived values (#​17212)


Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

withastro/astro

This PR contains the following updates:

Package Change Age Confidence
@astrojs/check (source) ^0.9.5 -> ^0.9.6 age confidence
@changesets/changelog-github (source) ^0.5.1 -> ^0.5.2 age confidence
@changesets/cli (source) ^2.29.7 -> ^2.29.8 age confidence
@playwright/test (source) 1.56.1 -> 1.57.0 age confidence
only-allow ^1.2.1 -> ^1.2.2 age confidence
open-props ^1.7.16 -> ^1.7.17 age confidence
package-manager-detector ^1.5.0 -> ^1.6.0 age confidence
preact (source) ^10.27.2 -> ^10.28.0 age confidence
prettier (source) ^3.6.2 -> ^3.7.4 age confidence
shiki (source) ^3.15.0 -> ^3.19.0 age confidence
svelte (source) ^5.43.14 -> ^5.45.5 age confidence
turbo (source) ^2.6.1 -> ^2.6.3 age confidence
typescript-eslint (source) ^8.47.0 -> ^8.48.1 age confidence
vue (source) ^3.5.24 -> ^3.5.25 age confidence

Release Notes

withastro/astro (@​astrojs/check)

v0.9.6

Patch Changes
changesets/changesets (@​changesets/changelog-github)

v0.5.2

Compare Source

microsoft/playwright (@​playwright/test)

v1.57.0

Compare Source

argyleink/open-props (open-props)

v1.7.17

Compare Source

antfu-collective/package-manager-detector (package-manager-detector)

v1.6.0

Compare Source

   🚀 Features
    View changes on GitHub
preactjs/preact (preact)

v10.28.0

Compare Source

Types

Fixes

Performance

prettier/prettier (prettier)

v3.7.4

Compare Source

diff

LWC: Avoid quote around interpolations (#​18383 by @​kovsu)
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
TypeScript: Fix comment inside union type gets duplicated (#​18393 by @​fisker)
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
TypeScript: Fix unstable comment print in union type comments (#​18395 by @​fisker)
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);

v3.7.3

Compare Source

diff

API: Fix prettier.getFileInfo() change that breaks VSCode extension (#​18375 by @​fisker)

An internal refactor accidentally broke the VSCode extension plugin loading.

v3.7.2

Compare Source

diff

JavaScript: Fix string print when switching quotes (#​18351 by @​fisker)
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
JavaScript: Preserve quote for embedded HTML attribute values (#​18352 by @​kovsu)
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
TypeScript: Fix comment in empty type literal (#​18364 by @​fisker)
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};

v3.7.1

Compare Source

diff

API: Fix performance regression in doc printer (#​18342 by @​fisker)

Prettier 3.7.1 can be very slow when formatting big files, the regression has been fixed.

v3.7.0

Compare Source

diff

🔗 Release Notes

shikijs/shiki (shiki)

v3.19.0

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v3.18.0

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v3.17.1

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v3.17.0

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v3.16.0

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub
sveltejs/svelte (svelte)

v5.45.5

Compare Source

Patch Changes
  • fix: correctly reconcile each blocks after outroing branches are resumed (#​17258)

  • fix: destroy each items after siblings are resumed (#​17258)

v5.45.4

Compare Source

Patch Changes
  • chore: move DOM-related effect properties to effect.nodes (#​17293)

  • fix: allow $props.id() to occur after an await (#​17285)

  • fix: keep reactions up to date even when read outside of effect (#​17295)

v5.45.3

Compare Source

Patch Changes
  • add props to state_referenced_locally (#​17266)

  • fix: preserve node locations for better sourcemaps (#​17269)

  • fix: handle cross-realm Promises in hydratable (#​17284)

v5.45.2

Compare Source

Patch Changes
  • fix: array destructuring after await (#​17254)

  • fix: throw on invalid {@&#8203;tag}s (#​17256)

v5.45.1

Compare Source

Patch Changes
  • fix: link offscreen items and last effect in each block correctly (#​17240)

v5.45.0

Compare Source

Minor Changes

v5.44.1

Compare Source

Patch Changes
  • fix: await blockers before initialising const (#​17226)

  • fix: link offscreen items and last effect in each block correctly (#​17244)

  • fix: generate correct code for simple destructurings (#​17237)

  • fix: ensure each block animations don't mess with transitions (#​17238)

v5.44.0

Compare Source

Minor Changes

v5.43.15

Compare Source

Patch Changes
  • fix: don't execute attachments and attribute effects eagerly (#​17208)

  • chore: lift "flushSync cannot be called in effects" restriction (#​17139)

  • fix: store forked derived values (#​17212)

vercel/turborepo (turbo)

v2.6.3

Compare Source

v2.6.2

Compare Source

typescript-eslint/typescript-eslint (typescript-eslint)

v8.48.1

Compare Source

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our versioning strategy and releases on our website.

v8.48.0

Compare Source

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our versioning strategy and releases on our website.

vuejs/core (vue)

v3.5.25

Compare Source

Bug Fixes

Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

withastro/astro

Changes

  • export const noop from noop module instead of empty string
  • suppresses vite empty chunk warning when no client JS
  • bundle still deleted in generateBundle hook so no code ships

Testing

  • add test to verify no empty chunk warning is produced

Docs

N/A, bug fix

withastro/astro

Cloudflare dev was broken due to non-optimized dependencies. Added .dev.vars files to pre-optimize deps so Vite doesn't have to on startup.

Added comprehensive e2e test suite for Cloudflare that covers:

  • SSR rendering
  • Content collections (getCollection, getEntry, render)
  • React/Vue client components
  • Server islands (server:defer)
  • URL search params
  • Worker runtime detection
  • Data mapping
  • Dynamic content

Tests run in both dev & prod modes to ensure functionality works in both environments.

withastro/astro

Changes

Fixes #14893

  • Replaced O(n²) object spread pattern with direct mutation in generateLookupMap
  • For each content/data entry, the code was creating new objects via {...lookupMap[collection]?.entries, [key]: value}
  • With 10,000+ entries, this caused ~50 million string copies (n × n/2)
  • Now uses nullish coalescing (??=) and direct property assignment - O(n) complexity

Before:

lookupMap[collection] = {
  type: 'content',
  entries: {
    ...lookupMap[collection]?.entries, // ← Creates new object each time
    [slug]: rootRelativePath(root, filePath),
  },
};

After

lookupMap[collection] ??= { type: 'content', entries: {} };
lookupMap[collection].entries[slug] = rootRelativePath(root, filePath);

Testing
All 1326 existing tests pass (3 unrelated failures: clipboard + network flakes)
All content-related tests pass: Content Collections, references, render(), Intellisense

Docs
No docs changes needed - this is an internal performance optimization with no API changes.

withastro/astro

Changes

  • Fixes incorrect syntax highlighting when the lang="sass" attribute is placed on a new line within a <style> tag.
  • Updates the tags-lang grammar lookahead patterns in astro.tmLanguage.src.yaml to support multi-line attribute parsing using [\s\S]*?.
  • Regenerates the corresponding astro.tmLanguage.json to ensure consistent highlighting behavior.
  • Ensures SASS blocks render correctly in the VS Code extension regardless of <style> formatting.

Before

SASS content inside a multi-line <style> tag was highlighted as CSS instead of SASS:

<style
  lang="sass"
>
  .bar
    color: var(--foo)
</style>

After

The same SASS block is now parsed and highlighted correctly as SASS, matching the behavior when lang="sass" is on a single line.

Testing

  • Updated the grammar and rebuilt the VS Code extension via pnpm -C packages/language-tools/vscode build.
  • Launched the Extension Development Host and manually verified syntax highlighting using the provided reproduction case.
  • Confirmed that SASS content and closing </style> tags are now highlighted consistently in both single-line and multi-line <style lang="sass"> formats.

Docs

No documentation updates required. This change affects syntax highlighting behavior only and does not introduce user-facing configuration or API changes.

withastro/astro

Changes

When updating @sveltejs/vite-plugin-svelte from v5 to v6, the build fails with a parsing error:

[vite-plugin-svelte:compile] Unexpected token
file: astro-entry:/home/runner/work/astro/astro/packages/integrations/svelte/test/fixtures/async-rendering/src/components/Counter.svelte:1:9
  
   1 |  export { default } from "/home/runner/work/astro/astro/packages/integrations/svelte/test/fixtures/async-rendering/src/components/Counter.svelte"
                 ^

Root cause: pluginComponentEntry creates virtual modules like \0astro-entry:.../Component.svelte containing re-export statements.

In @sveltejs/vite-plugin-svelte v6, these modules are incorrectly treated as Svelte components due to the .svelte extension, causing parse errors.

In @sveltejs/vite-plugin-svelte v5, these modules are ignored because the module id contains \0 and get filtered out at createFilter.ts#L51.

See also: changelog for @sveltejs/vite-plugin-svelte v6.0.0

Solution: Add a .js suffix to virtual entry modules for non-JS files (like .svelte, .vue, etc.) to ensure that SFC plugins won't mistakenly process them as components.

This fix is applicable to all UI frameworks with custom file extensions, including Vue, Svelte, Marko, Riot, Ripple, and any other SFC framework that may arise in the future.

Testing

All existing tests pass.

Docs

No docs/changeset added because there are no changes to the public API. The pluginComponentEntry is just an implementation detail.

(I can add a changeset if the Astro team thinks it's necessary.)

withastro/astro

Changes

Follow up of #14960

Testing

Docs

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

astro@5.16.5

Patch Changes

  • #14985 c016f10 Thanks @florian-lefebvre! - Fixes a case where JSDoc annotations wouldn't show for fonts related APIs in the Astro config

  • #14973 ed7cc2f Thanks @amankumarpandeyin! - Fixes performance regression and OOM errors when building medium-sized blogs with many content entries. Replaced O(n²) object spread pattern with direct mutation in generateLookupMap.

  • #14958 70eb542 Thanks @ascorbic! - Gives a helpful error message if a user sets output: "hybrid" in their Astro config.

    The option was removed in Astro 5, but lots of content online still references it, and LLMs often suggest it. It's not always clear that the replacement is output: "static", rather than output: "server". This change adds a helpful error message to guide humans and robots.

  • #14901 ef53716 Thanks @Darknab! - Updates the glob() loader to log a warning when duplicated IDs are detected

  • Updated dependencies [d8305f8]:

    • @astrojs/markdown-remark@6.3.10

@astrojs/markdoc@0.15.10

Patch Changes

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

@astrojs/mdx@4.3.13

Patch Changes

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

@astrojs/svelte@7.2.3

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.

astro-vscode@2.16.5

Patch Changes

@astrojs/markdown-remark@6.3.10

Patch Changes

withastro/astro

Changes

Gives a helpful error message if a user sets output: "hybrid" in their Astro config.

The option was removed in Astro 5, but lots of content online still references it, and LLMs often suggest it. It's not always clear that the replacement is output: "static", rather than output: "server". This change adds a helpful error message to guide humans and robots.

Testing

Added a unit test

Docs

@withastro/maintainers-docs for feedback on the error wording pls

withastro/astro

Changes

  • A lot of use of .prefault() and changing z.object(z.number()) to z.object(z.string(), z.number())

Testing

  • Existing tests pass
  • Most significant changes here are because error messages are a little different in Zod 4.

Docs

withastro/astro

Fixes #14942

Changes

Sets cache: "no-cache" for the Request object when revalidating remote images. Internal caching mechanisms may change an expected HTTP 304 response to HTTP 200 in an opaque way which causes Astro to reprocess remote images even if it has the latest ones in its cache.

Testing

Manual testing with my personal website. Before vs after:

grafik grafik

Build time is way shorter since images are now used from cache.

Docs

No need to update docs since this simply fixes unexpected behavior.

withastro/starlight

Description

As discussed, this PR adds support for preview releases in the monorepo using pkg.pr.new.

The worflow is heavily inspired by the one used in the Astro repo with the following changes:

  • Maintainers can trigger a preview release by adding the pr-preview label (it's not possible to trigger it directly using a comment).
  • A little bit stricter permissions (I don't think we need write access to the issues and id-token scope).
  • I added some comments to the step computing the packages to be included as it was not really obvious to me at first glance to understand exactly what was going on and I needed to run it locally to verify the output.
  • I also added a bit more logic to this step to compute the list of package paths as needed by the pkg-pr-new command rather than doing it later so all logic is in one place.
  • If no packages are published, the workflow errors out with a message indicating to make sure there are changesets included in the PR. I think I would prefer to see an error than waiting for the comment to show up before realizing the action succeeded but nothing was published.

Also checked the workflow using zizmor, and only an info for prefer trusted publishing for authentication is reported for pnpm dlx pkg-pr-new publish but this sounds like a false positive for pnpm publish as there is no trusted publishing possible here afaik.

If I'm not mistaken, I think we need this PR to be merged first before being able to test the entire process though so probably need a thorough review before merging in case I made any mistake.

Note that when we would want to use preview releases with #3572, we would also need to edit this workflow to include a build step.

withastro/astro

Changes

This PR reworks how dependencies are optimised and resolved by using the new hook configEnvironment from vitev7.

Astro core

As for createVite, I decided to move the resolution inside a plugin, so it doesn't clutter the already big craeteVite function. I tried to keep the same logic we had before.

Cloudflare

I removed stuff that I think it's not needed anymore. All current tests work and the fixture builds without issues. The preview server still works as expected.

I had to add an exception for the unstorage driver because it couldn't be optimised, and the server was crashing.

Other integrations

I updated other integrations such as react, vue, solid, svelte and preact.

As for vue, I had to add vue/server-renderer because it was crashing the Cloudflare server.

Note

I plan to optimise the rest of the integrations in another PR

Testing

After this change, one of the tests in cloudflare broke. The thing is, I had to change the test assumptions earlier, but now the build output is back to how it was, so I restored the test's previous assertion.

The remaining tests should work.

Docs

N/A

withastro/starlight

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/starlight@0.37.1

Patch Changes

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

Changes

  • updates volar-services-* dependencies to 0.0.67
  • fixes issue reported in #14544
  • this fixes problems when installing astro from enterprise environments and Deno.

Testing

Docs

withastro/starlight

Description

  • Closes #2647
  • We were processing favicon URLs assuming they were always relative paths, but users can also provide an absolute URL here.
  • To fix this I extracted an existing utility we had for checking sidebar links to a shared location to reuse. (I also ran some benchmarks on it, and it looks like a RegExp like we were using was already the most performant option for this utility, but we get a modest performance improvement by moving the regular expression out of the function body at least running in Node 24 like I was.)
withastro/astro

Changes

Testing

Tests should pass

Docs

withastro/docs#12859

withastro/starlight

Description

As previously discussed, this PR adds the Visual Studio Code extension starlight-links to the list of recommended extensions in the .vscode/extensions.json file.

This only adds it to the Starlight monorepo recommendations for now with the goal to increasingly get more feedback/users before potentially adding it to the examples at some point.

withastro/starlight

As suggested in #3263 (comment), this PR updates the social icons hover effect to use the same hover effect we use in other parts of Starlight rather than relying on an opacity decrease. Turns out that this was something I personally changed in the Rapide theme a while back so definitely happy to have the same effect as default in Starlight.

Before After
Normal SCR-20251202-lend SCR-20251202-leos
Hover SCR-20251202-lenx SCR-20251202-lepf

The second change is updating the select (theme and language switcher) color and hover colors to use a contrast increase rather than a decrease. This matches what we currently do for example in the search bar or mobile table of contents.

As this change was not explicitly requested in the linked comment above, this is done in a separate commit so we can easily revert it if needed.

Before After
Normal SCR-20251202-lggh SCR-20251202-lghm
Hover SCR-20251202-lggw SCR-20251202-lghx

Remaining tasks

  • Add changeset with instructions on how to preserve old behavior (I will only do this after confirming all the changes we want to ship)
withastro/astro

Changes

This PR fixes a bug where injecting the same resource twice could have led to an error.

We now fix this issue by duplicating the directives.

Testing

Added new unit tests. Updated existing integration tests with new assertions

Docs

/cc @withastro/maintainers-docs for feedback!

Please review the changeset

withastro/starlight

Description

This PR updates the pull request template to include some guidelines regarding new features.

The goal is to reduce the number of PRs adding new features that have not been previously discussed which can lead to such PRs being closed without merging.

withastro/astro

Changes

That barrel file has an import to vite-load which has a dynamic import, Vite tries to resolve said dynamic import but we don't want that.

Testing

Tested manually

Docs

N/A

withastro/astro

Fixes #14903

Changes

  • Fix content files not being copied when outDir is outside project directory
  • Add copyDotAstroFiles() function to copy .astro/ files to external outDir
  • Ensure content collections work consistently regardless of outDir location

Testing

  • Added content-outdir-external.test.js to verify files are copied to external outDir
  • Tested with mock scenarios to validate the fix resolves the reported issue
  • No existing functionality affected

Docs

No docs needed - this is a bug fix that restores expected behavior without changing the API.


Last fetched:  |  Scheduled refresh: Every Saturday

See Customizing GitHub Activity Pages to configure your own

Inspired by prs.atinux.com