AstroEco is Contributing…
Display your GitHub pull requests using astro-loader-github-prs
Description
Fixes #15420
The --add flag was passing user input directly to shell commands, allowing shell metacharacters to be interpreted as shell syntax. For example:
npm create --yes astro poc -- --add "react; open -a Calculator.app;" --install --yesWould result in open -a Calculator.app being executed.
Changes
- Added
VALID_INTEGRATION_NAMEregex pattern that matches valid npm package names (lowercase letters, numbers, hyphens, underscores, dots, and scoped packages) - Added
isValidIntegrationName()validation function - Invalid integration names are now filtered out with a clear error message
- Added 3 tests for validation behavior:
- Rejects integration names with shell metacharacters
- Accepts valid integration names
- Filters out only invalid names (keeps valid ones)
Testing
All 73 tests pass, including the 3 new tests:
rejects integration names with shell metacharacters✔accepts valid integration names✔filters out only invalid integration names✔
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.
main 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 main.
Releases
@astrojs/cloudflare@13.0.0-beta.6
Major Changes
-
#15345
840fbf9Thanks @matthewp! - Removes thecloudflareModulesadapter optionThe
cloudflareModulesoption has been removed because it is no longer necessary. Cloudflare natively supports importing.sql,.wasm, and other module types.What should I do?
Remove the
cloudflareModulesoption from your Cloudflare adapter configuration if you were using it:import cloudflare from '@astrojs/cloudflare'; export default defineConfig({ adapter: cloudflare({ - cloudflareModules: true }) });
Minor Changes
-
#15077
a164c77Thanks @matthewp! - Adds support for prerendering pages using the workerd runtime.The Cloudflare adapter now uses the new
setPrerenderer()API to prerender pages via HTTP requests to a local preview server running workerd, instead of using Node.js. This ensures prerendered pages are built using the same runtime that serves them in production.
Patch Changes
- Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
- @astrojs/underscore-redirects@1.0.0
astro@6.0.0-beta.10
Minor Changes
-
#15231
3928b87Thanks @rururux! - Adds a new optionalgetRemoteSize()method to the Image Service API.Previously,
inferRemoteSize()had a fixed implementation that fetched the entire image to determine its dimensions.
With this new helper function that extendsinferRemoteSize(), you can now override or extend how remote image metadata is retrieved.This enables use cases such as:
- Caching: Storing image dimensions in a database or local cache to avoid redundant network requests.
- Provider APIs: Using a specific image provider's API (like Cloudinary or Vercel) to get dimensions without downloading the file.
For example, you can add a simple cache layer to your existing image service:
const cache = new Map(); const myService = { ...baseService, async getRemoteSize(url, imageConfig) { if (cache.has(url)) return cache.get(url); const result = await baseService.getRemoteSize(url, imageConfig); cache.set(url, result); return result; }, };
See the Image Services API reference documentation for more information.
-
#15077
a164c77Thanks @matthewp! - Updates the Integration API to addsetPrerenderer()to theastro:build:starthook, allowing adapters to provide custom prerendering logic.The new API accepts either an
AstroPrerendererobject directly, or a factory function that receives the default prerenderer:'astro:build:start': ({ setPrerenderer }) => { setPrerenderer((defaultPrerenderer) => ({ name: 'my-prerenderer', async setup() { // Optional: called once before prerendering starts }, async getStaticPaths() { // Returns array of { pathname: string, route: RouteData } return defaultPrerenderer.getStaticPaths(); }, async render(request, { routeData }) { // request: Request // routeData: RouteData // Returns: Response }, async teardown() { // Optional: called after all pages are prerendered } })); }
Also adds the
astro:static-pathsvirtual module, which exports aStaticPathsclass for adapters to collect all prerenderable paths from within their target runtime. This is useful when implementing a custom prerenderer that runs in a non-Node environment:// In your adapter's request handler (running in target runtime) import { App } from 'astro/app'; import { StaticPaths } from 'astro:static-paths'; export function createApp(manifest) { const app = new App(manifest); return { async fetch(request) { const { pathname } = new URL(request.url); // Expose endpoint for prerenderer to get static paths if (pathname === '/__astro_static_paths') { const staticPaths = new StaticPaths(app); const paths = await staticPaths.getAll(); return new Response(JSON.stringify({ paths })); } // Normal request handling return app.render(request); }, }; }
See the adapter reference for more details on implementing a custom prerenderer.
-
#15345
840fbf9Thanks @matthewp! - Adds a newemitClientAssetfunction toastro/assets/utilsfor integration authors. This function allows emitting assets that will be moved to the client directory during SSR builds, useful for assets referenced in server-rendered content that need to be available on the client.import { emitClientAsset } from 'astro/assets/utils'; // Inside a Vite plugin's transform or load hook const handle = emitClientAsset(this, { type: 'asset', name: 'my-image.png', source: imageBuffer, });
Patch Changes
-
#15423
c5ea720Thanks @matthewp! - Improves error message when a dynamic redirect destination does not match any existing route.Previously, configuring a redirect like
/categories/[category]→/categories/[category]/1in static output mode would fail with a misleading "getStaticPaths required" error. Now, Astro detects this early and provides a clear error explaining that the destination does not match any existing route. -
#15345
840fbf9Thanks @matthewp! - Fixes an issue where.sqlfiles (and other non-asset module types) were incorrectly moved to the client assets folder during SSR builds, causing "no such module" errors at runtime.The
ssrMoveAssetsfunction now reads the Vite manifest to determine which files are actual client assets (CSS and static assets like images) and only moves those, leaving server-side module files in place. -
#15422
68770efThanks @matthewp! - Upgrade to @astrojs/compiler@3.0.0-beta -
Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
- @astrojs/markdown-remark@7.0.0-beta.6
@astrojs/markdoc@1.0.0-beta.9
Minor Changes
- #15345
840fbf9Thanks @matthewp! - Uses Astro's newemitClientAssetAPI for image emission in content collections
Patch Changes
- Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
- @astrojs/markdown-remark@7.0.0-beta.6
@astrojs/internal-helpers@0.8.0-beta.1
Minor Changes
- #15077
a164c77Thanks @matthewp! - AddsnormalizePathname()utility function for normalizing URL pathnames to match the canonical form used by route generation.
@astrojs/mdx@5.0.0-beta.6
Patch Changes
- Updated dependencies []:
- @astrojs/markdown-remark@7.0.0-beta.6
@astrojs/netlify@7.0.0-beta.8
Patch Changes
- Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
- @astrojs/underscore-redirects@1.0.0
@astrojs/node@10.0.0-beta.3
Patch Changes
- Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
@astrojs/vercel@10.0.0-beta.3
Patch Changes
- Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
@astrojs/markdown-remark@7.0.0-beta.6
Patch Changes
- Updated dependencies [
a164c77]:- @astrojs/internal-helpers@0.8.0-beta.1
Changes
- Adds early validation in
createRedirectRoutes()to detect when a dynamic redirect destination doesn't match any existing route - Throws a new
InvalidRedirectDestinationerror with a clear message instead of the misleading "getStaticPaths required" error - Only applies to static output mode (server mode handles dynamic redirects at runtime)
Closes #12036. Supersedes #14161 which was closed due to inactivity.
Testing
Added test case in packages/astro/test/redirects.test.js that reproduces the issue and verifies the new error message.
Docs
N/A, bug fix
Changes
- Upgrades to the beta version of the compiler
Testing
N/A
Docs
N/A
Changes
Left over logging was left in the last beta, this should fix it
Testing
I mean
Docs
N/A
Changes
Closes #15420
I refactored the solution to make more generic and apply it to --add and astro add. We have a generic regex that checks wether the name follows the npmjs naming convention. If not, we throw an error.
I preferred to have this regex inside the internal helpers, so both create-astro and astro can use the same source of truth.
Note
Solution designed by me. Code and tests generated via AI. I checked all the code
Testing
Added various tests.
Added new tests. Tested manually
Docs
N/A
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.
main 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 main.
Releases
@astrojs/cloudflare@13.0.0-beta.5
Major Changes
-
#15400
41eb284Thanks @florian-lefebvre! - Removes theworkerEntryPointoption, which wasn't used anymore. Set themainfield of your wrangler config insteadSee how to migrate
Patch Changes
- Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0
astro@6.0.0-beta.9
Patch Changes
-
#15415
cc3c46cThanks @ematipico! - Fixes an issue where CSP headers were incorrectly injected in the development server. -
#15412
c546563Thanks @florian-lefebvre! - Improves theAstroAdaptertype and how legacy adapters are handled -
#15421
bf62b6fThanks @Princesseuh! - Removes unintended logging
Changes
Found this issue while I was working on images + CSP. Decided to open a different PR.
Testing
Manually tested, and confirmed that I don't see headers in dev. Existing tests should pass.
Docs
N/A
Changes
This PR fixes the following error found in ecosystem-ci:
[ERROR] [vite] Internal server error: The specifiers must be a non-empty string. Received ""
https://github.com/vitejs/vite-ecosystem-ci/actions/runs/21699933912/job/62578172408#step:7:1774
This error was happening because astro's internal base middleware was assigning a string without the starting / to req.url.
Testing
Tested on ecosystem-ci: https://github.com/vitejs/vite-ecosystem-ci/actions/runs/21707585317/job/62602560591
Docs
No user facing change
Changes
- Updates the netlify and vercel adapters to the new adapter API
- The vercel adapter is updated to use web request/response now that Vercel supports it
- I'll tackle node in a distinct PR as it should require bigger changes
Testing
Updated
Docs
Changesets, no docs needed
Changes
- Depends on #15400
- Improves the
AstroAdaptertype to better reflect reality, by using a discriminated union - Cleans up a few internals around legacy adapters
Testing
Should pass
Docs
Changeset, withastro/docs#13229
Changes
Let's see if this fixes the failures.
Testing
Green benchmarks
Docs
Changes
Adds support for responsive images with CSP.
The solution was to refactor how the styles for responsive images are computed. Until now, they are computed at runtime and injected in the style attribute. This can't be supported via CSP for many reasons.
This PR moves the generation of the styles inside a virtual module, which generates the styles in a static way based on the configuration provided by the user.
The solution uses data attributes, no class names.
Note
The code was generated via Claude Code
Testing
Existing tests should pass. One test was updated due to how --fit and --pos are injected.
One test was moved to E2E because styles emitted via virtual modules are injected by vite after rendering, client side.
Docs
I still need to identify if this is a breaking change or not, and if it needs some docs update.
This PR contains the following updates:
| Package | Type | Update | Change | Age | Confidence |
|---|---|---|---|---|---|
| lockFileMaintenance | All locks refreshed | ||||
| @volar/language-core (source) | devDependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/kit (source) | dependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/language-core (source) | dependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/language-server (source) | devDependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/language-server (source) | dependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/language-service (source) | dependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/test-utils (source) | devDependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/typescript (source) | dependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/typescript (source) | devDependencies | patch | ~2.4.27 → ~2.4.28 |
||
| @volar/vscode (source) | devDependencies | patch | ~2.4.27 → ~2.4.28 |
||
| prettier (source) | dependencies | patch | ^3.8.0 → ^3.8.1 |
||
| svelte (source) | dependencies | patch | ^5.0.0 → ^5.49.1 |
🔧 This Pull Request updates lock files to use the latest dependency versions.
Configuration
📅 Schedule: Branch creation - "before 4am on monday" (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.
ℹ️ Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
🔧 This Pull Request updates lock files to use the latest dependency versions.
Release Notes
preactjs/signals (@preact/signals)
v2.6.2
Patch Changes
- #858
e4bbb66Thanks @JoviDeCroock! - Fix issue where unmounted vnodes could update with signals
v2.6.1
Patch Changes
- #836
ac5032eThanks @JoviDeCroock! - Ensure that theForandShowcomponent have display-names
v2.6.0
Minor Changes
- #819
8a8b0d1Thanks @JoviDeCroock! - Remove the need for enter/exit component and track the effects normally
Patch Changes
-
#827
f17889bThanks @JoviDeCroock! - Add mangle entry for _debugCallback -
Updated dependencies [
f17889b]:- @preact/signals-core@1.12.2
cheeriojs/cheerio (cheerio)
v1.2.0
What's Changed
.val()now supports button values by @kaioduarte in #4175.find()now properly scopes:scopeselectors by @T0nd0Tara in #4967- The
isHtmlutility now runtime-validates input types by @Mallikarjun-0 in #4523
New Contributors
- @noritaka1166 made their first contribution in #4740
- @kaioduarte made their first contribution in #4175
- @Mallikarjun-0 made their first contribution in #4523
- @T0nd0Tara made their first contribution in #4967
Full Changelog: cheeriojs/cheerio@v1.1.2...v1.2.0
facebook/react (react)
v19.2.4: 19.2.4 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
withastro/compiler (@astrojs/compiler)
v0.33.0
Minor Changes
1adac72: Improve error recovery when using thetransformfunction. The compiler will now properly reject the promise with a useful message and stacktrace rather than print internal errors to stdout.
Patch Changes
68d3c0c: Fix edge case whereexport typecould hang the compilerec1ddf0: Handle edge case with TypeScript generics handling and our TSX output23d1fc0: Ignore trailing whitespace in components
v0.32.0
Minor Changes
2404848: Removepathnameoption in favour ofsourcefileoption2ca86f6: RemovesiteandprojectRootoptions in favour of theastroGlobalArgsoptionedd3e0e: MergesourcefileandmoduleIdoptions as a singlefilenameoption. Add a newnormalizedFilenameoption to generate stable hashes instead.08843bd: RemoveexperimentalStaticExtractionoption. It is now the default.
v0.31.4
Patch Changes
960b853: RenameSerializeOtionsinterface toSerializeOptionsfcab891: Fixes export hoisting edge case47de01a: Handle module IDs containing quotes
v0.31.3
Patch Changes
v0.31.2
Patch Changes
89c0cee: fix: corner case that component in head expression will case body tag missing20497f4: Improve fidelity of sourcemaps for frontmatter
v0.31.1
Patch Changes
24dcf7e: Allowscriptandstylebefore HTMLef391fa: fix: corner case with slot expression in head will cause body tag missing
v0.31.0
Minor Changes
abdddeb: Update Go to 1.19
v0.30.1
Patch Changes
ff9e7ba: Fix edge case where<was not handled properly inside of expressionsf31d535: Fix edge case with Prop detection for TSX output
v0.30.0
Minor Changes
963aaab: Provide the moduleId of the astro component
v0.29.19
Patch Changes
3365233: Replace internal tokenizer state logs with proper warnings
v0.29.18
Patch Changes
80de395: fix: avoid nil pointer dereference in table parsingaa3ad9d: Fixparseoutput to properly account for the location of self-closing tagsb89dec4: Internally, replaceastro.ParseFragmentin favor ofastro.ParseFragmentWithOptions. We now check whether an error handler is passed when callingastro.ParseFragmentWithOptions
v0.29.17
Patch Changes
1e7e098: Add warning for invalid spread attributes3cc6f55: Fix handling of unterminated template literal attributes48c5677: Update defaultinternalURLtoastro/runtime/server/index.js2893f33: Fix a number oftableandexpressionrelated bugs
v0.29.16
Patch Changes
ec745f4: Self-closing tags will now retreive "end" positional dataa6c2822: Fix a few TSX output errors
v0.29.15
Patch Changes
5f6e69b: Fix expression literal handling
v0.29.14
Patch Changes
v0.29.13
Patch Changes
8f3e488: Fix regression introduced toparsehandling in the last patch
v0.29.12
Patch Changes
a41982a: Fix expression edge cases, improve literal parsing
v0.29.11
Patch Changes
v0.29.10
Patch Changes
07a65df: Print\rwhen printing TSX output1250d0b: Add warning whendefine:varswon't work because of compilation limitations
v0.29.9
Patch Changes
1fe92c0: Fix TSX sourcemaps on Windows (take 4)
v0.29.8
Patch Changes
01b62ea: Fix sourcemap bug on Windows (again x2)
v0.29.7
Patch Changes
108c6c9: Fix TSX sourcemap bug on Windows (again)
v0.29.6
Patch Changes
4b3fafa: Fix TSX sourcemaps on Windows
v0.29.5
Patch Changes
73a2b69: Use an IIFE for define:vars scripts
v0.29.4
Patch Changes
4381efa: Return proper diagnostic code for warnings
v0.29.3
Patch Changes
85e1d31: AST: movestartposition of elements to the first index of their opening tag
v0.29.2
Patch Changes
035829b: AST: move end position of elements to the last index of their end tag
v0.29.1
Patch Changes
a99c014: Ensure comment and text nodes have end positions when generating an AST fromparse
v0.29.0
Minor Changes
fd2fc28: Fix some utf8 compatability issues
Patch Changes
4b68670: TSX: fix edge case with spread attribute printing6b204bd: Fix bug with trailingstyletags being moved into thehtmlelement66fe230: Fix: include element end location inparseAST
v0.28.1
Patch Changes
aac8c89: Fix end tag sourcemappings for TSX moded7f3288: TSX: Improve self-closing tag behavior and mappings75dd7cc: Fix spread attribute mappings
v0.28.0
Minor Changes
5da0dc2: AddresolvePathoption to control hydration path resolutione816a61: Remove metadata export ifresolvePathoption provided
v0.27.2
Patch Changes
959f96b: Fix "missing sourcemap" issue94f6f3e: Fix edge case with multi-line comment usage85a654a: Fixparsecausing a compiler panic when a component with a client directive was imported but didn't have a matching import5e32cbe: Improvements to TSX output
v0.27.1
Patch Changes
v0.27.0
Minor Changes
-
c770e7b: The compiler will now returndiagnosticsand unique error codes to be handled by the consumer. For example:import type { DiagnosticSeverity, DiagnosticCode } from '@​astrojs/compiler/types'; import { transform } from '@​astrojs/compiler'; async function run() { const { diagnostics } = await transform(file, opts); function log(severity: DiagnosticSeverity, message: string) { switch (severity) { case DiagnosticSeverity.Error: return console.error(message); case DiagnosticSeverity.Warning: return console.warn(message); case DiagnosticSeverity.Information: return console.info(message); case DiagnosticSeverity.Hint: return console.info(message); } } for (const diagnostic of diagnostics) { let message = diagnostic.text; if (diagnostic.hint) { message += `\n\n[hint] ${diagnostic.hint}`; } // Or customize messages for a known DiagnosticCode if (diagnostic.code === DiagnosticCode.ERROR_UNMATCHED_IMPORT) { message = `My custom message about an unmatched import!`; } log(diagnostic.severity, message); } }
Patch Changes
0b24c24: Implement automatic typing for Astro.props in the TSX output
v0.26.1
Patch Changes
920898c: Handle edge case withnoscripttags8ee78a6: handle slots that contains the head element244e43e: Do not hoist import inside objectb8cd954: Fix edge case with line comments and export hoisting52ebfb7: Fix parse/tsx output to gracefully handle invalid HTML (style outside of body, etc)884efc6: Fix edge case with multi-line export hoisting
v0.26.0
Minor Changes
0be58ab: Improve sourcemap support for TSX output
Patch Changes
e065e29: Prevent head injection from removing script siblings
v0.25.2
Patch Changes
3a51b8e: Ensure that head injection occurs if there is only a hoisted script
v0.25.1
Patch Changes
41fae67: Do not scope empty style blocks1ab8280: fix(#517): fix edge case with TypeScript transforma3678f9: Fix import.meta.env usage above normal imports
v0.25.0
Minor Changes
6446ea3: Make Astro styles being printed after user imports
Patch Changes
51bc60f: Fix edge cases withgetStaticPathswhere valid JS syntax was improperly handled
v0.24.0
Minor Changes
6ebcb4f: Allow preprocessStyle to return an error
Patch Changes
abda605: Include filename when calculating scope
v0.23.5
Patch Changes
6bc8e0b: Prevent import assertion from being scanned too soon
v0.23.4
Patch Changes
3b9f0d2: Remove css print escape for experimentalStaticExtraction
v0.23.3
Patch Changes
7693d76: Fix resolution of .jsx modules
v0.23.2
Patch Changes
167ad21: Improve handling of namespaced components when they are multiple levels deep9283258: Fix quotations in pre-quoted attributes76fcef3: Better handling for imports which use special characters
v0.23.1
Patch Changes
79376f3: Fix regression with expression rendering
v0.23.0
Minor Changes
d8448e2: Prevent printing the doctype in the JS output
Patch Changes
a28c3d8: Fix handling of unbalanced quotes in expression attributes28d1d4d: Fix handling of TS generics inside of expressions356d3b6: Prevent wraping module scripts with scope
v0.22.1
Patch Changes
973103c: Prevents unescaping attribute expressions
v0.22.0
Minor Changes
558c9dd: Generate a stable scoped class that does NOT factor in local styles. This will allow us to safely do style HMR without needing to update the DOM as well.c19cd8c: Update Astro's CSS scoping algorithm to implement zero-specificity scoping, according to RFC0012.
v0.21.0
Minor Changes
8960d82: New handling fordefine:varsscripts and styles
Patch Changes
4b318d5: Do not attempt to hoist styles or scripts inside of<noscript>
v0.20.0
Minor Changes
48d33ff: Removes compiler special casing for the Markdown component4a5352e: Removes limitation where imports/exports must be at the top of an.astrofile. Fixes various edge cases aroundgetStaticPathshoisting.
Patch Changes
245d73e: Add support for HTML minification by passingcompact: truetotransform.3ecdd24: Update TSX output to also generate TSX-compatible code for attributes containing dots
v0.19.0
Minor Changes
fcb4834: Removes fallback for the site configuration
Patch Changes
02add77: Fixes many edge cases around tables when used with components, slots, or expressionsb23dd4d: Fix handling of unmatched close brace in template literals9457a91: Fix issue with{in template literal attributesc792161: Fix nested expression handling with a proper expression tokenizer stack
v0.18.2
Patch Changes
v0.18.1
Patch Changes
aff2f23: Warning on client: usage on scripts
v0.18.0
Minor Changes
4b02776: Fix handling ofslotattribute used inside of expressions
Patch Changes
62d2a8e: Properly handle nested expressions that return multiple elements571d6b9: Ensurehtmlandbodyelements are scoped
v0.17.1
Patch Changes
3885217: Support<slot is:inline />and preserve slot attribute when not inside componentea94a26: Fix issue with fallback content inside of slots
v0.17.0
Minor Changes
3a9d166: Add renderHead injection points
v0.16.1
Patch Changes
9fcc43b: Build JS during the release
v0.16.0
Minor Changes
470efc0: Adds component metadata to the TransformResult
Patch Changes
v0.15.2
Patch Changes
v0.15.1
Patch Changes
26cbcdb: Prevent side-effectual CSS imports from becoming module metadata
v0.15.0
Minor Changes
702e848: Trailing space at the end of Astro files is now stripped from Component output.
Patch Changes
3a1a24b: Fix long-standing bug where aclassattribute inside of a spread prop will cause duplicateclassattributes62faceb: Fixes an issue where curly braces in<math>elements would get parsed as expressions instead of raw text.
v0.14.3
Patch Changes
6177620: Fix edge case with expressions inside of tables79b1ed6: Provides a better error message when we can't match client:only usage to an import statementa4e1957: Fix Astro scoping whenclass:listis usedfda859a: Fix json escape
v0.14.2
Patch Changes
6f30e2e: Fix edge case with nested expression inside<>15e3ff8: Fix panic when using a<slot />inheadc048567: Fix edge case withselectelements and expression children13d2fc2: Fix #340, fixing behavior of content after an expression inside of 9e37a72: Fix issue when multiple client-only components are used 67993d5: Add support for block comment only expressions, block comment only shorthand attributes and block comments in shorthand attributes 59fbea2: Fix #343, edge case with inside component 049dadf: Fix usage of expressions inside caption and colgroup elements v0.14.1 Compare Source Patch Changes 1a82892: Fix bug with <script src> not being hoisted v0.14.0 Compare Source Minor Changes c0da4fe: Implements RFC0016, the new script and style behavior. v0.13.2 Compare Source Patch Changes 014370d: Fix issue with named slots in element da831c1: Fix handling of RegExp literals in frontmatter v0.13.1 Compare Source Patch Changes 2f8334c: Update parse and serialize functions to combine attributes and directives, fix issue with serialize not respecting attributes. b308955: Add self-close option to serialize util v0.13.0 Compare Source Minor Changes [ce3f1a5](https: Configuration 📅 Schedule: Branch creation - "before 4am on monday" (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.
This PR contains the following updates:
| Package | Type | Update | Change | Pending | Age | Confidence |
|---|---|---|---|---|---|---|
| lockFileMaintenance | All locks refreshed | |||||
| vue (source) | dependencies | patch | ^3.5.26 → ^3.5.27 |
|||
| @vue/compiler-sfc (source) | dependencies | patch | ^3.5.26 → ^3.5.27 |
|||
| cheerio (source) | devDependencies | minor | 1.1.2 → 1.2.0 |
|||
| solid-js (source) | devDependencies | patch | ^1.9.10 → ^1.9.11 |
|||
| svelte (source) | dependencies | minor | 5.46.4 → 5.49.1 |
|||
| svelte (source) | devDependencies | patch | ^5.46.1 → ^5.49.1 |
|||
| @preact/preset-vite | dependencies | patch | ^2.10.2 → ^2.10.3 |
|||
| @preact/signals (source) | dependencies | patch | ^2.5.1 → ^2.6.2 |
2.7.0 |
||
| svelte (source) | dependencies | patch | ^5.46.1 → ^5.49.1 |
|||
| svelte2tsx (source) | dependencies | patch | ^0.7.46 → ^0.7.47 |
|||
| @vitejs/plugin-vue (source) | dependencies | patch | ^6.0.2 → ^6.0.3 |
6.0.4 |
||
| vite (source) | dependencies | patch | ^7.1.7 → ^7.3.1 |
|||
| vue (source) | devDependencies | patch | ^3.5.26 → ^3.5.27 |
|||
| preact (source) | devDependencies | patch | ^10.28.2 → ^10.28.3 |
🔧 This Pull Request updates lock files to use the latest dependency versions.
Release Notes
cheeriojs/cheerio (cheerio)
v1.2.0
What's Changed
.val()now supports button values by @kaioduarte in #4175.find()now properly scopes:scopeselectors by @T0nd0Tara in #4967- The
isHtmlutility now runtime-validates input types by @Mallikarjun-0 in #4523
New Contributors
- @noritaka1166 made their first contribution in #4740
- @kaioduarte made their first contribution in #4175
- @Mallikarjun-0 made their first contribution in #4523
- @T0nd0Tara made their first contribution in #4967
Full Changelog: cheeriojs/cheerio@v1.1.2...v1.2.0
sveltejs/svelte (svelte)
v5.49.1
Patch Changes
-
fix: merge consecutive large text nodes (#17587)
-
fix: only create async functions in SSR output when necessary (#17593)
-
fix: properly separate multiline html blocks from each other in
print()(#17319) -
fix: prevent unhandled exceptions arising from dangling promises in <script> (#17591)
v5.49.0
Minor Changes
- feat: allow passing
ShadowRootInitobject to custom elementshadowoption (#17088)
Patch Changes
-
fix: throw for unset
createContextget on the server (#17580) -
fix: reset effects inside skipped branches (#17581)
-
fix: preserve old dependencies when updating reaction inside fork (#17579)
-
fix: more conservative assignment_value_stale warnings (#17574)
-
fix: disregard
popoverelements when determining whether an element has content (#17367) -
fix: fire introstart/outrostart events after delay, if specified (#17567)
-
fix: increment signal versions when discarding forks (#17577)
v5.48.5
Patch Changes
-
fix: run boundary
onerrorcallbacks in a microtask, in case they result in the boundary's destruction (#17561) -
fix: prevent unintended exports from namespaces (#17562)
-
fix: each block breaking with effects interspersed among items (#17550)
v5.48.4
Patch Changes
- fix: avoid duplicating escaped characters in CSS AST (#17554)
v5.48.3
Patch Changes
-
fix: hydration failing with settled async blocks (#17539)
-
fix: add pointer and touch events to a11y_no_static_element_interactions warning (#17551)
-
fix: handle false dynamic components in SSR (#17542)
-
fix: avoid unnecessary block effect re-runs after async work completes (#17535)
-
fix: avoid using dev-mode array.includes wrapper on internal array checks (#17536)
v5.48.2
Patch Changes
- fix: export
waitfunction from internal client index (#17530)
v5.48.1
Patch Changes
-
fix: hoist snippets above const in same block (#17516)
-
fix: properly hydrate await in
{@​html}(#17528) -
fix: batch resolution of async work (#17511)
-
fix: account for empty statements when visiting in transform async (#17524)
-
fix: avoid async overhead for already settled promises (#17461)
-
fix: better code generation for const tags with async dependencies (#17518)
v5.48.0
Minor Changes
- feat: export
parseCssfromsvelte/compiler(#17496)
Patch Changes
-
fix: handle non-string values in
svelte:elementthisattribute (#17499) -
fix: faster deduplication of dependencies (#17503)
v5.47.1
Patch Changes
- fix: trigger
selectedcontentreactivity (#17486)
v5.47.0
Minor Changes
- feat: customizable
<select>elements (#17429)
Patch Changes
Configuration
📅 Schedule: Branch creation - "before 4am on monday" (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.
This PR contains the following updates:
| Package | Type | Update | Change | Pending | Age | Confidence |
|---|---|---|---|---|---|---|
| lockFileMaintenance | All locks refreshed | |||||
| @vercel/functions (source) | dependencies | patch | ^3.3.6 → ^3.4.0 |
3.4.1 |
||
| cheerio (source) | devDependencies | minor | 1.1.2 → 1.2.0 |
|||
| fastify (source) | devDependencies | patch | ^5.7.0 → ^5.7.2 |
5.7.4 (+1) |
||
| @astrojs/mdx (source) | dependencies | patch | ^4.3.5 → ^4.3.13 |
|||
| @netlify/vite-plugin (source) | dependencies | patch | ^2.7.19 → ^2.8.0 |
|||
| @types/react (source) | dependencies | patch | ^18.3.24 → ^18.3.27 |
|||
| vite (source) | dependencies | patch | ^7.1.7 → ^7.3.1 |
|||
| @vitejs/plugin-vue (source) | dependencies | patch | ^6.0.2 → ^6.0.3 |
6.0.4 |
||
| svelte (source) | dependencies | patch | ^5.46.1 → ^5.49.1 |
|||
| vue (source) | dependencies | patch | ^3.5.26 → ^3.5.27 |
|||
| solid-js (source) | dependencies | patch | ^1.9.10 → ^1.9.11 |
|||
| svelte (source) | dependencies | patch | ^5.46.3 → ^5.49.1 |
|||
| vue (source) | dependencies | patch | ^3.5.25 → ^3.5.27 |
|||
| @cloudflare/workers-types | devDependencies | patch | ^4.20260124.0 → ^4.20260131.0 |
4.20260203.0 |
||
| rollup (source) | devDependencies | patch | ^4.55.1 → ^4.57.1 |
🔧 This Pull Request updates lock files to use the latest dependency versions.
Release Notes
cheeriojs/cheerio (cheerio)
v1.2.0
What's Changed
.val()now supports button values by @kaioduarte in #4175.find()now properly scopes:scopeselectors by @T0nd0Tara in #4967- The
isHtmlutility now runtime-validates input types by @Mallikarjun-0 in #4523
New Contributors
- @noritaka1166 made their first contribution in #4740
- @kaioduarte made their first contribution in #4175
- @Mallikarjun-0 made their first contribution in #4523
- @T0nd0Tara made their first contribution in #4967
Full Changelog: cheeriojs/cheerio@v1.1.2...v1.2.0
Configuration
📅 Schedule: Branch creation - "before 4am on monday" (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.
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.
main 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 main.
Releases
astro@6.0.0-beta.8
Minor Changes
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
Patch Changes
-
#15167
4fca170Thanks @HiDeoo! - Fixes an issue where CSS from unused components, when using content collections, could be incorrectly included between page navigations in development mode. -
#15268
54e5cc4Thanks @rururux! - fix: avoid creating unused images during build in Picture component -
#15133
53b125bThanks @HiDeoo! - Fixes an issue where adding or removing<style>tags in Astro components would not visually update styles during development without restarting the development server. -
Updated dependencies [
80f0225]:- @astrojs/markdown-remark@7.0.0-beta.5
@astrojs/netlify@7.0.0-beta.7
Minor Changes
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
Patch Changes
- Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0
@astrojs/node@10.0.0-beta.2
Minor Changes
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
@astrojs/vercel@10.0.0-beta.2
Minor Changes
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
@astrojs/markdoc@1.0.0-beta.8
Patch Changes
- Updated dependencies [
80f0225]:- @astrojs/markdown-remark@7.0.0-beta.5
@astrojs/mdx@5.0.0-beta.5
Patch Changes
- Updated dependencies [
80f0225]:- @astrojs/markdown-remark@7.0.0-beta.5
@astrojs/markdown-remark@7.0.0-beta.5
Patch Changes
This PR contains the following updates:
| Package | Change | Age | Confidence | Type | Update | Pending |
|---|---|---|---|---|---|---|
| @astrojs/rss (source) | ^4.0.15-beta.3 → ^4.0.15 |
dependencies | patch | |||
| @astrojs/sitemap (source) | ^3.6.1-beta.3 → ^3.7.0 |
dependencies | minor | |||
| @playwright/test (source) | 1.58.0 → 1.58.1 |
devDependencies | patch | |||
| @preact/signals (source) | ^2.6.1 → ^2.6.2 |
dependencies | patch | 2.7.0 |
||
| alpinejs (source) | ^3.15.5 → ^3.15.6 |
dependencies | patch | 3.15.8 (+1) |
||
| node (source) | 22.20.0 → 22.22.0 |
minor | ||||
| node | 22-bullseye → 22.21.1-bullseye |
final | minor | 22.22.0 |
||
| open-props | ^1.7.17 → ^1.7.23 |
dependencies | patch | |||
| pnpm (source) | 10.28.0 → 10.28.2 |
packageManager | patch | |||
| preact (source) | ^10.28.2 → ^10.28.3 |
dependencies | patch | |||
| shiki (source) | ^3.21.0 → ^3.22.0 |
dependencies | minor | |||
| turbo (source) | ^2.8.0 → ^2.8.1 |
devDependencies | patch | 2.8.3 (+1) |
Release Notes
withastro/astro (@astrojs/rss)
v4.0.15
Patch Changes
- #15199
d8e64efThanks @ArmandPhilippot! - Fixes the links to Astro Docs so that they match the current docs structure.
withastro/astro (@astrojs/sitemap)
v3.7.0
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` }, }), ],
microsoft/playwright (@playwright/test)
v1.58.1
Highlights
#39036 fix(msedge): fix local network permissions
#39037 chore: update cft download location
#38995 chore(webkit): disable frame sessions on fronzen builds
Browser Versions
- Chromium 145.0.7632.6
- Mozilla Firefox 146.0.1
- WebKit 26.0
nodejs/node (node)
v22.22.0: 2026-01-13, Version 22.22.0 'Jod' (LTS), @marco-ippolito
This is a security release.
Notable Changes
lib:
- (CVE-2025-59465) add TLSSocket default error handler
- (CVE-2025-55132) disable futimes when permission model is enabled
lib,permission: - (CVE-2025-55130) require full read and write to symlink APIs
src: - (CVE-2025-59466) rethrow stack overflow exceptions in async_hooks
src,lib: - (CVE-2025-55131) refactor unsafe buffer creation to remove zero-fill toggle
tls: - (CVE-2026-21637) route callback exceptions through error handlers
Commits
- [
6badf4e6f4] - deps: update c-ares to v1.34.6 (Node.js GitHub Bot) #60997 - [
37509c3ff0] - deps: update undici to 6.23.0 (Matteo Collina) nodejs-private/node-private#791 - [
eb8e41f8db] - (CVE-2025-59465) lib: add TLSSocket default error handler (RafaelGSS) nodejs-private/node-private#797 - [
ebbf942a83] - (CVE-2025-55132) lib: disable futimes when permission model is enabled (RafaelGSS) nodejs-private/node-private#748 - [
6b4849583a] - (CVE-2025-55130) lib,permission: require full read and write to symlink APIs (RafaelGSS) nodejs-private/node-private#760 - [
ddadc31f09] - (CVE-2025-59466) src: rethrow stack overflow exceptions in async_hooks (Matteo Collina) nodejs-private/node-private#773 - [
d4d9f3915f] - (CVE-2025-55131) src,lib: refactor unsafe buffer creation to remove zero-fill toggle (Сковорода Никита Андреевич) nodejs-private/node-private#759 - [
25d6799df6] - (CVE-2026-21637) tls: route callback exceptions through error handlers (Matteo Collina) nodejs-private/node-private#796
v22.21.1: 2025-10-28, Version 22.21.1 'Jod' (LTS), @aduh95
Commits
- [
af33e8e668] - benchmark: remove unused variable from util/priority-queue (Bruno Rodrigues) #59872 - [
6764ce8756] - benchmark: update count to n in permission startup (Bruno Rodrigues) #59872 - [
4e8d99f0dc] - benchmark: update num to n in dgram offset-length (Bruno Rodrigues) #59872 - [
af0a8ba7f8] - benchmark: adjust dgram offset-length len values (Bruno Rodrigues) #59708 - [
78efd1be4a] - benchmark: update num to n in dgram offset-length (Bruno Rodrigues) #59708 - [
df72dc96e9] - console,util: improve array inspection performance (Ruben Bridgewater) #60037 - [
ef67d09f50] - http: improve writeEarlyHints by avoiding for-of loop (Haram Jeong) #59958 - [
23468fd76b] - http2: fix allowHttp1+Upgrade, broken by shouldUpgradeCallback (Tim Perry) #59924 - [
56abc4ac76] - lib: optimize priority queue (Gürgün Dayıoğlu) #60039 - [
ea5cfd98c5] - lib: implement passive listener behavior per spec (BCD1me) #59995 - [
c2dd6eed2f] - process: fix wrong asyncContext under unhandled-rejections=strict (Shima Ryuhei) #60103 - [
81a3055710] - process: fix defaultenvforprocess.execve(Richard Lau) #60029 - [
fe492c7ace] - process: fix hrtime fast call signatures (Renegade334) #59600 - [
76b4cab8fc] - src: bring permissions macros in line with general C/C++ standards (Anna Henningsen) #60053 - [
21970970c7] - src: removeAnalyzeTemporaryDtorsoption from .clang-tidy (iknoom) #60008 - [
609c063e81] - src: remove unused variables from report (Moonki Choi) #60047 - [
987841a773] - src: avoid unnecessary string allocations in SPrintF impl (Anna Henningsen) #60052 - [
6e386c0632] - src: make ToLower/ToUpper input args more flexible (Anna Henningsen) #60052 - [
c3be1226c7] - src: allowstd::string_viewarguments toSPrintF()and friends (Anna Henningsen) #60058 - [
764d35647d] - src: remove unnecessarystd::stringerror messages (Anna Henningsen) #60057 - [
1289ef89ec] - src: remove unnecessary shadowed functions on Utf8Value & BufferValue (Anna Henningsen) #60056 - [
d1fb8a538d] - src: avoid unnecessary string ->char*-> string round trips (Anna Henningsen) #60055 - [
54b439fb5a] - src: filloptions_args,options_envafter vectors are finalized (iknoom) #59945 - [
c7c597e2ca] - src: use RAII for uv_process_options_t (iknoom) #59945 - [
b928ea9716] - test: ensure that the message event is fired (Luigi Pinca) #59952 - [
e4b95a5158] - test: replace diagnostics_channel stackframe in output snapshots (Chengzhong Wu) #60024 - [
4206406694] - test: mark test-web-locks skip on IBM i (SRAVANI GUNDEPALLI) #59996 - [
26394cd5bf] - test: expand tls-check-server-identity coverage (Diango Gavidia) #60002 - [
b58df47995] - test: fix typo of test-benchmark-readline.js (Deokjin Kim) #59993 - [
af3a59dba8] - test: verify tracing channel doesn't swallow unhandledRejection (Gerhard Stöbich) #59974 - [
cee362242b] - timers: fix binding fast call signatures (Renegade334) #59600 - [
40fea57fdd] - tools: add message on auto-fixing js lint issues in gh workflow (Dario Piotrowicz) #59128 - [
aac90d351b] - tools: verify signatures when updating nghttp* (Antoine du Hamel) #60113 - [
9fae03c7d9] - tools: use dependabot cooldown and move tools/doc (Rafael Gonzaga) #59978 - [
81548abdf6] - wasi: fix WasiFunction fast call signature (Renegade334) #59600
v22.21.0: 2025-10-20, Version 22.21.0 'Jod' (LTS), @aduh95
Notable Changes
- [
1486fedea1] - (SEMVER-MINOR) cli: add--use-env-proxy(Joyee Cheung) #59151 - [
bedaaa11fc] - (SEMVER-MINOR) http: support http proxy for fetch underNODE_USE_ENV_PROXY(Joyee Cheung) #57165 - [
af8b5fa29d] - (SEMVER-MINOR) http: addshouldUpgradeCallbackto let servers control HTTP upgrades (Tim Perry) #59824 - [
42102594b1] - (SEMVER-MINOR) http,https: add built-in proxy support inhttp/https.requestandAgent(Joyee Cheung) #58980 - [
686ac49b82] - (SEMVER-MINOR) src: add percentage support to--max-old-space-size(Asaf Federman) #59082
Commits
- [
a71dd592e3] - benchmark: calibrate config dgram multi-buffer (Bruno Rodrigues) #59696 - [
16c4b466f4] - benchmark: calibrate config cluster/echo.js (Nam Yooseong) #59836 - [
53cb9f3b6c] - build: add the missing macro definitions for OpenHarmony (hqzing) #59804 - [
ec5290fe01] - build: do not include custom ESLint rules testing in tarball (Antoine du Hamel) #59809 - [
1486fedea1] - (SEMVER-MINOR) cli: add --use-env-proxy (Joyee Cheung) #59151 - [
1f93913446] - crypto: usereturn awaitwhen returning Promises from async functions (Renegade334) #59841 - [
f488b2ff73] - crypto: use async functions for non-stub Promise-returning functions (Renegade334) #59841 - [
aed9fd5ac4] - crypto: avoid calls topromise.catch()(Renegade334) #59841 - [
37c2d186f0] - deps: update amaro to 1.1.4 (pmarchini) #60044 - [
28aea13419] - deps: update archs files for openssl-3.5.4 (Node.js GitHub Bot) #60101 - [
ddbc1aa0bb] - deps: upgrade openssl sources to openssl-3.5.4 (Node.js GitHub Bot) #60101 - [
badbba2da9] - deps: update googletest to50b8600(Node.js GitHub Bot) #59955 - [
48aaf98a08] - deps: update archs files for openssl-3.5.3 (Node.js GitHub Bot) #59901 - [
e02a562ea6] - deps: upgrade openssl sources to openssl-3.5.3 (Node.js GitHub Bot) #59901 - [
7e0e86cb92] - deps: upgrade npm to 10.9.4 (npm team) #60074 - [
91dda5facf] - deps: update undici to 6.22.0 (Matteo Collina) #60112 - [
3a3220a2f0] - dgram: restore buffer optimization in fixBufferList (Yoo) #59934 - [
09bdcce6b8] - diagnostics_channel: fix race condition with diagnostics_channel and GC (Ugaitz Urien) #59910 - [
b3eeb3bd13] - doc: provide alternative tourl.parse()using WHATWG URL (Steven) #59736 - [
1ddaab1904] - doc: mention reverse proxy and include simple example (Steven) #59736 - [
3b3b71e99c] - doc: mark.envfiles support as stable (Santeri Hiltunen) #59925 - [
d37f67d1bd] - doc: remove optional title prefixes (Aviv Keller) #60087 - [
ca2dff63f9] - doc: fix typo on child_process.md (Angelo Gazzola) #60114 - [
3fca564a05] - doc: add automated migration info to deprecations (Augustin Mauroy) #60022 - [
4bc366fc16] - doc: use "WebAssembly" instead of "Web Assembly" (Tobias Nießen) #59954 - [
4808dbdd9a] - doc: fix typo in section on microtask order (Tobias Nießen) #59932 - [
d6e303d645] - doc: update V8 fast API guidance (René) #58999 - [
0a3a3f729e] - doc: add security escalation policy (Ulises Gascón) #59806 - [
8fd669c70d] - doc: type improvement of filehttp.md(yusheng chen) #58189 - [
9833dc6060] - doc: rephrase dynamic import() description (Nam Yooseong) #59224 - [
2870a73681] - doc,crypto: update subtle.generateKey and subtle.importKey (Filip Skokan) #59851 - [
85818db93c] - fs,win: do not add a second trailing slash in readdir (Gerhard Stöbich) #59847 - [
bedaaa11fc] - (SEMVER-MINOR) http: support http proxy for fetch under NODE_USE_ENV_PROXY (Joyee Cheung) #57165 - [
af8b5fa29d] - (SEMVER-MINOR) http: add shouldUpgradeCallback to let servers control HTTP upgrades (Tim Perry) #59824 - [
758271ae66] - http: optimize checkIsHttpToken for short strings (방진혁) #59832 - [
42102594b1] - (SEMVER-MINOR) http,https: add built-in proxy support in http/https.request and Agent (Joyee Cheung) #58980 - [
a33ed9bf96] - inspector: ensure adequate memory allocation forBinary::toBase64(René) #59870 - [
34c686be2b] - lib: update inspect output format for subclasses (Miguel Marcondes Filho) #59687 - [
12e553529c] - lib: add source map support for assert messages (Chengzhong Wu) #59751 - [
d2a70571f8] - lib,src: refactor assert to load error source from memory (Chengzhong Wu) #59751 - [
20a9e86b5d] - meta: move Michael to emeritus (Michael Dawson) #60070 - [
c591cca15c] - meta: bump github/codeql-action from 3.30.0 to 3.30.5 (dependabot[bot]) #60089 - [
090ba141b1] - meta: bump codecov/codecov-action from 5.5.0 to 5.5.1 (dependabot[bot]) #60091 - [
a0ba6884a5] - meta: bump actions/stale from 9.1.0 to 10.0.0 (dependabot[bot]) #60092 - [
0feca0c541] - meta: bump actions/setup-node from 4.4.0 to 5.0.0 (dependabot[bot]) #60093 - [
7cd2b42d18] - meta: bump step-security/harden-runner from 2.12.2 to 2.13.1 (dependabot[bot]) #60094 - [
1f3b9d66ac] - meta: bump actions/cache from 4.2.4 to 4.3.0 (dependabot[bot]) #60095 - [
0fedbb3de7] - meta: bump ossf/scorecard-action from 2.4.2 to 2.4.3 (dependabot[bot]) #60096 - [
04590b8267] - meta: bump actions/setup-python from 5.6.0 to 6.0.0 (dependabot[bot]) #60090 - [
2bf0a9318f] - meta: add .npmrc with ignore-scripts=true (Joyee Cheung) #59914 - [
e10dc7b81c] - module: allow overriding linked requests for a ModuleWrap (Chengzhong Wu) #59527 - [
2237142369] - module: link module with a module request record (Chengzhong Wu) #58886 - [
6d24b88fbc] - node-api: added SharedArrayBuffer api (Mert Can Altin) #59071 - [
4cc84c96f4] - node-api: make napi_delete_reference use node_api_basic_env (Jeetu Suthar) #59684 - [
e790eb6b50] - repl: fix cpu overhead pasting big strings to the REPL (Ruben Bridgewater) #59857 - [
99ea08dc43] - repl: add isValidParentheses check before wrap input (Xuguang Mei) #59607 - [
e4a4f63019] - sqlite: fix crash session extension callbacks with workers (Bart Louwers) #59848 - [
42c5544b97] - src: assert memory calc for max-old-space-size-percentage (Asaf Federman) #59460 - [
686ac49b82] - (SEMVER-MINOR) src: add percentage support to --max-old-space-size (Asaf Federman) #59082 - [
84701ff668] - src: clear all linked module caches once instantiated (Chengzhong Wu) #59117 - [
8e182e561f] - src: remove unnecessaryEnvironment::GetCurrent()calls (Moonki Choi) #59814 - [
c9cde35c4d] - src: simplify is_callable by making it a concept (Tobias Nießen) #58169 - [
892b425ee1] - src: rename private fields to follow naming convention (Moonki Choi) #59923 - [
36b68db7f5] - src: reduce the nearest parent package JSON cache size (Michael Smith) #59888 - [
26b40bad02] - src: replace FIXED_ONE_BYTE_STRING with Environment-cached strings (Moonki Choi) #59891 - [
34dcb7dc32] - src: create strings inFIXED_ONE_BYTE_STRINGas internalized (Anna Henningsen) #59826 - [
4d748add05] - src: removestd::arrayoverload ofFIXED_ONE_BYTE_STRING(Anna Henningsen) #59826 - [
bb6fd7c2d1] - src: ensurev8::Eternalis empty before setting it (Anna Henningsen) #59825 - [
7a91282bf9] - src: use simdjson::pad (0hm☘️) #59391 - [
ba00875f01] - stream: use new AsyncResource instead of bind (Matteo Collina) #59867 - [
ebec3ef68b] - (SEMVER-MINOR) test: move http proxy tests to test/client-proxy (Joyee Cheung) #58980 - [
7067d79fb3] - test: mark sea tests flaky on macOS x64 (Richard Lau) #60068 - [
ca1942c9d5] - test: testcase demonstrating issue 59541 (Eric Rannaud) #59801 - [
660d57355e] - test,doc: skip --max-old-space-size-percentage on 32-bit platforms (Asaf Federman) #60144 - [
19a7b1ef26] - tls: load bundled and extra certificates off-thread (Joyee Cheung) #59856 - [
095e7a81fc] - tls: only do off-thread certificate loading on loading tls (Joyee Cheung) #59856 - [
c42c1204c7] - tools: fixtools/make-v8.shfor clang (Richard Lau) #59893 - [
b632a1d98d] - tools: skip test-internet workflow for draft PRs (Michaël Zasso) #59817 - [
6021c3ac76] - tools: copyeditbuild-tarball.yml(Antoine du Hamel) #59808 - [
ef005d0c9b] - typings: update 'types' binding (René) #59692 - [
28ef564ecd] - typings: remove unused imports (Nam Yooseong) #59880 - [
f88752ddb6] - url: replaced slice with at (Mikhail) #59181 - [
24c224960c] - url: add type checking to urlToHttpOptions() (simon-id) #59753 - [
f2fbcc576d] - util: fix debuglog.enabled not being present with callback logger (Ruben Bridgewater) #59858 - [
6277058e43] - vm: sync-ify SourceTextModule linkage (Chengzhong Wu) #59000 - [
5bf21a4309] - vm: explain how to share promises between contexts w/ afterEvaluate (Eric Rannaud) #59801 - [
312b33a083] - vm: "afterEvaluate", evaluate() return a promise from the outer context (Eric Rannaud) #59801 - [
1eadab863c] - win,tools: add description to signature (Martin Costello) #59877 - [
816e1befb1] - zlib: reduce code duplication (jhofstee) #57810
argyleink/open-props (open-props)
v1.7.23
31 January 2026
v1.7.22
31 January 2026
- Add id-token permission to version-bump workflow
#584 - Add TypeScript types to submodule exports
#582 - [WIP] Fix issue with npm_publish workflow not triggering
#583 - ✂️ 1.7.22
ef7acc0
v1.7.21
31 January 2026
- Add non-adaptive shadows.light.min.css and shadows.dark.min.css exports
#580 - Inject docsite version from package.json at build time
#578 - ✂️ 1.7.21
1368169
v1.7.20
31 January 2026
v1.7.19
31 January 2026
pnpm/pnpm (pnpm)
v10.28.2: pnpm 10.28.2
Patch Changes
-
Security fix: prevent path traversal in
directories.binfield. -
When pnpm installs a
file:orgit:dependency, it now validates that symlinks point within the package directory. Symlinks to paths outside the package root are skipped to prevent local data from being leaked intonode_modules.This fixes a security issue where a malicious package could create symlinks to sensitive files (e.g.,
/etc/passwd,~/.ssh/id_rsa) and have their contents copied when the package is installed.Note: This only affects
file:andgit:dependencies. Registry packages (npm) have symlinks stripped during publish and are not affected. -
Fixed optional dependencies to request full metadata from the registry to get the
libcfield, which is required for proper platform compatibility checks #9950.
Platinum Sponsors
|
|
Gold Sponsors
|
|
|
|
|
|
|
v10.28.1
preactjs/preact (preact)
v10.28.3
Fixes
- Avoid scheduling suspense state udpates (#5006, thanks @JoviDeCroock)
- Resolve some suspense crashes (#4999, thanks @JoviDeCroock)
- Support inheriting namespace through portals (#4993, thanks @JoviDeCroock)
Maintenance
- Update test with addition of
_original(#4989, thanks @JoviDeCroock)
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.
Changes
- Fixes #15151
- Updates the dev middleware to ignore query params
Testing
Manually
Docs
Changeset
Add Formware help center site to the showcase.
Changes
- Closes #15363
- I tried a few things and it turns out because we have references to
@cloudflare/workers-typeswhen building etc, we can avoid doing weird things with types - It also allowed removing the
Requesttype augmentation we were doing as part ofastro sync, becausewrangler typesalready handles it
Testing
Manually in repro, manually in the custom-entryfile fixture, preview release tested with user's repro
Docs
Changeset
Updates astro add cloudflare to use workerd's compatibility date when scaffolding wrangler.jsonc, instead of the current date.
Adds a /info export to @astrojs/cloudflare that re-exports getLocalWorkerdCompatibilityDate from the vite plugin
Tested manually by adding cloudflare to examples/minimal with this little hack
// Line 794 packages/astro/src/cli/add/index.ts
async function resolveRangeToInstallSpecifier(name: string, range: string): Promise<string> {
+ if (name === '@astrojs/cloudflare') return '@astrojs/cloudflare@workspace:*';
const versions = await fetchPackageVersions(name);
Changes
- Fixes content collection loaders that use dynamic imports (
await import(),import.meta.glob()) failing during build with "Vite module runner has been closed" - Refactors sync to keep the Vite server alive through both content config loading and content layer sync phases
- Adds regression test for dynamic imports in loaders
Fixes #12689
Testing
Added a test case to content-layer.test.js that creates a collection loader using await import() to load data. This test failed before the fix and passes after.
Docs
N/A, bug fix
Changes
- Fix Preact components failing to render in Cloudflare dev mode
- Include
@astrojs/preact/server.jsin Vite'soptimizeDeps - Previously,
server.jswas explicitly excluded, causingpreact-render-to-stringto load a separate Preact instance from user components, breaking hooks - Fixes #15361
Testing
- Added e2e test for Preact component with
useEffectandclient:loadin the Cloudflare fixture
Docs
No docs changes needed - this is a bug fix for existing functionality.
Changes
What the title says
Testing
CI
Docs
N/A
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.6
Patch Changes
- #3645
a562096Thanks @mschoeffmann! - Adds icons for Chrome, Edge, Firefox, and Safari
Changes
- What does this change?
- Be short and concise. Bullet points can help!
- Before/after screenshots can help as well.
- Don't forget a changeset! Run
pnpm changeset. - See https://contribute.docs.astro.build/docs-for-code-changes/changesets/ for more info on writing changesets.
Testing
Docs
Changes
- Fix React slot rendering to skip empty
SlotStringvalues and avoid emitting empty<astro-slot>nodes (prevents React hydration mismatches for conditional slots). - Add a regression fixture (
slots.astro+ConditionalSlot.jsx) and test to validate empty slots don’t render<astro-slot>while filled slots still do.
Minimal example that was causing hydration error:
<ReactComponent client:load>
{show ? <span slot="my-slot-name">Visible</span> : null}
</ReactComponent>
Testing
New test case added.
Docs
- No docs updates needed (internal integration fix + tests only).
Changes
- Mode became required in v4. However it's unclear to me which mode we should use, so I went with the recommended one per https://github.com/CodSpeedHQ/action#usage
Testing
N/A
Docs
N/A
ℹ️ Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| zod (source) | ^3.25.76 → ^4.3.6 |
Release Notes
colinhacks/zod (zod)
v4.3.6
Commits:
9977fb0Add brand.dev to sponsorsf4b7baeUpdate pullfrog.yml (#5634)251d716Clean up workflow_calledd4132fix: add missing User-agent to robots.txt and allow all (#5646)85db85efix: typo in codec.test.ts file (#5628)cbf77bbAvoid non null assertion (#5638)dfbbf1cAvoid re-exported star modules (#5656)762e911Generalize numeric key handlingca3c862v4.3.6
v4.3.5
Commits:
21afffd[Docs] Update migration guide docs for deprecation of message (#5595)e36743eImprove mini treeshaking0cdc0b84.3.5
v4.3.4
Commits:
1a8bea3Add integration testse01cd02Support patternProperties for looserecord (#5592)089e5fbImprove looseRecord docsdecef9cFix lint9443aabDrop iso time in fromJSONSchema66bda74Remove .refine() from ZodMiniTypeb4ab94c4.3.4
v4.3.3
v4.3.2
v4.3.1
Commits:
0fe8840allow non-overwriting extends with refinements. 4.3.1
v4.3.0
This is Zod's biggest release since 4.0. It addresses several of Zod's longest-standing feature requests.
z.fromJSONSchema()
Convert JSON Schema to Zod (#5534, #5586)
You can now convert JSON Schema definitions directly into Zod schemas. This function supports JSON Schema "draft-2020-12", "draft-7", "draft-4", and OpenAPI 3.0.
import * as z from "zod";
const schema = z.fromJSONSchema({
type: "object",
properties: {
name: { type: "string", minLength: 1 },
age: { type: "integer", minimum: 0 },
},
required: ["name"],
});
schema.parse({ name: "Alice", age: 30 }); // ✅The API should be considered experimental. There are no guarantees of 1:1 "round-trip soundness": MySchema > z.toJSONSchema() > z.fromJSONSchema(). There are several features of Zod that don't exist in JSON Schema and vice versa, which makes this virtually impossible.
Features supported:
- All primitive types (
string,number,integer,boolean,null,object,array) - String formats (
email,uri,uuid,date-time,date,time,ipv4,ipv6, and more) - Composition (
anyOf,oneOf,allOf) - Object constraints (
additionalProperties,patternProperties,propertyNames) - Array constraints (
prefixItems,items,minItems,maxItems) $reffor local references and circular schemas- Custom metadata is preserved
z.xor() — exclusive union (#5534)
A new exclusive union type that requires exactly one option to match. Unlike z.union() which passes if any option matches, z.xor() fails if zero or more than one option matches.
const schema = z.xor([z.string(), z.number()]);
schema.parse("hello"); // ✅
schema.parse(42); // ✅
schema.parse(true); // ❌ zero matchesWhen converted to JSON Schema, z.xor() produces oneOf instead of anyOf.
z.looseRecord() — partial record validation (#5534)
A new record variant that only validates keys matching the key schema, passing through non-matching keys unchanged. This is used to represent patternProperties in JSON Schema.
const schema = z.looseRecord(z.string().regex(/^S_/), z.string());
schema.parse({ S_name: "John", other: 123 });
// ✅ { S_name: "John", other: 123 }
// only S_name is validated, "other" passes through.exactOptional() — strict optional properties (#5589)
A new wrapper that makes a property key-optional (can be omitted) but does not accept undefined as an explicit value.
const schema = z.object({
a: z.string().optional(), // accepts `undefined`
b: z.string().exactOptional(), // does not accept `undefined`
});
schema.parse({}); // ✅
schema.parse({ a: undefined }); // ✅
schema.parse({ b: undefined }); // ❌This makes it possible to accurately represent the full spectrum of optionality expressible using exactOptionalPropertyTypes.
.apply()
A utility method for applying arbitrary transformations to a schema, enabling cleaner schema composition. (#5463)
const setCommonChecks = <T extends z.ZodNumber>(schema: T) => {
return schema.min(0).max(100);
};
const schema = z.number().apply(setCommonChecks).nullable();.brand() cardinality
The .brand() method now accepts a second argument to control whether the brand applies to input, output, or both. Closes #4764, #4836.
// output only (default)
z.string().brand<"UserId">(); // output is branded (default)
z.string().brand<"UserId", "out">(); // output is branded
z.string().brand<"UserId", "in">(); // input is branded
z.string().brand<"UserId", "inout">(); // both are brandedType predicates on .refine() (#5575)
The .refine() method now supports type predicates to narrow the output type:
const schema = z.string().refine((s): s is "a" => s === "a");
type Input = z.input<typeof schema>; // string
type Output = z.output<typeof schema>; // "a"ZodMap methods: min, max, nonempty, size (#5316)
ZodMap now has parity with ZodSet and ZodArray:
const schema = z.map(z.string(), z.number())
.min(1)
.max(10)
.nonempty();
schema.size; // access the size constraint.with() alias for .check() (359c0db)
A new .with() method has been added as a more readable alias for .check(). Over time, more APIs have been added that don't qualify as "checks". The new method provides a readable alternative that doesn't muddy semantics.
z.string().with(
z.minLength(5),
z.toLowerCase()
);
// equivalent to:
z.string().check(
z.minLength(5),
z.trim(),
z.toLowerCase()
);z.slugify() transform
Transform strings into URL-friendly slugs. Works great with .with():
// Zod
z.string().slugify().parse("Hello World"); // "hello-world"
// Zod Mini
// using .with() for explicit check composition
z.string().with(z.slugify()).parse("Hello World"); // "hello-world"z.meta() and z.describe() in Zod Mini (947b4eb)
Zod Mini now exports z.meta() and z.describe() as top-level functions for adding metadata to schemas:
import * as z from "zod/mini";
// add description
const schema = z.string().with(
z.describe("A user's name"),
);
// add arbitrary metadata
const schema2 = z.number().with(
z.meta({ deprecated: true })
);New locales
import * as z from "zod";
import { uz } from "zod/locales";
z.config(uz());Bug fixes
All of these changes fix soundness issues in Zod. As with any bug fix there's some chance of breakage if you were intentionally or unintentionally relying on this unsound behavior.
⚠️ .pick() and .omit() disallowed on object schemas containing refinements (#5317)
Using .pick() or .omit() on object schemas with refinements now throws an error. Previously, this would silently drop the refinements, leading to unexpected behavior.
const schema = z.object({
password: z.string(),
confirmPassword: z.string(),
}).refine(data => data.password === data.confirmPassword);
schema.pick({ password: true });
// 4.2: refinement silently dropped ⚠️
// 4.3: throws error ❌Migration: The easiest way to migrate is to create a new schema using the shape of the old one.
const newSchema = z.object(schema.shape).pick({ ... })⚠️ .extend() disallowed on refined schemas (#5317)
Similarly, .extend() now throws on schemas with refinements. Use .safeExtend() if you need to extend refined schemas.
const schema = z.object({ a: z.string() }).refine(/* ... */);
// 4.2: refinement silently dropped ⚠️
// 4.3: throws error ✅
schema.extend({ b: z.number() });
// error: object schemas containing refinements cannot be extended. use `.safeExtend()` instead.⚠️ Stricter object masking methods (#5581)
Object masking methods (.pick(), .omit()) now validate that the keys provided actually exist in the schema:
const schema = z.object({ a: z.string() });
// 4.3: throws error for unrecognized keys
schema.pick({ nonexistent: true });
// error: unrecognized key: "nonexistent"Additional changes
- Fixed JSON Schema generation for
z.iso.timewith minute precision (#5557) - Fixed error details for tuples with extraneous elements (#5555)
- Fixed
includesmethod params typing to acceptstring | $ZodCheckIncludesParams(#5556) - Fixed numeric formats error messages to be inclusive (#5485)
- Fixed
implementAsyncinferred type to always be a promise (#5476) - Tightened E.164 regex to require a non-zero leading digit and 7–15 digits total (#5524)
- Fixed Dutch (nl) error strings (#5529)
- Convert
Dateinstances to numbers inminimum/maximumchecks (#5351) - Improved numeric keys handling in
z.record()(#5585) - Lazy initialization of
~standardschema property (#5363) - Functions marked as
@__NO_SIDE_EFFECTS__for better tree-shaking (#5475) - Improved metadata tracking across child-parent relationships (#5578)
- Improved locale translation approach (#5584)
- Dropped id uniqueness enforcement at registry level (#5574)
v4.2.1
v4.2.0
Features
Implement Standard JSON Schema
standard-schema/standard-schema#134
Implement z.fromJSONSchema()
const jsonSchema = {
type: "object",
properties: {
name: { type: "string" },
age: { type: "number" }
},
required: ["name"]
};
const schema = z.fromJSONSchema(jsonSchema);Implement z.xor()
const schema = z.xor(
z.object({ type: "user", name: z.string() }),
z.object({ type: "admin", role: z.string() })
);
// Exactly one of the schemas must matchImplement z.looseRecord()
const schema = z.looseRecord(z.string(), z.number());
// Allows additional properties beyond those definedCommits:
af49c08Update docs for JSON Schema conversion ofz.undefined()(#5504)767f320Add.toJSONSchema()method (#5477)e17dcb6Addz.fromJSONSchema(),z.looseRecord(),z.xor()(#5534)
v4.1.13
v4.1.12
Commits:
0b109c3docs(ecosystem): add bupkis to the ecosystem section (#5237)d22ec0ddocs(ecosystem): add upfetch (#5238)c56a4f6docs(ecosystem): addeslint-plugin-zod-x(#5261)a0abcc0docs(metadata.mdx): fix a mistake in an example output (#5248)62bf4e4fix(ZodError): prevent flatten() from crashing on 'toString' key (#5266)02a5840refac(errors): Unify code structure and improve types (#5278)4b1922adocs(content/v4/index): fix zod version (#5289)3fcb20fAdd frrm to ecosystem (#5292)fda4c7cMake docs work without tokenaf44738Fix lint77c3c9fExport bg.ts3b94610v4.1.12
v4.1.11
Commits:
2bed4b34.1.11
v4.1.10
Commits:
v4.1.9
Commits:
v4.1.8
Commits:
v4.1.7
Commits:
0cca351Fix variable name inconsistency in coercion documentation (#5188)aa78c27Add copy/edit buttons76452d4Update button txt937f73cFix tsconfig issue in bench976b436v4.1.6 (#5222)4309c61Fix cidrv6 validation - cidrv6 should reject invalid strings with multiple slashes (#5196)ef95a73feat(locales): Add Lithuanian (lt) locale (#5210)3803f3fdocs: update wrong contents in codeblocks inapi.mdx(#5209)8a47d5cdocs: update coerce example inapi.mdx(#5207)e87db13feat(locales): Add Georgian (ka) locale (#5203)c54b123docs: adds@traversable/zodand@traversable/zod-testto v4 ecosystem (#5194)c27a294Fix two tiny grammatical errors in the docs. (#5193)23a2d66docs: fix broken links in async refinements and transforms references (#5190)845a230fix(locales): Add type name translations to Spanish locale (#5187)27f13d6Improve regex precision and eliminate duplicates in regexes.ts (#5181)a8a52b3fix(v4): fix Khmer and Ukrainian locales (#5177)887e37cUpdate slugse1f1948fix(v4): ensure array defaults are shallow-cloned (#5173)9f65038docs(ecosystem): add DRZL; fix Prisma Zod Generator placement (#5215)aa6f0f0More fixes (#5223)aab33564.1.7
v4.1.6
v4.1.5
Commits:
v4.1.4
Commits:
3291c61fix(v4): toJSONSchema - wrong tuple withnulloutput when targetingopenapi-3.0(#5156)23f41c7test(v4): toJSONSchema - usevalidateOpenAPI30Schemain all relevant scenarios (#5163)0a09fd2Update installation instructions4ea5fec4.1.4
v4.1.3
Commits:
98ff675Drop stringToBooleana410616Fix typo0cf4589fix(v4): toJSONSchema - add missing oneOf inside items in tuple conversion (#5146)8bf0c16fix(v4): toJSONSchema tuple path handling for draft-7 with metadata IDs (#5152)5c5fa90fix(v4): toJSONSchema - wrong record output when targetingopenapi-3.0(#5141)87b97ccdocs(codecs): update example to use payloadSchema (#5150)309f358fix(v4): toJSONSchema - output numbers with exclusive range correctly when targetingopenapi-3.0(#5139)1e71ca9docs: fix refine fn to encode works properly (#5148)a85ec3cfix(docs): correct example to useLooseDoginstead ofDog(#5136)3e982744.1.3
v4.1.2
Commits:
e45e61bImprove codec docs25a4c37fix(v4): toJSONSchema - wrong record tuple output when targetingopenapi-3.0(#5145)0fa4f46Use method form in codecs.mdx940383dUpdate JSON codec and docs3009fa84.1.2
v4.1.1
Commits:
648eb43Remove codecs from sidebare7e39a99Improve codec docse5085beAdd images028b289Add methods10cc9944.1.1
v4.1.0
The first minor version since the introduction of Zod 4 back in May. This version contains a number of features that barely missed the cut for the 4.0 release. With Zod 4 stable and widely adopted, there's more time to resume feature development.
Codecs
This is the flagship feature of this release. Codecs are a new API & schema type that encapsulates a bi-directional transformation. It's a huge missing piece in Zod that's finally filled, and it unlocks some totally new ways to use Zod.
const stringToDate = z.codec(
z.iso.datetime(), // input schema: ISO date string
z.date(), // output schema: Date object
{
decode: (isoString) => new Date(isoString),
encode: (date) => date.toISOString(),
}
);New top-level functions are added for processing inputs in the forward direction ("decoding") and backward direction ("encoding").
stringToDate.decode("2025-08-21T20:59:45.500Z")
// => Date
stringToDate.encode(new Date())
// => "2025-08-21T20:59:45.500Z"Note — For bundle size reasons, these new methods have not added to Zod Mini schemas. Instead, this functionality is available via equivalent top-level functions.
// equivalent at runtime z.decode(stringToDate, "2024-01-15T10:30:00.000Z"); z.encode(stringToDate, new Date());
.parse() vs .decode()
Both .parse() and decode() process data in the "forward" direction. They behave identically at runtime.
stringToDate.parse("2025-08-21T20:59:45.500Z");
stringToDate.decode("2025-08-21T20:59:45.500Z");There is an important difference however. While .parse() accepts any input, .decode() expects a strongly typed input. That is, it expects an input of type string, whereas .parse() accepts unknown.
stringToDate.parse(Symbol('not-a-string'));
// => fails at runtime, but no TypeScript error
stringToDate.decode(Symbol("not-a-string"));
// ^ ❌ Argument of type 'symbol' is not assignable to parameter of type 'Date'. ts(2345)This is a highly requested feature unto itself:
Encoding
You can use any Zod schema with .encode(). The vast majority of Zod schemas are non-transforming (the input and output types are identical) so .decode() and .encode() behave identically. Only certain schema types change their behavior:
- Codecs — runs from
B->Aand executes theencodetransform during encoding - Pipes — these execute
B->Ainstead ofA->B - Defaults and prefaults — Only applied in the forward direction
- Catch — Only applied in the forward direction
Note — To avoid increasing bundle size unnecessarily, these new methods are not available on Zod Mini schemas. For those schemas, equivalent top-level functions are provided.
The usual async and safe variants exist as well:
// decode methods
stringToDate.decode("2024-01-15T10:30:00.000Z")
await stringToDate.decodeAsync("2024-01-15T10:30:00.000Z")
stringToDate.safeDecode("2024-01-15T10:30:00.000Z")
await stringToDate.safeDecodeAsync("2024-01-15T10:30:00.000Z")
// encode methods
stringToDate.encode(new Date())
await stringToDate.encodeAsync(new Date())
stringToDate.safeEncode(new Date())
await stringToDate.safeEncodeAsync(new Date())Example codecs
Below are some "worked examples" for some commonly-needed codecs. These examples are all tested internally for correctness. Just copy/paste them into your project as needed. There is a more comprehensive set available at zod.dev/codecs.
stringToBigInt
Converts bigint into a serializable form.
const stringToBigInt = z.codec(z.string(), z.bigint(), {
decode: (str) => BigInt(str),
encode: (bigint) => bigint.toString(),
});
stringToBigInt.decode("12345"); // => 12345n
stringToBigInt.encode(12345n); // => "12345"
json
Parses/stringifies JSON data.
const jsonCodec = z.codec(z.string(), z.json(), {
decode: (jsonString, ctx) => {
try {
return JSON.parse(jsonString);
} catch (err: any) {
ctx.issues.push({
code: "invalid_format",
format: "json_string",
input: jsonString,
message: err.message,
});
return z.NEVER;
}
},
encode: (value) => JSON.stringify(value),
});To further validate the data, .pipe() the result of this codec into another schema.
const Params = z.object({ name: z.string(), age: z.number() });
const JsonToParams = jsonCodec.pipe(Params);
JsonToParams.decode('{"name":"Alice","age":30}'); // => { name: "Alice", age: 30 }
JsonToParams.encode({ name: "Bob", age: 25 }); // => '{"name":"Bob","age":25}'Further reading
For more examples and a technical breakdown of how encoding works, reads theannouncement blog post and new Codecs docs page. The docs page contains implementations for several other commonly-needed codecs:
stringToNumberstringToIntstringToBigIntnumberToBigIntisoDatetimeToDateepochSecondsToDateepochMillisToDatejsonCodecutf8ToBytesbytesToUtf8base64ToBytesbase64urlToByteshexToBytesstringToURLstringToHttpURLuriComponentstringToBoolean
.safeExtend()
The existing way to add additional fields to an object is to use .extend().
const A = z.object({ a: z.string() })
const B = A.extend({ b: z.string() })Unfortunately this is a bit of a misnomer, as it allows you to overwrite existing fields. This means the result of .extend() may not literally extend the original type (in the TypeScript sense).
const A = z.object({ a: z.string() }) // { a: string }
const B = A.extend({ a: z.number() }) // { a: number }To enforce true extends logic, Zod 4.1 introduces a new .safeExtend() method. This statically enforces that the newly added properties conform to the existing ones.
z.object({ a: z.string() }).safeExtend({ a: z.number().min(5) }); // ✅
z.object({ a: z.string() }).safeExtend({ a: z.any() }); // ✅
z.object({ a: z.string() }).safeExtend({ a: z.number() });
// ^ ❌ ZodNumber is not assignable Importantly, this new API allows you to safely extend objects containing refinements.
const AB = z.object({ a: z.string(), b: z.string() }).refine(val => val.a === val.b);
const ABC = AB.safeExtend({ c: z.string() });
// ABC includes the refinements defined on ABPreviously (in Zod 4.x) any refinements attached to the base schema were dropped in the extended result. This was too unexpected. It now throws an error. (Zod 3 did not support extension of refined objects either.)
z.hash()
A new top-level string format for validating hashes produced using various common algorithms & encodings.
const md5Schema = z.hash("md5");
// => ZodCustomStringFormat<"md5_hex">
const sha256Base64 = z.hash("sha256", { enc: "base64" });
// => ZodCustomStringFormat<"sha256_base64">The following hash algorithms and encodings are supported. Each cell provides information about the expected number of characters/padding.
| Algorithm / Encoding | "hex" |
"base64" |
"base64url" |
|---|---|---|---|
"md5" |
32 | 24 (22 + "==") | 22 |
"sha1" |
40 | 28 (27 + "=") | 27 |
"sha256" |
64 | 44 (43 + "=") | 43 |
"sha384" |
96 | 64 (no padding) | 64 |
"sha512" |
128 | 88 (86 + "==") | 86 |
z.hex()
To validate hexadecimal strings of any length.
const hexSchema = z.hex();
hexSchema.parse("123abc"); // ✅ "123abc"
hexSchema.parse("DEADBEEF"); // ✅ "DEADBEEF"
hexSchema.parse("xyz"); // ❌ ZodErrorAdditional changes
- z.uuid() now supports the "Max UUID" (
FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF) per the RFC $ZodFunctionis now a subtype of$ZodType
Commits
edd4fea- Closes #51275d4a315- Closes #5116f3f0955- Closes #51080114d5b- #51223b077c3- #51211e06af8- #5113b01b6f3— #5052571ab0c— #5051d3ea111— #5049b8e3f87— #4865
v4.0.17
Commits:
v4.0.16
Commits:
d589186fix: ensure keyof returns enum (#5045)4975f3afeat: add discriminator generic (#5044)0a463e3Update speakeasy files12658afFix Edit page buttons47e6604fix:edit this pagebutton, now redirects to correct url using the new path (#5056)7207a2dUpdate Hey API link to Zod v3 plugin (#5060)6887ff3Update Hey API link to Zod plugin (#5059)ffff1aaClone POJO objects during defaulting/prefaultinga227cb3v4.0.16
v4.0.15
Commits:
7e7e346Clean up docsf2949a8[docs] Fix migration guide upgrade command (#5021)d43cf19Fix recursive object initialization errors with check() and other methods (#5018)3de2b63fix: remove redundant Required<> from input and output type definitions (#5033)93553bdAdd needs info03cfa8d4.0.15
v4.0.14
Commits:
99391a8Docs: Fix typo (#5005)e25303eDocs: fix typo (#5008)dbb05efAdd JSON Schema draft-04 output (#4811)b8257d7Improve tuple recursive inference.9bdbc2fAvoid infinite loops in defineLazy. Fixes #4994.af96ad44.0.14
v4.0.13
Commits:
v4.0.12
Commits:
ff83fc9Add eslint-plugin-import-zod (#4848)7c9ce38Update docs for z.property check (#4863)c432577docs: add jwt schema docs (#4867)35e6a6fAdd llms.txt (#4915)3ac7bf0Clean up Edit this Page60a9372Implementllms-full.txt(#5004)73a19704.0.12
v4.0.11
Commits:
8e6a5f8Fix “Edit on Github” link (#4997)930a2f6Fix number of errors in doc (#4993)c762dbbfeat(locale): Add Yoruba (yo) locale (#4996)9a34a3aZod 4.0.11 (#4981)
v4.0.10
Commits:
291c1caAdd should-build scripte32d99bMove should-build scriptd4faf71Add v3 docs (#4972)dfae371Update Jazz img on v3 docsd6cd30dfix #4973 (#4974)1850496Fix typo invalype(#4960)4ec2f87Add Zod Playground to zod 4 ecosystem (#4975)2b571a2Update docs z.enum with object literal example (#4967)813451dv4.0.10 (#4978)
v4.0.9
Commits:
v4.0.8
Commits:
v4.0.7
Commits:
v4.0.6
Commits:
a3e4391Unwiden catch input type (#4870)499df78Add RFC 9562 mentions. Closes #4872d0493f3Doc tweak - spread vs destructuring (#4919)8dad394feat: Icelandic translation (#4920)2ffdae1Bulgarian (bg) translation (#4928)0973135docs: add valype to xToZodConverts (#4930)d257340Remove moduleResolution callout (#4932)075970ddocs: add coercion note to fix compile errors (#4940)b9e8a60Add@hey-api/openapi-tsto Zod 3 ecosystem (#4949)ad7b0ffAdd@hey-api/openapi-tsto Zod 3 ecosystem (#4942)4619109feat(locales): add Danish translations (#4953)cb84a57Point to zod-v3-to-v4 codemod in Zod 4 migration guide (#4954)28a5091Update api.mdx (#4955)7f3cf94Fix URL sup example (#4959)- [
17e7f3b](https://redi
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.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.
Add Actionbase documentation site to the showcase.
- Site: https://actionbase.io/
- GitHub: https://github.com/kakao/actionbase
Changes
- Closes #15311
- I was looking at writing tests then updating the implementation of
collapseDuplicateSlashes()when I realized...we don't even use this function anymore! - So I went through all the exports of the
pathsubmodule and removed any unused one
Testing
Should pass
Docs
Changeset
Changes
- I added a new option to
@astrojs/react,appEntrypoint. It looks a whole lot like the Vue integration’s appEntrypoint option and it functions nearly identically. Specify a path to a file that has a default-exported component and that component will be used to wrap every React island. I addedRemoved for now but you can see the change here (it’s pretty minimal)Astro.localsto the render context and am passingAstro.localsthrough toappEntrypoint’s component as a prop calledlocals. The prop is only set in a server environment; clientside it’s justundefined.
Testing
New tests added that cover appEntrypoint in general as well as the .locals prop
Docs
PR with docs update is here: withastro/docs#13208
ℹ️ Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| @types/react (source) | ^18.3.27 → ^19.2.10 |
||
| @types/react-dom (source) | ^18.3.7 → ^19.2.3 |
||
| react (source) | ^18.3.1 → ^19.2.4 |
||
| react-dom (source) | ^18.3.1 → ^19.2.4 |
Release Notes
facebook/react (react)
v19.2.4: 19.2.4 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
v19.2.3: 19.2.3 (December 11th, 2025)
React Server Components
- Add extra loop protection to React Server Functions (@sebmarkbage #35351)
v19.2.2: 19.2.2 (December 11th, 2025)
React Server Components
- Move
react-server-dom-webpack/*.unbundledto privatereact-server-dom-unbundled(@eps1lon #35290) - Patch Promise cycles and toString on Server Functions (@sebmarkbage, @unstubbable #35289)
v19.2.1: 19.2.1 (December 3rd, 2025)
React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage #35277)
v19.2.0
Below is a list of all new features, APIs, and bug fixes.
Read the React 19.2 release post for more information.
New React Features
<Activity>: A new API to hide and restore the UI and internal state of its children.useEffectEventis a React Hook that lets you extract non-reactive logic into an Effect Event.cacheSignal(for RSCs) lets your know when thecache()lifetime is over.- React Performance tracks appear on the Performance panel’s timeline in your browser developer tools
New React DOM Features
- Added resume APIs for partial pre-rendering with Web Streams:
resume: to resume a prerender to a stream.resumeAndPrerender: to resume a prerender to HTML.
- Added resume APIs for partial pre-rendering with Node Streams:
resumeToPipeableStream: to resume a prerender to a stream.resumeAndPrerenderToNodeStream: to resume a prerender to HTML.
- Updated
prerenderAPIs to return apostponedstate that can be passed to theresumeAPIs.
Notable changes
- React DOM now batches suspense boundary reveals, matching the behavior of client side rendering. This change is especially noticeable when animating the reveal of Suspense boundaries e.g. with the upcoming
<ViewTransition>Component. React will batch as much reveals as possible before the first paint while trying to hit popular first-contentful paint metrics. - Add Node Web Streams (
prerender,renderToReadableStream) to server-side-rendering APIs for Node.js - Use underscore instead of
:IDs generated by useId
All Changes
React
<Activity />was developed over many years, starting beforeClassComponent.setState(@acdlite @sebmarkbage and many others)- Stringify context as "SomeContext" instead of "SomeContext.Provider" (@kassens #33507)
- Include stack of cause of React instrumentation errors with
%oplaceholder (@eps1lon #34198) - Fix infinite
useDeferredValueloop in popstate event (@acdlite #32821) - Fix a bug when an initial value was passed to
useDeferredValue(@acdlite #34376) - Fix a crash when submitting forms with Client Actions (@sebmarkbage #33055)
- Hide/unhide the content of dehydrated suspense boundaries if they resuspend (@sebmarkbage #32900)
- Avoid stack overflow on wide trees during Hot Reload (@sophiebits #34145)
- Improve Owner and Component stacks in various places (@sebmarkbage, @eps1lon: #33629, #33724, #32735, #33723)
- Add
cacheSignal(@sebmarkbage #33557)
React DOM
- Block on Suspensey Fonts during reveal of server-side-rendered content (@sebmarkbage #33342)
- Use underscore instead of
:for IDs generated byuseId(@sebmarkbage, @eps1lon: #32001, #33342#33099, #33422) - Stop warning when ARIA 1.3 attributes are used (@Abdul-Omira #34264)
- Allow
nonceto be used on hoistable styles (@Andarist #32461) - Warn for using a React owned node as a Container if it also has text content (@sebmarkbage #32774)
- s/HTML/text for for error messages if text hydration mismatches (@rickhanlonii #32763)
- Fix a bug with
React.useinsideReact.lazy-ed Component (@hi-ogawa #33941) - Enable the
progressiveChunkSizeoption for server-side-rendering APIs (@sebmarkbage #33027) - Fix a bug with deeply nested Suspense inside Suspense fallback when server-side-rendering (@gnoff #33467)
- Avoid hanging when suspending after aborting while rendering (@gnoff #34192)
- Add Node Web Streams to server-side-rendering APIs for Node.js (@sebmarkbage #33475)
React Server Components
- Preload
<img>and<link>using hints before they're rendered (@sebmarkbage #34604) - Log error if production elements are rendered during development (@eps1lon #34189)
- Fix a bug when returning a Temporary reference (e.g. a Client Reference) from Server Functions (@sebmarkbage #34084, @denk0403 #33761)
- Pass line/column to
filterStackFrame(@eps1lon #33707) - Support Async Modules in Turbopack Server References (@lubieowoce #34531)
- Add support for .mjs file extension in Webpack (@jennyscript #33028)
- Fix a wrong missing key warning (@unstubbable #34350)
- Make console log resolve in predictable order (@sebmarkbage #33665)
React Reconciler
- createContainer and createHydrationContainer had their parameter order adjusted after
on*handlers to account for upcoming experimental APIs
v19.1.5: 19.1.5 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
v19.1.4: 19.1.4 (December 11th, 2025)
React Server Components
- Add extra loop protection to React Server Functions (@sebmarkbage #35351)
v19.1.3: 19.1.3 (December 11th, 2025)
React Server Components
- Move
react-server-dom-webpack/*.unbundledto privatereact-server-dom-unbundled(@eps1lon #35290) - Patch Promise cycles and toString on Server Functions (@sebmarkbage, @unstubbable #35289, #35345)
v19.1.2: 19.1.2 (December 3rd, 2025)
React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage #35277)
v19.1.1
React
v19.1.0
Owner Stack
An Owner Stack is a string representing the components that are directly responsible for rendering a particular component. You can log Owner Stacks when debugging or use Owner Stacks to enhance error overlays or other development tools. Owner Stacks are only available in development builds. Component Stacks in production are unchanged.
- An Owner Stack is a development-only stack trace that helps identify which components are responsible for rendering a particular component. An Owner Stack is distinct from a Component Stacks, which shows the hierarchy of components leading to an error.
- The captureOwnerStack API is only available in development mode and returns a Owner Stack, if available. The API can be used to enhance error overlays or log component relationships when debugging. #29923, #32353, #30306,
#32538, #32529, #32538
React
- Enhanced support for Suspense boundaries to be used anywhere, including the client, server, and during hydration. #32069, #32163, #32224, #32252
- Reduced unnecessary client rendering through improved hydration scheduling #31751
- Increased priority of client rendered Suspense boundaries #31776
- Fixed frozen fallback states by rendering unfinished Suspense boundaries on the client. #31620
- Reduced garbage collection pressure by improving Suspense boundary retries. #31667
- Fixed erroneous “Waiting for Paint” log when the passive effect phase was not delayed #31526
- Fixed a regression causing key warnings for flattened positional children in development mode. #32117
- Updated
useIdto use valid CSS selectors, changing format from:r123:to«r123». #32001 - Added a dev-only warning for null/undefined created in useEffect, useInsertionEffect, and useLayoutEffect. #32355
- Fixed a bug where dev-only methods were exported in production builds. React.act is no longer available in production builds. #32200
- Improved consistency across prod and dev to improve compatibility with Google Closure Compiler and bindings #31808
- Improve passive effect scheduling for consistent task yielding. #31785
- Fixed asserts in React Native when passChildrenWhenCloningPersistedNodes is enabled for OffscreenComponent rendering. #32528
- Fixed component name resolution for Portal #32640
- Added support for beforetoggle and toggle events on the dialog element. #32479
React DOM
- Fixed double warning when the
hrefattribute is an empty string #31783 - Fixed an edge case where
getHoistableRoot()didn’t work properly when the container was a Document #32321 - Removed support for using HTML comments (e.g.
<!-- -->) as a DOM container. #32250 - Added support for
<script>and<template>tags to be nested within<select>tags. #31837 - Fixed responsive images to be preloaded as HTML instead of headers #32445
use-sync-external-store
- Added
exportsfield topackage.jsonforuse-sync-external-storeto support various entrypoints. #25231
React Server Components
- Added
unstable_prerender, a new experimental API for prerendering React Server Components on the server #31724 - Fixed an issue where streams would hang when receiving new chunks after a global error #31840, #31851
- Fixed an issue where pending chunks were counted twice. #31833
- Added support for streaming in edge environments #31852
- Added support for sending custom error names from a server so that they are available in the client for console replaying. #32116
- Updated the server component wire format to remove IDs for hints and console.log because they have no return value #31671
- Exposed
registerServerReferencein client builds to handle server references in different environments. #32534 - Added react-server-dom-parcel package which integrates Server Components with the Parcel bundler #31725, #32132, #31799, #32294, #31741
v19.0.4: 19.0.4 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
v19.0.3: 19.0.3 (December 11th, 2025)
React Server Components
- Add extra loop protection to React Server Functions (@sebmarkbage #35351)
v19.0.2: 19.0.2 (December 11th, 2025)
React Server Components
- Patch Promise cycles and toString on Server Functions (@sebmarkbage, @unstubbable #35289, #35345)
v19.0.1: 19.0.1 (December 3rd, 2025)
React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage #35277)
v19.0.0
Below is a list of all new features, APIs, deprecations, and breaking changes. Read React 19 release post and React 19 upgrade guide for more information.
Note: To help make the upgrade to React 19 easier, we’ve published a react@18.3 release that is identical to 18.2 but adds warnings for deprecated APIs and other changes that are needed for React 19. We recommend upgrading to React 18.3.1 first to help identify any issues before upgrading to React 19.
New Features
React
- Actions:
startTransitioncan now accept async functions. Functions passed tostartTransitionare called “Actions”. A given Transition can include one or more Actions which update state in the background and update the UI with one commit. In addition to updating state, Actions can now perform side effects including async requests, and the Action will wait for the work to finish before finishing the Transition. This feature allows Transitions to include side effects likefetch()in the pending state, and provides support for error handling, and optimistic updates. useActionState: is a new hook to order Actions inside of a Transition with access to the state of the action, and the pending state. It accepts a reducer that can call Actions, and the initial state used for first render. It also accepts an optional string that is used if the action is passed to a formactionprop to support progressive enhancement in forms.useOptimistic: is a new hook to update state while a Transition is in progress. It returns the state, and a set function that can be called inside a transition to “optimistically” update the state to expected final value immediately while the Transition completes in the background. When the transition finishes, the state is updated to the new value.use: is a new API that allows reading resources in render. In React 19,useaccepts a promise or Context. If provided a promise,usewill suspend until a value is resolved.usecan only be used in render but can be called conditionally.refas a prop: Refs can now be used as props, removing the need forforwardRef.- Suspense sibling pre-warming: When a component suspends, React will immediately commit the fallback of the nearest Suspense boundary, without waiting for the entire sibling tree to render. After the fallback commits, React will schedule another render for the suspended siblings to “pre-warm” lazy requests.
React DOM Client
<form> actionprop: Form Actions allow you to manage forms automatically and integrate withuseFormStatus. When a<form> actionsucceeds, React will automatically reset the form for uncontrolled components. The form can be reset manually with the newrequestFormResetAPI.<button> and <input> formActionprop: Actions can be passed to theformActionprop to configure form submission behavior. This allows using different Actions depending on the input.useFormStatus: is a new hook that provides the status of the parent<form> action, as if the form was a Context provider. The hook returns the values:pending,data,method, andaction.- Support for Document Metadata: We’ve added support for rendering document metadata tags in components natively. React will automatically hoist them into the
<head>section of the document. - Support for Stylesheets: React 19 will ensure stylesheets are inserted into the
<head>on the client before revealing the content of a Suspense boundary that depends on that stylesheet. - Support for async scripts: Async scripts can be rendered anywhere in the component tree and React will handle ordering and deduplication.
- Support for preloading resources: React 19 ships with
preinit,preload,prefetchDNS, andpreconnectAPIs to optimize initial page loads by moving discovery of additional resources like fonts out of stylesheet loading. They can also be used to prefetch resources used by an anticipated navigation.
React DOM Server
- Added
prerenderandprerenderToNodeStreamAPIs for static site generation. They are designed to work with streaming environments like Node.js Streams and Web Streams. UnlikerenderToString, they wait for data to load for HTML generation.
React Server Components
- RSC features such as directives, server components, and server functions are now stable. This means libraries that ship with Server Components can now target React 19 as a peer dependency with a react-server export condition for use in frameworks that support the Full-stack React Architecture. The underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x. See docs for how to support React Server Components.
Deprecations
- Deprecated:
element.refaccess: React 19 supports ref as a prop, so we’re deprecatingelement.refin favor ofelement.props.ref. Accessing will result in a warning. react-test-renderer: In React 19, react-test-renderer logs a deprecation warning and has switched to concurrent rendering for web usage. We recommend migrating your tests to @testing-library/react or @testing-library/react-native
Breaking Changes
React 19 brings in a number of breaking changes, including the removals of long-deprecated APIs. We recommend first upgrading to 18.3.1, where we've added additional deprecation warnings. Check out the upgrade guide for more details and guidance on codemodding.
React
- New JSX Transform is now required: We introduced a new JSX transform in 2020 to improve bundle size and use JSX without importing React. In React 19, we’re adding additional improvements like using ref as a prop and JSX speed improvements that require the new transform.
- Errors in render are not re-thrown: Errors that are not caught by an Error Boundary are now reported to window.reportError. Errors that are caught by an Error Boundary are reported to console.error. We’ve introduced
onUncaughtErrorandonCaughtErrormethods tocreateRootandhydrateRootto customize this error handling. - Removed:
propTypes: UsingpropTypeswill now be silently ignored. If required, we recommend migrating to TypeScript or another type-checking solution. - Removed:
defaultPropsfor functions: ES6 default parameters can be used in place. Class components continue to supportdefaultPropssince there is no ES6 alternative. - Removed:
contextTypesandgetChildContext: Legacy Context for class components has been removed in favor of thecontextTypeAPI. - Removed: string refs: Any usage of string refs need to be migrated to ref callbacks.
- Removed: Module pattern factories: A rarely used pattern that can be migrated to regular functions.
- Removed:
React.createFactory: Now that JSX is broadly supported, allcreateFactoryusage can be migrated to JSX components. - Removed:
react-test-renderer/shallow: This has been a re-export of react-shallow-renderer since React 18. If needed, you can continue to use the third-party package directly. We recommend using @testing-library/react or @testing-library/react-native instead.
React DOM
- Removed:
react-dom/test-utils: We’ve movedactfromreact-dom/test-utilsto react. All other utilities have been removed. - Removed:
ReactDOM.render,ReactDOM.hydrate: These have been removed in favor of the concurrent equivalents:ReactDOM.createRootandReactDOM.hydrateRoot. - Removed:
unmountComponentAtNode: Removed in favor ofroot.unmount(). - Removed:
ReactDOM.findDOMNode: You can replaceReactDOM.findDOMNodewith DOM Refs.
Notable Changes
React
<Context>as a provider: You can now render<Context>as a provider instead of<Context.Provider>.- Cleanup functions for refs: When the component unmounts, React will call the cleanup function returned from the ref callback.
useDeferredValueinitial value argument: When provided,useDeferredValuewill return the initial value for the initial render of a component, then schedule a re-render in the background with thedeferredValuereturned.- Support for Custom Elements: React 19 now passes all tests on Custom Elements Everywhere.
- StrictMode changes:
useMemoanduseCallbackwill now reuse the memoized results from the first render, during the second render. Additionally, StrictMode will now double-invoke ref callback functions on initial mount. - UMD builds removed: To load React 19 with a script tag, we recommend using an ESM-based CDN such as esm.sh.
React DOM
- Diffs for hydration errors: In the case of a mismatch, React 19 logs a single error with a diff of the mismatched content.
- Compatibility with third-party scripts and extensions: React will now force a client re-render to fix up any mismatched content caused by elements inserted by third-party JS.
TypeScript Changes
The most common changes can be codemodded with npx types-react-codemod@latest preset-19 ./path-to-your-react-ts-files.
- Removed deprecated TypeScript types:
ReactChild(replacement:React.ReactElement | number | string)ReactFragment(replacement:Iterable<React.ReactNode>)ReactNodeArray(replacement:ReadonlyArray<React.ReactNode>)ReactText(replacement:number | string)VoidFunctionComponent(replacement:FunctionComponent)VFC(replacement:FC)- Moved to
prop-types:Requireable,ValidationMap,Validator,WeakValidationMap - Moved to
create-react-class:ClassicComponentClass,ClassicComponent,ClassicElement,ComponentSpec,Mixin,ReactChildren,ReactHTML,ReactSVG,SFCFactory
- Disallow implicit return in refs: refs can now accept cleanup functions. When you return something else, we can’t tell if you intentionally returned something not meant to clean up or returned the wrong value. Implicit returns of anything but functions will now error.
- Require initial argument to
useRef: The initial argument is now required to matchuseState,createContextetc - Refs are mutable by default: Ref objects returned from
useRef()are now always mutable instead of sometimes being immutable. This feature was too confusing for users and conflicted with legit cases where refs were managed by React and manually written to. - Strict
ReactElementtyping: The props of React elements now default tounknowninstead ofanyif the element is typed asReactElement - JSX namespace in TypeScript: The global
JSXnamespace is removed to improve interoperability with other libraries using JSX. Instead, the JSX namespace is available from the React package:import { JSX } from 'react' - Better
useReducertypings: MostuseReducerusage should not require explicit type arguments.
For example,or-useReducer<React.Reducer<State, Action>>(reducer) +useReducer(reducer)
-useReducer<React.Reducer<State, Action>>(reducer) +useReducer<State, Action>(reducer)
All Changes
React
- Add support for async Actions (#26621, #26726, #28078, #28097, #29226, #29618, #29670, #26716 by @acdlite and @sebmarkbage)
- Add
useActionState()hook to update state based on the result of a Form Action (#27270, #27278, #27309, #27302, #27307, #27366, #27370, #27321, #27374, #27372, #27397, #27399, #27460, #28557, #27570, #27571, #28631, #28788, #29694, #29695, #29694, #29665, #28232, #28319 by @acdlite, @eps1lon, and @rickhanlonii) - Add
use()API to read resources in render (#25084, #25202, #25207, #25214, #25226, #25247, #25539, #25538, #25537, #25543, #25561, #25620, #25615, #25922, #25641, #25634, #26232, #26536, #26739, #28233 by @acdlite, @MofeiZ, @sebmarkbage, @sophiebits, @eps1lon, and @hansottowirtz) - Add
useOptimistic()hook to display mutated state optimistically during an async mutation (#26740, #26772, #27277, #27453, #27454, #27936 by @acdlite) - Added an
initialValueargument touseDeferredValue()hook (#27500, #27509, #27512, #27888, #27550 by @acdlite) - Support refs as props, warn on
element.refaccess (#28348, #28464, #28731 by @acdlite) - Support Custom Elements (#22184, #26524, #26523, #27511, #24541 by @josepharhar, @sebmarkbage, @gnoff and @eps1lon)
- Add ref cleanup function (#25686, #28883, #28910 by @sammy-SC, @jackpope, and @kassens)
- Sibling pre-rendering replaced by sibling pre-warming (#26380, #26549, #30761, #30800, #30762, #30879, #30934, #30952, #31056, #31452 by @sammy-SC, @acdlite, @gnoff, @jackpope, @rickhanlonii)
- Don’t rethrow errors at the root (#28627, #28641 by @sebmarkbage)
- Batch sync discrete, continuous, and default lanes (#25700 by @tyao1)
- Switch
<Context>to mean<Context.Provider>(#28226 by @gaearon) - Changes to StrictMode
- Handle
info,group, andgroupCollapsedin StrictMode logging (#25172 by @timneutkens) - Refs are now attached/detached/attached in StrictMode (#25049 by @sammy-SC)
- Fix
useSyncExternalStore()hydration in StrictMode (#26791 by @sophiebits) - Always trigger
componentWillUnmount()in StrictMode (#26842 by @tyao1) - Restore double invoking
useState()anduseReducer()initializer functions in StrictMode (#28248 by @eps1lon) - Reuse memoized result from first pass (#25583 by @acdlite)
- Fix
useId()in StrictMode (#25713 by @gnoff) - Add component name to StrictMode error messages (#25718 by @sammy-SC)
- Handle
- Add support for rendering BigInt (#24580 by @eps1lon)
act()no longer checksshouldYieldwhich can be inaccurate in test environments (#26317 by @acdlite)- Warn when keys are spread with props (#25697, #26080 by @sebmarkbage and @kassens)
- Generate sourcemaps for production build artifacts (#26446 by @markerikson)
- Improve stack diffing algorithm (#27132 by @KarimP)
- Suspense throttling lowered from 500ms to 300ms (#26803 by @acdlite)
- Lazily propagate context changes (#20890 by @acdlite and @gnoff)
- Immediately rerender pinged fiber (#25074 by @acdlite)
- Move update scheduling to microtask (#26512 by @acdlite)
- Consistently apply throttled retries (#26611, #26802 by @acdlite)
- Suspend Thenable/Lazy if it's used in React.Children (#28284 by @sebmarkbage)
- Detect infinite update loops caused by render phase updates (#26625 by @acdlite)
- Update conditional hooks warning (#29626 by @sophiebits)
- Update error URLs to go to new docs (#27240 by @rickhanlonii)
- Rename the
react.elementsymbol toreact.transitional.element(#28813 by @sebmarkbage) - Fix crash when suspending in shell during
useSyncExternalStore()re-render (#27199 by @acdlite) - Fix incorrect “detected multiple renderers" error in tests (#22797 by @eps1lon)
- Fix bug where effect cleanup may be called twice after bailout (#26561 by @acdlite)
- Fix suspending in shell during discrete update (#25495 by @acdlite)
- Fix memory leak after repeated setState bailouts (#25309 by @acdlite)
- Fix
useSyncExternalStore()dropped update when state is dispatched in render phase (#25578 by @pandaiolo) - Fix logging when rendering a lazy fragment (#30372 by @tom-sherman)
- Remove string refs (#25383, #28322 by @eps1lon and @acdlite)
- Remove Legacy Context (#30319 by @kassens)
- Remove
RefreshRuntime.findAffectedHostInstances(#30538 by @gaearon) - Remove client caching from
cache()API (#27977, #28250 by @acdlite and @gnoff) - Remove
propTypes(#28324, #28326 by @gaearon) - Remove
defaultPropssupport, except for classes (#28733 by @acdlite) - Remove UMD builds (#28735 by @gnoff)
- Remove delay for non-transition updates (#26597 by @acdlite)
- Remove
createFactory(#27798 by @kassens)
React DOM
- Adds Form Actions to handle form submission (#26379, #26674, #26689, #26708, #26714, #26735, #26846, #27358, #28056 by @sebmarkbage, @acdlite, and @jupapios)
- Add
useFormStatus()hook to provide status information of the last form submission (#26719, #26722, #26788, #29019, #28728, #28413 by @acdlite and @eps1lon) - Support for Document Metadata. Adds
preinit,preinitModule,preconnect,prefetchDNS,preload, andpreloadModuleAPIs.
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.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
- If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.
Changes
This fixes a bug in the image service where inferSize was not correctly deleted when the image was not remote.
Testing
There was no existing test related to inferSize. This PR doesn't add any.
Docs
There is no impact on docs. This only fixes undocumented behavior that also had no effect apart from emitting useless HTML attributes.
Last fetched: | Scheduled refresh: Every Saturday
See Customizing GitHub Activity Pages to configure your own
Inspired by prs.atinux.com