Changelog

pnpm/pnpm · · 24 commits

pnpm fixes hoisting, audits, and install tail

Major resolver, hoister, audit, and install-performance fixes landed, including a broken hoist-layout fix and faster/safer installs.

Hoisted installs now avoid broken layouts on conflict-heavy graphs (zkochan2e7bfd3) node-linker=hoisted no longer collapses shared nodes in a way that lets one dependent’s transitive deps leak into another’s path. The hoister now decouples shared nodes, collapses peer variants to a single copy, and blocks shadowing rules that previously produced wrong resolutions and combinatorial nesting on real-world graphs.

pnpm audit now reports only real patched versions (bteacf1d35b) Audit patch ranges are validated against the registry packument, so the tool no longer suggests versions that were never published or are deprecated. The fix flow also stops writing minimum-age exclusions for nonexistent releases, and JSON output now uses null when no published patch is actually available.

Fresh resolution reuses cached metadata more aggressively (astegmaier9343af3) The resolver now skips conditional registry requests when lockfile evidence proves a cached winner cannot be displaced. This trims metadata traffic during dependency resolution and keeps the cached packument marked unverified so later ranges are still re-checked.

Platform-specific runtime selection now prefers the host variant (lazerg40221bc) When multiple supported architectures are listed, resolution now picks the runtime matching the current host instead of blindly taking the first configured OS/CPU pair. That fixes installs that previously fetched the wrong runtime on projects with multiple platform entries.

Self-update no longer downgrades when a dist-tag points at the running version (lazergf28e6cc) The minimum-release-age path now guards against treating the currently installed pnpm release as an update target just because the tag was repointed to an immature version. This prevents self-update from stepping users back to an older release.

Config dependencies now resolve tarballs via the packument (lazerg77d8b41) Migrated config dependencies no longer derive tarball URLs from registry path templates that may not exist. That closes a 404/redirect trap on registries like GitLab and makes migrated config deps behave more like normal dependency installs.

pnpm approve-builds now clears obsolete build settings (lazerg161b821) Approving builds now removes the old pnpm 10-era build keys from pnpm-workspace.yaml in the same write that records allowBuilds. That prevents migrated workspaces from carrying dead config that looks active but is silently ignored.

pnpm update <pkg>@<version> stays targeted (aqeelatcb4a50c) Versioned selectors no longer cause the matcher to drop its per-package predicate and update unrelated transitive dependencies. The command now keeps the selected package scoped correctly while still allowing the requested version update.

pnpm change paginates pickers to terminal height (lazerg868da80) The interactive package/bump pickers now size their pages from the terminal instead of always showing seven rows. This makes large release lists usable without hiding most entries behind scrolling.

pnpm add --allow-build now merges with existing approvals (lazerg8680ece) Adding approved builds no longer replaces the existing allowBuilds map in workspace config. The file write now preserves previously approved entries instead of dropping them.

Other misc changes

  • Performance: scoped post-resolve work to changed packages; overlap store-index teardown with install tail; stream-extract large tarballs during download; speed up cached-meta fresh resolution; reuse store-read context during materialization.
  • Fixes: keep pending build approvals after remove; read node-version from env; accept string verifyDepsBeforeRun env values; report ignored global config.yaml keys; preserve no-save lockfile specifiers; pack LICENSE files correctly; fix migrated config-dep tarball selection.
  • Chores/tests: dependency, Node.js, pnpm, and GitHub Actions updates; pacquet 12.0.0-rc.8 release; several test-only and harness updates.