Conversation
BREAKING CHANGE: switch the package foundations to native ESM/NodeNext while preserving the documented CJS migration path for the following build wave.
BREAKING CHANGE: Node 20 is dropped; package output moves to dist with conditional ESM/CJS exports.
BREAKING CHANGE: the markdown-it peer dependency is now ^15.0.0; consumers must remove @types/markdown-it because markdown-it v15 bundles its declarations.
Add packed-tarball ESM and CJS consumer compilation/runtime gates and require them for release checks.
BREAKING CHANGE: document the markdown-it v15 and Node 22 requirements, native ESM/CJS exports, and temporary browser-bundler regression.
## Exact-SHA sync - `SYNC_MAIN_SHA`: `2cd4b414639b5b3902918199928f955b8ff459e9` - `SYNC_V5_BASE_SHA`: `8441daebdf923c9a9a3ca7b7da9a33cce7bd1bf2` - Merge commit: `4a4b1945102dc4563fcd4a8747f9b328d1c0b736`; second parent verified as `SYNC_MAIN_SHA`. ## Reviewed conflict exception attestation - `.github/workflows/ci.yml` restored exactly from the v5 base. - `package.json` restored from v5 except `packageManager: pnpm@11.21.0`. - `pnpm-lock.yaml` seeded from v5 and `npx --yes pnpm@11.21.0 install --lockfile-only` produced zero lockfile diff. - Retained the non-conflicting Renovate `baseBranches` → `baseBranchPatterns` migration. - PR diff is exactly `package.json` (one package-manager line) and `renovate.json5` (one key migration). ## Local verification - Frozen pnpm 11.21 install - lint and TypeScript alias checks (TypeScript 6.0.2 / native 7.0.2) - 45/45 Vitest tests - build and package lint - markdown-it 15 compatibility type-check and tests - fresh packed ESM and CJS consumers No operation targets `main`. --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ains Node-only) (#1150) Outcome B restores the core browser-bundler flow while keeping the plugins option explicitly Node-only. All required Test 22/24/26, compatibility, consuming, Sonar quality gate, issue, hotspot, and review-thread gates passed.
Restore the v5 Vitest and TypeScript alias release contracts. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
> ℹ️ **Note** > > This PR body was truncated due to platform limits. This PR contains the following updates: | Package | Update | Change | Pending | |---|---|---|---| | [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | minor | `26.7.0` → `26.8.0` | `v26.8.1` | --- ### Release Notes <details> <summary>nodejs/node (node)</summary> ### [`v26.8.0`](https://redirect.github.com/nodejs/node/releases/tag/v26.8.0): 2026-08-26, Version 26.8.0 (Current), @​aduh95 [Compare Source](https://redirect.github.com/nodejs/node/compare/v26.7.0...v26.8.0) ##### Notable Changes - \[[`74234ee30e`](https://redirect.github.com/nodejs/node/commit/74234ee30e)] - **(SEMVER-MINOR)** **benchmark**: add --analyze mode to compare.js (James M Snell) [#​65416](https://redirect.github.com/nodejs/node/pull/65416) - \[[`4232997fa2`](https://redirect.github.com/nodejs/node/commit/4232997fa2)] - **crypto**: update root certificates to NSS 3.126 (Node.js GitHub Bot) [#​65495](https://redirect.github.com/nodejs/node/pull/65495) - \[[`f0531f1c87`](https://redirect.github.com/nodejs/node/commit/f0531f1c87)] - **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) [#​63411](https://redirect.github.com/nodejs/node/pull/63411) - \[[`3f4b80ebb5`](https://redirect.github.com/nodejs/node/commit/3f4b80ebb5)] - **diagnostics\_channel**: mark TracingChannel as stable (Abdelrahman Awad) [#​64525](https://redirect.github.com/nodejs/node/pull/64525) - \[[`753033c110`](https://redirect.github.com/nodejs/node/commit/753033c110)] - **(SEMVER-MINOR)** **lib,src**: improve histogram implementation (James M Snell) [#​65024](https://redirect.github.com/nodejs/node/pull/65024) - \[[`3d7d277493`](https://redirect.github.com/nodejs/node/commit/3d7d277493)] - **(SEMVER-MINOR)** **net**: improve performance of net.BlockList (James M Snell) [#​64974](https://redirect.github.com/nodejs/node/pull/64974) - \[[`9e8e9080fd`](https://redirect.github.com/nodejs/node/commit/9e8e9080fd)] - **(SEMVER-MINOR)** **perf\_hooks**: add statistical hypothesis testing to histogram (James M Snell) [#​65416](https://redirect.github.com/nodejs/node/pull/65416) - \[[`c18b0aa54e`](https://redirect.github.com/nodejs/node/commit/c18b0aa54e)] - **repl**: add basic syntax highlighting (Aviv Keller) [#​64591](https://redirect.github.com/nodejs/node/pull/64591) - \[[`58ea88e1d3`](https://redirect.github.com/nodejs/node/commit/58ea88e1d3)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype.close() (Guilherme Araújo) [#​64232](https://redirect.github.com/nodejs/node/pull/64232) - \[[`7c61b08aed`](https://redirect.github.com/nodejs/node/commit/7c61b08aed)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype\[Symbol.dispose]\() (Guilherme Araújo) [#​64232](https://redirect.github.com/nodejs/node/pull/64232) - \[[`4299cd5897`](https://redirect.github.com/nodejs/node/commit/4299cd5897)] - **(SEMVER-MINOR)** **util**: add non-throwing MIMEType.parse (James M Snell) [#​64965](https://redirect.github.com/nodejs/node/pull/64965) - \[[`df48191061`](https://redirect.github.com/nodejs/node/commit/df48191061)] - **(SEMVER-MINOR)** **zlib**: add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) [#​64339](https://redirect.github.com/nodejs/node/pull/64339) ##### Commits - \[[`162257b403`](https://redirect.github.com/nodejs/node/commit/162257b403)] - **assert**: improve documentation wording (Kamal Rawal) [#​64953](https://redirect.github.com/nodejs/node/pull/64953) - \[[`74234ee30e`](https://redirect.github.com/nodejs/node/commit/74234ee30e)] - **(SEMVER-MINOR)** **benchmark**: add --analyze mode to compare.js (James M Snell) [#​65416](https://redirect.github.com/nodejs/node/pull/65416) - \[[`2cb96dd462`](https://redirect.github.com/nodejs/node/commit/2cb96dd462)] - **benchmark**: add test-only and mock timers cases (Luan Muniz) [#​64097](https://redirect.github.com/nodejs/node/pull/64097) - \[[`562168f93f`](https://redirect.github.com/nodejs/node/commit/562168f93f)] - **benchmark**: apply `highWaterMark` in webstreams `pipe-to` (Matteo Collina) [#​65138](https://redirect.github.com/nodejs/node/pull/65138) - \[[`fbec4eb386`](https://redirect.github.com/nodejs/node/commit/fbec4eb386)] - **benchmark**: complete the sqlite is-transaction fix (Edy Silva) [#​65218](https://redirect.github.com/nodejs/node/pull/65218) - \[[`d8acfc45f1`](https://redirect.github.com/nodejs/node/commit/d8acfc45f1)] - **benchmark**: add test runner hooks and options (Luan Muniz) [#​63754](https://redirect.github.com/nodejs/node/pull/63754) - \[[`13e7d54f67`](https://redirect.github.com/nodejs/node/commit/13e7d54f67)] - **buffer**: prevent string write offset overflow (Matteo Collina) [#​65043](https://redirect.github.com/nodejs/node/pull/65043) - \[[`615273deac`](https://redirect.github.com/nodejs/node/commit/615273deac)] - **buffer**: support aligned allocations (Robert Nagy) [#​65003](https://redirect.github.com/nodejs/node/pull/65003) - \[[`bc6b630e21`](https://redirect.github.com/nodejs/node/commit/bc6b630e21)] - **buffer**: treat detached ArrayBuffers as empty (Archkon) [#​64504](https://redirect.github.com/nodejs/node/pull/64504) - \[[`ddf9f9d265`](https://redirect.github.com/nodejs/node/commit/ddf9f9d265)] - **build**: target Power 9 and z14 (Richard Lau) [#​65439](https://redirect.github.com/nodejs/node/pull/65439) - \[[`fda8ee894e`](https://redirect.github.com/nodejs/node/commit/fda8ee894e)] - **build**: use build-ci for benchmark merge-commit rebuild (Yagiz Nizipli) [#​65362](https://redirect.github.com/nodejs/node/pull/65362) - \[[`03692786ef`](https://redirect.github.com/nodejs/node/commit/03692786ef)] - **build**: add simdutf dir to include path in GN build (Shelley Vohr) [#​65382](https://redirect.github.com/nodejs/node/pull/65382) - \[[`3da555a3ed`](https://redirect.github.com/nodejs/node/commit/3da555a3ed)] - **build**: pass target architecture to small-icu genccode (ulofiai) [#​65095](https://redirect.github.com/nodejs/node/pull/65095) - \[[`ffe1e7cbea`](https://redirect.github.com/nodejs/node/commit/ffe1e7cbea)] - **build**: update binary-upload to use correct tarball name (Stewart X Addison) [#​65282](https://redirect.github.com/nodejs/node/pull/65282) - \[[`50174cb94a`](https://redirect.github.com/nodejs/node/commit/50174cb94a)] - **build**: deprecate always enabled `--enable-static` (Chengzhong Wu) [#​65103](https://redirect.github.com/nodejs/node/pull/65103) - \[[`28f662b424`](https://redirect.github.com/nodejs/node/commit/28f662b424)] - **build**: check FIPS option value in node.gyp (Filip Skokan) [#​64982](https://redirect.github.com/nodejs/node/pull/64982) - \[[`29a2ecefeb`](https://redirect.github.com/nodejs/node/commit/29a2ecefeb)] - **build**: handle malformed OpenSSL macros (Filip Skokan) [#​64982](https://redirect.github.com/nodejs/node/pull/64982) - \[[`6deeef1801`](https://redirect.github.com/nodejs/node/commit/6deeef1801)] - **build**: enable perfetto updater (Chengzhong Wu) [#​64966](https://redirect.github.com/nodejs/node/pull/64966) - \[[`312f0c6a7e`](https://redirect.github.com/nodejs/node/commit/312f0c6a7e)] - **build**: add host toolset to perfetto\_sdk (Ryuhei Shima) [#​64751](https://redirect.github.com/nodejs/node/pull/64751) - \[[`1a4f5e537b`](https://redirect.github.com/nodejs/node/commit/1a4f5e537b)] - **build,win**: add PGO workload scripts (Stefan Stojanovic) [#​63696](https://redirect.github.com/nodejs/node/pull/63696) - \[[`21655dccbc`](https://redirect.github.com/nodejs/node/commit/21655dccbc)] - **child\_process**: keep SIGWINCH from killing on Win (Kirill Saied) [#​64510](https://redirect.github.com/nodejs/node/pull/64510) - \[[`4232997fa2`](https://redirect.github.com/nodejs/node/commit/4232997fa2)] - **crypto**: update root certificates to NSS 3.126 (Node.js GitHub Bot) [#​65495](https://redirect.github.com/nodejs/node/pull/65495) - \[[`f0531f1c87`](https://redirect.github.com/nodejs/node/commit/f0531f1c87)] - **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) [#​63411](https://redirect.github.com/nodejs/node/pull/63411) - \[[`109566a2f7`](https://redirect.github.com/nodejs/node/commit/109566a2f7)] - **crypto**: fix missing error checks on ASN1\_STRING\_to\_UTF8() (Nora Dossche) [#​65200](https://redirect.github.com/nodejs/node/pull/65200) - \[[`501f81612d`](https://redirect.github.com/nodejs/node/commit/501f81612d)] - **crypto**: improve SubtleCrypto.supports() accuracy (Filip Skokan) [#​65222](https://redirect.github.com/nodejs/node/pull/65222) - \[[`137ff67fd3`](https://redirect.github.com/nodejs/node/commit/137ff67fd3)] - **crypto**: use available BoringSSL APIs (Filip Skokan) [#​65423](https://redirect.github.com/nodejs/node/pull/65423) - \[[`0e87576ed4`](https://redirect.github.com/nodejs/node/commit/0e87576ed4)] - **crypto**: remove obsolete BoringSSL shims (Filip Skokan) [#​65423](https://redirect.github.com/nodejs/node/pull/65423) - \[[`af867ce3e4`](https://redirect.github.com/nodejs/node/commit/af867ce3e4)] - **crypto**: add mgf1Hash for RSA-OAEP (Adam Mcgrath) [#​65073](https://redirect.github.com/nodejs/node/pull/65073) - \[[`66ee4792bf`](https://redirect.github.com/nodejs/node/commit/66ee4792bf)] - **crypto**: disable non-FIPS WebCrypto paths in FIPS mode (Filip Skokan) [#​65172](https://redirect.github.com/nodejs/node/pull/65172) - \[[`6a142c03e9`](https://redirect.github.com/nodejs/node/commit/6a142c03e9)] - **crypto**: read WebCrypto inputs through primordials (Filip Skokan) [#​65115](https://redirect.github.com/nodejs/node/pull/65115) - \[[`92e3110462`](https://redirect.github.com/nodejs/node/commit/92e3110462)] - **crypto**: fix disabling FIPS mode (Filip Skokan) [#​64982](https://redirect.github.com/nodejs/node/pull/64982) - \[[`d69bed2f49`](https://redirect.github.com/nodejs/node/commit/d69bed2f49)] - **debugger**: wait for target startup (Filip Skokan) [#​65194](https://redirect.github.com/nodejs/node/pull/65194) - \[[`5c7c0b8b15`](https://redirect.github.com/nodejs/node/commit/5c7c0b8b15)] - **deps**: update zlib to 1.3.2.1-motley-8002e91 (Node.js GitHub Bot) [#​65316](https://redirect.github.com/nodejs/node/pull/65316) - \[[`4cb6b1335e`](https://redirect.github.com/nodejs/node/commit/4cb6b1335e)] - **deps**: update simdjson to 4.6.7 (Node.js GitHub Bot) [#​65318](https://redirect.github.com/nodejs/node/pull/65318) - \[[`a39ad67482`](https://redirect.github.com/nodejs/node/commit/a39ad67482)] - **deps**: update googletest to [`49495ea`](https://redirect.github.com/nodejs/node/commit/49495eacfdbda3f4b6ba219923fedbb2e3f99376) (Node.js GitHub Bot) [#​65317](https://redirect.github.com/nodejs/node/pull/65317) - \[[`46762dad57`](https://redirect.github.com/nodejs/node/commit/46762dad57)] - **deps**: cherry-pick [libuv/libuv@`e640dc9`](https://redirect.github.com/libuv/libuv/commit/e640dc9) (ulofiai) [#​65118](https://redirect.github.com/nodejs/node/pull/65118) - \[[`abb7a15a8d`](https://redirect.github.com/nodejs/node/commit/abb7a15a8d)] - **deps**: update perfetto to 57.2 (Node.js GitHub Bot) [#​65114](https://redirect.github.com/nodejs/node/pull/65114) - \[[`ebd8c6ba52`](https://redirect.github.com/nodejs/node/commit/ebd8c6ba52)] - **deps**: float ICU-23262 patch for icu78 (René) [#​64678](https://redirect.github.com/nodejs/node/pull/64678) - \[[`f2cc681109`](https://redirect.github.com/nodejs/node/commit/f2cc681109)] - **deps**: enable AVX-512 OpenSSL asm with clang (Daniel Lemire) [#​65136](https://redirect.github.com/nodejs/node/pull/65136) - \[[`f45dc92913`](https://redirect.github.com/nodejs/node/commit/f45dc92913)] - **deps**: update undici to 8.10.0 (Node.js GitHub Bot) [#​65155](https://redirect.github.com/nodejs/node/pull/65155) - \[[`4160dfdf81`](https://redirect.github.com/nodejs/node/commit/4160dfdf81)] - **deps**: update googletest to [`d89aac5`](https://redirect.github.com/nodejs/node/commit/d89aac5f0dd4021198d903d39de16f896726de21) (Node.js GitHub Bot) [#​65153](https://redirect.github.com/nodejs/node/pull/65153) - \[[`631d3aa37b`](https://redirect.github.com/nodejs/node/commit/631d3aa37b)] - **deps**: update libffi to 3.8.0 (Node.js GitHub Bot) [#​65154](https://redirect.github.com/nodejs/node/pull/65154) - \[[`788976c626`](https://redirect.github.com/nodejs/node/commit/788976c626)] - **dgram**: don't swallow bind errors when callback is provided (armanmikoyan) [#​62602](https://redirect.github.com/nodejs/node/pull/62602) - \[[`d286423043`](https://redirect.github.com/nodejs/node/commit/d286423043)] - **diagnostics\_channel**: validate before channel activation (Trivikram Kamat) [#​65313](https://redirect.github.com/nodejs/node/pull/65313) - \[[`3f4b80ebb5`](https://redirect.github.com/nodejs/node/commit/3f4b80ebb5)] - **diagnostics\_channel**: mark TracingChannel as stable (Abdelrahman Awad) [#​64525](https://redirect.github.com/nodejs/node/pull/64525) - \[[`152a326f92`](https://redirect.github.com/nodejs/node/commit/152a326f92)] - **dns**: validate address type in lookupService (Lazizbek Ergashev) [#​64878](https://redirect.github.com/nodejs/node/pull/64878) - \[[`00c71fec93`](https://redirect.github.com/nodejs/node/commit/00c71fec93)] - **dns**: validate port range in `setServers()` (René) [#​65021](https://redirect.github.com/nodejs/node/pull/65021) - \[[`e9327d1422`](https://redirect.github.com/nodejs/node/commit/e9327d1422)] - **dns**: fix crash on setServers with port 0 (Lazizbek Ergashev) [#​65009](https://redirect.github.com/nodejs/node/pull/65009) - \[[`9e227ef20d`](https://redirect.github.com/nodejs/node/commit/9e227ef20d)] - **doc**: update AHAFS reference link (Taeuk Ha) [#​65481](https://redirect.github.com/nodejs/node/pull/65481) - \[[`5fbf6c57af`](https://redirect.github.com/nodejs/node/commit/5fbf6c57af)] - **doc**: fix property names in os.networkInterfaces() example (Jihwan) [#​65469](https://redirect.github.com/nodejs/node/pull/65469) - \[[`13f16d28d1`](https://redirect.github.com/nodejs/node/commit/13f16d28d1)] - **doc**: fix broken links in cli.md (Donghoon Kang) [#​65412](https://redirect.github.com/nodejs/node/pull/65412) - \[[`0f36ee3755`](https://redirect.github.com/nodejs/node/commit/0f36ee3755)] - **doc**: remove outdated WASI version fallback (이혜미) [#​65303](https://redirect.github.com/nodejs/node/pull/65303) - \[[`1ad09f712a`](https://redirect.github.com/nodejs/node/commit/1ad09f712a)] - **doc**: fix broken GYP link in n-api.md (Donghoon Kang) [#​65413](https://redirect.github.com/nodejs/node/pull/65413) - \[[`24cd694237`](https://redirect.github.com/nodejs/node/commit/24cd694237)] - **doc**: document that an empty OPENSSL\_CONF skips config loading (Orgad Shaneh) [#​64949](https://redirect.github.com/nodejs/node/pull/64949) - \[[`dae434132e`](https://redirect.github.com/nodejs/node/commit/dae434132e)] - **doc**: fix broken TLS security level example (soreavis) [#​65391](https://redirect.github.com/nodejs/node/pull/65391) - \[[`96b91dc987`](https://redirect.github.com/nodejs/node/commit/96b91dc987)] - **doc**: clarify socket destroyed behavior (Dayun) [#​65395](https://redirect.github.com/nodejs/node/pull/65395) - \[[`9d8d27d444`](https://redirect.github.com/nodejs/node/commit/9d8d27d444)] - **doc**: update outdated nodejs.org guide links (Donghoon Kang) [#​65394](https://redirect.github.com/nodejs/node/pull/65394) - \[[`65f675086e`](https://redirect.github.com/nodejs/node/commit/65f675086e)] - **doc**: clarify that ipv4 mapped to ipv6 are classified as ipv6 (Vedant Kulkarni) [#​62117](https://redirect.github.com/nodejs/node/pull/62117) - \[[`89aba0c311`](https://redirect.github.com/nodejs/node/commit/89aba0c311)] - **doc**: clarify how fs.Dirent file types are determined (soreavis) [#​64532](https://redirect.github.com/nodejs/node/pull/64532) - \[[`3ed0492f52`](https://redirect.github.com/nodejs/node/commit/3ed0492f52)] - **doc**: update security release prepare command (Rafael Gonzaga) [#​64699](https://redirect.github.com/nodejs/node/pull/64699) - \[[`63583c4e75`](https://redirect.github.com/nodejs/node/commit/63583c4e75)] - **doc**: clarify copyFile symlink behavior (T) [#​62941](https://redirect.github.com/nodejs/node/pull/62941) - \[[`abfc51f757`](https://redirect.github.com/nodejs/node/commit/abfc51f757)] - **doc**: document setRawMode write access on Windows (Erik Demaine) [#​63856](https://redirect.github.com/nodejs/node/pull/63856) - \[[`4a784cb3e6`](https://redirect.github.com/nodejs/node/commit/4a784cb3e6)] - **doc**: document per-architecture fast FFI argument limits (Seongeun Lee) [#​65207](https://redirect.github.com/nodejs/node/pull/65207) - \[[`262f966155`](https://redirect.github.com/nodejs/node/commit/262f966155)] - **doc**: add missing return types in fs.md (Chaseton Collins) [#​65307](https://redirect.github.com/nodejs/node/pull/65307) - \[[`695cd896a7`](https://redirect.github.com/nodejs/node/commit/695cd896a7)] - **doc**: add missing return types in buffer.md (Yuya Inoue) [#​65308](https://redirect.github.com/nodejs/node/pull/65308) - \[[`676a1228cd`](https://redirect.github.com/nodejs/node/commit/676a1228cd)] - **doc**: fix lint clean command (greenhead) [#​65274](https://redirect.github.com/nodejs/node/pull/65274) - \[[`9ea318d4e3`](https://redirect.github.com/nodejs/node/commit/9ea318d4e3)] - **doc**: fix typo in onboarding.md (서울민트초코) [#​65295](https://redirect.github.com/nodejs/node/pull/65295) - \[[`3b6a918ab4`](https://redirect.github.com/nodejs/node/commit/3b6a918ab4)] - **doc**: add missing `added:` tags to `fs.lchmod` (Lazizbek Ergashev) [#​65283](https://redirect.github.com/nodejs/node/pull/65283) - \[[`a77b1e61df`](https://redirect.github.com/nodejs/node/commit/a77b1e61df)] - **doc**: fix SQLite changeset constant descriptions (greenhead) [#​65265](https://redirect.github.com/nodejs/node/pull/65265) - \[[`ab50ae60e4`](https://redirect.github.com/nodejs/node/commit/ab50ae60e4)] - **doc**: document open pull request limit (Matteo Collina) [#​65250](https://redirect.github.com/nodejs/node/pull/65250) - \[[`e2f4ea03a3`](https://redirect.github.com/nodejs/node/commit/e2f4ea03a3)] - **doc**: document http2 header constants (Harjoth Khara) [#​64548](https://redirect.github.com/nodejs/node/pull/64548) - \[[`5b5509d0d3`](https://redirect.github.com/nodejs/node/commit/5b5509d0d3)] - **doc**: create ai-guidelines and include to CONTRIBUTING (Rafael Gonzaga) [#​62105](https://redirect.github.com/nodejs/node/pull/62105) - \[[`c63e873073`](https://redirect.github.com/nodejs/node/commit/c63e873073)] - **doc**: fix broken fs.BigIntStats link in vfs.md (greenhead) [#​65045](https://redirect.github.com/nodejs/node/pull/65045) - \[[`d6059e84c0`](https://redirect.github.com/nodejs/node/commit/d6059e84c0)] - **doc**: update synopsis (Augustin Mauroy) [#​65171](https://redirect.github.com/nodejs/node/pull/65171) - \[[`43f1dc03e7`](https://redirect.github.com/nodejs/node/commit/43f1dc03e7)] - **doc**: document close() error when in a sqlite callback (Trivikram Kamat) [#​65090](https://redirect.github.com/nodejs/node/pull/65090) - \[[`8f5f48ad96`](https://redirect.github.com/nodejs/node/commit/8f5f48ad96)] - **doc**: fix broken internal links (greenhead) [#​64901](https://redirect.github.com/nodejs/node/pull/64901) - \[[`5b64b37739`](https://redirect.github.com/nodejs/node/commit/5b64b37739)] - **doc**: report proper return type on urlPattern.test (Brian Muenzenmeyer) [#​64831](https://redirect.github.com/nodejs/node/pull/64831) - \[[`9633bb0f29`](https://redirect.github.com/nodejs/node/commit/9633bb0f29)] - **doc**: fix permission documentation examples (greenhead) [#​64897](https://redirect.github.com/nodejs/node/pull/64897) - \[[`e52e573fd7`](https://redirect.github.com/nodejs/node/commit/e52e573fd7)] - **doc**: document sqlite parameter binding (Guilherme Araújo) [#​65089](https://redirect.github.com/nodejs/node/pull/65089) - \[[`fa52f11d3b`](https://redirect.github.com/nodejs/node/commit/fa52f11d3b)] - **doc**: finalize statements in sqlite examples (Guilherme Araújo) [#​65088](https://redirect.github.com/nodejs/node/pull/65088) - \[[`0157c45012`](https://redirect.github.com/nodejs/node/commit/0157c45012)] - **doc**: document quic stopSending() and resetStream() (Issac) [#​64888](https://redirect.github.com/nodejs/node/pull/64888) - \[[`003a913799`](https://redirect.github.com/nodejs/node/commit/003a913799)] - **doc**: clarify sqlite bare parameter default (Sumit Kumar Das) [#​62009](https://redirect.github.com/nodejs/node/pull/62009) - \[[`c5588d71ad`](https://redirect.github.com/nodejs/node/commit/c5588d71ad)] - **doc**: remove usage of `util.inherits` (Augustin Mauroy) [#​60817](https://redirect.github.com/nodejs/node/pull/60817) - \[[`673db40fbf`](https://redirect.github.com/nodejs/node/commit/673db40fbf)] - **doc**: fix grammar in worker\_threads.md (이혜미) [#​64913](https://redirect.github.com/nodejs/node/pull/64913) - \[[`ee5f72cf16`](https://redirect.github.com/nodejs/node/commit/ee5f72cf16)] - **doc**: fix broken link (Antoine du Hamel) [#​65078](https://redirect.github.com/nodejs/node/pull/65078) - \[[`0450ab6c6a`](https://redirect.github.com/nodejs/node/commit/0450ab6c6a)] - **doc**: update `node.1` to fix linter (Antoine du Hamel) [#​65053](https://redirect.github.com/nodejs/node/pull/65053) - \[[`9a256b0693`](https://redirect.github.com/nodejs/node/commit/9a256b0693)] - **doc**: clarify OpenSSL FIPS configuration (Filip Skokan) [#​64982](https://redirect.github.com/nodejs/node/pull/64982) - \[[`c321752dcb`](https://redirect.github.com/nodejs/node/commit/c321752dcb)] - **doc**: remove `--expose-gc` flag from CLI documentation (Dario Piotrowicz) [#​58909](https://redirect.github.com/nodejs/node/pull/58909) - \[[`0cf79931bb`](https://redirect.github.com/nodejs/node/commit/0cf79931bb)] - **doc**: document ArrayBuffer support in pbkd2Sync (kyungrae2002) [#​64976](https://redirect.github.com/nodejs/node/pull/64976) - \[[`3b8a0bacaa`](https://redirect.github.com/nodejs/node/commit/3b8a0bacaa)] - **doc**: correct default highWaterMark values (Yilong Li) [#​64617](https://redirect.github.com/nodejs/node/pull/64617) - \[[`be313012e4`](https://redirect.github.com/nodejs/node/commit/be313012e4)] - **doc**: use ffi.suffix in permission example (agape1225) [#​64914](https://redirect.github.com/nodejs/node/pull/64914) - \[[`4a1c9a7ee0`](https://redirect.github.com/nodejs/node/commit/4a1c9a7ee0)] - **esm**: avoid super-linear data URL MIME regex (Sumit Kumar Das) [#​61951](https://redirect.github.com/nodejs/node/pull/61951) - \[[`b1770bc196`](https://redirect.github.com/nodejs/node/commit/b1770bc196)] - **esm**: only register text format when enabled (Efe Karasakal) [#​64992](https://redirect.github.com/nodejs/node/pull/64992) - \[[`f48927fe5b`](https://redirect.github.com/nodejs/node/commit/f48927fe5b)] - **esm**: fix wasm import name in error message (이혜미) [#​64950](https://redirect.github.com/nodejs/node/pull/64950) - \[[`8d48adf688`](https://redirect.github.com/nodejs/node/commit/8d48adf688)] - **events**: inline iterationCondition hybrid dispatch closure (Szymon Łągiewka) [#​64473](https://redirect.github.com/nodejs/node/pull/64473) - \[[`b827c0047e`](https://redirect.github.com/nodejs/node/commit/b827c0047e)] - **events**: inline createEvent hybrid dispatch closure (Szymon Łągiewka) [#​64473](https://redirect.github.com/nodejs/node/pull/64473) - \[[`7670c81d99`](https://redirect.github.com/nodejs/node/commit/7670c81d99)] - **ffi**: prefer canonical type names (Trivikram Kamat) [#​65417](https://redirect.github.com/nodejs/node/pull/65417) - \[[`1fe7a1c33d`](https://redirect.github.com/nodejs/node/commit/1fe7a1c33d)] - **ffi**: validate the value passed to the float setters (Soul Lee) [#​65342](https://redirect.github.com/nodejs/node/pull/65342) - \[[`537feecd0b`](https://redirect.github.com/nodejs/node/commit/537feecd0b)] - **ffi**: reject direct SharedArrayBuffer pointers (Trivikram Kamat) [#​65233](https://redirect.github.com/nodejs/node/pull/65233) - \[[`0002f0a718`](https://redirect.github.com/nodejs/node/commit/0002f0a718)] - **ffi**: remove dead null check in callback arguments (Trivikram Kamat) [#​64998](https://redirect.github.com/nodejs/node/pull/64998) - \[[`9024ec27b6`](https://redirect.github.com/nodejs/node/commit/9024ec27b6)] - **ffi**: keep FFI functions non-constructible (Trivikram Kamat) [#​65184](https://redirect.github.com/nodejs/node/pull/65184) - \[[`9b4f349b01`](https://redirect.github.com/nodejs/node/commit/9b4f349b01)] - **ffi**: refresh cached string buffers on every call (Trivikram Kamat) [#​65051](https://redirect.github.com/nodejs/node/pull/65051) - \[[`eacd65e9c2`](https://redirect.github.com/nodejs/node/commit/eacd65e9c2)] - **ffi**: reject detached ArrayBufferViews (Trivikram Kamat) [#​65086](https://redirect.github.com/nodejs/node/pull/65086) - \[[`be2ab89730`](https://redirect.github.com/nodejs/node/commit/be2ab89730)] - **ffi**: reject detached ArrayBuffers as pointers (Trivikram Kamat) [#​65083](https://redirect.github.com/nodejs/node/pull/65083) - \[[`6f9e0846ea`](https://redirect.github.com/nodejs/node/commit/6f9e0846ea)] - **ffi**: validate fast pointer BigInt argument ranges (Trivikram Kamat) [#​65032](https://redirect.github.com/nodejs/node/pull/65032) - \[[`3e6688c5e3`](https://redirect.github.com/nodejs/node/commit/3e6688c5e3)] - **ffi**: reuse the callable created per symbol (Trivikram Kamat) [#​64971](https://redirect.github.com/nodejs/node/pull/64971) - \[[`8b0bdd931c`](https://redirect.github.com/nodejs/node/commit/8b0bdd931c)] - **ffi**: shrink trampoline placement probe window (Trivikram Kamat) [#​64969](https://redirect.github.com/nodejs/node/pull/64969) - \[[`9c282c4532`](https://redirect.github.com/nodejs/node/commit/9c282c4532)] - **ffi**: accept pointer BigInts in multi-argument fast calls (Trivikram Kamat) [#​64964](https://redirect.github.com/nodejs/node/pull/64964) - \[[`b98294b57d`](https://redirect.github.com/nodejs/node/commit/b98294b57d)] - **ffi**: support SharedArrayBuffer in getRawPointer (Junsoo Ha) [#​64864](https://redirect.github.com/nodejs/node/pull/64864) - \[[`5cac7c2c55`](https://redirect.github.com/nodejs/node/commit/5cac7c2c55)] - **ffi**: reuse libffi call plans (Yilong Li) [#​64958](https://redirect.github.com/nodejs/node/pull/64958) - \[[`262f0ec82a`](https://redirect.github.com/nodejs/node/commit/262f0ec82a)] - **fs**: stop stat()ing every entry in recursive readdir (Shelley Vohr) [#​65487](https://redirect.github.com/nodejs/node/pull/65487) - \[[`e3ae912e9a`](https://redirect.github.com/nodejs/node/commit/e3ae912e9a)] - **fs**: use sized reads for large files in readFileUtf8 (Shelley Vohr) [#​65328](https://redirect.github.com/nodejs/node/pull/65328) - \[[`bc1e19b4b7`](https://redirect.github.com/nodejs/node/commit/bc1e19b4b7)] - **fs**: fix realpath of namespaced drive paths (Jason Zhang) [#​65378](https://redirect.github.com/nodejs/node/pull/65378) - \[[`6673ebadf2`](https://redirect.github.com/nodejs/node/commit/6673ebadf2)] - **fs**: abort in-flight stat operations (Mert Can Altin) [#​63143](https://redirect.github.com/nodejs/node/pull/63143) - \[[`74dcdbb5f1`](https://redirect.github.com/nodejs/node/commit/74dcdbb5f1)] - **fs**: fix glob early return skipping sibling entries (Srinu desetti) [#​64895](https://redirect.github.com/nodejs/node/pull/64895) - \[[`6305a744df`](https://redirect.github.com/nodejs/node/commit/6305a744df)] - **fs**: pass symlink type in cp when filter is provided (Jerry Zhao) [#​62654](https://redirect.github.com/nodejs/node/pull/62654) - \[[`c5cb6bc7e2`](https://redirect.github.com/nodejs/node/commit/c5cb6bc7e2)] - **fs**: allocate FSReqPromise stat arrays lazily (Samuel Attard) [#​63886](https://redirect.github.com/nodejs/node/pull/63886) - \[[`992af05719`](https://redirect.github.com/nodejs/node/commit/992af05719)] - **fs**: fix out-of-bounds write in mkdtemp for long prefixes (Hierax\_Umbra) [#​64770](https://redirect.github.com/nodejs/node/pull/64770) - \[[`2de845b2dd`](https://redirect.github.com/nodejs/node/commit/2de845b2dd)] - **fs**: treat `std::errc::permission_denied` as `EPERM` error (Kirill Saied) [#​64698](https://redirect.github.com/nodejs/node/pull/64698) - \[[`77fedbd350`](https://redirect.github.com/nodejs/node/commit/77fedbd350)] - **fs**: read small files in one thread pool round trip (Shelley Vohr) [#​65327](https://redirect.github.com/nodejs/node/pull/65327) - \[[`810929b6dd`](https://redirect.github.com/nodejs/node/commit/810929b6dd)] - ***Revert*** "**fs**: fix close listener leak in FileHandle streams" (Mike McCready) [#​65387](https://redirect.github.com/nodejs/node/pull/65387) - \[[`8873b91fce`](https://redirect.github.com/nodejs/node/commit/8873b91fce)] - **fs**: fix close listener leak in FileHandle streams (Y1D7NG) [#​64227](https://redirect.github.com/nodejs/node/pull/64227) - \[[`656cfaeb2d`](https://redirect.github.com/nodejs/node/commit/656cfaeb2d)] - **fs**: add windowsHandle option to file streams (Kirill Saied) [#​63851](https://redirect.github.com/nodejs/node/pull/63851) - \[[`c2c31d69fd`](https://redirect.github.com/nodejs/node/commit/c2c31d69fd)] - **http**: improve performance with known-length calls to end() (Tim Perry) [#​65466](https://redirect.github.com/nodejs/node/pull/65466) - \[[`7e9204f4b3`](https://redirect.github.com/nodejs/node/commit/7e9204f4b3)] - **http**: use intrusive lists in ConnectionsList (Matteo Collina) [#​65296](https://redirect.github.com/nodejs/node/pull/65296) - \[[`98e6272c70`](https://redirect.github.com/nodejs/node/commit/98e6272c70)] - **http**: cache maxHeaderPairs per header section (GetThatCookie) [#​64988](https://redirect.github.com/nodejs/node/pull/64988) - \[[`6c3516f179`](https://redirect.github.com/nodejs/node/commit/6c3516f179)] - **http**: fix keylog listener setup on existing agent sockets (Shani Singh) [#​65066](https://redirect.github.com/nodejs/node/pull/65066) - \[[`dad9548fbc`](https://redirect.github.com/nodejs/node/commit/dad9548fbc)] - **http**: emit drain on socket takeover and avoid stale HWM reuse (Naman Trivedi) [#​64991](https://redirect.github.com/nodejs/node/pull/64991) - \[[`563cab119b`](https://redirect.github.com/nodejs/node/commit/563cab119b)] - **http2**: avoid uaf while receiving and sending rst\_stream (esgor) [#​64166](https://redirect.github.com/nodejs/node/pull/64166) - \[[`099801641b`](https://redirect.github.com/nodejs/node/commit/099801641b)] - **inspector**: avoid calling into JS from V8 interrupts (Joyee Cheung) [#​65028](https://redirect.github.com/nodejs/node/pull/65028) - \[[`b71d5de0b8`](https://redirect.github.com/nodejs/node/commit/b71d5de0b8)] - **lib**: use bracket notation instead of startsWith/endsWith for single char (Taejin Kim) [#​61500](https://redirect.github.com/nodejs/node/pull/61500) - \[[`e8e2abcc8d`](https://redirect.github.com/nodejs/node/commit/e8e2abcc8d)] - **lib**: load fewer builtins when bootstrapping without a snapshot (Shelley Vohr) [#​65329](https://redirect.github.com/nodejs/node/pull/65329) - \[[`3619dc0601`](https://redirect.github.com/nodejs/node/commit/3619dc0601)] - **lib**: fix ERR\_INVALID\_ARG\_TYPE with --enable-source-maps (June) [#​63215](https://redirect.github.com/nodejs/node/pull/63215) - \[[`ad7c67026b`](https://redirect.github.com/nodejs/node/commit/ad7c67026b)] - **lib**: harden webidl dictionary member reads (Filip Skokan) [#​65115](https://redirect.github.com/nodejs/node/pull/65115) - \[[`b5182f0a1c`](https://redirect.github.com/nodejs/node/commit/b5182f0a1c)] - **lib**: use validateArray for array arguments (greenhead) [#​64959](https://redirect.github.com/nodejs/node/pull/64959) - \[[`7f7df06821`](https://redirect.github.com/nodejs/node/commit/7f7df06821)] - **lib**: add and test \[EnforceRange] in webcrypto dictionaries (Filip Skokan) [#​65091](https://redirect.github.com/nodejs/node/pull/65091) - \[[`753033c110`](https://redirect.github.com/nodejs/node/commit/753033c110)] - **(SEMVER-MINOR)** **lib,src**: improve histogram implementation (James M Snell) [#​65024](https://redirect.github.com/nodejs/node/pull/65024) - \[[`8d39d0d660`](https://redirect.github.com/nodejs/node/commit/8d39d0d660)] - **meta**: add a root-level AGENTS.md (James M Snell) [#​65493](https://redirect.github.com/nodejs/node/pull/65493) - \[[`3770f9baea`](https://redirect.github.com/nodejs/node/commit/3770f9baea)] - **meta**: move targos to emeritus (Michaël Zasso) [#​65393](https://redirect.github.com/nodejs/node/pull/65393) - \[[`a9b31dfe30`](https://redirect.github.com/nodejs/node/commit/a9b31dfe30)] - **meta**: add unified http api initiative (James M Snell) [#​65139](https://redirect.github.com/nodejs/node/pull/65139) - \[[`6bffc306aa`](https://redirect.github.com/nodejs/node/commit/6bffc306aa)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#​65182](https://redirect.github.com/nodejs/node/pull/65182) - \[[`4abd1c8100`](https://redirect.github.com/nodejs/node/commit/4abd1c8100)] - **meta**: add support for alpha prerelease tag (Antoine du Hamel) [#​63135](https://redirect.github.com/nodejs/node/pull/63135) - \[[`132c578e97`](https://redirect.github.com/nodejs/node/commit/132c578e97)] - **meta**: add Aviv Keller to `.mailmap` (Aviv Keller) [#​65048](https://redirect.github.com/nodejs/node/pull/65048) - \[[`7aff78d231`](https://redirect.github.com/nodejs/node/commit/7aff78d231)] - **meta**: update sccache to 0.17.0 (René) [#​64985](https://redirect.github.com/nodejs/node/pull/64985) - \[[`97a437e7ea`](https://redirect.github.com/nodejs/node/commit/97a437e7ea)] - **module**: add a read-only mode to the compile cache (Shelley Vohr) [#​65302](https://redirect.github.com/nodejs/node/pull/65302) - \[[`5821362819`](https://redirect.github.com/nodejs/node/commit/5821362819)] - **module**: do not split a portable compile cache by uid (Shelley Vohr) [#​65293](https://redirect.github.com/nodejs/node/pull/65293) - \[[`eb5d66e856`](https://redirect.github.com/nodejs/node/commit/eb5d66e856)] - **module**: report unreadable package.json (Paul Bouchon) [#​65223](https://redirect.github.com/nodejs/node/pull/65223) - \[[`43757d07c1`](https://redirect.github.com/nodejs/node/commit/43757d07c1)] - **module**: cache nearest parent package.json per directory (Shelley Vohr) [#​65326](https://redirect.github.com/nodejs/node/pull/65326) - \[[`d7805e00dc`](https://redirect.github.com/nodejs/node/commit/d7805e00dc)] - **module**: fix --check on ambiguous ESM files (Paul Bouchon) [#​65203](https://redirect.github.com/nodejs/node/pull/65203) - \[[`646221a495`](https://redirect.github.com/nodejs/node/commit/646221a495)] - **net**: handle undefined parent in \_unrefTimer and \_destroy (Shivay-98) [#​64644](https://redirect.github.com/nodejs/node/pull/64644) - \[[`3d7d277493`](https://redirect.github.com/nodejs/node/commit/3d7d277493)] - **(SEMVER-MINOR)** **net**: improve performance of net.BlockList (James M Snell) [#​64974](https://redirect.github.com/nodejs/node/pull/64974) - \[[`9e8e9080fd`](https://redirect.github.com/nodejs/node/commit/9e8e9080fd)] - **(SEMVER-MINOR)** **perf\_hooks**: add statistical hypothesis testing to histogram (James M Snell) [#​65416](https://redirect.github.com/nodejs/node/pull/65416) - \[[`01a8ae0ce6`](https://redirect.github.com/nodejs/node/commit/01a8ae0ce6)] - **permission**: guard UDP handle adoption (Rafael Gonzaga) [#​65358](https://redirect.github.com/nodejs/node/pull/65358) - \[[`ac3c412aaf`](https://redirect.github.com/nodejs/node/commit/ac3c412aaf)] - **permission**: enforce addon permission in GetLinkedBinding (Rafael Gonzaga) [#​65432](https://redirect.github.com/nodejs/node/pull/65432) - \[[`8765afd4c2`](https://redirect.github.com/nodejs/node/commit/8765afd4c2)] - **process**: validate resource stats array offsets (Archkon) [#​65098](https://redirect.github.com/nodejs/node/pull/65098) - \[[`d0447c93f6`](https://redirect.github.com/nodejs/node/commit/d0447c93f6)] - **quic**: changes for nghttp3\_conn\_close\_stream2 (Marten Richter) [#​64574](https://redirect.github.com/nodejs/node/pull/64574) - \[[`91393898b5`](https://redirect.github.com/nodejs/node/commit/91393898b5)] - **quic**: mark drain promise handled (James M Snell) [#​65319](https://redirect.github.com/nodejs/node/pull/65319) - \[[`5c9576bf50`](https://redirect.github.com/nodejs/node/commit/5c9576bf50)] - **quic**: reset rejected HTTP/3 request streams with H3\_REQUEST\_REJECTED (trivenay) [#​65442](https://redirect.github.com/nodejs/node/pull/65442) - \[[`ec956f2abc`](https://redirect.github.com/nodejs/node/commit/ec956f2abc)] - **quic**: write desired size needs update on maxstream (Marten Richter) [#​64768](https://redirect.github.com/nodejs/node/pull/64768) - \[[`41c510803d`](https://redirect.github.com/nodejs/node/commit/41c510803d)] - **quic**: do not destroy incoming streams that have a consumer (trivenay) [#​65335](https://redirect.github.com/nodejs/node/pull/65335) - \[[`009e376581`](https://redirect.github.com/nodejs/node/commit/009e376581)] - **quic**: fix wake up blob (Marten Richter) [#​64044](https://redirect.github.com/nodejs/node/pull/64044) - \[[`4674a10368`](https://redirect.github.com/nodejs/node/commit/4674a10368)] - **quic**: convert incoming :status header to number (Hallison Pereira Melo) [#​63589](https://redirect.github.com/nodejs/node/pull/63589) - \[[`5953165f53`](https://redirect.github.com/nodejs/node/commit/5953165f53)] - **quic**: fix infinite loop if STOP\_SENDING received on a buffering stream (Tim Perry) [#​64715](https://redirect.github.com/nodejs/node/pull/64715) - \[[`bb499c312e`](https://redirect.github.com/nodejs/node/commit/bb499c312e)] - **repl**: keep entries added while history file is loading (Mhayk Whandson) [#​64513](https://redirect.github.com/nodejs/node/pull/64513) - \[[`825fcfe4d5`](https://redirect.github.com/nodejs/node/commit/825fcfe4d5)] - **repl**: add benchmarks (Aviv Keller) [#​64590](https://redirect.github.com/nodejs/node/pull/64590) - \[[`c18b0aa54e`](https://redirect.github.com/nodejs/node/commit/c18b0aa54e)] - **repl**: add basic syntax highlighting (Aviv Keller) [#​64591](https://redirect.github.com/nodejs/node/pull/64591) - \[[`f32a8631ad`](https://redirect.github.com/nodejs/node/commit/f32a8631ad)] - **sea**: avoid dangling CLI option pointers (Archkon) [#​64755](https://redirect.github.com/nodejs/node/pull/64755) - \[[`3126ce5779`](https://redirect.github.com/nodejs/node/commit/3126ce5779)] - **sea**: handle NUL bytes in asset keys (Archkon) [#​64773](https://redirect.github.com/nodejs/node/pull/64773) - \[[`64a8843ff2`](https://redirect.github.com/nodejs/node/commit/64a8843ff2)] - **sea**: reject trailing content in config JSON (Archkon) [#​64774](https://redirect.github.com/nodejs/node/pull/64774) - \[[`1d9dd252f1`](https://redirect.github.com/nodejs/node/commit/1d9dd252f1)] - **sea**: reject malformed --node-options values (Archkon) [#​64803](https://redirect.github.com/nodejs/node/pull/64803) - \[[`6ec735c910`](https://redirect.github.com/nodejs/node/commit/6ec735c910)] - **sqlite**: reject reentry while binding parameters (Trevor Burnham) [#​65294](https://redirect.github.com/nodejs/node/pull/65294) - \[[`60cb384c15`](https://redirect.github.com/nodejs/node/commit/60cb384c15)] - **sqlite**: remove unused column name helper (Trivikram Kamat) [#​65401](https://redirect.github.com/nodejs/node/pull/65401) - \[[`fce6754a83`](https://redirect.github.com/nodejs/node/commit/fce6754a83)] - **sqlite**: reject busy statement finalization in authorizer (Trivikram Kamat) [#​65369](https://redirect.github.com/nodejs/node/pull/65369) - \[[`e2f952f2ff`](https://redirect.github.com/nodejs/node/commit/e2f952f2ff)] - **sqlite**: prevent reentrant session.close() (Trivikram Kamat) [#​65349](https://redirect.github.com/nodejs/node/pull/65349) - \[[`0e8af3378a`](https://redirect.github.com/nodejs/node/commit/0e8af3378a)] - **sqlite**: reuse cached column names in statement all() and get() (Edy Silva) [#​65276](https://redirect.github.com/nodejs/node/pull/65276) - \[[`e6bfec91be`](https://redirect.github.com/nodejs/node/commit/e6bfec91be)] - **sqlite**: validate StatementSync.run() integers (Trivikram Kamat) [#​65178](https://redirect.github.com/nodejs/node/pull/65178) - \[[`bbb1226dbe`](https://redirect.github.com/nodejs/node/commit/bbb1226dbe)] - **sqlite**: add diagnostic channel (Guilherme Araújo) [#​62241](https://redirect.github.com/nodejs/node/pull/62241) - \[[`6302168de8`](https://redirect.github.com/nodejs/node/commit/6302168de8)] - **sqlite**: add stmt persistent flag (Guilherme Araújo) [#​62757](https://redirect.github.com/nodejs/node/pull/62757) - \[[`2989311d81`](https://redirect.github.com/nodejs/node/commit/2989311d81)] - **sqlite**: reject connection access from authorizer callbacks (Trevor Burnham) [#​65156](https://redirect.github.com/nodejs/node/pull/65156) - \[[`72c37b133e`](https://redirect.github.com/nodejs/node/commit/72c37b133e)] - **sqlite**: expose prepared statement statistics (Edy Silva) [#​64541](https://redirect.github.com/nodejs/node/pull/64541) - \[[`3e50a2f1e9`](https://redirect.github.com/nodejs/node/commit/3e50a2f1e9)] - **sqlite**: manage sqlite3\_stmt lifetime with RAII (Guilherme Araújo) [#​62419](https://redirect.github.com/nodejs/node/pull/62419) - \[[`3ab7e72555`](https://redirect.github.com/nodejs/node/commit/3ab7e72555)] - **sqlite**: check sqlite3\_step() and sqlite3\_reset() results (semimikoh) [#​63319](https://redirect.github.com/nodejs/node/pull/63319) - \[[`5e387ce979`](https://redirect.github.com/nodejs/node/commit/5e387ce979)] - **sqlite**: reject statement-less SQL in prepare() (Trevor Burnham) [#​65157](https://redirect.github.com/nodejs/node/pull/65157) - \[[`83169e58f3`](https://redirect.github.com/nodejs/node/commit/83169e58f3)] - **sqlite**: reject statement-less SQL in SQLTagStore (Trevor Burnham) [#​65157](https://redirect.github.com/nodejs/node/pull/65157) - \[[`7f31f6226e`](https://redirect.github.com/nodejs/node/commit/7f31f6226e)] - **sqlite**: isolate applyChangeset filter errors (Trivikram Kamat) [#​64823](https://redirect.github.com/nodejs/node/pull/64823) - \[[`c89878c3c8`](https://redirect.github.com/nodejs/node/commit/c89878c3c8)] - **sqlite**: reject deserialize() while in a callback (Trivikram Kamat) [#​64796](https://redirect.github.com/nodejs/node/pull/64796) - \[[`5a852b22d4`](https://redirect.github.com/nodejs/node/commit/5a852b22d4)] - **sqlite**: check null returns from sqlite value functions (Nora Dossche) [#​63288](https://redirect.github.com/nodejs/node/pull/63288) - \[[`5cb78ed300`](https://redirect.github.com/nodejs/node/commit/5cb78ed300)] - **sqlite**: validate maxSize argument in createTagStore() (Anshika Jain) [#​63792](https://redirect.github.com/nodejs/node/pull/63792) - \[[`ca885876f6`](https://redirect.github.com/nodejs/node/commit/ca885876f6)] - **sqlite**: refactor error helpers and user function pointers (Ali Hassan) [#​62794](https://redirect.github.com/nodejs/node/pull/62794) - \[[`06b1758dcd`](https://redirect.github.com/nodejs/node/commit/06b1758dcd)] - **sqlite**: reject non-positive backup rates (Trivikram Kamat) [#​64893](https://redirect.github.com/nodejs/node/pull/64893) - \[[`ce0ca47023`](https://redirect.github.com/nodejs/node/commit/ce0ca47023)] - **sqlite**: clear SQLTagStore bindings (Matteo Collina) [#​65041](https://redirect.github.com/nodejs/node/pull/65041) - \[[`49fb028714`](https://redirect.github.com/nodejs/node/commit/49fb028714)] - **sqlite**: bind Boolean (mike-git374) [#​62001](https://redirect.github.com/nodejs/node/pull/62001) - \[[`09d0da99e9`](https://redirect.github.com/nodejs/node/commit/09d0da99e9)] - **sqlite**: fix undefined behaviour in `Session::Changeset()` (Nora Dossche) [#​63637](https://redirect.github.com/nodejs/node/pull/63637) - \[[`58ea88e1d3`](https://redirect.github.com/nodejs/node/commit/58ea88e1d3)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype.close() (Guilherme Araújo) [#​64232](https://redirect.github.com/nodejs/node/pull/64232) - \[[`7c61b08aed`](https://redirect.github.com/nodejs/node/commit/7c61b08aed)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype\[Symbol.dispose]\() (Guilherme Araújo) [#​64232](https://redirect.github.com/nodejs/node/pull/64232) - \[[`9167ebd32b`](https://redirect.github.com/nodejs/node/commit/9167ebd32b)] - **sqlite**: bind ArrayBuffer (mike-git374) [#​62061](https://redirect.github.com/nodejs/node/pull/62061) - \[[`5da6eaa8af`](https://redirect.github.com/nodejs/node/commit/5da6eaa8af)] - **sqlite**: prevent database close during callbacks (Matteo Collina) [#​64743](https://redirect.github.com/nodejs/node/pull/64743) - \[[`29d794bc84`](https://redirect.github.com/nodejs/node/commit/29d794bc84)] - **src**: fix heap value deduplication in embedder graph (Ilyas Shabi) [#​64801](https://redirect.github.com/nodejs/node/pull/64801) - \[[`b405e9b039`](https://redirect.github.com/nodejs/node/commit/b405e9b039)] - **src**: fix out-of-bounds write when transcoding odd-length ucs2 (nashit hayat) [#​64512](https://redirect.github.com/nodejs/node/pull/64512) - \[[`101a215472`](https://redirect.github.com/nodejs/node/commit/101a215472)] - **src**: use simdutf for two-byte utf8 conversion (Mert Can Altin) [#​62248](https://redirect.github.com/nodejs/node/pull/62248) - \[[`340b98346f`](https://redirect.github.com/nodejs/node/commit/340b98346f)] - **src**: run same-priority platform tasks in posting order (Shelley Vohr) [#​65353](https://redirect.github.com/nodejs/node/pull/65353) - \[[`83a7949c18`](https://redirect.github.com/nodejs/node/commit/83a7949c18)] - **src**: define O\_SYNC, O\_DSYNC and O\_DIRECT on Windows (Kirill Saied) [#​64707](https://redirect.github.com/nodejs/node/pull/64707) - \[[`32bb197f2a`](https://redirect.github.com/nodejs/node/commit/32bb197f2a)] - **src**: use simdutf for two-byte strings in UTF-8 writes (Shelley Vohr) [#​65324](https://redirect.github.com/nodejs/node/pull/65324) - \[[`613be79cf4`](https://redirect.github.com/nodejs/node/commit/613be79cf4)] - **src**: add v8::Local specialization for MaybeStackBuffer (James M Snell) [#​65159](https://redirect.github.com/nodejs/node/pull/65159) - \[[`922d47cbd7`](https://redirect.github.com/nodejs/node/commit/922d47cbd7)] - **src**: escape Windows environment variables in task runner (Antoine du Hamel) [#​65217](https://redirect.github.com/nodejs/node/pull/65217) - \[[`3a47f1f282`](https://redirect.github.com/nodejs/node/commit/3a47f1f282)] - **src**: apply minor namespace format tweak in permissions (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`981cfa537d`](https://redirect.github.com/nodejs/node/commit/981cfa537d)] - **src**: simplify permissions with BooleanPermissions (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`5954b13f88`](https://redirect.github.com/nodejs/node/commit/5954b13f88)] - **src**: simplify includes in permissions (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`d4ced88c09`](https://redirect.github.com/nodejs/node/commit/d4ced88c09)] - **src**: apply a modest performance perf to permissions (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`efb649ec26`](https://redirect.github.com/nodejs/node/commit/efb649ec26)] - **src**: make permission storage a bit more efficient (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`521aaf10fc`](https://redirect.github.com/nodejs/node/commit/521aaf10fc)] - **src**: apply multiple general cleanups to permissions (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`ac920e0d2b`](https://redirect.github.com/nodejs/node/commit/ac920e0d2b)] - **src**: simplify c++ diagnostics channel API (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`ec8fe275a1`](https://redirect.github.com/nodejs/node/commit/ec8fe275a1)] - **src**: make minor cleanup to permission checks (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`968bdd0135`](https://redirect.github.com/nodejs/node/commit/968bdd0135)] - **src**: use DictionaryTemplate for permission diag channel message (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`f77aa2f703`](https://redirect.github.com/nodejs/node/commit/f77aa2f703)] - **src**: cache permission strings (James M Snell) [#​65158](https://redirect.github.com/nodejs/node/pull/65158) - \[[`4018f3a776`](https://redirect.github.com/nodejs/node/commit/4018f3a776)] - **src**: shave about 20 bytes off each TLSWrap instance (James M Snell) [#​65144](https://redirect.github.com/nodejs/node/pull/65144) - \[[`b7a23426d9`](https://redirect.github.com/nodejs/node/commit/b7a23426d9)] - **src**: add SetAbortHandler (Max H Fisher) [#​64684](https://redirect.github.com/nodejs/node/pull/64684) - \[[`3cfe19489c`](https://redirect.github.com/nodejs/node/commit/3cfe19489c)] - **src**: use concepts where appropriate (James M Snell) [#​65148](https://redirect.github.com/nodejs/node/pull/65148) - \[[`d8a0f288ab`](https://redirect.github.com/nodejs/node/commit/d8a0f288ab)] - **src**: match cmd.exe case-insensitively in task runner (Archkon) [#​64907](https://redirect.github.com/nodejs/node/pull/64907) - \[[`262d88e6c2`](https://redirect.github.com/nodejs/node/commit/262d88e6c2)] - **src**: reuse cached env strings in remaining files (Seongeun Lee) [#​65039](https://redirect.github.com/nodejs/node/pull/65039) - \[[`ad35fe97f0`](https://redirect.github.com/nodejs/node/commit/ad35fe97f0)] - **src**: expose Windows-only fs open flags (Kirill Saied) [#​64775](https://redirect.github.com/nodejs/node/pull/64775) - \[[`8c4531bbc9`](https://redirect.github.com/nodejs/node/commit/8c4531bbc9)] - **src**: report why --enable-fips failed (Filip Skokan) [#​64979](https://redirect.github.com/nodejs/node/pull/64979) - \[[`a293dbf0e1`](https://redirect.github.com/nodejs/node/commit/a293dbf0e1)] - **src**: update repeated use strings to env (James M Snell) [#​64760](https://redirect.github.com/nodejs/node/pull/64760) - \[[`044402cf0e`](https://redirect.github.com/nodejs/node/commit/044402cf0e)] - **src**: use UTF-8 for task runner filesystem paths (Archkon) [#​64868](https://redirect.github.com/nodejs/node/pull/64868) - \[[`5b7d02e401`](https://redirect.github.com/nodejs/node/commit/5b7d02e401)] - **stream**: normalize fused stateless transform results (Trivikram Kamat) [#​65367](https://redirect.github.com/nodejs/node/pull/65367) - \[[`1d6ec2ddc5`](https://redirect.github.com/nodejs/node/commit/1d6ec2ddc5)] - **stream**: encode whole chunks in TextEncoderStream (Matteo Collina) [#​65414](https://redirect.github.com/nodejs/node/pull/65414) - \[[`0afda47ca4`](https://redirect.github.com/nodejs/node/commit/0afda47ca4)] - **stream**: prevent share from eagerly draining source (Trivikram Kamat) [#​65338](https://redirect.github.com/nodejs/node/pull/65338) - \[[`dc51c7926e`](https://redirect.github.com/nodejs/node/commit/dc51c7926e)] - **stream**: drain pending writes before broadcast end (Trivikram Kamat) [#​65334](https://redirect.github.com/nodejs/node/pull/65334) - \[[`a77f9f7a32`](https://redirect.github.com/nodejs/node/commit/a77f9f7a32)] - **stream**: reuse unexposed managed read buffers (GetThatCookie) [#​64990](https://redirect.github.com/nodejs/node/pull/64990) - \[[`c42fbcc0d1`](https://redirect.github.com/nodejs/node/commit/c42fbcc0d1)] - **stream**: avoid duplicated endReadableNT scheduling (Matteo Collina) [#​65310](https://redirect.github.com/nodejs/node/pull/65310) - \[[`9ec9383d1d`](https://redirect.github.com/nodejs/node/commit/9ec9383d1d)] - **stream**: decouple transform backpressure changes (Matteo Collina) [#​65143](https://redirect.github.com/nodejs/node/pull/65143) - \[[`a9dc50d275`](https://redirect.github.com/nodejs/node/commit/a9dc50d275)] - **stream**: reject pull on signal abort during flush (Trivikram Kamat) [#​65346](https://redirect.github.com/nodejs/node/pull/65346) - \[[`815424db74`](https://redirect.github.com/nodejs/node/commit/815424db74)] - **stream**: avoid leaking consumers on signal failure (Trivikram Kamat) [#​65299](https://redirect.github.com/nodejs/node/pull/65299) - \[[`6a2e0561e8`](https://redirect.github.com/nodejs/node/commit/6a2e0561e8)] - **stream**: use validateObject for zlib/iter params (greenhead) [#​65015](https://redirect.github.com/nodejs/node/pull/65015) - \[[`4f6f2cfffa`](https://redirect.github.com/nodejs/node/commit/4f6f2cfffa)] - **stream**: use validateNumber for BYOB reader options.min (greenhead) [#​65014](https://redirect.github.com/nodejs/node/pull/65014) - \[[`4d297428e6`](https://redirect.github.com/nodejs/node/commit/4d297428e6)] - **stream**: consolidate non-op algorithm callbacks (Matteo Collina) [#​65138](https://redirect.github.com/nodejs/node/pull/65138) - \[[`f7e0c81be4`](https://redirect.github.com/nodejs/node/commit/f7e0c81be4)] - **stream**: cut promise churn in webstreams hot paths (Matteo Collina) [#​65138](https://redirect.github.com/nodejs/node/pull/65138) - \[[`5edffb544f`](https://redirect.github.com/nodejs/node/commit/5edffb544f)] - **stream**: speed up async iteration of Readable (Matteo Collina) [#​64447](https://redirect.github.com/nodejs/node/pull/64447) - \[[`0876a29bb6`](https://redirect.github.com/nodejs/node/commit/0876a29bb6)] - **stream**: preserve falsy cancellation reasons (Trivikram Kamat) [#​64705](https://redirect.github.com/nodejs/node/pull/64705) - \[[`374f7e214d`](https://redirect.github.com/nodejs/node/commit/374f7e214d)] - **stream**: use validateBuffer for BYOB reader view (greenhead) [#​65046](https://redirect.github.com/nodejs/node/pull/65046) - \[[`6bd15b2ac9`](https://redirect.github.com/nodejs/node/commit/6bd15b2ac9)] - **stream**: fix recursive WritableStream abort (Jeong SeokChan) [#​64825](https://redirect.github.com/nodejs/node/pull/64825) - \[[`f33dba704d`](https://redirect.github.com/nodejs/node/commit/f33dba704d)] - **string\_decoder**: decode UTF-8 via StringBytes::Encode (Shelley Vohr) [#​65324](https://redirect.github.com/nodejs/node/pull/65324) - \[[`6409983a6c`](https://redirect.github.com/nodejs/node/commit/6409983a6c)] - **test**: update WPT for WebCryptoAPI to [`e235e08`](https://redirect.github.com/nodejs/node/commit/e235e089b4) (Node.js GitHub Bot) [#​65478](https://redirect.github.com/nodejs/node/pull/65478) - \[[`01cb4f99a0`](https://redirect.github.com/nodejs/node/commit/01cb4f99a0)] - **test**: convert forEach to for of test-messageevent-brandcheck file (Nachiketa Pathak) [#​65279](https://redirect.github.com/nodejs/node/pull/65279) - \[[`359369e24e`](https://redirect.github.com/nodejs/node/commit/359369e24e)] - **test**: use spawnSyncAndAssert in windowsHide test (Junsoo Ha) [#​65351](https://redirect.github.com/nodejs/node/pull/65351) - \[[`9304dee833`](https://redirect.github.com/nodejs/node/commit/9304dee833)] - **test**: remove test-debugger-run-after-quit-restart as flaky on macOS (Yuya Inoue) [#​65424](https://redirect.github.com/nodejs/node/pull/65424) - \[[`30f1a19eec`](https://redirect.github.com/nodejs/node/commit/30f1a19eec)] - **test**: simplify test-timers-interval-promisified.js (Donghoon Kang) [#​65322](https://redirect.github.com/nodejs/node/pull/65322) - \[[`acaf986ad5`](https://redirect.github.com/nodejs/node/commit/acaf986ad5)] - **test**: add Headers coverage and benchmark (Yagiz Nizipli) [#​65365](https://redirect.github.com/nodejs/node/pull/65365) - \[[`b6852e2b96`](https://redirect.github.com/nodejs/node/commit/b6852e2b96)] - **test**: deflake test-net-listen-ipv6only (sangwook) [#​64173](ht > ✂ **Note** > > PR body was truncated to here. </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/jGleitz/markdown-it-prism). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC40OS4wIiwidXBkYXRlZEluVmVyIjoiNDQuNDkuMCIsInRhcmdldEJyYW5jaCI6InY1IiwibGFiZWxzIjpbXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm11/pnpm)) | [`11.24.0` → `11.25.0`](https://renovatebot.com/diffs/npm/pnpm/11.24.0/11.25.0) |  |  | --- ### Release Notes <details> <summary>pnpm/pnpm (pnpm)</summary> ### [`v11.25.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v11.25.0): pnpm 11.25 [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.24.0...v11.25.0) ##### Minor Changes - Added an opt-in proof of concept that lets installs reuse a dependency's build output across machines, by publishing and restoring signed, organization-scoped artifacts through pnpr instead of running the lifecycle scripts locally. Configure it with the new `remoteSideEffectsCache` setting. A workspace names the eligible `organization` and `packages`; everything describing the act of signing — `publish`, `keyId`, `builderId`, `trustedKeys`, `privateKey` and the provenance fields — is refused in `pnpm-workspace.yaml` and read from the global config file or the environment instead. - Added macOS and Windows x64 and arm64 support to remote shared build artifacts [pnpm/pnpm#13771](https://redirect.github.com/pnpm/pnpm/issues/13771). - Added the `audit.ignorePrune` setting. When set to `true`, `pnpm audit --fix` removes ignored GHSA entries that no longer appear in the audit report. - Generalized the experimental shared-artifact protocol so candidates and signed payloads identify a discriminated subject. Dependency side effects use package and source-integrity subjects, while workspace tasks use project and task subjects. This changes shared-artifact request bodies and signed payloads. A pnpr server and its clients have to be on matching versions. - `pnpm init` now pins the latest pnpm version, instead of the version of pnpm that ran the command. A project scaffolded by an outdated pnpm therefore no longer inherits that staleness through its own `devEngines.packageManager` / `packageManager` pin [#​7490](https://redirect.github.com/pnpm/pnpm/issues/7490). The version is read from the `latest` tag on the package-manager registries. When that lookup cannot answer — no network, an unreachable or slow registry, `offline`, or a `latest` that the `minimumReleaseAge` / `trustPolicy` settings reject — `pnpm init` pins the running version as before, and never fails or hangs on the lookup. A `latest` that is older than the running pnpm is never pinned either. - A `scope` set in a project's `pnpm-workspace.yaml` is now ignored, with a warning naming where to set it instead. `pnpm login` records the scope as a `@scope:registry` route in the machine-global `auth.ini`, which outranks `~/.npmrc` in every project — so a repository-committed file could redirect a scope such as `@acme` for all of a user's other projects after one routine login. Use `--scope`, the `PNPM_CONFIG_SCOPE` environment variable, or the global config file instead [#​13557](https://redirect.github.com/pnpm/pnpm/issues/13557). - Verified remote build artifacts are persisted in the shared store with their signed origin metadata. Later installs reverify the artifact against current trust, policy, platform, and source before reuse, while invalid remote variants are quarantined per channel ([pnpm/pnpm#13771](https://redirect.github.com/pnpm/pnpm/issues/13771)). - Persist completed recursive tasks so `--resume-from` skips exactly the work that passed during a matching interrupted or failed `pnpm -r run` / `pnpm -r exec` invocation. When no compatible state exists, pnpm retains its graph-based resume behavior. - Allowed `pnpm update --patches` to refresh registry revisions through a configured pnpr server while retaining locked package versions. - Added explicit registry revision selection with `<version>+rN` and `pnpm update --patches` for refreshing revision artifacts without changing package versions. Registry-backed lockfile policy checks recognize historical revisions, and pnpr now preserves safe revision histories from upstream registries. - Workspace install, rebuild, pack, publish, stage, and lifecycle work now starts as soon as its dependencies finish instead of waiting for an unrelated topological group. - `pnpm stage approve` now approves several staged packages at once. Run it without a stage id to pick from the staged versions interactively, or pass a list of stage ids. The whole batch is approved with a single one-time password, and pnpm asks for a new one only once the registry stops accepting it. Inside a workspace, the selected packages are approved in dependency order, and a package whose workspace dependency could not be approved is skipped instead of being published against a dependency that never reached the registry. - Added per-task concurrency limits to workspace task orchestration. Set `tasks.<name>.concurrency` in `pnpm-workspace.yaml` to limit how many instances of that task may run across workspace projects at once: ```yaml tasks: build: concurrency: 2 ``` - Added support for registry replacement tarballs using standard integrity values, explicit revision fields, registry routing from the `registries` setting, non-redirecting integrity-addressed URLs, canonical safe-integer revision numbers, and pnpr proxying for immutable upstream revision artifacts. - `sideEffectsCache` now declares the whole of how a package's build output is reused — whether one is restored, whether one is saved, and the remote tier that shares it between machines: ```yaml sideEffectsCache: read: true write: true remote: org: acme packages: ['native-addon'] ``` `sideEffectsCache: true`, `sideEffectsCacheReadonly`, `remoteSideEffectsCache`, and its `organization` field all keep working. Where a field is set under both spellings the one above wins; where it is set under only one, it is kept. Two behaviors change, both bringing this CLI in line with what the Rust one already did: `sideEffectsCacheReadonly: true` now blocks writing to the cache, and setting it alongside `sideEffectsCache: false` gives a read-only view rather than switching the cache off entirely. A cache can also be declared write-only now, to populate one the run does not read. - Workspace task orchestration ([pnpm/rfcs#23](https://redirect.github.com/pnpm/rfcs/pull/23)). `pnpm -r run` and `pnpm -r exec` now schedule per task instead of in topological chunks: a task starts as soon as the tasks it depends on have finished, so a project no longer waits for unrelated projects that happen to share its chunk. A new `tasks` section in `pnpm-workspace.yaml` declares what a task depends on, using the `^` convention: ```yaml tasks: build: dependsOn: ['^build'] test: dependsOn: ['build'] lint: {} ``` `^name` means the named task in each of the project's workspace dependencies; a bare `name` means the task in the same project; an entry with no `dependsOn` declares an empty dependency list. A task with no entry behaves as `dependsOn: ['^<its own name>']`, which is exactly what the previous chunked ordering implied — an unconfigured workspace gets the scheduler improvement and nothing else changes meaning. A project without the script is reported skipped and passes its edges through to its own dependencies, so a scriptless package does not sever a chain. Also part of this change: - A dependency cycle among the tasks of a run is now an error naming the participating tasks (`ERR_PNPM_TASK_CYCLE`) instead of silently running in an arbitrary order. Setting `ignoreWorkspaceCycles: true` downgrades the error to a warning: the cycle's tasks run in an arbitrary order relative to each other. - `--resume-from` now skips exactly the transitive dependencies of the anchor package; work unrelated to the anchor still runs. - Under `--no-bail`, tasks whose dependencies failed are reported as skipped, not failed, and do not add to the exit code. - With `--bail` (the default), the first failure still ends the run at once and nothing new is dispatched — including scripts already queued behind the concurrency limit. - `pnpm -r run --dry-run <script>` prints the task graph that would execute without running anything (including skipping the `verifyDepsBeforeRun` check); `--json` emits the tasks and their resolved dependency edges. - Output is inherited rather than piped only when at most one script can ever be in flight (`--workspace-concurrency=1`, or the graph forces the scripts to run one after another). ##### Patch Changes - An `_auth` entry in the global config file no longer decides which registry packages come from when something else says. A `registry` or `registries` declared in `pnpm-workspace.yaml` or the global config now wins over the route inferred from a stored credential, which still applies where nothing else declares one. The `pnpm_config__auth` environment variable is unchanged: it stays the way to point a CI runner at a mandated proxy, and still overrides what a repository declares. - Prevent installs through a symlinked `node_modules` directory from rewriting the target checkout [pnpm/pnpm#14286](https://redirect.github.com/pnpm/pnpm/issues/14286). - Treat empty scripts selected by a regular expression as missing before running dependent tasks. - The options type of the `fetch` command now declares `allowBuilds`, a setting its handler already forwarded to the installer. Type-level only — what `pnpm fetch` does is unchanged. - Filter hidden scripts matched by a regular expression during recursive runs when a visible script also matches. - Fixed automatically switched pnpm versions forcing all descendant pnpm processes to use the same version [pnpm/pnpm#14309](https://redirect.github.com/pnpm/pnpm/issues/14309). - Fixed `ERR_PNPM_UNUSED_PATCH` validation during incremental installs [pnpm/pnpm#13692](https://redirect.github.com/pnpm/pnpm/issues/13692). - Fixed `pnpm deploy --prod` failing when an excluded dev dependency was also declared as an optional peer dependency [pnpm/pnpm#14302](https://redirect.github.com/pnpm/pnpm/issues/14302). - `pnpm update -g` no longer downgrades a global package. `--latest` resolves the `latest` dist-tag, which can point at an older release than the one installed — after `pnpm add -g <pkg>@next`, for instance [#​14270](https://redirect.github.com/pnpm/pnpm/issues/14270). `pnpm update -g` also no longer changes the pnpm version. pnpm's own global install belongs to `pnpm self-update` [#​14270](https://redirect.github.com/pnpm/pnpm/issues/14270). - Copying a built package to its other hoisted locations no longer replaces the destination directory. With `nodeLinker: hoisted`, that replacement deleted the dependencies nested inside the destination's `node_modules`, and made concurrent copies of the same build chunk fail with `ERR_PNPM_ENOENT: no such file or directory, rename '.../node_modules/_tmp_...'` [#​12880](https://redirect.github.com/pnpm/pnpm/issues/12880). - `pnpm update` no longer replaces the specifier a project declares for a dependency that is also listed in `overrides`. A `catalog:` reference stays a `catalog:` reference, and a declared range stays as written, instead of being rewritten to the version the override resolved to [#​12115](https://redirect.github.com/pnpm/pnpm/issues/12115). - `pnpm update` no longer moves the range a project declares for a dependency that `overrides` also lists, even when the override repeats that range verbatim. Previously the updated `package.json` disagreed with the lockfile, so the next `pnpm install --frozen-lockfile` failed with a specifier mismatch [#​14224](https://redirect.github.com/pnpm/pnpm/issues/14224). - Make `pnpm add --lockfile-only` skip dependency linking [pnpm/pnpm#14286](https://redirect.github.com/pnpm/pnpm/issues/14286). - `--production` is accepted again as an alias of `--prod` on `install`, `fetch`, `prune`, `update`, `list`, `why`, and `sbom`, and the install that `verifyDepsBeforeRun` reproduces is now spelled with `--prod`. `pnpm run` no longer aborts with "unexpected argument '--production' found" after a production-only install [#​14147](https://redirect.github.com/pnpm/pnpm/issues/14147). - The progress output no longer overwrites the lines above it once it grows taller than the terminal window [#​14270](https://redirect.github.com/pnpm/pnpm/issues/14270). - Restoring a dependency's build from the remote side-effects cache no longer downloads files the store already holds. - Forward `patchedDependencies` hashes and `packageExtensions` to pnpr so server-side resolution preserves patches and package extensions in the lockfile and installed packages. - Published the workspace task graph and scheduler as `@pnpm/workspace.task-scheduler` so other workspace commands can use the same dependency-aware scheduling as recursive run and exec. - The environment variables for the remote side-effects cache are named for the setting they configure: `PNPM_SIDE_EFFECTS_CACHE_REMOTE_KEY_ID`, `..._BUILDER_ID`, `..._IMAGE_DIGEST`, `..._ARCHITECTURE_BASELINE`, `..._PRIVATE_KEY`, `..._BUILD_ENV`, `..._TRUSTED_KEYS` and `..._PUBLISH`. The `PNPM_REMOTE_SIDE_EFFECTS_CACHE_*` names keep working, and the new one wins when both are set. - A `devEngines.packageManager` range pin on pnpm is now recorded in `pnpm-lock.yaml`'s `packageManagerDependencies` when the running pnpm already satisfies it, using the running version and keeping the range as the recorded specifier. Previously only an exact pin — or a range resolved on the way through a version switch — reached the lockfile, so a range pin written by hand (or by any tool other than `pnpm add` / `pnpm self-update`) left the project without the shared resolution the pin exists to provide. - Fixed recursive `run` cleanup on Windows when a lifecycle script fails while another script's process tree is still running. - The update notification now suggests `pnpm self-update` when `PNPM_HOME` manages the pnpm in use, and the [standalone install script](https://pnpm.io/installation) otherwise — under Corepack, or when another package manager installed pnpm. `pnpm self-update` under Corepack names the standalone install script too. - Enforce `allowBuilds` when a prepared git dependency is reused from the shared store, and use the lockfile's canonical git resolution ID in approval suggestions. - Topologically sorting workspace projects now runs in linear time, fixing installs and lockfile updates that stalled for seconds on workspaces with thousands of projects forming deep dependency chains [#​14149](https://redirect.github.com/pnpm/pnpm/issues/14149), [#​14151](https://redirect.github.com/pnpm/pnpm/issues/14151). <!-- sponsors --> ##### Platinum Sponsors <table> <tbody> <tr> <td align="center" valign="middle"> <a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"><img src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a> </td> <td align="center" valign="middle"> <a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/openai_dark.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/openai_light.svg" /> <img src="https://pnpm.io/img/users/openai_dark.svg" width="160" alt="OpenAI" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/notion.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/notion_light.svg" /> <img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion" /> </picture> </a> </td> </tr> </tbody> </table> ##### Gold Sponsors <table> <tbody> <tr> <td align="center" valign="middle"> <a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/sanity.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/sanity_light.svg" /> <img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" /> <img src="https://pnpm.io/img/users/discord.svg" width="220" alt="Discord" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"><img src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a> </td> </tr> <tr> <td align="center" valign="middle"> <a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/serpapi_dark.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/serpapi_light.svg" /> <img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160" alt="SerpApi" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" /> <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" alt="CodeRabbit" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/stackblitz.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/stackblitz_light.svg" /> <img src="https://pnpm.io/img/users/stackblitz.svg" width="190" alt="Stackblitz" /> </picture> </a> </td> </tr> <tr> <td align="center" valign="middle"> <a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/workleap.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/workleap_light.svg" /> <img src="https://pnpm.io/img/users/workleap.svg" width="190" alt="Workleap" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/nx.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/nx_light.svg" /> <img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes" target="_blank" rel="noopener noreferrer"><img src="https://pnpm.io/img/users/latitude.svg" width="160" alt="Latitude"></a> </td> </tr> </tbody> </table> <!-- sponsors end --> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/jGleitz/markdown-it-prism). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC40OS4wIiwidXBkYXRlZEluVmVyIjoiNDQuNDkuMCIsInRhcmdldEJyYW5jaCI6InY1IiwibGFiZWxzIjpbXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
> ℹ️ **Note**
>
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [pnpm](https://redirect.github.com/pnpm/pnpm/tree/main/pnpm)
([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm/npm/pnpm))
| [`11.25.0` →
`12.3.4`](https://renovatebot.com/diffs/npm/pnpm/11.25.0/12.3.4) |

|

|
---
### Release Notes
<details>
<summary>pnpm/pnpm (pnpm)</summary>
###
[`v12.3.4`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.3.4):
pnpm 12.3.4
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.3.3...v12.3.4)
#### Patch Changes
- Sped up dependency resolution in large workspaces
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- pnpm 12 now accepts the boolean settings as command-line flags on
every command that takes them in pnpm 11, for example `pnpm install
--unsafe-perm`, `pnpm add foo --offline`, and `pnpm install
--dangerously-allow-all-builds`. pnpm 12 rejected them with `unexpected
argument`, which failed every install on Vercel, whose build runs `pnpm
install --unsafe-perm`
[#​14346](https://redirect.github.com/pnpm/pnpm/issues/14346).
`pnpm remove` now accepts `--unsafe-perm`, the same flag `pnpm install`,
`pnpm add`, and `pnpm update` take.
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/notion.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/notion_light.svg" />
<img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"
/>
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.3.3`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.3.3):
pnpm 12.3.3
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.3.2...v12.3.3)
#### Patch Changes
- Fixed concurrent installs sharing a store occasionally failing with an
ENOENT error while importing a package file
[#​14353](https://redirect.github.com/pnpm/pnpm/issues/14353).
- Sped up writing the lockfile in large workspaces
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- Sped up dependency resolution in large workspaces
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- pnpm now runs through Node.js when it was installed by a tool that
skips build scripts, such as Vercel's `packageManager` provisioning,
Bun, Deno, or `npm install --ignore-scripts`. Those installs previously
failed with `syntax error near unexpected token ')'`. They still cannot
run pnpm on Windows. On macOS only a shell can start it
[#​14346](https://redirect.github.com/pnpm/pnpm/issues/14346).
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/notion.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/notion_light.svg" />
<img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"
/>
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.3.2`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.3.2):
pnpm 12.3.2
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.3.1...v12.3.2)
#### Patch Changes
- `pnpm audit --fix update` no longer aborts when a vulnerable package
has no safe version inside its declared range
[#​14508](https://redirect.github.com/pnpm/pnpm/issues/14508). The
run updates every package it can and lists the rest as remaining.
- `pnpm install` no longer reruns root lifecycle scripts when the global
virtual store contains an unfinished-build marker in a package slot that
the current lockfile does not use
[pnpm/pnpm#14485](https://redirect.github.com/pnpm/pnpm/issues/14485).
- Sped up installs that have no lockfile. pnpm now links packages whose
dependency subtree has no peer dependencies into the virtual store while
resolution is still running.
- `pnpm run` and `pnpm exec` now start without reinstalling on
filesystems that keep sub-millisecond mtimes, such as NTFS. Previously,
every run on those filesystems reinstalled first
[pnpm/pnpm#14486](https://redirect.github.com/pnpm/pnpm/issues/14486).
- `pnpm import` now keeps the versions recorded in `package-lock.json`,
`npm-shrinkwrap.json`, or `yarn.lock` when it generates
`pnpm-lock.yaml`. A range in `package.json`, a catalog, or an override
still decides which versions are eligible, and the recorded version is
preferred among them. The generated lockfile previously could pin newer
versions than the source lockfile
[#​14476](https://redirect.github.com/pnpm/pnpm/issues/14476).
`pnpm import` in a workspace now imports every workspace project into
the shared lockfile. It previously imported only the project in the
current directory.
`pnpm import` now fails with `ERR_PNPM_LOCKFILE_NOT_FOUND` when none of
the three source lockfiles is present. It also fails with
`ERR_PNPM_YARN_LOCKFILE_PARSE_FAILED` when it cannot parse `yarn.lock`.
It previously generated a lockfile from scratch in both cases.
`pnpm import` always resolves locally. It warns when `--pnpr-server` or
the `pnpr-server` setting is given and does not use the server.
- Sped up installs in large workspaces. Discovering the workspace
projects no longer enumerates every matched directory to learn which
manifest files it holds
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- Sped up installs in large workspaces. The resolver and the peer pass
allocate less for every dependency edge
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- `pnpm self-update`, `pnpm with`, and automatic package-manager version
switching no longer wait through registry retry delays when a configured
registry has no signatures and `registry.npmjs.org` is unavailable
[#​14483](https://redirect.github.com/pnpm/pnpm/issues/14483).
- Sped up installs in large workspaces. Saving the lockfile is faster,
and the install finishes without waiting for memory cleanup
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- `pnpm install` now relinks workspace packages when
`publishConfig.linkDirectory` changes. Frozen installs report an
outdated lockfile until it is regenerated
[pnpm/pnpm#14488](https://redirect.github.com/pnpm/pnpm/issues/14488).
- The pnpm npm wrapper keeps its placeholder shebang-less so pnpm 11 can
install pnpm 12 through the version store. Wrapper installs must allow
lifecycle scripts to install the native binary
[#​14502](https://redirect.github.com/pnpm/pnpm/issues/14502).
- Sped up dependency resolution when there is no lockfile, and for the
dependencies a lockfile does not cover.
- Sped up installs in large workspaces. Workspace `link:` targets and
importer ids are now derived from the paths' suffixes under the
workspace root
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- `pnpm install` now reports "Already up to date" when local tarball
dependencies have not changed
[#​14495](https://redirect.github.com/pnpm/pnpm/issues/14495).
- `pnpm update` now accepts `--ignore-scripts` and skips lifecycle
scripts during the update
[pnpm/pnpm#14512](https://redirect.github.com/pnpm/pnpm/issues/14512).
- Sped up installs that restore a deleted `node_modules` from a warm
global virtual store. pnpm no longer re-links packages that are already
fully present in the global virtual store
[#​14510](https://redirect.github.com/pnpm/pnpm/issues/14510).
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/notion.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/notion_light.svg" />
<img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"
/>
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.3.1`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.3.1):
pnpm 12.3.1
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.3.0...v12.3.1)
#### Patch Changes
- Sped up installs in large workspaces: the anchor for re-rendering
workspace `link:` targets is now derived once per project instead of
once per dependency edge, and project ordering hashes paths by their raw
bytes
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- After a self-update from pnpm 12.2 to 12.3, global commands such as
`node`, `npm`, and `yarn` failed with `unexpected argument '--shim'
found`. Global commands now launch normally, and their first launch
migrates the global bin directory to native shims. When self-update
downgrades to pnpm 12.2 or older, it keeps the newer native shims so
those commands continue to work.
- Sped up installs in large workspaces. The check that verifies each
project against the lockfile now runs the projects in parallel
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/notion.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/notion_light.svg" />
<img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"
/>
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.3.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.3.0):
pnpm 12.3
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.2.1...v12.3.0)
#### Minor Changes
- Every context-aware global command (`node`, `deno`, `bun`, and the
shims created with `pnpm shim add`) is now a native executable on every
platform, so environment variables whose names are not valid shell
identifiers reach these commands. On Windows, `<name>.exe` replaces the
`.cmd` and `.ps1` shims for them. Shims written by earlier pnpm 12
releases are migrated on the next global install or self-update.
- `pnpm remove` and `pnpm update` now accept `--trust-lockfile`,
`--no-trust-lockfile`, `--trust-policy`, `--trust-policy-exclude` and
`--trust-policy-ignore-after`, the same flags `pnpm install` and `pnpm
add` take, so the supply-chain settings can be overridden for a single
run. `pnpm remove` verifies the lockfile against the active policies the
way `pnpm install` does, and `--trust-lockfile` skips that pass for
every entry, not only the package being removed.
`pnpm` now also honors `--config.trust-lockfile=<value>`, and accepts
the bare `--trust-lockfile` / `--no-trust-lockfile` spelling on the
commands that previously took the setting from the config file alone.
#### Patch Changes
- `pnpm add <local directory>`, `pnpm add <local tarball>`, `pnpm add
file:<path>` and `pnpm add <tarball URL>` work again. A specifier given
without a `<name>@` prefix is no longer read as a registry package name
and rejected with `ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST`
[#​14437](https://redirect.github.com/pnpm/pnpm/issues/14437).
- Fixed `pnpm deploy --legacy` ignoring `allowUnusedPatches` supplied
through `--config.allow-unused-patches` or the
`PNPM_CONFIG_ALLOW_UNUSED_PATCHES` environment variable
[pnpm/pnpm#14450](https://redirect.github.com/pnpm/pnpm/issues/14450).
- Fixed `pnpm install --lockfile-only` writing a lockfile that
referenced a missing peer-suffixed snapshot when an npm-aliased
dependency took part in a cyclic peer dependency graph. The following
`pnpm install --frozen-lockfile` failed with
`ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY`
[#​14449](https://redirect.github.com/pnpm/pnpm/issues/14449).
- `pnpm config` now accepts `-g`/`--global`, `--location`, and `--json`
before its subcommand
[pnpm/pnpm#14421](https://redirect.github.com/pnpm/pnpm/issues/14421).
- `pnpm dedupe` now converges in one pass when it re-resolves a lockfile
created by pnpm 11, so a second run no longer changes the lockfile
[#​14455](https://redirect.github.com/pnpm/pnpm/issues/14455).
- Fixed detached child processes being terminated on Windows when
another program launches `pnpm` directly, without a shell, as `nr` from
`@antfu/ni` does
[#​14447](https://redirect.github.com/pnpm/pnpm/issues/14447).
- Fixed `pnpm docs <package>@<version>` ignoring the requested version.
It now opens the selected version's homepage and reports a missing
version instead of opening the package-level homepage
[pnpm/pnpm#14428](https://redirect.github.com/pnpm/pnpm/issues/14428).
- Sped up installs in large workspaces. `pnpm-lock.yaml` is now read
while the workspace projects are being discovered
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- Fixed filtered and recursive `pnpm run` and `pnpm exec` hanging when a
script reads from the terminal. Interactive prompts work again in a
script that pnpm never runs alongside another one, such as a single
`--filter`ed project, `--workspace-concurrency=1`, a dependency chain,
or a task declaring `concurrency: 1`
[#​14397](https://redirect.github.com/pnpm/pnpm/issues/14397).
- Fixed false unmet peer errors for auto-installed peers in linked
workspace packages.
- Fixed npm global installs on Windows so the PowerShell shims invoke
`pnpm.exe`.
- Fixed `pnpm with current <command>` when global options precede it,
such as `pnpm --workspace-root with current --version`
[pnpm/pnpm#14413](https://redirect.github.com/pnpm/pnpm/issues/14413).
A short-option cluster that mixes a global flag with an option owned by
the command, such as `pnpm -ro dist pack-app`, is now parsed like the
same options written after the command.
An option written before the command name is now reported as an unknown
option unless that command accepts it, instead of being taken for the
command to run. `pnpm -P exec echo` and `pnpm -z exec echo` fail the way
`pnpm --tag next exec echo` does.
- Apply pure insertions in zero-context patches at the correct line
instead of one line early.
- Improved peer dependency resolution performance when many packages
reuse the same peer ranges.
- `pnpm outdated` and `pnpm update` now follow local actions and
reusable workflows referenced with GitHub's self-repository syntax
(`uses: $/.github/actions/setup`) when looking for outdated GitHub
Actions, the same way they follow `./` references.
- The `pnpm install --help` descriptions of `--prod` and `--dev` no
longer claim that the flags take precedence over `NODE_ENV`. pnpm does
not read `NODE_ENV` when selecting which dependency groups to install
[#​14445](https://redirect.github.com/pnpm/pnpm/issues/14445).
- Sped up installs in large workspaces. The check that decides whether
the lockfile needs updating no longer compares every project against
every lockfile entry
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- Sped up dependency resolution in large workspaces that use `link:`
dependencies
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- On Linux, pnpm now resolves registry hostnames through the system
resolver (`getaddrinfo`), as it already does on macOS and Windows and as
pnpm 11 did. Previously, an `/etc/resolv.conf` containing an option the
bundled pure-Rust resolver did not recognize, such as `options
no_tld_query`, made pnpm ignore the configured nameservers and silently
query Google's public DNS instead
[#​14469](https://redirect.github.com/pnpm/pnpm/issues/14469).
- Sped up dependency resolution in large workspaces. The resolver builds
fewer lookup keys for each dependency
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- `catalogMode` and `--save-catalog` no longer move a local path,
tarball, or `workspace:<path>` specifier into a catalog. Such a
specifier is resolved against the project that declares it, so one
catalog entry cannot mean the same directory for every project that
references it
[#​14437](https://redirect.github.com/pnpm/pnpm/issues/14437).
- Sped up installs in large workspaces. The workspace dependency graph
is now built once per run instead of twice
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- Sped up writing `pnpm-lock.yaml` in large workspaces
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- Fixed non-frozen installs through a pnpr server failing instead of
regenerating a conflicted lockfile.
- `pnpm update --interactive` renders its checklist the way pnpm 11
does. Group headings and column headers are separators the cursor skips
instead of checkboxes that select nothing. The columns of one group line
up with the next. `a` toggles all and `i` inverts the selection. The
confirmed selection is echoed as a list of package names
[#​14423](https://redirect.github.com/pnpm/pnpm/issues/14423).
- Fixed `pnpm config` commands targeting global configuration to skip
project package manager version switching, allowing registry
authentication to be configured before pnpm downloads a project-pinned
version
[pnpm/pnpm#14463](https://redirect.github.com/pnpm/pnpm/issues/14463).
- Fixed pnpm retaining the surrounding quotes in `.npmrc` values,
including auth tokens expanded from environment variables. This restores
authentication with registries configured using `:_authToken="${TOKEN}"`
[pnpm/pnpm#14427](https://redirect.github.com/pnpm/pnpm/issues/14427).
- Fetch and tarball errors no longer print the secrets of the URL they
name. Inline `user:pass@` credentials and the query string or fragment
of a signed URL are hidden, so a failed install or `pnpm add <url>`
cannot leak them into terminal scrollback or CI logs.
- When `dist-tags.latest` names a version whose manifest pnpm cannot
read, the error now names that version and the field it could not
decode, instead of reporting the tag as empty.
- Retry transient Windows file-lock errors, including sharing
violations, while linking dependencies with the default (isolated)
`nodeLinker`. This fixes
[pnpm/pnpm#14407](https://redirect.github.com/pnpm/pnpm/issues/14407).
- `pnpm run`, `pnpm exec`, `pnpm rebuild`, and the script shortcuts such
as `pnpm test` now load the pnpmfile, so `updateConfig` hook settings
such as `extraEnv` and `extraBinPaths` reach the scripts they spawn
[#​14433](https://redirect.github.com/pnpm/pnpm/issues/14433).
- The `pnpm` executable of the npm package now works when the package
was installed without running its install scripts, as under
`--ignore-scripts` or the default build-script block of pnpm and Bun
[#​14346](https://redirect.github.com/pnpm/pnpm/issues/14346). In
that case it runs through Node.js and, in a terminal, says how to switch
to the native binary.
- Sped up installs in large workspaces. The resolver no longer copies
the whole lockfile before resolving
[#​14352](https://redirect.github.com/pnpm/pnpm/issues/14352).
- `minimumReleaseAgeStrict` now defaults to `true` when
`minimumReleaseAge` is explicitly configured, whether in
`pnpm-workspace.yaml`, the global `config.yaml`, a `PNPM_CONFIG_*`
variable, or a CLI flag. The built-in 1440-minute default stays
non-strict. Previously an explicit cutoff was treated as non-strict, so
immature versions were silently added to `minimumReleaseAgeExclude`
instead of being gated with a prompt
[#​14409](https://redirect.github.com/pnpm/pnpm/issues/14409).
- Preserve environment variables whose names are not valid shell
identifiers when launching Node.js installed by `pnpm runtime set node
--global` on Unix
[pnpm/pnpm#14417](https://redirect.github.com/pnpm/pnpm/issues/14417).
- Fixed `pnpm repo` and `pnpm docs` failing to open the Windows browser
from WSL
[pnpm/pnpm#14467](https://redirect.github.com/pnpm/pnpm/issues/14467).
- `pnpm link`, `pnpm outdated`, and `pnpm import` now apply pnpmfile
`updateConfig` hooks before resolving dependencies.
- Fixed standalone installations to preserve the bundled `node-gyp`
files used to build native dependencies.
- Fixed resolution against registries whose version manifests carry
`_npmUser`, `dist.attestations`, `dist.unpackedSize`, `dist.fileCount`,
or `peerDependenciesMeta` in a shape npm does not use. Such a version
was skipped as though it had never been published, so `pnpm add` could
fail with "no version found for the latest tag" even though the registry
served it.
- `pnpm unpublish` now completes the two-factor authentication a
registry asks for instead of failing with `ERR_PNPM_UNAUTHORIZED` while
logged in. A 401 that is an OTP challenge starts the web-based
authentication flow, or prompts for a classic one-time password. The
obtained password is reused by every request of the run
[#​14464](https://redirect.github.com/pnpm/pnpm/issues/14464).
- On Windows, pnpm now resolves host names through the system resolver
instead of its own DNS client. The built-in client bound a UDP socket
for every lookup, which made Windows Defender Firewall ask to allow
`pnpm.exe` again after every `pnpm self-update`
[#​14405](https://redirect.github.com/pnpm/pnpm/issues/14405).
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/notion.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/notion_light.svg" />
<img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"
/>
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.2.1`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.2.1):
pnpm 12.2.1
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.2.0...v12.2.1)
#### Patch Changes
- Restored the `pnpm` executable target without a file extension so pnpm
12.1 and earlier can upgrade to newer pnpm 12 releases on POSIX systems.
<!-- sponsors -->
#### Platinum Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
</td>
<td align="center" valign="middle">
<a href="https://openai.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/openai_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/openai_light.svg" />
<img src="https://pnpm.io/img/users/openai_dark.svg" width="160"
alt="OpenAI" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://notion.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/notion.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/notion_light.svg" />
<img src="https://pnpm.io/img/users/notion.svg" width="80" alt="Notion"
/>
</picture>
</a>
</td>
</tr>
</tbody>
</table>
#### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/sanity.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/sanity_light.svg" />
<img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity"
/>
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/discord.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/discord_light.svg" />
<img src="https://pnpm.io/img/users/discord.svg" width="220"
alt="Discord" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/serpapi_light.svg" />
<img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160"
alt="SerpApi" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/coderabbit.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
<img src="https://pnpm.io/img/users/coderabbit.svg" width="220"
alt="CodeRabbit" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a
href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/stackblitz.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
<img src="https://pnpm.io/img/users/stackblitz.svg" width="190"
alt="Stackblitz" />
</picture>
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/workleap.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/workleap_light.svg" />
<img src="https://pnpm.io/img/users/workleap.svg" width="190"
alt="Workleap" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer">
<picture>
<source media="(prefers-color-scheme: light)"
srcset="https://pnpm.io/img/users/nx.svg" />
<source media="(prefers-color-scheme: dark)"
srcset="https://pnpm.io/img/users/nx_light.svg" />
<img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
</picture>
</a>
</td>
<td align="center" valign="middle">
<a href="https://latitude.so/?utm_source=pnpm&utm_medium=release_notes"
target="_blank" rel="noopener noreferrer"><img
src="https://pnpm.io/img/users/latitude.svg" width="160"
alt="Latitude"></a>
</td>
</tr>
</tbody>
</table>
<!-- sponsors end -->
###
[`v12.2.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v12.2.0):
pnpm 12.2
[Compare
Source](https://redirect.github.com/pnpm/pnpm/compare/v12.1.0...v12.2.0)
#### Minor Changes
- Catalogs can now resolve workspace dependencies through the
`workspace:` protocol.
#### Patch Changes
- Fixed `pnpm audit --fix` failing with `ERR_PNPM_INVALID_FIX_OPTION`
when used without a value, including when another flag follows it, as in
`pnpm audit --fix --json`
[#​13261](https://redirect.github.com/pnpm/pnpm/issues/13261).
Fixed `pnpm audit --fix=override` ignoring the `saveExact` and
`savePrefix` settings when writing vulnerability overrides
[#​11523](https://redirect.github.com/pnpm/pnpm/issues/11523).
- Authenticate Node.js runtime downloads from `nodeDownloadMirrors` with
URL-scoped npm registry credentials, including bearer tokens, basic
auth, and `tokenHelper`
[pnpm/pnpm#14334](https://redirect.github.com/pnpm/pnpm/issues/14334).
- Fixed detached child processes being terminated after successful
commands on Windows.
- Sped up installs in large workspaces by resolving each named
`workspace:` dependency (`workspace:*`, `workspace:^`,
`workspace:1.2.3`) once and reusing it across every project that
declares it, instead of re-resolving it per project.
- Fixed `pnpm install --fix-lockfile` to derive its repair and
filtered-merge views from one lockfile snapshot.
- Load pnpmfile `updateConfig` hooks before packing so hook-provided
catalogs resolve in `pnpm pack`, `pnpm publish`, and `pnpm stage
publish`
[pnpm/pnpm#14377](https://redirect.github.com/pnpm/pnpm/issues/14377).
- `pnpm deploy` no longer requires `injectWorkspacePackages` to be
enabled. A linked works
> ✂ **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/jGleitz/markdown-it-prism).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC42MS4zIiwidXBkYXRlZEluVmVyIjoiNDQuNjEuMyIsInRhcmdldEJyYW5jaCI6InY1IiwibGFiZWxzIjpbXX0=-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Review only — do not merge
This draft PR exists solely to make the completed v5 release candidate easy to review, including on mobile.
Opening this PR does not authorize any release action. Do not merge it, update either branch, change rulesets, pin
v4.x, publish a release, retarget Renovate, or perform any other step from the release runbook without separate explicit approval.Release candidate
v5candidate verified at36d331c16ec64655aa7038456ee3a2531d7e5ceamainSHA:2cd4b414639b5b3902918199928f955b8ff459e9plugins:remains Node-only in browser/bundler targets and is tracked in Support the plugins option in browser bundlers (Webpack/Vite) #1147Final verification
Pending release runbook
Todo 18 in
.omo/plans/v5-major-release.mdremains fully in force and unexecuted. It requires a main freeze and drift check, pinning/configuringv4.x, updating the main ruleset, a fresh pre-merge check, an explicitly approved squash merge, release verification, and only then the post-release Renovate update.If this PR is eventually approved for release, its squash commit subject must remain exactly
feat!: release v5and include aBREAKING CHANGE:footer.BREAKING CHANGE: v5 requires markdown-it 15 and Node.js 22.3 or later, replaces the Babel build with native dual ESM/CommonJS outputs, and changes browser-bundler plugin loading as documented.