Skip to content

chore(deps): update pnpm to v12 - #710

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/pnpm-12.x
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/pnpm-12.x

Conversation

@renovate

@renovate renovate Bot commented Sep 5, 2026 •

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
pnpm (source) 10.18.0 → 12.6.0 age confidence

Release Notes

pnpm/pnpm (pnpm)

v12.6.0: pnpm 12.6

Compare Source

pnpm 12.6.0 ships with automatic dependency deduplication, relocatable node_modules, package.yaml manifest editing, and --save-types support.

Minor Changes
  • autoDedupe deduplicates compatible dependency versions during installation #​7258. Enable it in pnpm-workspace.yaml or use pnpm install --auto-dedupe or pnpm add --auto-dedupe. Frozen installs leave the lockfile unchanged.

  • pnpm install, pnpm run, and pnpm exec on macOS and Linux now reuse a node_modules directory and bin shims that moved or were copied together with their project #​6937. The first command after the move checks the tree and records its new location, so project commands in node_modules/.bin keep working.

  • pnpm add --save-types saves available @types/* packages in devDependencies alongside registry dependencies #​3868. Packages that declare bundled TypeScript types are skipped. Set saveTypes: true in pnpm-workspace.yaml to enable this by default.

  • package.yaml manifests can now be updated by pnpm add, pnpm update, pnpm remove, pnpm pkg, pnpm link, pnpm set-script, and pnpm version #​2008. Existing comments and key order are preserved.

  • Catalog entries can now use the file: and link: protocols #​8642. A relative path or bare path in an entry, such as ./tarballs/foo.tgz, is measured from the directory holding pnpm-workspace.yaml.

  • pnpm tasks status lists running and waiting tasks in each concurrency group, and waiting tasks now take available slots in arrival order with higher priority tasks going first #​15208. If workspaces use different limits for the same group, a later task can take a free slot that earlier tasks cannot use. A package script named tasks takes precedence; use pnpm pm tasks status when that script exists.

  • pnpm cache prune deletes registry metadata cache directories that this version of pnpm can no longer read #​15046. pnpm cache prune --dry-run lists what it would delete without removing anything.

  • macosBackup.excludeModulesDir and macosBackup.excludeStoreDir on macOS can now exclude newly created modules, virtual-store, and package-store directories from Time Machine #​6440. Set either to true in global configuration or using the PNPM_CONFIG_MACOS_BACKUP_EXCLUDE_MODULES_DIR and PNPM_CONFIG_MACOS_BACKUP_EXCLUDE_STORE_DIR environment variables.

  • pnpm add --tilde is now an alias for --save-prefix=~ #​12863. The Yarn -T shorthand is not supported.

  • progress setting and --no-progress option now turn off dependency and download progress lines #​14065. Warnings, lifecycle output, and the dependency summary are still printed.

Patch Changes
Security
  • POSIX bin shims now take cygpath and wslpath from the system default path on Cygwin, MSYS2, and WSL2 so a dependency cannot redirect another package's shim #​14866.

  • pnpm install warnings no longer carry the text of a package's deprecation notice, naming only the deprecated package and version #​15099. A deprecation warning names the newest non-deprecated version when one exists, and control characters and line separators are stripped from package identifiers and warnings.

  • pnpm install and other commands that report configuration warnings now warn when environment variables in project .npmrc credentials are ignored #​15051.

Installing packages
  • pnpm install --frozen-lockfile now succeeds when an optional dependency was unresolvable and skipped by the install that wrote the lockfile #​3960.

  • pnpm install --frozen-lockfile no longer installs dependencies of projects removed from pnpm-workspace.yaml #​15248. Missing local tarballs used only by those projects no longer fail the install.

  • pnpm ci now empties node_modules before installing in a project that declares a clean script #​15276.

  • pnpm install --force now re-imports every package into the virtual store #​15030 and removes obsolete dependency links inside virtual-store packages when their dependencies change #​15039.

  • preinstall script for the root project now runs before dependencies are resolved and linked #​3760.

  • pnpm install now runs pnpm:devPreinstall when the root project uses package.yaml #​15168.

  • pnpm install now enforces the root project's engines.node range when engineStrict is enabled #​3016.

  • pnpm install now uses the running Node.js when devEngines.runtime declares a range without onFail: download #​15230.

  • pnpm install no longer hangs when a git dependency is fetched over SSH and ssh prompts for a passphrase or host key confirmation, running ssh in batch mode instead #​2227.

  • pnpm install now installs git-hosted dependencies without preparing them when their builds are explicitly denied by allowBuilds #​10522.

  • pnpm install now reuses an in-flight tarball download when another resolution of the same archive still needs its package.json #​15037.

  • pnpm install --prod no longer downloads registry packages that only a devDependency reaches #​881.

  • pnpm install --no-runtime --frozen-lockfile with nodeLinker: hoisted no longer fails on repeated runs with a broken lockfile #​15212.

Resolving and linking dependencies
  • pnpm install and pnpm update now resolve a dependency range to the newest matching version that is not deprecated #​15128.

  • pnpm add <pkg> without a version now uses the catalog entry when the workspace already catalogs that package #​14865.

  • pnpm install now links workspace dependencies declared with plain version ranges when excludeLinksFromLockfile and linkWorkspacePackages are enabled #​15133.

  • pnpm install now resolves local tarball dependencies whose absolute file: paths contain .. consistently and skips reinstallation on repeat installs #​15190.

  • pnpm install now installs dependencies when a custom resolver returns a local or git-hosted tarball without a manifest #​15016.

  • pnpm.overrides entries written as a bare path, such as ./local-dep, are now measured from the directory holding pnpm-workspace.yaml #​11131.

  • pnpm update --no-save no longer bypasses version-scoped overrides when a dependency selector specifies a version #​14923.

  • pnpm peers check and strict peer dependency checks no longer reject compatible versions from named registries #​15225.

  • pnpm outdated and pnpm update --interactive --latest now include named-registry dependencies such as work:2.1.0 and preserve their registry prefix #​15226.

  • Workspace projects selected by hoistPattern or publicHoistPattern are now hoisted on every install #​3642.

  • Workspace packages with SemVer build metadata are no longer skipped when they match the requested range and have the same version precedence as the registry package #​2812.

  • Sped up pnpm dedupe and pnpm install in projects with many convergence overrides by checking overrides concurrently #​15175.

  • minimumReleaseAge is no longer skipped for packages served by registries returning matching ETags for abbreviated and full package metadata #​14925.

Running scripts and tasks
  • pnpm run signal handling no longer delivers a redundant second SIGINT to child scripts on Ctrl+C in a terminal, and properly forwards termination signals when running non-interactively without a terminal #​7374.

  • pnpm run and pnpm exec in workspaces with sharedWorkspaceLockfile: false now verify dependencies in the selected projects rather than expecting a root workspace state #​15272.

  • pnpm test now forwards --filter arguments to the test script when the option follows the shortcut #​15217.

  • Recursive runs now start scripts matched by a /pattern/ selector in parallel within workspaceConcurrency #​14933.

  • pnpm deploy, pnpm rebuild, pnpm rb, and pnpm setup now prefer a package.json script of the same name #​14976.

  • modulesDir custom directory names now support executable lookup and CommonJS plugin resolution across pnpm run, pnpm exec, pnpm version hooks, and lifecycle scripts #​3604.

  • pnpm install-test now accepts --no-bail directly and in recursive runs #​3777.

Workspace and project configuration
  • pnpm commands run in a project not included in the workspace now act on that project alone #​3561.

  • pnpm-workspace.yaml edits now preserve scalar YAML anchors and aliases #​8245.

  • pnpm-workspace.yaml now expands environment variable placeholders with fallback syntax in enum-valued settings such as nodeLinker #​14914.

  • pnpmfile configuration now loads a .js file as CommonJS or an ES module, following the nearest package.json #​15141.

  • updateConfig hook settings are now honored by pnpm peers check, why, list, ll, licenses, audit, sbom, fetch, patch, patch-commit, patch-remove, approve-builds, and runtime #​15047, #​15049.

  • readPackage hook changes or removal now take added dependencies out of pnpm-lock.yaml and update dependencies when an existing lockfile is present #​3735, #​15136.

  • package.yaml projects now record their pinned pnpm under packageManagerDependencies in pnpm-lock.yaml #​15167.

  • packageManagerDependencies pinning @pnpm/exe beside pnpm is no longer rewritten in pnpm-lock.yaml #​14926.

  • pnpm now preserves CRLF line endings when modifying project manifests #​3529.

  • loglevel setting is now honored when configured in pnpm-workspace.yaml, global configuration, or PNPM_CONFIG_LOGLEVEL #​3122.

  • storeDir values loaded from global configuration or PNPM_CONFIG_STORE_DIR now expand a leading ~/ to the user's home directory #​6560.

  • --shared-workspace-lockfile now produces a warning when passed on the command line outside a workspace #​1617.

Windows
  • pnpm install on Windows now runs dependency build scripts from long global virtual store paths and normalizes scoped package paths in lifecycle script PATH entries #​15111.

  • pnpm install across projects sharing a global virtual store on Windows no longer fails with Access is denied, file-exists errors, or transient sharing violations #​15114, #​15176, #​15171.

  • pn, pnpx, pnx, and pnpm now run when Git Bash, MSYS2, or Cygwin launches them through a Windows path #​14884.

  • pnpm dlx now reuses cached packages when Windows creates directory junctions for its cache links #​15171.

  • pnpm pipeline --watch now resolves Windows short paths so multiple path representations share the build cache #​15105.

CLI commands and output
  • pnpm remove now runs the project's own preuninstall, uninstall, and postuninstall scripts #​3276.

  • pnpm remove -r now fails before modifying manifests if any requested dependency is absent from all selected projects #​2319.

  • pnpm update --peer now updates ranges in peerDependencies #​8081.

  • pnpm update now moves devEngines.runtime and engines.runtime version ranges to the resolved Node.js version #​14988.

  • pnpm update -g no longer reinstalls unchanged packages #​12002.

  • pnpm add -g, pnpm update -g, and pnpm remove -g now recover a global package group whose node_modules directory was deleted #​15093.

  • pnpm add -g now installs local tarballs when PNPM_HOME contains .. path segments #​15118.

  • pnpm version now reads tagVersionPrefix from pnpm-workspace.yaml, global config, or PNPM_CONFIG_TAG_VERSION_PREFIX when creating and reading Git tags #​15044.

  • pnpm publish now allows a detached Git HEAD in CI environments #​5894.

  • pnpm store prune now removes unreferenced files and packages from the content-addressable store #​3635, as well as expired or superseded pnpm dlx cache data #​15171.

  • pnpm cache list-registries now prints decoded registry URLs #​15046.

  • pnpm deploy no longer triggers an install when running scripts in a read-only deployed filesystem #​11617.

  • pnpm -r list --json now outputs a single JSON array when sharedWorkspaceLockfile is false, and --long and --parseable read each project's own modules directory #​15011.

  • pnpm sbom now validates SPDX identifiers and expressions before emitting them as CycloneDX license IDs or expressions, falling back to a license name for non-SPDX values such as UNLICENSED #​14786.

  • pnpm change check now validates pending change intents in .changeset/ #​15183.

  • pnpm --filter and pnpm -F shell completion now suggests workspace package names #​15216. Completion candidates containing control or invisible formatting characters are omitted so package and script names cannot inject terminal escape sequences.

  • pnpm run and pnpm run-script shell completion now suggests package scripts #​15034.

  • pnpm --version no longer creates a temporary file in the project directory during store detection #​15264.

  • pnpm setup now describes displayed configuration changes as "The following configuration changes were made" #​15100.

  • minimumReleaseAge approval prompts in pnpm install and pnpm update -g now count and display each package version once #​15083, #​15091.

  • .npmrc authentication warnings now report when an empty environment variable removes an auth token and name the affected key #​4806.

  • The install summary now names the version each dependency resolved to when node-linker is hoisted #​15161.

  • pnpm install now re-links a package's global virtual store slot after allowBuilds changes #​15117.

Platinum Sponsors

Bit OpenAI Notion
CodeRabbit

Gold Sponsors

Sanity Discord Vite
SerpApi Stackblitz Workleap
Nx Latitude

v12.5.1: pnpm 12.5.1

Compare Source

Patch Changes

  • pnpm now reports an unknown task setting in pnpm-workspace.yaml and carries on. It used to refuse to start, so a project could not use a task setting that only the pnpm version its packageManager pins reads. The setting is still an error when the running pnpm is that pinned version.

  • Python interpreter installation now retries historical release metadata requests. It caches the release list for up to 24 hours and refreshes it once after a lookup miss. When a release omits the current platform, the search samples at most eight other releases before reporting that the lookup is inconclusive.

  • Python registries entries now route packages by exact names or trailing-prefix patterns in packages. Registry declaration order no longer affects resolution. A matched package resolves exclusively from its assigned registry, including transitive and build dependencies. Use packages: ["*"] to declare the default index.

  • pnpm install no longer fails with "Too many levels of symbolic links" when a Cargo configuration file above the workspace is a symlink, such as a ~/.cargo/config.toml linked from a dotfiles repository.

  • pnpm install now returns "Already up to date" in a workspace where dedupeDirectDeps left a project without a node_modules directory of its own. Such a project forced a full install on every run.

  • pnpm install no longer refuses the repeat-install fast path just because a changed pnpm-lock.yaml is 16 MiB or larger. Such a lockfile forced a full install on the run after every change.

Platinum Sponsors

Bit OpenAI Notion
CodeRabbit

Gold Sponsors

❗ Important

✂ PR body was truncated to here.


Configuration

  • The updateConfig pnpmfile hook now receives the resolved configuration, including settings that came from .npmrc, the command line, or a default #​14676. Scoped registries are reported under registriesByScope, and a hook may rewrite that map to change where packages are fetched from. Registry credentials are reported under configByUri, as pnpm 11 reports them. An unset setting is left out rather than reported as null.

  • pnpm audit --fix and the minimumReleaseAgeStrict approval prompt now keep the comments in minimumReleaseAgeExclude when they append an entry to it in pnpm-workspace.yaml. The rest of the list is left as written, and the trustPolicyExcludePrune and minimumReleaseAgeExcludePrune cleanups keep the comments of the entries they retain.

    pnpm install and pnpm dedupe now run those cleanups too #​14759. Only pnpm add, pnpm update, and pnpm remove pruned the entries that the freshly written lockfile no longer resolves.

  • pnpm config set --global node-download-mirrors no longer rejects the key #​13611. The global config file already accepted nodeDownloadMirrors, but the command refused to write it.

  • NO_PROXY entries that start with a dot, such as .npmjs.org, now bypass the proxy for the domain and its subdomains #​14686.

  • pnpm no longer creates a project pnpm-lock.yaml when devEngines.packageManager.onFail is download and lockfile writing is off through lockfile: false or --no-lockfile #​14728. pnpm still switches to the pinned version.

  • pnpm now writes node_modules/.package-map.json only when nodeExperimentalPackageMap is enabled. Nothing reads the file without that setting, and an install that stops writing the map removes the one a previous install left.

Windows
  • pnpm pipeline no longer fails with intermittent access denied errors when concurrent tasks save their cache entries on Windows.

  • Windows filesystem operations now retry permission errors for up to one second #​14682. A permanent permission error delayed the failure by a minute. Sharing and lock violations keep their one minute retry budget.

Messages and output
  • pnpm now warns when the root package.json declares a non-empty workspaces array and the project has no pnpm-workspace.yaml #​2255. Such an install linked no project and said nothing about why.

  • ERR_PNPM_PACKAGE_MANAGER_REMOVE_MODULES_DIR now names the file or directory in node_modules that pnpm could not clean up. It reported only the underlying OS error, such as "Access is denied (os error 5)".

  • pnpm --help no longer describes pnpm as experimental.

Platinum Sponsors

Sanity Discord Vite
SerpApi Stackblitz Workleap
Nx Latitude
Bit OpenAI Notion
CodeRabbit

Gold Sponsors

Sanity Discord Vite
SerpApi Stackblitz Workleap
Nx Latitude

v12.4.0

Compare Source

v12.3.4

Compare Source

v12.3.3

Compare Source

v12.3.2

Compare Source

v12.3.1

Compare Source

v12.3.0

Compare Source

v12.2.1

Compare Source

v12.2.0

Compare Source

v12.1.0

Compare Source

v12.0.0

Compare Source

v11.27.1

Compare Source

v11.27.0

Compare Source

v11.26.0

Compare Source

v11.25.0

Compare Source

v11.24.0

Compare Source

v11.23.0

Compare Source

v11.22.0

Compare Source

v11.21.0

Compare Source

v11.20.0

Compare Source

v11.19.0

Compare Source

v11.18.0

Compare Source

v11.17.0

Compare Source

v11.16.0

Compare Source

v11.15.1

Compare Source

v11.15.0

Compare Source

v11.14.0

Compare Source

v11.13.1

Compare Source

v11.13.0

Compare Source

v11.12.0

Compare Source

v11.11.0

Compare Source

v11.10.0

Compare Source

v11.9.0

Compare Source

v11.8.0

Compare Source

v11.7.0

Compare Source

v11.6.0

Compare Source

v11.5.3

Compare Source

v11.5.2

Compare Source

v11.5.1

Compare Source

v11.5.0

Compare Source

v11.4.0

Compare Source

v11.3.0

Compare Source

v11.2.2

Compare Source

v11.2.1

Compare Source

v11.2.0

Compare Source

v11.1.3

Compare Source

v11.1.2

Compare Source

v11.1.1

Compare Source

v11.1.0

Compare Source

v11.0.9

Compare Source

v11.0.8

Compare Source

v11.0.7

Compare Source

v11.0.6

Compare Source

v11.0.5

Compare Source

v11.0.4

Compare Source

v11.0.3

Compare Source

v11.0.2

Compare Source

v11.0.1

Compare Source

v11.0.0

Compare Source

v10.34.5

Compare Source

v10.34.4

Compare Source

v10.34.3

Compare Source

v10.34.2

Compare Source

v10.34.1

Compare Source

v10.34.0

Compare Source

v10.33.4

Compare Source

v10.33.3

Compare Source

v10.33.2

Compare Source

v10.33.1

Compare Source

v10.33.0

Compare Source

v10.32.1

Compare Source

v10.32.0

Compare Source

v10.31.0

Compare Source

v10.30.3

Compare Source

v10.30.2

Compare Source

v10.30.1

Compare Source

v10.30.0

Compare Source

v10.29.3

Compare Source

v10.29.2

Compare Source

v10.29.1

Compare Source

v10.28.2

Compare Source

v10.28.1

Compare Source

v10.28.0

Compare Source

v10.27.0

Compare Source

v10.26.2

Compare Source

v10.26.1

Compare Source

v10.26.0

Compare Source

v10.25.0

Compare Source

v10.24.0

Compare Source

v10.23.0

Compare Source

v10.22.0

Compare Source

v10.21.0

Compare Source

v10.20.0

Compare Source

v10.19.0

Compare Source

v10.18.3

Compare Source

v10.18.2

Compare Source

v10.18.1

Compare Source


  • If you want to rebase/retry this PR, check this box

This branch had an error being deployed

1 failed deployment
Preview — ccdb6c05 Deployed Sep 24, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants