{"slug":"js-toolchain","name":"JavaScript Runtimes & Tooling","description":"Runtimes, package managers, bundlers, and test runners powering JS and TS projects.","isFeatured":false,"members":[{"kind":"org","slug":"bun","name":"Bun","domain":"bun.com","avatarUrl":"https://media.releases.sh/orgs/bun.png","githubHandle":"oven-sh","description":"Fast all-in-one JavaScript runtime, bundler, test runner, and package manager"},{"kind":"org","slug":"deno","name":"Deno","domain":"deno.com","avatarUrl":"https://media.releases.sh/orgs/deno.png","githubHandle":"denoland","description":null},{"kind":"org","slug":"pnpm","name":"pnpm","domain":null,"avatarUrl":"https://media.releases.sh/orgs/pnpm.svg","githubHandle":"pnpm","description":null},{"kind":"org","slug":"vitest","name":"Vitest","domain":"vitest.dev","avatarUrl":"https://media.releases.sh/orgs/vitest.jpg","githubHandle":"vitest-dev","description":"Vite-native unit test framework with a Jest-compatible API, native ESM/TypeScript/JSX support, watch mode, and a browser mode for component testing."},{"kind":"product","slug":"turborepo","name":"Turborepo","description":null,"org":{"slug":"vercel","name":"Vercel","domain":"vercel.com","avatarUrl":"https://media.releases.sh/orgs/vercel.png","githubHandle":"vercel"}}],"orgs":[{"slug":"bun","name":"Bun","domain":"bun.com","avatarUrl":"https://media.releases.sh/orgs/bun.png","githubHandle":"oven-sh","description":"Fast all-in-one JavaScript runtime, bundler, test runner, and package manager"},{"slug":"deno","name":"Deno","domain":"deno.com","avatarUrl":"https://media.releases.sh/orgs/deno.png","githubHandle":"denoland","description":null},{"slug":"pnpm","name":"pnpm","domain":null,"avatarUrl":"https://media.releases.sh/orgs/pnpm.svg","githubHandle":"pnpm","description":null},{"slug":"vitest","name":"Vitest","domain":"vitest.dev","avatarUrl":"https://media.releases.sh/orgs/vitest.jpg","githubHandle":"vitest-dev","description":"Vite-native unit test framework with a Jest-compatible API, native ESM/TypeScript/JSX support, watch mode, and a browser mode for component testing."}],"releases":[{"id":"rel_-mlmnjNJ9tYFPS0Fn3K25","version":"v2.8.2","type":"feature","title":"v2.8.2","summary":"Added ML-DSA (FIPS 204) post-quantum signatures and ML-KEM (FIPS 203) post-quantum key encapsulation, plus ChaCha20-Poly1305, SHAKE, and SHA-3 HMAC support to the crypto API. Improved deno compile --bundle dependency resolution, scoping npm embeds to packages actually reached, and added --minify flag. Also fixed numerous bugs across compile, node compatibility, Jupyter kernel, LSP, and file I/O.","titleGenerated":"Deno v2.8.2 adds post-quantum cryptography and improves compile bundling","titleShort":"ML-DSA and ML-KEM post-quantum signatures; compile --bundle hardened","content":"### 2.8.2 / 2026.06.03\r\n\r\n- feat(compile): improve --bundle dependency resolution and add --minify\r\n  (#34536)\r\n- feat(compile): scope --bundle npm embed to packages actually reached (#34532)\r\n- feat(ext/crypto): add ChaCha20-Poly1305, SHAKE, cSHAKE, TurboSHAKE, SHA-3 HMAC\r\n  (#34417)\r\n- feat(ext/crypto): add ML-DSA (FIPS 204) post-quantum signatures (#34448)\r\n- feat(ext/crypto): implement ML-KEM (FIPS 203) post-quantum KEM (#34447)\r\n- feat(ext/node): env/global proxy support for node:http and node:https (#34257)\r\n- feat(ext/node): support DENO_SERVE_ADDRESS override in node:http servers\r\n  (#34662)\r\n- feat(jupyter): rewrite kernel in JS, drop zeromq/runtimelib deps (#34083)\r\n- feat(lsp): autocomplete jsr:/npm:/node: in deno.json(c) imports (#34724)\r\n- feat(publish): unfurl import specifiers in Wasm modules (#34549)\r\n- feat(task): support --env-file flag (#34508)\r\n- feat(task): support exclusion groups in task name wildcards (#34506)\r\n- feat(unstable): add --bundle flag to `deno compile` (#34527)\r\n- feat: bump deno_task_shell to 0.33.0 (#34642)\r\n- fix(add): handle version tags like `@latest` in `deno add` for JSR packages\r\n  (#32859)\r\n- fix(add): replace panic with error when deno.json discovery fails (#34517)\r\n- fix(bundle): skip decorator pass when module has no decorators (#34489)\r\n- fix(bundle): use node-style CJS interop for the Deno platform (#34533)\r\n- fix(cache): skip WAL journal mode on WSL-1 (#34499)\r\n- fix(cache_dir): EnsureCachedStrategy must surface cached redirects (#34563)\r\n- fix(check): make node:stream/web types alias the globals (#34606)\r\n- fix(check): resolve npm packages without types when type checking (#34551)\r\n- fix(cli): suppress bug-report banner on broken pipe print panics (#34552)\r\n- fix(cli/task): run recursive workspace tasks in parallel (#34512)\r\n- fix(compile): allow process.chdir() into the VFS (#34610)\r\n- fix(compile): bundle workers separately under --bundle (#34531)\r\n- fix(compile): cover CJS-deep imports under --bundle (#34534)\r\n- fix(compile): create code cache when importing JSON or Wasm modules (#34614)\r\n- fix(compile): detect svelte-adapter-deno build output (#34535)\r\n- fix(compile): don't surface graph errors for --include files (#34568)\r\n- fix(compile): embed workspace package.json files in the VFS (#34530)\r\n- fix(compile): enable ANSI colors on Windows in compiled binaries (#34701)\r\n- fix(compile): handle CJS and native addons in --bundle (#34529)\r\n- fix(compile): respect npm registry sub-paths when flattening node_modules\r\n  (#34575)\r\n- fix(compile): support workers loaded from blob URLs (#34574)\r\n- fix(compile): transpile TypeScript imported at runtime (#34616)\r\n- fix(config): hook up verbatimModuleSyntax for the emit pipeline (#34495)\r\n- fix(config): make config auto-discovery skip the same errors on every platform\r\n  (#34558)\r\n- fix(config): surface invalid \"exports\" map in linked/workspace packages\r\n  (#34473)\r\n- fix(config): warn instead of erroring when start dir is not a workspace member\r\n  (#34458)\r\n- fix(config): warn instead of erroring when workspace member dir is missing\r\n  (#34511)\r\n- fix(core): TLA hang on dyn import when async dep triggers lazy ESM load\r\n  (#34469)\r\n- fix(core): preserve WebAssembly streaming callback across new contexts\r\n  (#34679)\r\n- fix(crypto): correct X448 PKCS#8 handling (#34578)\r\n- fix(doc): don't lint private-type-ref for cross-package types (#34339)\r\n- fix(doc): handle non-ASCII doc lint diagnostics (#34626)\r\n- fix(ext/console): degrade gracefully when getKeys throws (#24980) (#34464)\r\n- fix(ext/fetch): implement missing Request properties (#34607)\r\n- fix(ext/fetch): preserve static request body length (#34546)\r\n- fix(ext/ffi): match V8 stack-arg layout in turbocall trampoline on Apple\r\n  silicon (#34561)\r\n- fix(ext/fs): error when copyFile source and destination are the same file\r\n  (#34718)\r\n- fix(ext/fs): retry without FILE_FLAG_BACKUP_SEMANTICS on Windows when driver\r\n  rejects it (#34686)\r\n- fix(ext/fs): surface non-UTF-8 file names from read_dir (#34623)\r\n- fix(ext/http): reject Response-like return from respondWith (#34589)\r\n- fix(ext/http): reject Response-like return from serve handler (#34416)\r\n- fix(ext/io): cancel pending FileResource reads on close (#34544)\r\n- fix(ext/napi): clear error for Windows addons that link against node.exe\r\n  (#34696)\r\n- fix(ext/napi): disallow JS execution during napi_new_instance (#34496)\r\n- fix(ext/napi): polyfill libuv thread + semaphore primitives (#34571)\r\n- fix(ext/napi): polyfill more libuv symbols from compat layer (#34488)\r\n- fix(ext/net): re-enable 0-RTT support in QUIC (#34520)\r\n- fix(ext/node): add module findPackageJSON export (#34597)\r\n- fix(ext/node): add node:test/reporters builtin (#34595)\r\n- fix(ext/node): add stripTypeScriptTypes export (#34594)\r\n- fix(ext/node): capture IPC handle eagerly to fix cluster send deadlock\r\n  (#34661)\r\n- fix(ext/node): cover node:module SourceMap export (#34591)\r\n- fix(ext/node): disable repl preview when a custom eval is supplied (#34498)\r\n- fix(ext/node): drop bogus Buffer.prototype._isBuffer marker (#34502)\r\n- fix(ext/node): export syncBuiltinESMExports from node:module (#34593)\r\n- fix(ext/node): expose gc from v8 setFlagsFromString (#34604)\r\n- fix(ext/node): fix latin1Slice being too slow (#34503)\r\n- fix(ext/node): honor windowsHide in child_process spawn (#34627)\r\n- fix(ext/node): prevent buffer decode detach race (#34632)\r\n- fix(ext/node): re-export inner spec for module.exports = require(X).Y (#34363)\r\n- fix(ext/node): refuse sqlite close() while a user callback is running (#34515)\r\n- fix(ext/node): report real error code for failed dns.lookup (#34697)\r\n- fix(ext/node): resolve global cache packages when require referrer is outside\r\n  DENODIR (#34497)\r\n- fix(ext/node): route node:fs.statfs through FileSystem trait (#34444)\r\n- fix(ext/node): support cyclic imports in vm.Module.prototype.link() (#34472)\r\n- fix(ext/node): support vm dynamic import callback (#34572)\r\n- fix(ext/node): tolerate unreadable cwd in require._nodeModulePaths (#34542)\r\n- fix(ext/node): vm dynamic import without callback throws\r\n  ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING (#34427)\r\n- fix(ext/web): forward console.group label to inspector log (#34341)\r\n- fix(ext/web): honor PerformanceObserver buffered flag (#34748)\r\n- fix(ext/web): make MessageEvent.ports a frozen array (#34773)\r\n- fix(fmt): update markup_fmt to fix quadratic inline CSS formatting (#34663)\r\n- fix(install): allow \"minimumDependencyAge\" object without \"age\" (#34523)\r\n- fix(install): handle pre-existing node_modules symlink on Windows (#34659)\r\n- fix(install): rewrite relative imports/scopes in copied deno.json (#34562)\r\n- fix(install): run workspace member dependency lifecycle scripts with member\r\n  INIT_CWD (#34700)\r\n- fix(install): vendor type-only imports during `deno ci` (#34459)\r\n- fix(jupyter): exit kernel process after sending shutdown reply (#34554)\r\n- fix(jupyter): keep kernel alive across transient peer disconnects (#34550)\r\n- fix(jupyter): make kernel ZMTP handshake compatible with libzmq (#34755)\r\n- fix(jupyter): send transient: {} in execute_result so nbclient doesn't crash\r\n  (#34483)\r\n- fix(jupyter): use stable PATH entry for kernel binary path (#34492)\r\n- fix(lsp): avoid empty import specifier completions (#34647)\r\n- fix(lsp): complete npm package exports (#34675)\r\n- fix(lsp): complete string union literals containing dots (#34664)\r\n- fix(lsp): discover all tests when names are duplicated (#34624)\r\n- fix(lsp): handle empty jsx completion ranges (#34651)\r\n- fix(lsp): handle parser panics while parsing documents (#34640)\r\n- fix(lsp): honor `moduleResolution: \"bundler\"` for npm dir imports (#34643)\r\n- fix(lsp): include configured deps in auto-imports (#34650)\r\n- fix(lsp): limit node_modules auto-import aliasing (#34674)\r\n- fix(lsp): merge duplicate completion imports (#34658)\r\n- fix(lsp): preserve URL extensions in `typeof import(...)` hovers (#34565)\r\n- fix(lsp): recover from TSC isolate OOM instead of crashing the language server\r\n  (#34693)\r\n- fix(lsp): release idle memory back to the OS (#34727)\r\n- fix(lsp): skip parent process check when PID isn't visible (#34744)\r\n- fix(lsp): spurious diagnostics in Jupyter notebook cells (#34734)\r\n- fix(lsp): support test steps from imported helpers (#34648)\r\n- fix(lsp): surface CSS imports as .js to TypeScript (#34419)\r\n- fix(lsp): surface module-level uncaught errors in test runs (#34641)\r\n- fix(lsp): use cached registry config when offline (#34723)\r\n- fix(lsp): use file uris for neovim virtual definitions (#34653)\r\n- fix(lsp): walk to enabled nested workspaces (#34654)\r\n- fix(napi): report a clear error for legacy V8/nan native addons (#34683)\r\n- fix(napi): support ZeroMQ libuv addon symbols (#34657)\r\n- fix(node): avoid spurious ERR_MULTIPLE_CALLBACK on process.stdout/stderr\r\n  (#34728)\r\n- fix(node): classify required js files as commonjs by default (#34673)\r\n- fix(node): full re-export fallback for unresolvable member re-exports (#34689)\r\n- fix(node): resolve CJS requires with multi-level relative specifiers on\r\n  Windows (#34655)\r\n- fix(node): support module-sync export condition (#34599)\r\n- fix(node/repl): gate preview through V8 inspector throwOnSideEffect (#34566)\r\n- fix(npm): apply scoped registry auth to same-origin tarballs (#34698)\r\n- fix(npm): clean node_modules after deno remove (#34110)\r\n- fix(npm): downgrade latest tag for release age (#34581)\r\n- fix(npm): execute native binaries from npm package bin entries (#34375)\r\n- fix(npm): hoist direct deps over higher transitive versions (#34470)\r\n- fix(npm): share copy-package variants via symlink for class identity (#34691)\r\n- fix(resolver): don't resolve linked packages via bare specifier (#34519)\r\n- fix(rt): support host-FS CJS files in the standalone runtime (#34560)\r\n- fix(runtime): better error message when Deno.consoleSize() has no tty (#34538)\r\n- fix(runtime): suggest --allow-scripts for `bindings` native addon error\r\n  (#34666)\r\n- fix(runtime): suggest N-API alternatives for legacy V8/nan addons (#34695)\r\n- fix(runtime): suggest Worker/node:vm alternatives for npm:isolated-vm (#34702)\r\n- fix(runtime/ops): unwatch shared RecommendedWatcher on FsWatcher close\r\n  (#34467)\r\n- fix(task): preserve trailing backslashes in task arguments (#34505)\r\n- fix(task): restore terminal mode after task exits on Windows (#34685)\r\n- fix(test): abort with a message when a test exits with sanitizeExit disabled\r\n  (#34491)\r\n- fix(test): don't kill the deno process on top-level Deno.exit() (#34564)\r\n- fix(test): wait for inspector to disconnect before exiting (#34559)\r\n- fix(tsc): resolve Web globals to Deno's versions in npm packages (#34634)\r\n- fix(watch): register dynamic raw imports with file watcher (#34463)\r\n- fix(watch): restore original cwd between watcher restarts (#34465)\r\n- fix: absolute links should be processed using directory functions (#34218)\r\n- fix: link to docs in JSON import error message (#34611)\r\n- fix: load classic blob worker main script directly (#34592)\r\n- fix: opt-in mitigation for React RCE/DoS CVEs (#34676)\r\n- fix: reject empty package name in package.json dependencies (#34514)\r\n- fix: remove node_shim exec dependency (#34739)\r\n- fix: resolve local file when folder name matches import-mapped package\r\n  (#32854)\r\n- fix: send BroadcastChannel messages before close (#34628)\r\n- perf(cli): drop unused deno_ast bundler feature (#34424)\r\n- perf(ext/fetch): cache lowercased header names per Headers instance (#33683)\r\n- perf(ext/node): bulk-build header array and trim header OWS in place (#34443)\r\n- perf(ext/node): cache member-export-props analysis (#34471)\r\n- perf(ext/node): gate node:http async resource entry (#34608)\r\n- perf(ext/node): optimize empty node:http response end (#34493)\r\n- perf(ext/node): optimize node:http header matching (#34484)\r\n- perf(ext/node): skip node:http perf timing without observers (#34409)\r\n- perf(ext/web): convert hot stream queues to O(1) Queue, cache _state reads\r\n  (#34437)\r\n- perf(http): remove legacy hyper 0.14 from deno_http (#34557)\r\n- perf(node): lazy stdio + fix LazyEsmModuleLoader source consumption (#34440)\r\n- perf(node): lazy-load node:stream/web cluster out of the snapshot (#34548)\r\n- perf(node): skip require permission checks when read is fully granted (#34722)\r\n- perf(runtime): update notify watcher dependency (#34567)\r\n- perf(web): reduce Brotli CompressionStream binary size (#34432)\r\n- perf: enable safe ICF (identical code folding) when linking (#34478)\r\n- perf: replace ipnetwork with ipnet (#34580)","publishedAt":"2026-06-03T13:41:42.000Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.2","media":[],"prerelease":false,"source":{"slug":"deno","name":"Deno","type":"github"},"org":{"slug":"deno","name":"Deno"},"product":null,"groupSlug":"deno","groupName":"Deno","coverageCount":0,"composition":{"bugs":84,"features":14,"enhancements":2}},{"id":"rel_caW8QnUrGixS-a2qRxpqx","version":"v3.2.6","type":"feature","title":"v3.2.6","summary":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\n\n- Pin last supported vite-node version &nbsp;-&nbsp; by @sheremet-va [<samp>(16f12)</samp>](https://github.com/vit...","titleGenerated":null,"titleShort":null,"content":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\n\n- Pin last supported vite-node version &nbsp;-&nbsp; by @sheremet-va [<samp>(16f12)</samp>](https://github.com/vitest-dev/vitest/commit/16f120d05)\n\n##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v3.2.5...v3.2.6)","publishedAt":"2026-06-01T09:39:20.000Z","url":"https://github.com/vitest-dev/vitest/releases/tag/v3.2.6","media":[],"prerelease":false,"source":{"slug":"vitest","name":"vitest","type":"github"},"org":{"slug":"vitest","name":"Vitest"},"product":null,"groupSlug":"vitest","groupName":"vitest","coverageCount":0,"composition":null},{"id":"rel_UxDUBkNLvFMY1tHCXTfsE","version":"v3.2.5","type":"feature","title":"v3.2.5","summary":"### &nbsp;&nbsp;&nbsp;🚀 Features\n\n- **api**: Add `allowWrite` and `allowExec` options to `api` [backport to v3] &nbsp;-&nbsp; by @hi-ogawa and **Code...","titleGenerated":null,"titleShort":null,"content":"### &nbsp;&nbsp;&nbsp;🚀 Features\n\n- **api**: Add `allowWrite` and `allowExec` options to `api` [backport to v3] &nbsp;-&nbsp; by @hi-ogawa and **Codex** in https://github.com/vitest-dev/vitest/issues/10445 [<samp>(af88b)</samp>](https://github.com/vitest-dev/vitest/commit/af88b1f5d)\n\n### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\n\n- **browser**: Disable client `cdp` API when `allowWrite/allowExec: false` [backport to v3] &nbsp;-&nbsp; by @hi-ogawa and **Codex** in https://github.com/vitest-dev/vitest/issues/10456 [<samp>(385a1)</samp>](https://github.com/vitest-dev/vitest/commit/385a1aefd)\n\n##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v3.2.4...v3.2.5)","publishedAt":"2026-06-01T08:35:18.000Z","url":"https://github.com/vitest-dev/vitest/releases/tag/v3.2.5","media":[],"prerelease":false,"source":{"slug":"vitest","name":"vitest","type":"github"},"org":{"slug":"vitest","name":"Vitest"},"product":null,"groupSlug":"vitest","groupName":"vitest","coverageCount":0,"composition":null},{"id":"rel_hRBPCERlURI3JnPhP12v4","version":"v4.1.8","type":"feature","title":"v4.1.8","summary":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\r\n\r\n- **browser**:\r\n  - Disable client `cdp` API when `allowWrite/allowExec: false` [backport to v4] &nbsp;-&nbsp; b...","titleGenerated":null,"titleShort":null,"content":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\r\n\r\n- **browser**:\r\n  - Disable client `cdp` API when `allowWrite/allowExec: false` [backport to v4] &nbsp;-&nbsp; by @hi-ogawa and **Codex** in https://github.com/vitest-dev/vitest/issues/10450 [<samp>(e4067)</samp>](https://github.com/vitest-dev/vitest/commit/e4067b3b1)\r\n  - Remove orphaned Playwright route when same module is mocked via multiple ids [backport to v4] &nbsp;-&nbsp; by @toxik and @Zelys-DFKH in https://github.com/vitest-dev/vitest/issues/10474 [<samp>(675b4)</samp>](https://github.com/vitest-dev/vitest/commit/675b4343f)\r\n\r\n##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)","publishedAt":"2026-06-01T08:15:20.000Z","url":"https://github.com/vitest-dev/vitest/releases/tag/v4.1.8","media":[],"prerelease":false,"source":{"slug":"vitest","name":"vitest","type":"github"},"org":{"slug":"vitest","name":"Vitest"},"product":null,"groupSlug":"vitest","groupName":"vitest","coverageCount":0,"composition":null},{"id":"rel_4y_Om89V_OgJnkB7ywZ3O","version":"11.5","type":"feature","title":"pnpm 11.5","summary":"pnpm 11.5 adds a `hoistingLimits` setting for controlling how far dependencies hoist in `nodeLinker: hoisted` installs, replaces the interactive promp...","titleGenerated":null,"titleShort":null,"content":"pnpm 11.5 adds a `hoistingLimits` setting for controlling how far dependencies hoist in `nodeLinker: hoisted` installs, replaces the interactive prompt library to fix scrolling in long choice lists, recognizes staged publishes in the trust scale, and ships several install and `dist-tag` fixes.\n\n## Minor Changes[​](https://pnpm.io/blog/releases/11.5#minor-changes)\n\n### New `hoistingLimits` setting[​](https://pnpm.io/blog/releases/11.5#new-hoistinglimits-setting)\n\nA new [`hoistingLimits`](https://pnpm.io/settings#hoistinglimits) setting controls how far dependencies are hoisted when using `nodeLinker: hoisted`. It mirrors yarn's `nmHoistingLimits` and accepts:\n\n- **none** - hoist as far as possible (the default).\n- **workspaces** - hoist only as far as each workspace package.\n- **dependencies** - hoist only up to each workspace package's direct dependencies.\n\nOriginally proposed in [#6468](https://github.com/pnpm/pnpm/pull/6468), closing [#6457](https://github.com/pnpm/pnpm/issues/6457).\n\n### New interactive prompt library[​](https://pnpm.io/blog/releases/11.5#new-interactive-prompt-library)\n\npnpm replaced `enquirer` with `@inquirer/prompts` for all interactive prompts. This fixes the `update -i` scrolling overflow bug where long choice lists were clipped in the terminal ([#6643](https://github.com/pnpm/pnpm/issues/6643)). The new library uses visual-line-aware pagination, so scrolling now works correctly when many packages are available.\n\nAffected commands include `pnpm update -i` (and `--latest`), `pnpm audit --fix -i`, `pnpm approve-builds`, `pnpm patch`, `pnpm patch-remove`, `pnpm publish`, `pnpm login`, and `pnpm run` / `pnpm exec` (with `verifyDepsBeforeRun=prompt`).\n\nVim-style `j` / `k` keys still work for up/down navigation in all interactive prompts.\n\n### Staged publishes recognized in the trust scale[​](https://pnpm.io/blog/releases/11.5#staged-publishes-recognized-in-the-trust-scale)\n\nStaged publishes are now recognized in the trust scale. When a package version's registry metadata carries an `approver` field, it is treated as the strongest trust evidence (ranked above trusted publishers and provenance attestations), since staged publishes require 2FA publish approvals. This prevents false-positive trust downgrade errors when moving from a staged publish to a lower trust level ([#11887](https://github.com/pnpm/pnpm/issues/11887)).\n\n## Patch Changes[​](https://pnpm.io/blog/releases/11.5#patch-changes)\n\n- Fix pnpm hanging during peer resolution when an aliased install pulls in transitive packages with mutual peer cycles at different depths in the dependency tree (for example, `pnpm i nuxt@npm:nuxt-nightly@5x`) ([#11999](https://github.com/pnpm/pnpm/issues/11999)).\n- Fix `pnpm dist-tag add` and `pnpm dist-tag rm` against npmjs.org failing without `--otp`. pnpm now surfaces the OTP challenge through the existing browser-based 2FA flow (the same one used by `pnpm publish`), so the browser opens, the user authenticates, and the dist-tag is set on retry. `--otp=<code>` continues to work via the classic flow.\n- Fix `minimumReleaseAgeExclude` handling in npm resolution fast paths so excluded packages do not get pinned to stale versions.\n- Fix the `integrity` field being dropped from the lockfile entry of a remote (non-registry) https-tarball dependency when an unrelated package is installed afterwards. The missing integrity could otherwise make subsequent `--frozen-lockfile` installs fail with `ERR_PNPM_MISSING_TARBALL_INTEGRITY` ([#12001](https://github.com/pnpm/pnpm/issues/12001)).\n- Skip dependency re-resolution when `pnpm-lock.yaml` is missing but `node_modules/.pnpm/lock.yaml` exists and still satisfies the manifest. `pnpm install` now reuses the materialized snapshot to regenerate `pnpm-lock.yaml` instead of walking the registry to rebuild it from scratch ([#11993](https://github.com/pnpm/pnpm/issues/11993)). `--frozen-lockfile` still refuses to proceed when `pnpm-lock.yaml` is absent.\n\n\"undefined\"!=typeof \\_bsa&&\\_bsa&&\\_bsa.init(\"custom\",\"CWYI4K7E\",\"placement:pnpmio\",{target:\"#bsa-custom-01\",template:\\` <a href=\"##link##\" class=\"native-banner\" style=\"background: ##backgroundColor##\" rel=\"sponsored noopener\" target=\"\\_blank\" title=\"##company## — ##tagline##\"> <img class=\"native-img\" width=\"125\" src=\"##logo##\" /> <div class=\"native-main\"> <div class=\"native-details\" style=\" color: ##textColor##; border-left: solid 1px ##textColor##; \"> <span class=\"native-desc\">##description##</span> </div> <span class=\"native-cta\" style=\" color: ##ctaTextColor##; background-color: ##ctaBackgroundColor##; \">##callToAction##</span> </div> </a> \\`})","publishedAt":"2026-05-29T00:00:00.000Z","url":"https://pnpm.io/blog/releases/11.5","media":[],"prerelease":false,"source":{"slug":"pnpm","name":"pnpm","type":"feed"},"org":{"slug":"pnpm","name":"pnpm"},"product":null,"groupSlug":"pnpm","groupName":"pnpm","coverageCount":0,"composition":null},{"id":"rel_lq-fVeJj_k7isKSiWjiST","version":"v2.9.16","type":"feature","title":"Turborepo v2.9.16","summary":"Fixed a PTY shutdown hang that could cause processes to hang, and fixed nested Bun dependency versions not being preserved. Also fixed the --no-git flag incorrectly deleting existing .git directories, and improved npm tlog publish retry logic.","titleGenerated":"Turborepo v2.9.16 fixes PTY shutdown hang and Bun dependency handling","titleShort":"PTY shutdown hang fixed; Bun dependencies now preserved","content":"<!-- Release notes generated using configuration in .github/release.yml at v2.9.16 -->\n\n## What's Changed\n### Changelog\n* release(turborepo): 2.9.15 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12955\n* fix: Avoid hanging PTY shutdown by @anthonyshew in https://github.com/vercel/turborepo/pull/12958\n* fix: Retry npm tlog publish failures by @anthonyshew in https://github.com/vercel/turborepo/pull/12959\n* release(turborepo): 2.9.16-canary.1 by @anthonyshew in https://github.com/vercel/turborepo/pull/12960\n* fix: Preserve nested Bun dependency versions by @anthonyshew in https://github.com/vercel/turborepo/pull/12963\n* Revert \"fix: Preserve nested Bun dependency versions\" by @anthonyshew in https://github.com/vercel/turborepo/pull/12964\n* release(turborepo): 2.9.16-canary.2 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12961\n* fix: Preserve nested Bun dependency versions by @anthonyshew in https://github.com/vercel/turborepo/pull/12965\n* fix: Don't delete existing `.git` when using `--no-git` flag by @anthonyshew in https://github.com/vercel/turborepo/pull/12968\n\n\n**Full Changelog**: https://github.com/vercel/turborepo/compare/v2.9.15...v2.9.16","publishedAt":"2026-05-28T14:32:37.000Z","url":"https://github.com/vercel/turborepo/releases/tag/v2.9.16","media":[],"prerelease":false,"source":{"slug":"turborepo","name":"Turborepo","type":"github"},"org":{"slug":"vercel","name":"Vercel"},"product":{"slug":"turborepo","name":"Turborepo"},"groupSlug":"turborepo","groupName":"Turborepo","coverageCount":0,"composition":{"bugs":4,"features":0,"enhancements":0}},{"id":"rel_W6sEtSve2YzogbIN4tQFs","version":"v2.8.1","type":"feature","title":"v2.8.1","summary":"Fixed multiple Node.js compatibility issues including TLSSocket.authorized behavior when clients present no certificate, PKCS#12 MAC support in TLS SecureContext, and fs.watch error event emission on open failures. Network permission checks now apply to resolved IPs in fetch and WebSocket, and a panic in deno test --parallel is fixed.","titleGenerated":"Deno v2.8.1 fixes Node.js polyfill bugs and network permission checks","titleShort":"Node.js TLS/fs fixes; network deny list enforced on resolve","content":"### 2.8.1 / 2026.05.27\r\n\r\n- Revert \"fix(ext/node): polyfill module.enableCompileCache and companions\"\r\n  (#34190) (#34348)\r\n- feat(bundle): support `browser` field map in package.json (#34407)\r\n- fix(bundle): read package.json sideEffects field (#34406)\r\n- fix(cli): clearer error when importing .node addon via ESM (#34361)\r\n- fix(config): don't panic when --config path can't be converted to URL (#34351)\r\n- fix(core): allow host objects to round-trip through core.deserialize (#34380)\r\n- fix(core): keep lazy_loaded_esm sources across concurrent loads (#34353)\r\n- fix(ext/fetch,ext/websocket): check resolved IPs against net deny list\r\n  (#34236)\r\n- fix(ext/node): TLSSocket.authorized=false when client presents no cert\r\n  (#34381)\r\n- fix(ext/node): accept array forms of cert/key/pfx in createSecureContext\r\n  (#34379)\r\n- fix(ext/node): add missing node:util APIs getSystemErrorMap,\r\n  transferableAbortSignal, transferableAbortController (#34372)\r\n- fix(ext/node): allow omitting arguments in base64Slice (#34318)\r\n- fix(ext/node): attach register as static on Module (#34305)\r\n- fix(ext/node): do not throw NotFound for fs.exists (#34244)\r\n- fix(ext/node): drop extra positional args in promisified fs.promises.*\r\n  (#34347)\r\n- fix(ext/node): emit 'error' event for fs.watch open failures (#34398)\r\n- fix(ext/node): enforce minimum Miller-Rabin rounds in checkPrime (#34391)\r\n- fix(ext/node): extract cert/key from pfx in tls SecureContext (#34383)\r\n- fix(ext/node): prevent panic on `node:sqlite` aggregate method (#34385)\r\n- fix(ext/node): require env permission for process.loadEnvFile (#34350)\r\n- fix(ext/node): reset req.reusedSocket on transparent retry (#34376)\r\n- fix(ext/node): support PKCS#12 MACs other than SHA-1 (#34342)\r\n- fix(ext/node): tolerate non-AsyncWrap handles in _getNewAsyncId (#34413)\r\n- fix(http): wake runtime after direct serve dispatch (#34387)\r\n- fix(inspector): emit NodeWorker.attachedToWorker for late workers (#34377)\r\n- fix(node/util): don't invoke Proxy traps in util.inspect (#34373)\r\n- fix(pack): remove automatic @deno/shim-deno injection (#34411)\r\n- fix(runtime): lazy-loaded globals should shadow on inherited [[Set]] (#34405)\r\n- fix(task): walk ancestor node_modules/.bin in BYONM mode (#34364)\r\n- fix(transpile): preserve newlines after multi-line block comments (#34357)\r\n- fix(types): restore brotli in CompressionFormat for dom/webworker libs\r\n  (#34349)\r\n- fix(upgrade): zstd-compress bsdiff delta patches (#34354)\r\n- fix: allow --inspect=localhost:0 to resolve hostnames (#34230)\r\n- fix: panic in deno test --parallel (#34378)\r\n- fix: support npm: specifiers in --preload and --import (#34346)\r\n- perf(ext/node): reuse keep-alive timer in node:http server (#34302)","publishedAt":"2026-05-27T12:56:27.000Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.1","media":[],"prerelease":false,"source":{"slug":"deno","name":"Deno","type":"github"},"org":{"slug":"deno","name":"Deno"},"product":null,"groupSlug":"deno","groupName":"Deno","coverageCount":0,"composition":{"bugs":35,"features":1,"enhancements":1}},{"id":"rel_26KxE7YolLI3obpQM_p3r","version":"11.4","type":"feature","title":"pnpm 11.4","summary":"pnpm 11.4 closes a cluster of supply-chain holes around lockfile integrity, credential scoping, git resolutions, patch files, and dependency aliases, ...","titleGenerated":null,"titleShort":null,"content":"pnpm 11.4 closes a cluster of supply-chain holes around lockfile integrity, credential scoping, git resolutions, patch files, and dependency aliases, makes tarball-integrity mismatches a hard install failure by default (with a narrowly-scoped `--update-checksums` opt-in), and changes `pnpm runtime set` to write to `devEngines.runtime` instead of `engines.runtime` by default.\n\n## Minor Changes[​](https://pnpm.io/blog/releases/11.4#minor-changes)\n\n### Tarball-integrity mismatches are now a hard failure[​](https://pnpm.io/blog/releases/11.4#tarball-integrity-mismatches-are-now-a-hard-failure)\n\nPreviously, `pnpm install` (non-frozen) would log `ERR_PNPM_TARBALL_INTEGRITY` when a downloaded tarball's hash didn't match the lockfile, silently re-resolve from the registry, and overwrite the locked integrity. A compromised registry, proxy, or republished version could therefore substitute attacker-controlled content on a clean machine even though the project shipped a committed lockfile.\n\n`pnpm install` now exits with `ERR_PNPM_TARBALL_INTEGRITY` and a hint pointing at the new opt-in flag.\n\nThe only opt-in is **`pnpm install --update-checksums`** — narrowly scoped to refreshing the locked integrity values from what the registry currently serves. It mirrors yarn's flag of the same name. A warning still prints when the bypass takes effect so the operation is auditable.\n\n`--force` and `pnpm update` deliberately do **not** bypass the integrity check. They are routine refresh operations; silently overwriting a locked integrity in those flows would erase the protection a committed lockfile is supposed to provide. `--frozen-lockfile` behavior is unchanged. `--fix-lockfile` keeps its documented purpose (filling in missing lockfile entries) and is also not a bypass.\n\n### `pnpm runtime set` writes to `devEngines.runtime` by default[​](https://pnpm.io/blog/releases/11.4#pnpm-runtime-set-writes-to-devenginesruntime-by-default)\n\n[`pnpm runtime set <name> <version>`](https://pnpm.io/cli/runtime) now saves the runtime to `devEngines.runtime` by default instead of `engines.runtime`. Pass `--save-prod` (or `-P`) to save it to `engines.runtime` instead. See [#11948](https://github.com/pnpm/pnpm/issues/11948).\n\n## Patch Changes[​](https://pnpm.io/blog/releases/11.4#patch-changes)\n\n### Security: unscoped credentials no longer leak across registries[​](https://pnpm.io/blog/releases/11.4#security-unscoped-credentials-no-longer-leak-across-registries)\n\nAn unscoped `_authToken` (or `_auth`, or `username` + `_password`, or `tokenHelper`) defined in one source — `~/.npmrc`, `~/.config/pnpm/auth.ini`, a workspace `.npmrc`, CLI flags, etc. — would be sent as an `Authorization` header to whichever registry a different (potentially untrusted) source named. The same exposure extended to client TLS credentials (`cert`, `key`).\n\npnpm now rewrites each unscoped per-registry setting (`_authToken`, `_auth`, `username`, `_password`, `tokenHelper`, `cert`, `key`) to its URL-scoped form at load time, using the `registry=` value declared in the same source (or the npmjs default registry if the source declares none). A later layer overriding `registry=` therefore cannot pull an unscoped credential along, because it is already pinned to the URL its author intended. `ca` / `cafile` are intentionally not rescoped — they're trust anchors, not credentials, and corporate MITM-proxy setups rely on them applying globally.\n\nEvery rescope emits a deprecation warning telling the user where the setting was pinned and how to write it directly. npm has rejected unscoped credentials outright since `npm@9`, and pnpm intends to remove support in a future major release. To target a specific registry, write the setting URL-scoped:\n\n.npmrc\n\n```\n<span class=\"token-line\" style=\"color:#393A34\"><span class=\"token key attr-name\" style=\"color:#00a4db\">//registry.example.com/:_authToken</span><span class=\"token punctuation\" style=\"color:#393A34\">=</span><span class=\"token value attr-value\" style=\"color:#e3116c\">...</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key attr-name\" style=\"color:#00a4db\">//registry.example.com/:cert</span><span class=\"token punctuation\" style=\"color:#393A34\">=</span><span class=\"token value attr-value\" style=\"color:#e3116c\">...</span><br></span>\n```\n\n### Security: lockfile entries without `integrity` are rejected[​](https://pnpm.io/blog/releases/11.4#security-lockfile-entries-without-integrity-are-rejected)\n\nPreviously, the worker that extracts a downloaded tarball skipped hash verification when no integrity was supplied and minted a fresh one from the unverified bytes. An attacker who could both alter the lockfile (e.g. via a pull request that strips `integrity:`) and serve modified content at the referenced tarball URL could install a tampered package without any error — including under `--frozen-lockfile`.\n\npnpm now fails closed at lockfile-read time with `ERR_PNPM_MISSING_TARBALL_INTEGRITY`. Git-hosted tarballs (`gitHosted: true` or a URL on `codeload.github.com` / `bitbucket.org` / `gitlab.com`) and `file:` tarballs are exempt — the commit SHA in a git-host URL and the user-controlled local path already anchor the bytes.\n\n### Security: git resolutions reject non-SHA `commit` fields[​](https://pnpm.io/blog/releases/11.4#security-git-resolutions-reject-non-sha-commit-fields)\n\nGit resolutions whose `commit` field is not a 40-character hexadecimal SHA are rejected before `git` is invoked. A malicious lockfile could otherwise smuggle a value such as `--upload-pack=<command>` through `git fetch` / `git checkout`, which on SSH or local-file transports executes the supplied command.\n\n### Security: patch files writing outside the package directory are rejected[​](https://pnpm.io/blog/releases/11.4#security-patch-files-writing-outside-the-package-directory-are-rejected)\n\nPatch files whose `diff --git` headers reference paths outside the patched package directory are now rejected. Previously a malicious `.patch` file added via a pull request could write, delete, or rename arbitrary files reachable by the user running `pnpm install`.\n\n### Security: dependency aliases with path-traversal segments are rejected[​](https://pnpm.io/blog/releases/11.4#security-dependency-aliases-with-path-traversal-segments-are-rejected)\n\nDependency aliases that contain path-traversal segments (such as `@x/../../../../../.git/hooks`) are rejected when read from a package manifest or symlinked into `node_modules`. A malicious registry package could otherwise use a transitive dependency key to make `pnpm install` create symlinks at attacker-chosen paths outside the intended `node_modules` directory.\n\n### Trusted-publisher metadata now requires provenance[​](https://pnpm.io/blog/releases/11.4#trusted-publisher-metadata-now-requires-provenance)\n\nTrusted publisher metadata is only treated as the strongest trust evidence when provenance is also present.\n\n### Other fixes[​](https://pnpm.io/blog/releases/11.4#other-fixes)\n\n- Fix `pnpm deploy` crashing with `ENOENT: ... lstat '<deployDir>/node_modules'` when `configDependencies` declares pacquet (`pacquet` or `@pnpm/pacquet`). The deploy directory never installs config dependencies, so the install engine they designate isn't on disk to invoke; the nested install now skips them.\n- Limit concurrent project manifest reads while listing large workspaces to avoid `EMFILE` errors.\n- Validate `devEngines.runtime` and `engines.runtime` version ranges for `node`, `deno`, and `bun` when `onFail` is set to `error` or `warn`. Previously these settings only had an effect with `onFail: 'download'` — the `error` and `warn` modes silently did nothing [#11818](https://github.com/pnpm/pnpm/issues/11818). Violations now throw `ERR_PNPM_BAD_RUNTIME_VERSION`.\n- Improve the log message that pnpm prints after auto-adding entries to `minimumReleaseAgeExclude` when `minimumReleaseAge` is set without `minimumReleaseAgeStrict`. The message previously referred to the internal \"loose mode\" terminology, which wasn't searchable in the docs; it now tells the user to set `minimumReleaseAgeStrict` to `true` if they want these updates gated behind a prompt instead [#11747](https://github.com/pnpm/pnpm/issues/11747).\n\n\"undefined\"!=typeof \\_bsa&&\\_bsa&&\\_bsa.init(\"custom\",\"CWYI4K7E\",\"placement:pnpmio\",{target:\"#bsa-custom-01\",template:\\` <a href=\"##link##\" class=\"native-banner\" style=\"background: ##backgroundColor##\" rel=\"sponsored noopener\" target=\"\\_blank\" title=\"##company## — ##tagline##\"> <img class=\"native-img\" width=\"125\" src=\"##logo##\" /> <div class=\"native-main\"> <div class=\"native-details\" style=\" color: ##textColor##; border-left: solid 1px ##textColor##; \"> <span class=\"native-desc\">##description##</span> </div> <span class=\"native-cta\" style=\" color: ##ctaTextColor##; background-color: ##ctaBackgroundColor##; \">##callToAction##</span> </div> </a> \\`})","publishedAt":"2026-05-27T00:00:00.000Z","url":"https://pnpm.io/blog/releases/11.4","media":[],"prerelease":false,"source":{"slug":"pnpm","name":"pnpm","type":"feed"},"org":{"slug":"pnpm","name":"pnpm"},"product":null,"groupSlug":"pnpm","groupName":"pnpm","coverageCount":0,"composition":null},{"id":"rel_rHW4iRNOw5F-B0ENZs6aH","version":"v2.9.15","type":"feature","title":"Turborepo v2.9.15","summary":"Fixed multiple symlink race conditions during cache restore and archive reads, and prevented Windows process drain hangs. Also fixed prune package.json workspaces, Bun alias child package preservation, non-UTF-8 path handling, and removed widespread panic callsites across the codebase for improved stability.","titleGenerated":"Turborepo v2.9.15 fixes cache symlink races and process handling","titleShort":"Cache symlink races fixed; process tree hangs resolved","content":"<!-- Release notes generated using configuration in .github/release.yml at v2.9.15 -->\n\n## What's Changed\n### Changelog\n* release(turborepo): 2.9.14 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12805\n* fix: Prune package.json workspaces by @anthonyshew in https://github.com/vercel/turborepo/pull/12808\n* fix: Wait for process trees before task completion by @anthonyshew in https://github.com/vercel/turborepo/pull/12809\n* release(turborepo): 2.9.15-canary.1 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12810\n* ci: Sign macOS release binaries by @anthonyshew in https://github.com/vercel/turborepo/pull/12811\n* release(turborepo): 2.9.15-canary.2 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12812\n* fix: Prevent cache archive symlink reads by @anthonyshew in https://github.com/vercel/turborepo/pull/12813\n* release(turborepo): 2.9.15-canary.3 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12814\n* fix: Avoid path-racy chmod during directory restore by @anthonyshew in https://github.com/vercel/turborepo/pull/12815\n* fix: Prevent cache restore symlink race writes by @anthonyshew in https://github.com/vercel/turborepo/pull/12817\n* chore: Deny Rust panic extraction by default by @anthonyshew in https://github.com/vercel/turborepo/pull/12818\n* fix: Make structured log symlink defense race-safe by @anthonyshew in https://github.com/vercel/turborepo/pull/12821\n* fix: Preserve Bun alias child packages by @anthonyshew in https://github.com/vercel/turborepo/pull/12822\n* fix: Avoid UTF-8 panics at boundaries by @anthonyshew in https://github.com/vercel/turborepo/pull/12823\n* fix: Preserve non-UTF-8 Git path boundaries by @anthonyshew in https://github.com/vercel/turborepo/pull/12826\n* fix: Create daemon dirs with private permissions by @anthonyshew in https://github.com/vercel/turborepo/pull/12827\n* fix: Return Berry lockfile errors instead of panicking by @anthonyshew in https://github.com/vercel/turborepo/pull/12828\n* fix: Isolate Corepack state in integration tests by @anthonyshew in https://github.com/vercel/turborepo/pull/12831\n* ci: Use larger Windows runners for Rust tests by @anthonyshew in https://github.com/vercel/turborepo/pull/12832\n* docs: Add `with-vite-module-federation` example by @gioboa in https://github.com/vercel/turborepo/pull/12794\n* test: Run Rust tests without partitioning by @anthonyshew in https://github.com/vercel/turborepo/pull/12833\n* chore: Remove `TaskHashTracker`-based `expect()` calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12836\n* chore: Deduplicate hash canonicalization by @anthonyshew in https://github.com/vercel/turborepo/pull/12837\n* fix: Prevent Windows process drain hangs by @anthonyshew in https://github.com/vercel/turborepo/pull/12838\n* fix: Refactor execsync to execfilesync for Shell command built from environment values by @bjormgyg in https://github.com/vercel/turborepo/pull/12829\n* test: Bound vt100 random quickcheck by @anthonyshew in https://github.com/vercel/turborepo/pull/12839\n* fix: Validate daemon discovery responses by @anthonyshew in https://github.com/vercel/turborepo/pull/12840\n* fix: Store `PackageGraph` root invariants by @anthonyshew in https://github.com/vercel/turborepo/pull/12841\n* chore: Avoid engine graph node expects by @anthonyshew in https://github.com/vercel/turborepo/pull/12842\n* test: Make Rust tests parallel-safe by @anthonyshew in https://github.com/vercel/turborepo/pull/12843\n* fix: Avoid graph utility node lookup panics by @anthonyshew in https://github.com/vercel/turborepo/pull/12844\n* fix: Avoid graph walker `expect()` calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12845\n* fix: Remove fs panic extraction lints by @anthonyshew in https://github.com/vercel/turborepo/pull/12846\n* fix: Remove fixed map panic extraction calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12847\n* fix: Remove devtools WebSocket panics by @anthonyshew in https://github.com/vercel/turborepo/pull/12850\n* fix: Remove json rewrite panic lint allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12848\n* fix: Remove turborepo-types panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12849\n* chore: Remove turborepo-hash build expect by @anthonyshew in https://github.com/vercel/turborepo/pull/12851\n* fix: Remove napi panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12852\n* fix: Avoid globwatch expect calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12853\n* fix: Remove LSP expect callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12854\n* fix: Remove scope panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12855\n* fix: Remove task hash panic lints by @anthonyshew in https://github.com/vercel/turborepo/pull/12856\n* fix: Remove frameworks panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12857\n* fix: Remove microfrontends proxy expect lint allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12859\n* fix: Avoid API client expect calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12858\n* fix: Avoid task executor expect calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12860\n* fix: Remove turbo-trace unwrap callsite by @anthonyshew in https://github.com/vercel/turborepo/pull/12863\n* fix: Remove Vercel API mock expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12862\n* fix: Remove vt100 expect lint allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12861\n* fix: Remove turborepo-shim expect callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12864\n* test: Deflake daemon existing process test by @anthonyshew in https://github.com/vercel/turborepo/pull/12865\n* fix: Avoid repository NAPI unwrap calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12866\n* fix: Remove pidlock panic callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12867\n* fix: Remove telemetry panic callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12868\n* chore: Remove Rust re-export shims by @anthonyshew in https://github.com/vercel/turborepo/pull/12870\n* fix: Remove turbo-json panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12869\n* fix: Remove `globwalk`'s `expect()` callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12871\n* fix: Remove `turbopath`'s `expect()` callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12872\n* test: Deflake Corepack prepare lock on Windows by @anthonyshew in https://github.com/vercel/turborepo/pull/12873\n* fix: Remove signals panic callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12874\n* fix: Remove `turbo-trace`'s `expect()` allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12876\n* fix: Remove Vercel API mock unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12877\n* fix: Remove task executor unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12878\n* fix: Remove run summary expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12879\n* fix: Remove microfrontends proxy unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12880\n* fix: Remove api client unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12881\n* fix: Remove globwalk unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12883\n* fix: Remove UI `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12882\n* fix: Remove microfrontends expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12885\n* fix: Remove `boundaries`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12887\n* fix: Remove `turborepo-process`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12888\n* fix: Remove UI unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12889\n* fix: Remove microfrontends unwrap allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12890\n* fix: Remove `turborepo-process`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12891\n* fix: Remove scm expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12893\n* fix: Remove auth unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12886\n* fix: Remove `turbopath`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12884\n* fix: Remove `auth`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12895\n* fix: Remove wax unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12899\n* fix: Remove scm unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12897\n* fix: Remove `turborepo-boundaries`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12896\n* fix: Remove daemon unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12898\n* fix: Include lockfile-changed packages in affected tasks by @anthonyshew in https://github.com/vercel/turborepo/pull/12900\n* fix: Remove `turborepo-wax`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12901\n* fix: Remove `turborepo-filewatch`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12903\n* fix: Remove `turborepo-cache`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12902\n* fix: Remove `turborepo-daemon`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12904\n* fix: Remove `turborepo-engine`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12906\n* fix: Remove filewatch unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12907\n* fix: Remove engine expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12908\n* fix: Remove cache unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12909\n* fix: Remove `turborepo-lockfiles` `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12910\n* chore: Set pnpm minimum release age by @anthonyshew in https://github.com/vercel/turborepo/pull/12912\n* fix: Remove `turborepo-lockfiles`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12911\n* fix: Remove `turborepo-vt100`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12913\n* release(turborepo): 2.9.15-canary.4 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12905\n* fix: Remove `turborepo-lib`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12915\n* fix: Remove `turborepo-lib`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12914\n* fix: Remove shim test unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12917\n* fix: Remove turbo json test unwrap allowance by @anthonyshew in https://github.com/vercel/turborepo/pull/12918\n* fix: Remove run summary test unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12916\n* release(turborepo): 2.9.15-canary.5 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12919\n* fix: Restore task completion semantics by @anthonyshew in https://github.com/vercel/turborepo/pull/12923\n* fix: Preserve nested Bun workspace dependency versions by @anthonyshew in https://github.com/vercel/turborepo/pull/12924\n* release(turborepo): 2.9.15-canary.6 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12925\n* fix: Restore release PR auto-merge by @anthonyshew in https://github.com/vercel/turborepo/pull/12927\n* perf: Index repo gitignore matchers by @anthonyshew in https://github.com/vercel/turborepo/pull/12928\n* ci: Disable incremental Rust test builds by @anthonyshew in https://github.com/vercel/turborepo/pull/12929\n* perf: Trim OpenTelemetry crate features by @anthonyshew in https://github.com/vercel/turborepo/pull/12930\n* perf: Trim microfrontends proxy HTTP features by @anthonyshew in https://github.com/vercel/turborepo/pull/12931\n* fix: Accept `experimentalCI` object config by @anthonyshew in https://github.com/vercel/turborepo/pull/12934\n* release(turborepo): 2.9.15-canary.7 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12935\n* fix: Restore a few internal invariant checks by @anthonyshew in https://github.com/vercel/turborepo/pull/12933\n* fix: Improve profile tracing coverage by @anthonyshew in https://github.com/vercel/turborepo/pull/12936\n* fix: Use build-scale OTel duration buckets by @anthonyshew in https://github.com/vercel/turborepo/pull/12939\n* fix: Preserve pnpm injected peer package entries by @anthonyshew in https://github.com/vercel/turborepo/pull/12940\n* feat: Add heap allocation profiling by @anthonyshew in https://github.com/vercel/turborepo/pull/12943\n* release(turborepo): 2.9.15-canary.8 by @anthonyshew in https://github.com/vercel/turborepo/pull/12945\n* docs: Correct attribute presence claims in turborepo-otel by @adityasingh2400 in https://github.com/vercel/turborepo/pull/12932\n* chore(turbo-codemod): Remove duplicate \"in\" in transforms path comment by @mvanhorn in https://github.com/vercel/turborepo/pull/12948\n* chore: Switch Geist font imports to npm geist package by @christopherkindl in https://github.com/vercel/turborepo/pull/12952\n* fix: Respect root gitignore during prune by @anthonyshew in https://github.com/vercel/turborepo/pull/12953\n* fix: Harden OTEL endpoint validation by @anthonyshew in https://github.com/vercel/turborepo/pull/12954\n\n## New Contributors\n* @gioboa made their first contribution in https://github.com/vercel/turborepo/pull/12794\n* @bjormgyg made their first contribution in https://github.com/vercel/turborepo/pull/12829\n* @adityasingh2400 made their first contribution in https://github.com/vercel/turborepo/pull/12932\n* @mvanhorn made their first contribution in https://github.com/vercel/turborepo/pull/12948\n* @christopherkindl made their first contribution in https://github.com/vercel/turborepo/pull/12952\n\n**Full Changelog**: https://github.com/vercel/turborepo/compare/v2.9.14...v2.9.15","publishedAt":"2026-05-26T22:38:08.000Z","url":"https://github.com/vercel/turborepo/releases/tag/v2.9.15","media":[],"prerelease":false,"source":{"slug":"turborepo","name":"Turborepo","type":"github"},"org":{"slug":"vercel","name":"Vercel"},"product":{"slug":"turborepo","name":"Turborepo"},"groupSlug":"turborepo","groupName":"Turborepo","coverageCount":0,"composition":{"bugs":30,"features":0,"enhancements":15}},{"id":"rel_Rzh_lpMGHvawMVoiSTZyK","version":"11.3","type":"feature","title":"pnpm 11.3","summary":"pnpm 11.3 adds support for npm's staged publishing (`pnpm stage`), the new [`trustLockfile`](https://pnpm.io/settings#trustlockfile) setting for skipp...","titleGenerated":null,"titleShort":null,"content":"pnpm 11.3 adds support for npm's staged publishing (`pnpm stage`), the new [`trustLockfile`](https://pnpm.io/settings#trustlockfile) setting for skipping the supply-chain verification pass on already-trusted lockfiles, and native implementations of `pnpm pkg`, `pnpm repo`, and `pnpm set-script`. It also adds a `--skip-manifest-obfuscation` flag for `pack` / `publish` and cuts the memory footprint of `minimumReleaseAge` / `trustPolicy` verification on large workspaces.\n\n## Minor Changes[​](https://pnpm.io/blog/releases/11.3#minor-changes)\n\n### `pnpm stage`[​](https://pnpm.io/blog/releases/11.3#pnpm-stage)\n\nA new [`pnpm stage`](https://pnpm.io/cli/stage) command brings npm's [staged publishing](https://docs.npmjs.com/about-staged-publishing) workflow to pnpm. Staged publishing lets you publish a version that's hidden from `npm install` until you explicitly approve it — useful for verifying release artifacts, smoke-testing CI, or coordinating multi-package releases.\n\nThe available subcommands are:\n\n```\n<span class=\"token-line\" style=\"color:#393A34\"><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> stage publish    </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># publish a version into staging</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> stage list       </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># list staged versions</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> stage view       </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># view a staged version</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> stage approve    </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># promote a staged version to the registry</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> stage reject     </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># discard a staged version</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> stage download   </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># download a staged tarball</span><br></span>\n```\n\n### `trustLockfile`[​](https://pnpm.io/blog/releases/11.3#trustlockfile)\n\nA new [`trustLockfile`](https://pnpm.io/settings#trustlockfile) setting controls whether `pnpm install` re-applies the [`minimumReleaseAge`](https://pnpm.io/settings#minimumreleaseage) / `trustPolicy: 'no-downgrade'` checks to every entry in the loaded lockfile. When `true`, the install treats the lockfile as already-trusted and skips the verification pass — useful for closed-source projects where every commit comes from a trusted author. The default is `false`, so verification stays on by default.\n\nSet it in `pnpm-workspace.yaml`:\n\npnpm-workspace.yaml\n\n```\n<span class=\"token-line\" style=\"color:#393A34\"><span class=\"token key atrule\" style=\"color:#00a4db\">trustLockfile</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token boolean important\" style=\"color:#36acaa\">true</span><br></span>\n```\n\nThis release also cuts the **memory footprint** of the verification pass itself: the per-(registry, name) trust-meta cache previously retained the full packument — dependency graphs, scripts, README, and per-version manifests — for the entire install. On large workspaces (~4k lockfile entries with `minimumReleaseAge` + `trustPolicy: no-downgrade` enabled) this could OOM CI runners with a 2 GB heap cap. The cache now stores only the fields the trust check actually reads (`time`, per-version `_npmUser.trustedPublisher`, `dist.attestations.provenance`); the abbreviated-metadata cache is similarly projected to just the package-level `modified` field and the set of currently-listed version names. Fixes [#11860](https://github.com/pnpm/pnpm/issues/11860).\n\n### Native `pnpm pkg`, `pnpm repo`, and `pnpm set-script`[​](https://pnpm.io/blog/releases/11.3#native-pnpm-pkg-pnpm-repo-and-pnpm-set-script)\n\nThree more commands that previously delegated to (or were missing without) npm are now implemented natively, following the npm command conventions:\n\n- [**`pnpm pkg`**](https://pnpm.io/cli/pkg) — get / set / delete fields in `package.json`.\n- [**`pnpm repo`**](https://pnpm.io/cli/repo) — open the repository URL of a package in the browser.\n- [**`pnpm set-script`**](https://pnpm.io/cli/set-script) (alias `ss`) — add or update an entry in the `scripts` field of the project manifest. Supports `package.json`, `package.json5`, and `package.yaml` formats.\n\n### `--skip-manifest-obfuscation` for `pack` and `publish`[​](https://pnpm.io/blog/releases/11.3#--skip-manifest-obfuscation-for-pack-and-publish)\n\nA new [`--skip-manifest-obfuscation`](https://pnpm.io/cli/publish#--skip-manifest-obfuscation) flag for [`pnpm pack`](https://pnpm.io/cli/pack) and [`pnpm publish`](https://pnpm.io/cli/publish) keeps the original `packageManager` field and publish lifecycle scripts in the packed/published manifest instead of stripping them. The pnpm-specific `pnpm` field continues to be omitted.\n\n## Patch Changes[​](https://pnpm.io/blog/releases/11.3#patch-changes)\n\n- Fixed `pnpm dlx` failing with `ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND` when the installed package's CAS slot is missing its `package.json`. Observed in the wild for `pnpm dlx node@runtime:<version>` when the GVS slot was populated without the synthesized manifest runtime archives need. `dlx` now falls back to the scopeless package name when the slot's manifest is unreadable — for single-bin packages (the dlx common case, including every `runtime:` spec) this matches what `manifest.bin` would have named.\n- Fixed non-determinism in `pnpm dedupe` and `pnpm install` when a dependency graph contains packages with transitive peer dependencies on each other (e.g. `@aws-sdk/client-sts` and `@aws-sdk/client-sso-oidc`) and `auto-install-peers` is enabled. The lockfile no longer flips between two equally-valid forms across consecutive runs. The root cause was that `resolveDependencies` pushed onto its `pkgAddresses` / `postponedResolutionsQueue` arrays from inside `Promise.all`\\-spawned callbacks, so completion-order timing leaked into the array order and downstream cyclic-peer suffix assignment. Fixes [#8155](https://github.com/pnpm/pnpm/issues/8155).\n- Fixed a regression where `pnpm add <github-shorthand>` (and any other wanted-dependency whose alias can't be parsed from the user-supplied spec, e.g. tarball URLs or `pnpm/test-git-fetch#sha`) was silently dropped from the manifest update and from `pendingBuilds`.\n- Fixed `pnpm add --config` leaving orphan entries in `pnpm-lock.env.yaml` (the optional subdependencies of the previously resolved version of the updated config dependency).\n\n\"undefined\"!=typeof \\_bsa&&\\_bsa&&\\_bsa.init(\"custom\",\"CWYI4K7E\",\"placement:pnpmio\",{target:\"#bsa-custom-01\",template:\\` <a href=\"##link##\" class=\"native-banner\" style=\"background: ##backgroundColor##\" rel=\"sponsored noopener\" target=\"\\_blank\" title=\"##company## — ##tagline##\"> <img class=\"native-img\" width=\"125\" src=\"##logo##\" /> <div class=\"native-main\"> <div class=\"native-details\" style=\" color: ##textColor##; border-left: solid 1px ##textColor##; \"> <span class=\"native-desc\">##description##</span> </div> <span class=\"native-cta\" style=\" color: ##ctaTextColor##; background-color: ##ctaBackgroundColor##; \">##callToAction##</span> </div> </a> \\`})","publishedAt":"2026-05-24T00:00:00.000Z","url":"https://pnpm.io/blog/releases/11.3","media":[],"prerelease":false,"source":{"slug":"pnpm","name":"pnpm","type":"feed"},"org":{"slug":"pnpm","name":"pnpm"},"product":null,"groupSlug":"pnpm","groupName":"pnpm","coverageCount":0,"composition":null},{"id":"rel_HQ5mSyNNxv3W1jXtDnYKr","version":"v2.8.0","type":"feature","title":"v2.8.0","summary":"Deno v2.8.0 adds workspace support to deno bump-version and a catalog: protocol for centralized dependency versions, implements module.registerHooks() for CommonJS and ESM, and expands Node.js compatibility with node:wasi, node:module SourceMap API, and Inspector CDP domain support. Also stabilizes text imports, adds deno ci and deno pack commands, and upgrades TypeScript to 6.0.3 and V8 to 14.9.","titleGenerated":"Deno v2.8.0 adds workspace support, module hooks, and Node.js compatibility enhancements","titleShort":"Workspace support; module.registerHooks(); Node.js compat expanded","content":"### 2.8.0 / 2026.05.22\r\n\r\nRead more: http://deno.com/blog/v2.8\r\n\r\n- feat: accept `deno audit fix` as alias for `deno audit --fix` (#34273)\r\n- feat: add --watch flag to deno check (#34224)\r\n- feat: add `deno bump-version` subcommand (#30562)\r\n- feat: add `deno why` subcommand (#32908)\r\n- feat: support workspaces in `deno bump-version` (#33689)\r\n- feat(add/install): default to npm registry for unprefixed packages (#33246)\r\n- feat(compile): add progress bar for deno compile (#33874)\r\n- feat(compile): support module.registerHooks() in compiled binaries (#33853)\r\n- feat(core): add `Deno.core.loadExtScript()` for lazy-loaded scripts (#33739)\r\n- feat(core): add async module resolution support via ModuleResolveResponse\r\n  (#32432)\r\n- feat(core): support lazy_loaded_esm modules via import statements (#33873)\r\n- feat(core): synthetic_esm extension DSL + node:worker_threads canary (#34038)\r\n- feat(ext/fetch): emit Network.* inspector events for fetch() (#34220)\r\n- feat(ext/node): ESM import() support for module.registerHooks() (#33763)\r\n- feat(ext/node): add createHistogram to node:perf_hooks (#34003)\r\n- feat(ext/node): buffer Network.* bodies for inspector body-fetch commands\r\n  (#34201)\r\n- feat(ext/node): convert node:url/util/zlib to synthetic_esm (#34041)\r\n- feat(ext/node): emit Network.* inspector events for node:http (#34231)\r\n- feat(ext/node): expose inspector.isEnabled() via process.binding('inspector')\r\n  (#34203)\r\n- feat(ext/node): implement Network CDP domain for inspector (#32707)\r\n- feat(ext/node): implement NodeRuntime.notifyWhenWaitingForDisconnect (#34204)\r\n- feat(ext/node): implement module.registerHooks() API for CommonJS (#33733)\r\n- feat(ext/node): implement node:module SourceMap API (#32890)\r\n- feat(ext/node): implement node:wasi (#34089)\r\n- feat(ext/node): implement postMessageToThread cross-thread messaging (#34015)\r\n- feat(ext/node): implement vm.SourceTextModule with microtaskMode afterEvaluate\r\n  support (#33603)\r\n- feat(ext/node): make Network.* CDP events fire under plain --inspect (#34270)\r\n- feat(ext/node): restore module.registerHooks (#34081)\r\n- feat(ext/node): support KeyObject structured clone over MessagePort (#34229)\r\n- feat(ext/node): support NODE_EXTRA_CA_CERTS (#33148)\r\n- feat(ext/node): support sending dgram.Socket handles over IPC (#33863)\r\n- feat(ext/telemetry): add gRPC protocol support for OTLP exporter (#30365)\r\n- feat(ext/web): support structured clone for Blob and File (#33827)\r\n- feat(ext/websocket): emit Network.* inspector events for WebSocket (#34222)\r\n- feat(install): add --os and --arch flags for cross-platform npm installs\r\n  (#32785)\r\n- feat(install): added --prod to skip dev deps and @types (#33248)\r\n- feat(install): default to npm for `deno install -g` unprefixed packages\r\n  (#34290)\r\n- feat(npm): add `catalog:` protocol for centralized dependency versions in\r\n  workspaces (#32947)\r\n- feat(npm): add hoisted node_modules linker mode (#32788)\r\n- feat(npmrc): support min-release-age (#33983)\r\n- feat(task): prefix output lines with task name when running in parallel\r\n  (#33805)\r\n- feat(test): add timeout option to Deno.test() (#33815)\r\n- feat(types): add Math.sumPrecise and Intl.Locale.prototype.variants (#34287)\r\n- feat(unstable): Geometry Interfaces Module Level 1 (#27527)\r\n- feat(unstable): support TC39 import defer proposal (#32360)\r\n- feat(x): add --package/-p flag for specifying package separately from binary\r\n  (#32855)\r\n- feat: OffscreenCanvas (#29357)\r\n- feat: add --package-json flag to deno add/install/remove/uninstall (#33199)\r\n- feat: add `deno ci` subcommand (#34235)\r\n- feat: add `deno pack` command to create npm tarballs (#32139)\r\n- feat: add `deno transpile` subcommand (#32691)\r\n- feat: disable \"no-process-global\", \"no-node-globals\" lint rules by default\r\n  (#33247)\r\n- feat: disable ops and resources sanitizers by default in deno test (#33250)\r\n- feat: framework detection for deno compile (#33164)\r\n- feat: implement `deno audit --fix` (#32909)\r\n- feat: include node lib by default and use NodeJS.Timeout for timers (#33823)\r\n- feat: stabilize text imports (#34238)\r\n- feat: support Deno.upgradeWebSocket with node:http upgrade events (#33342)\r\n- feat: update TypeScript to 6.0.3 (#32944)\r\n- feat: use Node.js timers by default and remove global proxy (#33249)\r\n- feat: v8 14.9 (#34226)\r\n- fix(ci): disable test-child-process-send-returns-boolean.js on windows\r\n  (#33883)\r\n- fix(cli): make deno why work with jsr deps (#34227)\r\n- fix(console): don't trigger proxy get trap for nodejs.util.inspect.custom\r\n  (#33730)\r\n- fix(core): disable include_icu_data feature (#34279)\r\n- fix(core): evaluate pre-instantiated module in lazy_load_esm_module (#33973)\r\n- fix(core): prevent TLA hang when has_tick_scheduled is set during async module\r\n  evaluation (#33278)\r\n- fix(core): short-circuit async-resolve when it returns an already-registered\r\n  module (#34058)\r\n- fix(doc): resolve npm entrypoints without types (#34147)\r\n- fix(ext/crypto): add SHA3 support to crypto.subtle.digest (#32342)\r\n- fix(ext/crypto): normalize P-521 SPKI exports (#34087)\r\n- fix(ext/crypto): validate raw key length on X25519/X448/Ed25519 importKey\r\n  (#33944)\r\n- fix(ext/fetch): close response_rid when abort races op_fetch_send completion\r\n  (#33928)\r\n- fix(ext/fs): run open_async on the blocking pool so FIFO opens don't stall the\r\n  runtime (#33667)\r\n- fix(ext/image): handle bitmaps in `createImageBitmap` correctly (#34285)\r\n- fix(ext/napi): run weak-callback finalizers synchronously in second-pass\r\n  (#34023)\r\n- fix(ext/node): DSA keygen with arbitrary modulusLength (#34206)\r\n- fix(ext/node): MessagePort.on('message') should deduplicate listeners (#33991)\r\n- fix(ext/node): Node-compatible TAP reporter for node:test (#34255)\r\n- fix(ext/node): TLSSocket.setServername throws typed errors (#33744)\r\n- fix(ext/node): Worker rejects --heap-prof and --cpu-prof execArgv flags with\r\n  wrong error (#34011)\r\n- fix(ext/node): accept ArrayBufferView in tls.setDefaultCACertificates (#33700)\r\n- fix(ext/node): accept CryptoKey input in createPublicKey/createPrivat…\r\n  (#33750)\r\n- fix(ext/node): add ERR_REQUIRE_ASYNC_MODULE and ERR_REQUIRE_CYCLE_MODULE error\r\n  codes (#33921)\r\n- fix(ext/node): add `limits` property on `node:sqlite` DatabaseSync (#33106)\r\n- fix(ext/node): add active process resources APIs (#34101)\r\n- fix(ext/node): add emitExperimentalWarning/pendingDeprecate to internal/util,\r\n  support modifyPrototype option in util.deprecate (#33660)\r\n- fix(ext/node): add http2.performServerHandshake to polyfill (#33668)\r\n- fix(ext/node): add linkRequests/moduleRequests/instantiate to node:vm (#34131)\r\n- fix(ext/node): add post-resolution deny check in TCPWrap connect (#33880)\r\n- fix(ext/node): add process._debugEnd() / process._debugProcess() (#34194)\r\n- fix(ext/node): add test.expectFailure to node:test (#34130)\r\n- fix(ext/node): add tls.getCaCertificates() (#32032)\r\n- fix(ext/node): add util.setTraceSigInt stub (#34013)\r\n- fix(ext/node): add v8.GCProfiler (#34158)\r\n- fix(ext/node): add v8.queryObjects() and util.queryObjects() (#34159)\r\n- fix(ext/node): add v8.startupSnapshot API polyfill (#34189)\r\n- fix(ext/node): align crypto KeyObject PKCS#8 encryption, JWK input and PSS\r\n  salt with Node (#33757)\r\n- fix(ext/node): align inspector WebSocket URL with Node.js format\r\n  (ws://host:port/UUID) (#33592)\r\n- fix(ext/node): align nextTick ordering in ESM (#34085)\r\n- fix(ext/node): align node stream `destroy` named export (#33573)\r\n- fix(ext/node): align scrypt behavior and performance with Node (#33773)\r\n- fix(ext/node): allow explicit paramEncoding for EC key generation (#33807)\r\n- fix(ext/node): allow tls.Server SecureContext without cert/key for SNICallback\r\n  (#33715)\r\n- fix(ext/node): apply Deno's resolver inside loader-hook defaultResolve\r\n  (#33964)\r\n- fix(ext/node): apply encoding to Dirent name/parentPath in fs.readdir (#33972)\r\n- fix(ext/node): apply http1Options to HTTP/2 secure server fallback (#33678)\r\n- fix(ext/node): attach addAbortListener to EventEmitter, fix errorMonitor\r\n  (#34262)\r\n- fix(ext/node): avoid panic in vm.createContext loop at isolate teardown\r\n  (#34195)\r\n- fix(ext/node): bind setImmediate callback this to the Immediate instance\r\n  (#33716)\r\n- fix(ext/node): bind to IPv6 wildcard for default Server.listen() to enable\r\n  dual-stack (#33617)\r\n- fix(ext/node): cancel pending TLS writes when the socket closes (#33690)\r\n- fix(ext/node): close named-pipe handles after child_process.spawn on Windows\r\n  (#33941)\r\n- fix(ext/node): complete TLS peer cert chains (#34098)\r\n- fix(ext/node): decrypt encrypted private keys in publicEncrypt/privateDecrypt\r\n  and ignore passphrase (#33770)\r\n- fix(ext/node): decrypt legacy Proc-Type/DEK-Info encrypted PEM private keys\r\n  (#33769)\r\n- fix(ext/node): defer http2 stream window replenishment while paused (#33640)\r\n- fix(ext/node): detect non-mtime stat changes in StatWatcher (#33950)\r\n- fix(ext/node): dns resolveAny with real ANY query, retry/maxTimeout support\r\n  (#33577)\r\n- fix(ext/node): don't emit ServerResponse 'finish' after client abort (#34026)\r\n- fix(ext/node): drive TLSWrap cycle on JSStream writes to fix deadlock (#33914)\r\n- fix(ext/node): emit DEP0111/DEP0119 from process.binding under\r\n  --pending-deprecation (#33594)\r\n- fix(ext/node): emit DEP0192 deprecation warning when _tls_common is required\r\n  (#33819)\r\n- fix(ext/node): emit ERR_HTTP2_MAX_PENDING_SETTINGS_ACK via session error\r\n  instead of throwing (#33679)\r\n- fix(ext/node): emit ERR_HTTP2_TOO_MANY_INVALID_FRAMES for empty DATA frames\r\n  without END_STREAM (#33644)\r\n- fix(ext/node): emit Protocol error when http2 client connects to non-h2 server\r\n  (#33740)\r\n- fix(ext/node): emit deprecation warnings for legacy stream/_tls_wrap requires\r\n  and module.parent (#34086)\r\n- fix(ext/node): emit destroy for cleared immediates (#34084)\r\n- fix(ext/node): emit diagnostics_channel events for HTTP server (#33908)\r\n- fix(ext/node): emit drained server close on next tick for Node parity (#33672)\r\n- fix(ext/node): emit http PerformanceObserver entries for HttpClient and\r\n  HttpRequest (#33826)\r\n- fix(ext/node): emit perf_hooks PerformanceEntry for http2 sessions and streams\r\n  (#33618)\r\n- fix(ext/node): enable quic node compat tests by correcting .mjs file\r\n  extensions in config (#33824)\r\n- fix(ext/node): enable test-crypto-keygen-async-explicit-elliptic-curve\r\n  (#33812)\r\n- fix(ext/node): enable test-crypto-rsa-dsa node compat test with DSA encrypted\r\n  keys (#33811)\r\n- fix(ext/node): enable test-crypto-sign-verify node compat test (#33810)\r\n- fix(ext/node): enable test-crypto.js node compat test (#33822)\r\n- fix(ext/node): enable test-http2-server-shutdown-redundant (#33793)\r\n- fix(ext/node): enforce OpenSSL SECLEVEL key-strength check in\r\n  createSecureContext (#33686)\r\n- fix(ext/node): expand diagnostics_channel coverage (#34243)\r\n- fix(ext/node): export UV_EOF and fix Socket._final without connect (#34211)\r\n- fix(ext/node): expose Http2Session and nghttp2ErrorString on http2\r\n  internalBinding (#33732)\r\n- fix(ext/node): expose Http2Session and nghttp2ErrorString on http2\r\n  internalBinding (#33742)\r\n- fix(ext/node): expose Http2Stream and nghttp2ErrorString on http2\r\n  internalBinding (#33729)\r\n- fix(ext/node): expose TLS server name (SNI) on server-side TLSSocket via\r\n  getServername op (#33725)\r\n- fix(ext/node): expose `E` and `SystemError` from `internal/errors` (#34080)\r\n- fix(ext/node): expose http2 internalBinding and add missing HTTP2_HEADER_*\r\n  constants (#33726)\r\n- fix(ext/node): expose http2 session setNextStreamID with capital-ID method\r\n  name (#33666)\r\n- fix(ext/node): expose http2 test bindings and route pushStream through\r\n  pushPromise (#33741)\r\n- fix(ext/node): expose internal webstreams modules (#34107)\r\n- fix(ext/node): expose internal/async_hooks as requireable module (#34116)\r\n- fix(ext/node): expose internal/fs/promises with FileHandle (#34118)\r\n- fix(ext/node): expose internal/js_stream_socket and add default read path\r\n  (#34088)\r\n- fix(ext/node): expose internal/net as requireable module (#34152)\r\n- fix(ext/node): expose internal/options as requireable module (#34117)\r\n- fix(ext/node): expose internal/tty as requireable module (#34105)\r\n- fix(ext/node): expose internal/url so require('internal/url') works (#34012)\r\n- fix(ext/node): expose internal/util/debuglog and add formatTime helper\r\n  (#33665)\r\n- fix(ext/node): fire uncaughtExceptionMonitor with correct origin for sync\r\n  top-level throws (#34048)\r\n- fix(ext/node): fix TLS crash with Happy Eyeballs address fallback (#33641)\r\n- fix(ext/node): fix TLS peer certificate multi-value fields, issuer chain, and\r\n  EC curve names (#33782)\r\n- fix(ext/node): fix child_process.send() backpressure return value (#33869)\r\n- fix(ext/node): fix module resolution for nested package.json files (#33767)\r\n- fix(ext/node): flesh out node:trace_events polyfill (#34216)\r\n- fix(ext/node): forward http2 protocol errors from invalid frame callback to\r\n  session error event (#33630)\r\n- fix(ext/node): handle HTTP/2 flow control (#33795)\r\n- fix(ext/node): handle connectionsCheckingInterval option and send 408 for\r\n  request timeout (#33836)\r\n- fix(ext/node): handle unhandled rejections in node:test without crashing\r\n  runner (#33749)\r\n- fix(ext/node): implement AES Key Wrap and Key Wrap with Padding ciphers\r\n  (#33813)\r\n- fix(ext/node): implement ALPNCallback and SNICallback for TLS server (#33360)\r\n- fix(ext/node): implement ECDH validation and DH verifyError (#33751)\r\n- fix(ext/node): implement Module._stat (#34157)\r\n- fix(ext/node): implement SocketAddress class (#34020)\r\n- fix(ext/node): implement TCP/TLS socket useUserBuffer (#34164)\r\n- fix(ext/node): implement displayErrors for vm scripts (#33942)\r\n- fix(ext/node): implement h2 END_STREAM packing and Http2Session\r\n  PerformanceObserver entries (#33796)\r\n- fix(ext/node): implement missing node:test APIs (#33764)\r\n- fix(ext/node): implement mock.getter, mock.setter, mockImplementation in\r\n  node:test (#33755)\r\n- fix(ext/node): implement noDelay property on net.Server and apply TCP_NODELAY\r\n  to accepted (#33828)\r\n- fix(ext/node): implement node:cluster on unix (#33752)\r\n- fix(ext/node): implement node:wasi preview1 compat (#34245)\r\n- fix(ext/node): implement vm.SyntheticModule constructor (#34014)\r\n- fix(ext/node): import/export PKCS#8 and legacy encrypted PEM private keys\r\n  (#33762)\r\n- fix(ext/node): improve http server parser compat (#34094)\r\n- fix(ext/node): improve https agent compat (#34091)\r\n- fix(ext/node): improve module hooks support (#33877)\r\n- fix(ext/node): improve node:tls test compatibility (#34067)\r\n- fix(ext/node): improve worker_threads MessagePort compatibility (#34250)\r\n- fix(ext/node): isolate TLS client reject session resumption (#34097)\r\n- fix(ext/node): make hideStackFrames actually hide frames, expose\r\n  internal/validators (#33673)\r\n- fix(ext/node): map rustls record-decode errors to OpenSSL-style \"wrong version\r\n  number\" (#33711)\r\n- fix(ext/node): module hook fixes for ESM nextLoad, createRequire URL, and\r\n  builtin redirects (#34219)\r\n- fix(ext/node): node:repl improvements (#33930)\r\n- fix(ext/node): node:test improvements (#33929)\r\n- fix(ext/node): node:test with watch-mode events (#34254)\r\n- fix(ext/node): normalize underscored V8 flags (#34129)\r\n- fix(ext/node): omit glibc version fields on musl/non-Linux (#33987)\r\n- fix(ext/node): pad DH shared secret and fix prime sign byte for stateless\r\n  diffieHellman (#33761)\r\n- fix(ext/node): pass URL to kOnHeadersComplete when request has no headers\r\n  (#33831)\r\n- fix(ext/node): per-request executionAsyncResource() for async_hooks (#34188)\r\n- fix(ext/node): polyfill module.enableCompileCache and companions (#34190)\r\n- fix(ext/node): port internal/priority_queue and expose it via require (#33696)\r\n- fix(ext/node): preserve AsyncLocalStorage context across HTTP/2 client streams\r\n  (#33677)\r\n- fix(ext/node): preserve raw socket connect when wrapping TLS (#34093)\r\n- fix(ext/node): prevent panic when importing node builtins after\r\n  module.register() (#33920)\r\n- fix(ext/node): prevent top-level `await test(...)` deadlock in node:test\r\n  (#33947)\r\n- fix(ext/node): propagate highWaterMark option from http.createServer to req\r\n  and res (#33825)\r\n- fix(ext/node): readFile of large file via fd returns scrambled content\r\n  (#34258)\r\n- fix(ext/node): refresh async id for reused agent sockets (#34138)\r\n- fix(ext/node): register sigwinch listeners for stdout/stderr (#33890)\r\n- fix(ext/node): reject structuredClone for file-backed Blobs (#34075)\r\n- fix(ext/node): report directory imports with node error code (#34076)\r\n- fix(ext/node): restore llhttp parser.data after execute to handle re-entrant\r\n  calls (#33832)\r\n- fix(ext/node): retry named-pipe connect on ERROR_PIPE_BUSY (Windows) (#33974)\r\n- fix(ext/node): route ServerHttp2Stream.respond through binding proto (#33736)\r\n- fix(ext/node): run load hook chain on every require() of a builtin (#34223)\r\n- fix(ext/node): run register() hooks in worker thread, add\r\n  --experimental-loader flag (#33906)\r\n- fix(ext/node): satisfy agent-base node:https stack-trace check (#34264)\r\n- fix(ext/node): send http2 GOAWAY before stream RSTs so peer sees session\r\n  destroy code (#33637)\r\n- fix(ext/node): set OSSL error codes and key-type checks in stateless\r\n  diffieHellman (#33772)\r\n- fix(ext/node): share TLS session cache and ticketer for tls.TLSSocket session\r\n  resumption (#33693)\r\n- fix(ext/node): skip ESM load hook bridge for CJS modules (#33861)\r\n- fix(ext/node): support CA certificate introspection and off-thread loading\r\n  tests (#33708)\r\n- fix(ext/node): support PKCS#8 encrypted private key PEM export via PBES2\r\n  (#33758)\r\n- fix(ext/node): support TLS client resume compat tests (#34095)\r\n- fix(ext/node): support `encoding` option in `fs.watch` (#33634)\r\n- fix(ext/node): support `signal` option in `fs.watch`/`fs.promises.watch`\r\n  (#33650)\r\n- fix(ext/node): support abstract Unix sockets in node:net pipe bind (#33872)\r\n- fix(ext/node): support encrypted PKCS#8 DER private key export and import\r\n  (#33756)\r\n- fix(ext/node): support node:fs APIs on VFS files in deno compile (#33803)\r\n- fix(ext/node): support sending net.Socket and net.Server handles to child\r\n  processes on unix (#33605)\r\n- fix(ext/node): support shouldUpgradeCallback in http server (#34092)\r\n- fix(ext/node): support undici dispatcher for allowHTTP1 websocket upgrades\r\n  (#33731)\r\n- fix(ext/node): surface ERR_REQUIRE_ASYNC_MODULE/CYCLE_MODULE codes and fix TLA\r\n  retry (#34060)\r\n- fix(ext/node): tagged template literal support for SQL (#34018)\r\n- fix(ext/node): throw ERR_CRYPTO_HASH_FINALIZED on subsequent Hash.digest()\r\n  calls (#33774)\r\n- fix(ext/node): throw ERR_INVALID_ARG_VALUE for falsy dns.lookup hostname\r\n  (#34234)\r\n- fix(ext/node): throw ERR_INVALID_ARG_VALUE for odd-length headers array in\r\n  http.ServerResp (#33820)\r\n- fix(ext/node): throw OpenSSL-shaped error from tls.createSecureContext when\r\n  clientCertEngine is set (#33691)\r\n- fix(ext/node): throw correct error for encrypted PEM key in privateDecrypt\r\n  (#33808)\r\n- fix(ext/node): tls server error message, rejection capture, two compat tests\r\n  (#34183)\r\n- fix(ext/node): unblock fs.open on FIFOs and read pipes correctly in http2\r\n  respondWithFile (#33792)\r\n- fix(ext/node): use ASCII byte-truncation in http2 writeAsciiString polyfill\r\n  (#33645)\r\n- fix(ext/node): use core.loadExtScript for deno_web/deno_io polyfill deps\r\n  (#33798)\r\n- fix(ext/node): use primordials in internal_binding/symbols.ts (#33865)\r\n- fix(ext/node): use proper error codes for tls.TLSSocket.setServername()\r\n  (#33745)\r\n- fix(ext/node): use queueMicrotask in fs.close to avoid sanitizer\r\n  false-positive (#33714)\r\n- fix(ext/node): validate data type in Cipheriv/Decipheriv update() (#33649)\r\n- fix(ext/node): validate fs.watch options.ignore (#33574)\r\n- fix(ext/node): wire HTTP/2 PING ack callbacks and emit payload buffer (#33794)\r\n- fix(ext/node): wire http2 maxSettings option to\r\n  nghttp2_option_set_max_settings (#33790)\r\n- fix(ext/node): wire up http2 per-session maxOutstandingPings flag (#33791)\r\n- fix(ext/node): wrap process.chdir errors with path/dest/syscall (#33584)\r\n- fix(ext/process): respect AbortSignal in Deno.Command.output() (#34069)\r\n- fix(ext/process): tolerate unlinked cwd in spawn (#33587)\r\n- fix(ext/tls): upgrade rustls to fix SSL cert validation regression (#33912)\r\n- fix(ext/url): URLSearchParams Node-compat error messages on invalid this and\r\n  missing args (#34017)\r\n- fix(ext/url): align URLSearchParams with Node for node:url compat (#34119)\r\n- fix(ext/web): convert MessageEvent ports via WebIDL sequence iteration\r\n  (#33652)\r\n- fix(ext/web): respect cancelable and passive flags in Event.returnValue setter\r\n  (#33651)\r\n- fix(ext/websocket): don't panic on H2 stream reset in poll_write (#33982)\r\n- fix(fmt): panic on tagged HTML template with multi-level indent (#34263)\r\n- fix(init): replace add(2,3) template with Deno.serve HTTP server (#33042)\r\n- fix(install): don't treat JS scripts with non-Node shebang as native binaries\r\n  (#33971)\r\n- fix(install): regenerate lockfile with --force on global install (#33970)\r\n- fix(lsp): don't panic on unresolved dts import hover (#34112)\r\n- fix(node): fix registerHooks for custom file type loaders (#33899)\r\n- fix(node): weakly track util.aborted resources (#34142)\r\n- fix(node/fs): readSync with position argument returns EINVAL (#34021)\r\n- fix(node/sqlite): implement DatabaseSync.serialize() and deserialize()\r\n  (#34010)\r\n- fix(node/tls): handle detached ArrayBuffer in TLSWrap write methods (#33737)\r\n- fix(node:http2): preserve timeout inspect links on proxied session sockets\r\n  (#33721)\r\n- fix(npm): resolve catalog: overrides from workspaces object form (#33816)\r\n- fix(npm): support `catalog:` protocol in overrides (#33799)\r\n- fix(publish): don't panic on provenance generation in non-GitHub CI (#33802)\r\n- fix(repl): drain microtasks after inspector polling to avoid 'Promise was\r\n  collected' (#33735)\r\n- fix(resolver): handle tag version req in byonm resolver (#33962)\r\n- fix(task): escape backticks in forwarded args (#34151)\r\n- fix(task): support recursive task completions in workspaces (#32422)\r\n- fix(test): include --watch=<paths> in watched paths (fixes #21704) (#32621)\r\n- fix(update): `deno update --lockfile-only` should not update config (#33746)\r\n- fix(watch): apply `--watch-exclude` filter to file change events (#33854)\r\n- fix(workspace): clamp CLI include paths to member folder (#33949)\r\n- fix: bump deno_graph to 0.108.2 for wasm multi-value return types (#34070)\r\n- fix: disable V8 external memory check to prevent panic on large TypedArrays\r\n  (#33896)\r\n- fix: fix CJS re-export analysis for npm packages (#33263)\r\n- fix: handle native binary bin entries in global npm install (#33935)\r\n- fix: include node lib by default and use NodeJS.Timeout for timers (#33823)\r\n- fix: report eval scripts as `[eval]` URL for inspector (#34192)\r\n- perf(core): SIMD ASCII fast path for op_decode (#33720)\r\n- perf(core): cap V8 platform thread pool to 4 threads (#33697)\r\n- perf(ext): convert ext/cache, ext/canvas, ext/crypto JS sources to lazy-loaded\r\n  scripts (#33778)\r\n- perf(ext): convert ext/fetch JS sources to lazy-loaded scripts (#33784)\r\n- perf(ext): convert ext/ffi JS source to lazy-loaded script (#33780)\r\n- perf(ext): convert ext/io, ext/os, ext/net JS sources to lazy-loaded scripts\r\n  (#33779)\r\n- perf(ext): convert ext/kv and ext/webgpu JS sources to lazy-loaded scripts\r\n  (#33818)\r\n- perf(ext): convert ext/process and ext/http JS sources to lazy-loaded scripts\r\n  (#33817)\r\n- perf(ext): convert ext/telemetry and ext/cron JS sources to lazy-loaded\r\n  scripts (#33801)\r\n- perf(ext/fetch): fast-path string in BodyInit_DOMString converter (#33676)\r\n- perf(ext/fetch): skip dict-converter walk on default init in\r\n  Request/fetch/Response.json (#33999)\r\n- perf(ext/fs): convert ext/fs JS source to lazy-loaded script (#33800)\r\n- perf(ext/geometry): avoid heap allocation for the argument that requires a\r\n  fixed length of sequence (#33688)\r\n- perf(ext/net): reduce Quinn TLS provider size (#34294)\r\n- perf(ext/node): convert 62 more polyfill files to lazy-loaded scripts (#33835)\r\n- perf(ext/node): convert _stream_* polyfills to lazy-loaded JS (#33988)\r\n- perf(ext/node): convert child_process, cluster, console to lazy-loaded JS\r\n  (#33925)\r\n- perf(ext/node): convert child_process, fs, http, http2, https, inspector to\r\n  lazy-loaded JS (#33967)\r\n- perf(ext/node): convert cluster, console, constants, crypto, dgram, dns to\r\n  lazy-loaded JS (#33951)\r\n- perf(ext/node): convert errors.ts, util.mjs, and foundation layer to\r\n  lazy-loaded scripts (#33830)\r\n- perf(ext/node): convert fs helpers, streams, dgram, dns/utils to lazy-loaded\r\n  ESM (#33936)\r\n- perf(ext/node): convert fs internals, timers, tty, url, webstreams to\r\n  lazy-loaded ESM (#33939)\r\n- perf(ext/node): convert http2, readline, stream_base_commons to lazy-loaded JS\r\n  (#33932)\r\n- perf(ext/node): convert internal/crypto to lazy-loaded JS (#33919)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33871)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33882)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33897)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33900)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33902)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33909)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33913)\r\n- perf(ext/node): convert net, _tls_common, _tls_wrap to lazy-loaded JS (#33997)\r\n- perf(ext/node): convert node:events and stream internals to lazy-loaded JS\r\n  (#33881)\r\n- perf(ext/node): convert node:path to lazy-loaded JS (#33917)\r\n- perf(ext/node): convert node:util, node:assert to lazy-loaded (#33876)\r\n- perf(ext/node): convert timers, tls, tty, url, v8, worker_threads, zlib to\r\n  lazy-loaded JS (#33960)\r\n- perf(ext/node): convert validators.mjs and dependencies to lazy-loaded scripts\r\n  (#33821)\r\n- perf(ext/node): optimize direct ServerResponse string end (#34253)\r\n- perf(ext/node): replace node: imports with core.loadExtScript for buffer and\r\n  nextTick (#33862)\r\n- perf(ext/node): true writev on tcp sockets for node:http (#33659)\r\n- perf(ext/web): add hyper-fast path for TextDecoder.decode (#33674)\r\n- perf(ext/web): convert all ext/web JS sources to lazy-loaded scripts (#33760)\r\n- perf(ext/web): fast path for TextEncoder.encodeInto (#33675)\r\n- perf(ext/web): lazy-init EventTarget listeners table (#33734)\r\n- perf(ext/web): linear-time set/delete on FormData, URLSearchParams, Headers\r\n  (#33961)\r\n- perf(ext/web): optimize TextEncoder encodeInto result (#34055)\r\n- perf(ext/web): structuredClone primitive fast path (#33728)\r\n- perf(ext/webidl): fast path for createDictionaryConverter undefined input\r\n  (#33692)\r\n- perf(ext/webidl): hoist EMPTY_OPTS for converter opts default (#34007)\r\n- perf(ext/websocket): lazy-load WebSocket and WebSocketStream JS (#33701)\r\n- perf(http): avoid ReadableStream when full body already buffered (#33844)\r\n- perf(http): directly dispatch into js request handler (#33845)\r\n- perf(http): don't add Vary header if response is not compressed (#33892)\r\n- perf(http): split clear-text HTTP autodetect connection task (#33887)\r\n- perf(libs/core): drop libuv-style partial-read break to fix node:http p99\r\n  (#33860)\r\n- perf(runtime): convert 8 runtime JS files to lazy-loaded scripts (#33864)\r\n- perf(snapshot): dedupe JS sources between binary and v8 snapshot (#33992)\r\n- perf: consolidate HTTP Brotli compressor setup (#34282)\r\n- perf: lazy-load more modules in the snapshot (#34061)\r\n- perf: monch 0.6 (#33643)\r\n- perf: use panic=abort in release builds (#34280)","publishedAt":"2026-05-22T10:51:19.000Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.0","media":[],"prerelease":false,"source":{"slug":"deno","name":"Deno","type":"github"},"org":{"slug":"deno","name":"Deno"},"product":null,"groupSlug":"deno","groupName":"Deno","coverageCount":0,"composition":{"bugs":50,"features":45,"enhancements":5}},{"id":"rel_0km14ANxplkBccOm53Rqz","version":"2.8","type":"feature","title":"Deno 2.8","summary":"Deno 2.8 introduces import defer syntax, six new subcommands (transpile, pack, bump-version, ci, why, audit fix), network debugging in Chrome DevTools, and framework-aware deno compile. Cold npm installs are now 3.66x faster.","titleGenerated":"Deno 2.8 adds import defer, six new CLI subcommands, and 3.66x faster npm installs","titleShort":"Import defer ships; npm installs 3.66x faster; six new CLI subcommands","content":"\\`import defer\\`, six new subcommands (\\`deno transpile\\`, \\`deno pack\\`, \\`deno bump-version\\`, \\`deno ci\\`, \\`deno why\\`, \\`deno audit fix\\`), network debugging in Chrome DevTools, framework-aware \\`deno compile\\`, and 3.66x faster cold npm installs.","publishedAt":"2026-05-22T09:00:00.000Z","url":"https://deno.com/blog/v2.8","media":[],"prerelease":false,"source":{"slug":"deno-changelog","name":"Deno Changelog","type":"feed"},"org":{"slug":"deno","name":"Deno"},"product":null,"groupSlug":"deno-changelog","groupName":"Deno Changelog","coverageCount":0,"composition":{"bugs":0,"features":9,"enhancements":1}},{"id":"rel_pBNdFysIt9BdGiwYMRehh","version":null,"type":"feature","title":"Claw Patrol: an open-source security firewall for agents","summary":"Deno has released Claw Patrol, an open-source security firewall designed for agents that extends beyond HTTP protocol protection.","titleGenerated":"Deno announces Claw Patrol, open-source security firewall for agents","titleShort":"Claw Patrol: open-source agent security firewall","content":"Why we needed an agent firewall that speaks more than HTTP.","publishedAt":"2026-05-21T15:00:00.000Z","url":"https://deno.com/blog/clawpatrol","media":[],"prerelease":false,"source":{"slug":"deno-changelog","name":"Deno Changelog","type":"feed"},"org":{"slug":"deno","name":"Deno"},"product":null,"groupSlug":"deno-changelog","groupName":"Deno Changelog","coverageCount":0,"composition":{"bugs":0,"features":1,"enhancements":0}},{"id":"rel_5vjtRJnzyUWJOYi30dzKC","version":"v4.1.7","type":"feature","title":"v4.1.7","summary":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\n\n- **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport) &nbsp;-&nbsp; by @hi-...","titleGenerated":null,"titleShort":null,"content":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\n\n- **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport) &nbsp;-&nbsp; by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10384 [<samp>(4f0f2)</samp>](https://github.com/vitest-dev/vitest/commit/4f0f2a1ee)\n\n##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)","publishedAt":"2026-05-20T07:20:12.000Z","url":"https://github.com/vitest-dev/vitest/releases/tag/v4.1.7","media":[],"prerelease":false,"source":{"slug":"vitest","name":"vitest","type":"github"},"org":{"slug":"vitest","name":"Vitest"},"product":null,"groupSlug":"vitest","groupName":"vitest","coverageCount":0,"composition":null},{"id":"rel_E_0RR_Vt1gbZJ3mELySnG","version":"11.2","type":"feature","title":"pnpm 11.2","summary":"pnpm 11.2 ships an experimental opt-in into [pacquet](https://npmx.dev/package/@pnpm/pacquet) (the Rust port of pnpm) as the install backend, expands ...","titleGenerated":null,"titleShort":null,"content":"pnpm 11.2 ships an experimental opt-in into [pacquet](https://npmx.dev/package/@pnpm/pacquet) (the Rust port of pnpm) as the install backend, expands [config dependencies](https://pnpm.io/config-dependencies) to install one level of `optionalDependencies` (so the esbuild/swc platform-binary pattern works for config deps too), wires up the long-documented `pnpm login --scope` flag, and surfaces runtime entries (Node.js, Deno, Bun) in `pnpm outdated` and `pnpm update --interactive`.\n\n## Minor Changes[​](https://pnpm.io/blog/releases/11.2#minor-changes)\n\n### Experimental: pacquet as the install backend[​](https://pnpm.io/blog/releases/11.2#experimental-pacquet-as-the-install-backend)\n\nAdding [`@pnpm/pacquet`](https://npmx.dev/package/@pnpm/pacquet) (the Rust port of pnpm) to `configDependencies` in `pnpm-workspace.yaml` now delegates the materialization phase of `pnpm install` to the pacquet binary. pnpm still owns dependency resolution; pacquet only fetches and imports from the freshly-written lockfile. This is an opt-in preview of the Rust install engine — see [#11723](https://github.com/pnpm/pnpm/issues/11723).\n\nTo configure pacquet in a project, run:\n\n```\n<span class=\"token-line\" style=\"color:#393A34\"><span class=\"token function\" style=\"color:#d73a49\">pnpm</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">add</span><span class=\"token plain\"> @pnpm/pacquet </span><span class=\"token parameter variable\" style=\"color:#36acaa\">--config</span><br></span>\n```\n\nYou'll see changes in `pnpm-workspace.yaml` and `pnpm-lock.yaml` that should be committed. If you experience any issues with pacquet, please let us know in the GitHub issue you create.\n\n### `optionalDependencies` for config dependencies[​](https://pnpm.io/blog/releases/11.2#optionaldependencies-for-config-dependencies)\n\n[Config dependencies](https://pnpm.io/config-dependencies) now resolve and install one level of `optionalDependencies` declared by the config dependency, with `os` / `cpu` / `libc` platform filtering applied at install time. This unlocks the esbuild/swc-style pattern where a package ships platform-specific binaries via `optionalDependencies` — a config dependency can now do the same and have the matching binary symlinked next to it in the global virtual store, so `require('pkg-platform-arch')` from inside the config dependency resolves correctly.\n\nThe env lockfile records all platform variants regardless of host platform, so it remains portable across machines. Each entry in a config dependency's `optionalDependencies` must declare an exact version — ranges and tags are rejected to keep installs reproducible.\n\n### `pnpm login --scope`[​](https://pnpm.io/blog/releases/11.2#pnpm-login---scope)\n\nThe long-documented `pnpm login --scope <scope>` flag is now implemented. The scope is normalized (a leading `@` is added if missing; blank values are ignored) and an `@<scope>:registry=<registry>` mapping is written to the pnpm auth file alongside the auth token. Subsequent installs of `@<scope>/*` packages then route to the chosen registry. Previously the documented flag errored with `Unknown option: 'scope'`. See [#11716](https://github.com/pnpm/pnpm/issues/11716).\n\n### Runtimes in `outdated` and `update --interactive`[​](https://pnpm.io/blog/releases/11.2#runtimes-in-outdated-and-update---interactive)\n\n[`pnpm outdated`](https://pnpm.io/cli/outdated) and [`pnpm update --interactive`](https://pnpm.io/cli/update) now report Node.js, Deno, and Bun runtimes installed as project dependencies (`runtime:` specifiers). Previously these were silently skipped.\n\n## Patch Changes[​](https://pnpm.io/blog/releases/11.2#patch-changes)\n\n- Fixed `cafile=<relative-path>` in `.npmrc` being read from the wrong directory when pnpm is invoked from a different cwd (e.g. `pnpm --dir <project> install` from a CI wrapper or monorepo script). The path is now resolved against the directory of the `.npmrc` that declared it, not `process.cwd()`. Before this fix, the install proceeded without the configured CA and the user only saw TLS errors against a private registry with no log line tying back to the wrongly resolved path [#11624](https://github.com/pnpm/pnpm/issues/11624).\n- Fixed `config.registry` getting a trailing slash appended when `registry` is set in `.npmrc` and no `registries.default` is provided by `pnpm-workspace.yaml`.\n- Fixed global add/update to handle `minimumReleaseAge` policy violations instead of surfacing an internal resolver guardrail error.\n- Fixed two crashes with `injectWorkspacePackages: true` when the lockfile has been pruned (e.g. by `turbo prune --docker`): a `Cannot use 'in' operator to search for 'directory' in undefined` from peer-dependency-variant injected snapshots whose base `packages:` entry had been dropped, and an `ERR_PNPM_ENOENT` on `node_modules/.bin/<tool>` after `prepare` / `postinstall` re-imported each injected workspace package.\n- Fixed `pnpm login` and `pnpm logout` ignoring `registries.default` from `pnpm-workspace.yaml` [#10099](https://github.com/pnpm/pnpm/issues/10099).\n- Fixed the `minimumReleaseAge` (publishedBy) maturity shortcut to be inclusive at the cutoff. Previously, abbreviated metadata whose `modified` field equalled the cutoff fell off the fast path and triggered a full-metadata re-fetch (or a `MISSING_TIME` error when full metadata wasn't permitted).\n- Honor `publishConfig.access` when publishing packages.\n\n## 11.2.1[​](https://pnpm.io/blog/releases/11.2#1121)\n\n- Mark optional subdependency snapshots of config dependencies with `optional: true` in the env lockfile, matching how optional dependencies are recorded elsewhere in `pnpm-lock.yaml`. Previously, snapshots for the platform-specific subdeps pulled in via a config dep's `optionalDependencies` were written as empty objects.\n- Fixed `pickRegistryForPackage` returning the wrong registry for an unscoped `npm:` alias under a scoped local name. A manifest entry like `\"@private/foo\": \"npm:lodash@^1\"` was routing the `lodash` fetch through `registries[\"@private\"]`, even though `lodash` is unscoped.\n- Don't print `Installing config dependencies...` when config dependencies are already installed and nothing needs to be fetched, re-linked, or removed.\n\n## 11.2.2[​](https://pnpm.io/blog/releases/11.2#1122)\n\n- When the install engine is delegated to pacquet via `configDependencies`, the user's CLI flags passed to `pnpm install` (e.g. `--no-runtime`, `--prod`, `--dev`, `--no-optional`, `--node-linker`, `--cpu` / `--os` / `--libc`, `--offline`, `--prefer-offline`) are now forwarded to pacquet's `install` subcommand verbatim. Previously pacquet was invoked with a fixed argument list, so flags like `--no-runtime` were silently dropped. Flag forwarding is gated on the command being `install` / `i`; `add`, `update`, and `dedupe` still don't forward (their flag surface doesn't line up with pacquet's `install`).\n- Fixed `pnpm up` (and `pnpm add` / `pnpm remove`) failing with `pacquet_package_manager::outdated_lockfile` when pacquet is declared in `configDependencies`. pnpm now passes `--ignore-manifest-check` to pacquet so its `--frozen-lockfile` check doesn't fire against the (pre-mutation) `package.json` pnpm hasn't written yet [#11797](https://github.com/pnpm/pnpm/issues/11797).\n\n\"undefined\"!=typeof \\_bsa&&\\_bsa&&\\_bsa.init(\"custom\",\"CWYI4K7E\",\"placement:pnpmio\",{target:\"#bsa-custom-01\",template:\\` <a href=\"##link##\" class=\"native-banner\" style=\"background: ##backgroundColor##\" rel=\"sponsored noopener\" target=\"\\_blank\" title=\"##company## — ##tagline##\"> <img class=\"native-img\" width=\"125\" src=\"##logo##\" /> <div class=\"native-main\"> <div class=\"native-details\" style=\" color: ##textColor##; border-left: solid 1px ##textColor##; \"> <span class=\"native-desc\">##description##</span> </div> <span class=\"native-cta\" style=\" color: ##ctaTextColor##; background-color: ##ctaBackgroundColor##; \">##callToAction##</span> </div> </a> \\`})","publishedAt":"2026-05-20T00:00:00.000Z","url":"https://pnpm.io/blog/releases/11.2","media":[],"prerelease":false,"source":{"slug":"pnpm","name":"pnpm","type":"feed"},"org":{"slug":"pnpm","name":"pnpm"},"product":null,"groupSlug":"pnpm","groupName":"pnpm","coverageCount":0,"composition":null},{"id":"rel_bbKVZk2yEMAAwFg1Lbbky","version":"v2.9.14","type":"feature","title":"Turborepo v2.9.14","summary":"Fixed a high-severity command injection vulnerability in the Turborepo VSCode Extension and a login callback CSRF/session fixation vulnerability. Also patched unexpected local code execution during Yarn Berry detection.","titleGenerated":"Turborepo v2.9.14 fixes VSCode extension command injection and login CSRF vulnerabilities","titleShort":"VSCode extension command injection fixed; login CSRF patched","content":"> [!NOTE]\r\n> This release contains important security fixes.\r\n\r\n### High:\r\n-  [GHSA-5xc8-49mv-x4mm: Turborepo VSCode Extension command injection](https://github.com/vercel/turborepo/security/advisories/GHSA-5xc8-49mv-x4mm)\r\n\r\n### Low:\r\n- [GHSA-hcf7-66rw-9f5r: Login callback CSRF/session fixation](https://github.com/vercel/turborepo/security/advisories/GHSA-hcf7-66rw-9f5r)\r\n- [GHSA-3qcw-2rhx-2726: Unexpected local code execution during Yarn Berry detection](https://github.com/vercel/turborepo/security/advisories/GHSA-3qcw-2rhx-2726)\r\n\r\n<!-- Release notes generated using configuration in .github/release.yml at v2.9.14 -->\r\n\r\n## What's Changed\r\n### Changelog\r\n* release(turborepo): 2.9.12 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12774\r\n* fix: Restore docs mobile menu by @anthonyshew in https://github.com/vercel/turborepo/pull/12782\r\n* ci: Use `pull_request` for PR title linting by @anthonyshew in https://github.com/vercel/turborepo/pull/12787\r\n* ci: Scope GitHub Actions caches by branch by @anthonyshew in https://github.com/vercel/turborepo/pull/12788\r\n* test: Validate lockfiles without dependency downloads by @anthonyshew in https://github.com/vercel/turborepo/pull/12789\r\n* Removed unneeded import form hash creation script in docs by @dancrumb in https://github.com/vercel/turborepo/pull/12799\r\n* fix: Validate auth callback state by @anthonyshew in https://github.com/vercel/turborepo/pull/12802\r\n* fix: Harden VS Code extension command execution by @anthonyshew in https://github.com/vercel/turborepo/pull/12800\r\n* fix: Avoid project-local Yarn during detection by @anthonyshew in https://github.com/vercel/turborepo/pull/12801\r\n* chore: Release 2.9.13 by @anthonyshew in https://github.com/vercel/turborepo/pull/12803\r\n\r\n## New Contributors\r\n* @dancrumb made their first contribution in https://github.com/vercel/turborepo/pull/12799\r\n\r\n**Full Changelog**: https://github.com/vercel/turborepo/compare/v2.9.12...v2.9.14","publishedAt":"2026-05-14T20:14:14.000Z","url":"https://github.com/vercel/turborepo/releases/tag/v2.9.14","media":[],"prerelease":false,"source":{"slug":"turborepo","name":"Turborepo","type":"github"},"org":{"slug":"vercel","name":"Vercel"},"product":{"slug":"turborepo","name":"Turborepo"},"groupSlug":"turborepo","groupName":"Turborepo","coverageCount":0,"composition":null},{"id":"rel_lFtvJ0e6KfcYDwtxYllgO","version":"bun-v1.3.14","type":"feature","title":"Bun v1.3.14","summary":"To install Bun v1.3.14\r\n```bash\r\ncurl -fsSL https://bun.sh/install | bash\r\n# or you can use npm\r\n# npm install -g bun\r\n```\r\n\r\nWindows:\r\n```bash\r\npower...","titleGenerated":null,"titleShort":null,"content":"To install Bun v1.3.14\r\n```bash\r\ncurl -fsSL https://bun.sh/install | bash\r\n# or you can use npm\r\n# npm install -g bun\r\n```\r\n\r\nWindows:\r\n```bash\r\npowershell -c \"irm bun.sh/install.ps1|iex\"\r\n```\r\n\r\nTo upgrade to Bun v1.3.14:\r\n```bash\r\nbun upgrade\r\n```\r\n\r\n## [Read Bun v1.3.14's release notes on Bun's blog](https://bun.com/blog/bun-v1.3.14)\r\n\r\n### Thanks to 11 contributors!\r\n\r\n- [@190n](https://github.com/190n)\r\n- [@alii](https://github.com/alii)\r\n- [@carlsmedstad](https://github.com/carlsmedstad)\r\n- [@cirospaciari](https://github.com/cirospaciari)\r\n- [@coleleavitt](https://github.com/coleleavitt)\r\n- [@djs5008](https://github.com/djs5008)\r\n- [@dylan-conway](https://github.com/dylan-conway)\r\n- [@ig-ant](https://github.com/ig-ant)\r\n- [@Jarred-Sumner](https://github.com/Jarred-Sumner)\r\n- [@robobun](https://github.com/robobun)\r\n- [@sosukesuzuki](https://github.com/sosukesuzuki)\r\n\r\n\r\n\r\n","publishedAt":"2026-05-13T03:48:28.000Z","url":"https://github.com/oven-sh/bun/releases/tag/bun-v1.3.14","media":[],"prerelease":false,"source":{"slug":"bun","name":"Bun","type":"github"},"org":{"slug":"bun","name":"Bun"},"product":null,"groupSlug":"bun","groupName":"Bun","coverageCount":0,"composition":null},{"id":"rel_aMQ5ijBj2ILdB1lfSnYed","version":"v4.1.6","type":"feature","title":"v4.1.6","summary":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\r\n\r\n- **browser**: Provide project reference in `ToMatchScreenshotResolvePath` &nbsp;-&nbsp; by @macarie and @sherem...","titleGenerated":null,"titleShort":null,"content":"### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes\r\n\r\n- **browser**: Provide project reference in `ToMatchScreenshotResolvePath` &nbsp;-&nbsp; by @macarie and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10138 [<samp>(31882)</samp>](https://github.com/vitest-dev/vitest/commit/31882607c)\r\n- Global `sequence.concurrent: true` with top-level `test(..., { concurrent: false })` + depreacte `sequential` test API and options &nbsp;-&nbsp; by @hi-ogawa, **Codex** and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10196 [<samp>(2847d)</samp>](https://github.com/vitest-dev/vitest/commit/2847dfa2a)\r\n- **browser**: Simplify orchestrator otel carrier &nbsp;-&nbsp; by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10285 [<samp>(18af9)</samp>](https://github.com/vitest-dev/vitest/commit/18af98cee)\r\n\r\n### &nbsp;&nbsp;&nbsp;🏎 Performance\r\n\r\n- Stringify diff objects only once &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10276 [<samp>(9f7b1)</samp>](https://github.com/vitest-dev/vitest/commit/9f7b1528c)\r\n\r\n##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)","publishedAt":"2026-05-11T14:38:28.000Z","url":"https://github.com/vitest-dev/vitest/releases/tag/v4.1.6","media":[],"prerelease":false,"source":{"slug":"vitest","name":"vitest","type":"github"},"org":{"slug":"vitest","name":"Vitest"},"product":null,"groupSlug":"vitest","groupName":"vitest","coverageCount":0,"composition":null},{"id":"rel_KJ_Ymrcqf-nAflCEsKku7","version":"11.1","type":"feature","title":"pnpm 11.1","summary":"pnpm 11.1 adds a few new commands — [`pnpm audit signatures`](https://pnpm.io/cli/audit#signatures), [`pnpm bugs`](https://pnpm.io/cli/bugs), and [`pn...","titleGenerated":null,"titleShort":null,"content":"pnpm 11.1 adds a few new commands — [`pnpm audit signatures`](https://pnpm.io/cli/audit#signatures), [`pnpm bugs`](https://pnpm.io/cli/bugs), and [`pnpm owner`](https://pnpm.io/cli/owner) — alongside support for installing from arbitrary named registries (including a built-in alias for the GitHub Packages npm registry), the ability to skip runtime installation in CI, and several fixes.\n\n## Minor Changes[​](https://pnpm.io/blog/releases/11.1#minor-changes)\n\n### `pnpm audit signatures`[​](https://pnpm.io/blog/releases/11.1#pnpm-audit-signatures)\n\nA new [`pnpm audit signatures`](https://pnpm.io/cli/audit#signatures) subcommand verifies ECDSA registry signatures for installed packages against keys published at `/-/npm/v1/keys` [#7909](https://github.com/pnpm/pnpm/issues/7909). Scoped registries are respected; registries that don't publish signing keys are skipped.\n\n```\npnpm audit signatures\n\n```\n\n### Named registries (and a built-in `gh:` alias)[​](https://pnpm.io/blog/releases/11.1#named-registries-and-a-built-in-gh-alias)\n\nYou can now install packages from the [GitHub Packages npm registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry) via a built-in `gh:` prefix, and — more broadly — from arbitrary named registries in the style of [vlt's named-registry aliases](https://docs.vlt.sh/cli/registries):\n\n```\npnpm add gh:@acme/private\n\n```\n\nAuthentication is picked up from existing per-URL `.npmrc` entries (e.g. `//npm.pkg.github.com/:_authToken=...`), so no separate auth mechanism is required.\n\nAdditional aliases — or an override for the built-in `gh` alias, for GitHub Enterprise Server — can be configured under `namedRegistries` in `pnpm-workspace.yaml`:\n\npnpm-workspace.yaml\n\n```\nnamedRegistries:\n  gh: https://npm.pkg.github.example.com/\n  work: https://npm.work.example.com/\n\n```\n\nWith this, `work:@corp/lib@^2.0.0` resolves against `https://npm.work.example.com/`. See [#8941](https://github.com/pnpm/pnpm/issues/8941).\n\n### `--sbom-spec-version`[​](https://pnpm.io/blog/releases/11.1#--sbom-spec-version)\n\n[`pnpm sbom`](https://pnpm.io/cli/sbom) now accepts a `--sbom-spec-version` flag to choose the CycloneDX specification version (`1.5`, `1.6`, or `1.7` — default `1.7`). The flag is only valid with `--sbom-format cyclonedx`. See [#11389](https://github.com/pnpm/pnpm/pull/11389).\n\n### `--no-runtime` for CI matrices[​](https://pnpm.io/blog/releases/11.1#--no-runtime-for-ci-matrices)\n\nA new `--no-runtime` flag (config: `runtime=false`) skips installing runtime entries (e.g. Node.js downloaded via `devEngines.runtime`) without modifying the lockfile. The lockfile keeps the runtime entry so frozen-lockfile validation still passes; only the runtime fetch and `.bin` linking are skipped. This is useful in CI matrices where the runtime is provisioned externally (e.g. via `pnpm runtime -g set node `) before `pnpm install` runs.\n\n### `pnpm bugs`[​](https://pnpm.io/blog/releases/11.1#pnpm-bugs)\n\nThe new [`pnpm bugs`](https://pnpm.io/cli/bugs) command opens a package's bug tracker URL in the browser. With no arguments, it reads the current project's `package.json`; with one or more package names, it fetches each package's metadata from the registry and opens its bug tracker. It falls back to `/issues` when the `bugs` field is missing. See [#11279](https://github.com/pnpm/pnpm/pull/11279).\n\n### `pnpm owner`[​](https://pnpm.io/blog/releases/11.1#pnpm-owner)\n\nThe new [`pnpm owner`](https://pnpm.io/cli/owner) command manages package owners on the registry:\n\n```\npnpm owner ls package>\npnpm owner add package> user>\npnpm owner rm package> user>\n\n```\n\n## Patch Changes[​](https://pnpm.io/blog/releases/11.1#patch-changes)\n\n- \n\n`pnpm view` now prints \"published X ago by Y\" alongside the rest of its output, mirroring `npm view`. This is useful when comparing against `minimumReleaseAge`. For example, `pnpm view pnpm` now shows `published 17 hours ago by GitHub Actions`.\n\n- \n\n`pnpm publish` now honors the configured HTTP/HTTPS proxy (including the `https_proxy` / `http_proxy` / `no_proxy` environment variables) when polling the registry's `doneUrl` during the web-based authentication flow. Previously the poll bypassed the proxy, causing the registry to respond `403` from a different source IP and the login to never complete [#11561](https://github.com/pnpm/pnpm/issues/11561).\n\n- \n\n`pnpm add -g` now installs each space-separated package into its own isolated directory by default. To bundle multiple packages into the same isolated install (so they share dependencies and are removed together), pass them as a comma-separated list. For example:\n\n`pnpm add -g foo bar` installs `foo` and `bar` as two independent globals — removing one does not affect the other.\n\n- `pnpm add -g foo,bar qar` bundles `foo` and `bar` into a single isolated install while `qar` is installed on its own.\n\nRelated: [#11587](https://github.com/pnpm/pnpm/issues/11587).\n\n- \n\n`pnpm runtime set  ` no longer fails in the root of a multi-package workspace with the `ADDING_TO_ROOT` error. Installing the workspace root is a valid target for a runtime, so the command now bypasses that safety check.\n\n- \n\nFixed `pnpm --version` hanging for the lifetime of the worker pool after the version was printed. The CLI entry now runs `finishWorkers()` from its own `finally`, so every exit path tears the pool down.\n\n\"undefined\"!=typeof _bsa&&_bsa&&_bsa.init(\"custom\",\"CWYI4K7E\",\"placement:pnpmio\",{target:\"#bsa-custom-01\",template:`\n\n![](##logo##)\n\n  \n\n    ##description##\n  \n\n  ##callToAction##\n\n`})","publishedAt":"2026-05-11T00:00:00.000Z","url":"https://pnpm.io/blog/releases/11.1","media":[],"prerelease":false,"source":{"slug":"pnpm","name":"pnpm","type":"feed"},"org":{"slug":"pnpm","name":"pnpm"},"product":null,"groupSlug":"pnpm","groupName":"pnpm","coverageCount":0,"composition":null},{"id":"rel_vtWsqhMELmx_dTXLwxgWw","version":"v2.9.12","type":"feature","title":"Turborepo v2.9.12","summary":"Fixed LSP diagnostics to allow transit nodes.","titleGenerated":"Turborepo v2.9.12 allows transit nodes in LSP diagnostics","titleShort":"Transit nodes now allowed in LSP diagnostics","content":"<!-- Release notes generated using configuration in .github/release.yml at v2.9.12 -->\n\n## What's Changed\n### Changelog\n* release(turborepo): 2.9.11 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12771\n* fix: Allow transit nodes in LSP diagnostics by @anthonyshew in https://github.com/vercel/turborepo/pull/12773\n\n\n**Full Changelog**: https://github.com/vercel/turborepo/compare/v2.9.11...v2.9.12","publishedAt":"2026-05-09T04:25:38.000Z","url":"https://github.com/vercel/turborepo/releases/tag/v2.9.12","media":[],"prerelease":false,"source":{"slug":"turborepo","name":"Turborepo","type":"github"},"org":{"slug":"vercel","name":"Vercel"},"product":{"slug":"turborepo","name":"Turborepo"},"groupSlug":"turborepo","groupName":"Turborepo","coverageCount":0,"composition":null}],"pagination":{"nextCursor":"2026-05-09T04:25:38.000Z|2026-05-09T08:00:11.954Z|rel_vtWsqhMELmx_dTXLwxgWw","limit":20}}