Change8

v12.0.0-rc.5

Breaking Changes
📦 pnpmView on GitHub →
1 breaking2 features🐛 3 fixes🔧 1 symbols

Summary

This release introduces canonical dependency cycle breaking for deterministic lockfiles and improved peer resolution performance. It also fixes several issues related to lockfile generation and dependency updates.

⚠️ Breaking Changes

  • Dependency cycles are now broken canonically during peer resolution. Previously, the cut depended on the walk path, leading to non-deterministic lockfiles and incorrect peer resolution verdicts. Existing lockfiles will continue to work, but the first install that re-resolves will re-key walk-order-dependent peer variants of cyclic packages once.

Migration Steps

  1. The first install after this update that re-resolves dependencies (e.g., after a dependency change) will re-key walk-order-dependent peer variants of cyclic packages once.

✨ New Features

  • The resolved dependency graph and lockfile no longer depend on the order of workspace projects, ensuring byte-identical lockfiles regardless of project listing order.
  • `pnpm update` now writes the new version range back to `package.json` and the `catalog:` entry, preserving the declared range operator and dist-tag tracking.

🐛 Bug Fixes

  • Auto-installed peer dependencies are no longer resolved to their lowest satisfying versions under `resolutionMode: lowest-direct` or `time-based`. They now resolve like transitive dependencies to the highest satisfying version.
  • Fixed non-deterministic lockfiles on cold installs of projects with cyclic peer dependencies where resolved peer variants could be silently dropped.
  • A lockfile entry whose resolution is unchanged no longer loses its recorded `deprecated` marker when registry metadata is inconsistent.

Affected Symbols