Перейти к основному содержимому
Reproducible measurements

How fast is pnpm, really?

Installing the same project with npm and two generations of pnpm, and installing Node.js itself against fnm and nvm.

Data fetched Sep 2, 2026 from pnpm/benchmarks, rebuilt on every deploy.
Package managers

Install Speed

The same project installed six ways — the cache and lockfile states you actually end up in, from a fresh clone to a warm re-run.

6/6scenarios where pnpm beats npm
96xfaster than npm on “everything warm”
14mspnpm's best run — “everything warm”
Every bar shares one scale, so scenarios are comparable with each other.
cleanA fresh clone. Nothing cached.
npm
48.6s15x slower
pnpm 11
8.06s2.4x slower
pnpm 12
5.04s1.5x slower
pnpm 12 + pnpr
3.29s
cacheReinstalling without a lockfile.
npm
14.3s26x slower
pnpm 11
4.54s8.2x slower
pnpm 12
788ms1.4x slower
pnpm 12 + pnpr
556ms
lockfileCI, first install.
npm
12.9s3.9x slower
pnpm 11
4.70s1.4x slower
pnpm 12
3.27s
pnpm 12 + pnpr
3.30s
cache + lockfileReinstalling a project you already have.
npm
8.44s19x slower
pnpm 11
2.21s5.0x slower
pnpm 12
439ms
pnpm 12 + pnpr
490ms1.1x slower
everything warmRunning install when nothing changed.
npm
1.34s96x slower
pnpm 11
571ms41x slower
pnpm 12
14ms
pnpm 12 + pnpr
17ms1.2x slower
updateA dependency was bumped in package.json.
npm
4.55s4.9x slower
pnpm 11
4.22s4.5x slower
pnpm 12
929ms
pnpm 12 + pnpr
987ms1.1x slower

Total across all scenarios

  1. pnpm 12 + pnpr8.64sfastest
  2. pnpm 1210.5s1.21x slower
  3. pnpm 1124.3s2.81x slower
  4. npm1m 30s10.42x slower

All 6 scenarios added up.

Exact numbers

Install Speed — fastest run per scenario.
Scenarionpmv12.0.2pnpm 11v11.25.0pnpm 12v12.3.0pnpm 12 + pnprv12.3.0
cleanA fresh clone. Nothing cached.48.6s8.06s5.04s3.29s
cacheReinstalling without a lockfile.14.3s4.54s788ms556ms
lockfileCI, first install.12.9s4.70s3.27s3.30s
cache + lockfileReinstalling a project you already have.8.44s2.21s439ms490ms
everything warmRunning install when nothing changed.1.34s571ms14ms17ms
updateA dependency was bumped in package.json.4.55s4.22s929ms987ms
Measured with npm 12.0.2 · pnpm 11 11.25.0 · pnpm 12 12.3.0 · pnpm 12 + pnpr 12.3.0.
  • Same project every time — the "alotta-files" fixture — so the only thing that changes is the package manager.
  • Each number is the fastest of the three most recent runs.
  • Everything installs through the same registry over the same emulated link (50ms, 200Mbps), so the times include the round trips a real install pays for.
  • Six scenarios here. The suite measures three more that delete your cache or lockfile but keep node_modules — nobody works that way, so they are left out.
  • pnpm 12 + pnpr is the same version and the same command, with resolution handled by the registry instead of locally.
Node.js version managers

Node.js Version Management

pnpm installs and switches Node.js versions itself, so you may not need a version manager at all. Here it is against fnm and nvm.

3/3scenarios where pnpm is fastest
17xfaster than nvm on “install (warm store)”
5mspnpm's best run — “run in project”
Every bar shares one scale, so scenarios are comparable with each other.
install (clean)Install Node.js 24, nothing cached.
pnpm
1.03s
fnm
2.98s2.9x slower
nvm
3.15s3.1x slower
install (warm store)Install a version you had before.
pnpm
166ms
fnm
2.95s18x slower
nvm
2.88s17x slower
run in projectRun node in a project pinned to Node.js 22.
pnpm
5ms
fnm
5ms
nvm
93ms19x slower

Total across all scenarios

  1. pnpm1.20sfastest
  2. fnm5.94s4.96x slower
  3. nvm6.12s5.12x slower

All 3 scenarios added up.

Exact numbers

Node.js Version Management — fastest run per scenario.
Scenariopnpmv12.3.0fnmv1.39.0nvmv0.40.7
install (clean)Install Node.js 24, nothing cached.1.03s2.98s3.15s
install (warm store)Install a version you had before.166ms2.95s2.88s
run in projectRun node in a project pinned to Node.js 22.5ms5ms93ms
Measured with pnpm 12.3.0 · fnm 1.39.0 · nvm 0.40.7.
  • pnpm keeps Node.js in its store, so a version it has seen before needs no download.
  • There is no switch command — the node on your PATH is whatever the project asks for.
  • Timed inside a shell with $EPOCHREALTIME, because nvm is a shell function rather than a binary.

How these numbers are produced

Every tool runs on the same machine against the same project, and the timings are committed to pnpm/benchmarks. This page reads them at build time and picks the newest version of each tool.

This is one project on one machine — your numbers will differ. Run pnpm run benchmark to see your own.