Files
pnpm/benchmarks
Zoltan Kochan cee550a57d feat!: remove deprecated managePackageManagerVersions / packageManagerStrict / packageManagerStrictVersion (#11278)
* feat!: remove managePackageManagerVersions / packageManagerStrict / packageManagerStrictVersion

These three settings existed only to derive the `onFail` behavior for
the legacy `packageManager` field. The `pmOnFail` setting introduced
in #11275 subsumes all three — it directly sets `onFail` for both
`packageManager` and `devEngines.packageManager`.

Legacy `packageManager` now defaults to `onFail: 'download'` when no
override is set. `COREPACK_ENABLE_STRICT` is no longer read (it only
gated `packageManagerStrict`); `pmOnFail` is the replacement.

Also drops pass-through `packageManagerStrict*` option fields from
cli.utils / workspace.projects-reader (they were unused) and the
unused `managePackageManagerVersions` Pick in engine.pm.commands'
`SelfUpdateCommandOptions`.

* fix: use kebab-case setting name in BAD_PM_VERSION hint

Copilot review feedback: user-facing error hints for configuration keys
conventionally use the kebab-case form that matches both the CLI flag
(`--pm-on-fail`) and the `.npmrc` key, consistent with the prior hint
text that referenced `package-manager-strict`. The `pnpm-workspace.yaml`
field (`pmOnFail`) is camelCase but that mapping is documented
elsewhere.

* Revert "fix: use kebab-case setting name in BAD_PM_VERSION hint"

This reverts commit e03c29b17. pnpm-workspace.yaml uses camelCase
(`pmOnFail`) — the primary config location for pnpm 11 — so the
hint keeps the camelCase form. The CLI flag is already shown
alongside.
2026-04-17 00:57:33 +02:00
..

pnpm Benchmarks

Compares pnpm install performance between the current branch and main.

Prerequisites

  • hyperfine — install via brew install hyperfine
  • The current branch must be compiled (pnpm run compile)
  • If providing a pre-existing main checkout path, it must also be compiled

Usage

pnpm run compile
./benchmarks/bench.sh

If a git worktree with main already exists, the script finds and uses it automatically. Otherwise it creates one at ../.pnpm-bench-main (a sibling of the repo), installs dependencies, and compiles.

You can also point to a specific checkout of main:

./benchmarks/bench.sh /path/to/main

Scenarios

# Name Lockfile Store + Cache Description
1 Headless ✔ frozen warm Repeat install with warm store
2 Re-resolution ✔ + add dep warm Add a new dependency to an existing lockfile
3 Full resolution warm Resolve everything from scratch with warm store and cache
4 Headless cold ✔ frozen cold Typical CI install — fetch all packages with lockfile
5 Cold install cold True cold start — nothing cached

All scenarios use --ignore-scripts and isolated store/cache directories per variant.

Output

Results are printed to the terminal and saved as:

  • results.md — consolidated markdown table
  • <scenario>-main.json / <scenario>-branch.json — raw hyperfine data

All files are written to a temp directory printed at the end of the run.

Configuration

Edit the variables at the top of bench.sh:

  • WARMUP — number of warmup runs before timing (default: 1)
  • RUNS — number of timed runs per benchmark (default: 10)