pnpm 12.21.0
pnpm 12.21.0 lets pnpm store add prepare tarball and git dependencies for offline installs. It also makes repeated installs keep their peer dependency choices and fixes several lockfile.format: v13, nodeLinker: hoisted, and pnpm deploy failures. If a pnpr server refuses a setting, pnpm now resolves locally.
Minor Changes#
pnpm store addrun in a project now prepares downloaded tarballs for every lockfile entry that pins them. Besides registry packages,pnpm install --offline --frozen-lockfilecan then install dependencies on a tarball URL and dependencies on a git host such as GitHub whose lockfile entry records anintegrity.
Patch Changes#
Installs that failed#
-
pnpm now reads a lockfile with a mapping key longer than 1,024 characters written as
'key':, without the?marker. Before,pnpm installand other commands failed on such a lockfile withERR_PNPM_BROKEN_LOCKFILE. -
With
lockfile.format: v13,pnpm installno longer fails to create or rewrite the lockfile when a package declares many of its dependencies as peers. -
Fixed
pnpm deployfailing withlockfile.format: v13when injected workspace packages have hashed peer bindings. -
Frozen installs with v13 lockfiles now accept valid peer dependencies of injected workspace packages that use catalogs.
-
Fixed injected workspace packages that depend on themselves linking to a nonexistent directory.
-
pnpm installwithfrozenStoreenabled no longer fails withERR_PNPM_FROZEN_STORE_NEEDS_BUILDwhennodeLinkerishoisted.pnpm fetchwithnodeLinker: hoistedno longer populates global virtual store links or modifies linked agent skills, and it preserves an existing hoistednode_modulesdirectory #18037. -
A
requirements.txtbeside apyproject.tomlthat declares[tool.uv.workspace]without a[project]table no longer makes that directory a Python project.pnpm installstopped there with an error when the directory had a.venvthat pnpm did not create #18023.
Peer dependencies#
-
Repeated installs no longer change the peer dependency providers that the previous install chose. This covers adding, updating, or removing a dependency, projects that use different ranges of one dependency, dependency cycles, and injected dependencies with
autoInstallPeers: falsepnpm/tasks#221.An unchanged install keeps a valid locked peer provider even when a direct dependency provides another compatible version. Explicit
pnpm addandpnpm updaterequests take precedence over it. -
Workspace projects that select different versions of a peer provider no longer share one copy of the package that depends on it. This affected peers reached through an aliased dependency or a peer dependency cycle.
-
A removed dependency no longer comes back as a peer provider. Before, a direct dependency removed with
autoInstallPeers: falsecould be restored from an old peer resolution, and a removed one could still supply its old peer context. -
With
nodeLinker: hoistedandautoInstallPeers: false,pnpm installno longer creates duplicate copies of a package whose resolved peers are identical. A package also no longer loads a copy of its dependency that was resolved with different peer versions #18003. -
pnpm deploynow binds optional peers declared only inpeerDependenciesMetafor linked workspace packages. The deployed manifest and lockfile also retain these peers when filtering dependency groups.
Running scripts#
-
Scripts now stop when pnpm's process group is killed while they are starting.
-
Bin shims in the global virtual store no longer include the hoisted modules directory of the project that installed them #18035.
-
pnpm pipelinenow rebuilds local packages and reruns build scripts after it restores a shared Cargo build cache with Cargo 1.100 or newer. Before, a worktree could reuse build-script output from the worktree that created the cache.
pnpr#
-
If the pnpr server refuses a setting the install uses, or cannot return the lockfile format pnpm reads,
pnpm installandpnpm updateprint a warning and resolve locally. Cargo and Python resolution also fall back to resolving locally. pnpm now rejects a pnpr resolution of npm dependencies that does not name its lockfile format. -
pnpm installwithpnprServernow limits the size of the server's resolve and lockfile verification responses. An oversized response ends the request with an error. -
pnpm now displays pnpr error codes and reasons when remote requests fail.
Other commands and settings#
-
pnpm setupand the install script now support PowerShell as the login shell on Linux and macOS. They addPNPM_HOMEtoPATHinprofile.ps1under$XDG_CONFIG_HOME/powershellor~/.config/powershell#18026. -
A
lockfileDirsetting that points at the default lockfile directory now installs the same way as leaving it unset pnpm/tasks#275.