Change8

v11.14.0

📦 pnpmView on GitHub →
3 features🐛 9 fixes🔧 9 symbols

Summary

This release introduces `pnpm doctor` for diagnosing installation issues and enhances `pnpm run` to support RegExp matching for scripts. It also includes numerous bug fixes, improving robustness for lockfile handling, dependency resolution, and self-updates.

Migration Steps

  1. Peer dependencies can now accept scheme-carrying specifiers (e.g., `<registry>:<version>`, `npm:`, `file:`, git/URL). Bare `name@version` values are still rejected.

✨ New Features

  • Added `pnpm doctor` command to diagnose pnpm installation and environment issues, including version, install method, global bin directory PATH, store/cache writability, link strategies, registry connectivity, and offline file install. Each check provides fix instructions and the command exits non-zero on failure. Supports `--offline`, `--json`, and `--benchmark` flags.
  • Added support for executing multiple scripts matching a RegExp passed to `pnpm run` (e.g., `pnpm run "/^build:.*/"`), running matched scripts in deterministic lexicographical order.
  • Restored the `--sequential` (`-s`) CLI option for `pnpm run`, which forces `workspaceConcurrency` to 1 so that matched scripts run sequentially one by one across and within packages.

🐛 Bug Fixes

  • Fixed `pnpm install` failing with `ERR_PNPM_LOCKFILE_IS_SYMLINK` when `pnpm-lock.yaml` is a symlink, allowing reading lockfiles through symlinks again. Installs that don't change the lockfile no longer rewrite it, so `--frozen-lockfile` doesn't need to write. Writing a changed lockfile through a symlink is still refused.
  • Fixed frozen installs incorrectly treating equivalent Git dependency specifiers as a stale lockfile.
  • `pnpm owner ls` now reports authentication and authorization failures (401/403) as dedicated errors including the registry's response body, instead of a generic message.
  • Recovers from a metadata cache entry disappearing after the registry responded with `304 Not Modified` by re-requesting metadata without cache validators, instead of failing with `ERR_PNPM_CACHE_MISSING_AFTER_304`.
  • Projects pinned to a broken pnpm release via `packageManager` or `devEngines.packageManager` now report the broken release and how to fix it, instead of failing during installation.
  • Prevented broken-lockfile errors from including snippets of the lockfile's contents.
  • `pnpm self-update` now checks if the installed version can run before making it active, discarding unusable releases with an error.
  • Fixed an out-of-memory regression when workspace projects concurrently resolve a package with large registry metadata.
  • Fixed `pnpm update` rewriting exact version pins using the `=` operator (e.g., `=3.5.1`) to caret ranges (`^3.5.1`). Exact pins are now preserved and written back as the bare version.

Affected Symbols