NewWhat’s different in pnpm 12

Save time. Save disk space. Supercharge your monorepos.

Get lightning-fast installation speeds and a smarter, safer way to manage dependencies.

curl -fsSL https://get.pnpm.io/install.sh | sh -

OSS projects that use pnpm

  • next.js
  • n8n
  • Material UI
  • Vite
  • Nuxt
  • Vue
  • Astro
  • Prisma
  • Novu
  • Slidev
  • Turborepo
  • Quasar Framework
  • Element Plus
  • NextAuth.js
  • Ember.js
  • Qwik
  • VueUse
  • SvelteKit
  • Verdaccio
  • Vercel
  • Nx
  • Angular
Benchmarks

Up to 69× faster than npm

Measured on a real project, across the states an install actually happens in — from a fresh clone to a warm re-run. Reproducible, and rebuilt on every deploy.

8.2×faster in total, across all 6 scenarios
10.8svs 1m 28s with npm
Explore the full benchmarks
alotta-filespnpm 12npm
  • cleanA fresh clone. Nothing cached.9.6× faster
    4.97s
    47.8s
  • cacheReinstalling without a lockfile.14× faster
    952ms
    13.4s
  • lockfileCI, first install.3.8× faster
    3.31s
    12.7s
  • cache + lockfileReinstalling a project you already have.14× faster
    595ms
    8.61s
  • everything warmRunning install when nothing changed.69× faster
    19ms
    1.32s
  • updateA dependency was bumped in package.json.4.6× faster
    968ms
    4.43s

Everything you expect, and the things you didn’t know to ask for

pnpm is a drop-in replacement for npm — and then keeps going, with the features large repos actually need.

Blazing fast installs

Resolution, fetching and linking happen in parallel instead of one stage at a time. On a warm store, an install is mostly just creating links.

See the benchmarks

Saving disk space

Files inside node_modules are hard-linked from a single content-addressable store. A hundred projects on the same version cost you one copy on disk.

Learn more

Workspace support

First-class monorepos: the workspace protocol for local packages, filtering to run tasks on just the projects you touched, and a single lockfile for everything.

Learn more

Catalogs

Define a dependency version once in pnpm-workspace.yaml and reference it as "catalog:" everywhere. One line to upgrade, and no more version-drift merge conflicts.

Learn more

Strict by default

Only your declared dependencies land in the root of node_modules, so your code can never quietly import a package you never installed.

Learn more

Safer builds

Install scripts don’t run for arbitrary dependencies. You approve which packages may execute build scripts — supply-chain safety without extra tooling.

Learn more

Patch dependencies

Fix a bug in a package without waiting for upstream — "pn patch" writes a persistent patch that is reapplied on every install.

Learn more

Managing runtimes

Install and pin Node.js per project straight from pnpm — no nvm, no shell hooks, no “works on my machine” version mismatches.

Learn more

How it works

A single store on disk, linked everywhere

Other package managers copy the same files into every project. pnpm keeps one copy and links to it — that single design decision is where the speed and the disk savings come from.

  • One copy per file, not per project

    With npm, 100 projects using the same dependency means 100 copies on disk. pnpm stores every file once in a content-addressable store and hard-links it into each node_modules.

  • Updates only store what changed

    If a new version of a package changes one file out of a hundred, pnpm adds exactly one file to the store instead of cloning the whole package again.

  • A node_modules you can trust

    pnpm symlinks only your declared dependencies into the root of node_modules, so your code can never quietly import a package you never installed.

  • Resolve, fetch and link in parallel

    Instead of finishing each stage before starting the next, pnpm links every package as soon as it is available — which is why installs feel instant on a warm store.

Content-addressable storea1f3…9c×4b7e2…41×3e94d…7a×45c08…d2×42f6b…e08d1c…3b×2c4a9…f6×271e5…08×4app/node_modulesreact/index.jsreact-dom/index.jslodash/lodash.jszod/index.jsweb/node_modulesreact/index.jsreact-dom/index.jsms/index.jszod/index.jsdocs/node_modulesreact/index.jsreact-dom/index.jsms/index.jstypescript/tsc.jsapi/node_modulesexpress/index.jslodash/lodash.jsms/index.jszod/index.jsadmin/node_modulesreact/index.jslodash/lodash.jschalk/index.jszod/index.jscli/node_moduleschalk/index.jstypescript/tsc.jsms/index.jslodash/lodash.js24 files in node_modules → 8 on disk
1 copy

of every file on your disk, shared across all projects

0 bytes

extra disk space when a project reuses a version you already have

Strict

no access to undeclared dependencies, by default

pnpm vs npm

Everything npm does, plus the features that make large repos manageable.

Featurepnpmnpm
Content-addressable storage✓—
CatalogsShared version ranges across a workspace.✓—
Managing runtimesInstall Node.js without nvm.✓—
Patching dependencies✓—
Side-effects cache✓—
Build script securityScripts only run for packages you allow.✓—

See the full feature comparison in the documentation.

Releases

Shipping every week

New features, fixes and security updates land continuously. Follow every release on the timeline.

Releases in the last 12 months
–
Average time between releases
– days

@pnpmjs is a strong option for protecting against supply chain attacks, and the DX is excellent too they removed postinstall scripts a while back, cutting one big attack path now they’ve introduced minimumReleaseAge which lets you hold off on new versions for a day or more

Its not even been a day but I suddenly feel that @pnpmjs has improved my overall dev experience 🤯

This whole time I've stuck with npm out of habit and because it "just works". But then I had to override a subdependency via package.json, and npm just wouldn't do it. I spent hours fiddling. So @darcy recommends I use @pnpmjs , and w/ the same package.json, it "just works".

Gotta say @pnpmjs has never let me down. Great piece of software.

By adopting the latest changes from @pnpmjs we got huge performance benefits in @bitdev_ ! still early to call true numbers, but i'm seeing decreases of 40% in some flows! incredible work by @ZoltanKochan and the team behind pnpm!

I ❤️ pnpm. Just radically sped up a CI build by switching to pnpm and parallelizing tasks (which pnpm supports built-in) Before: 12 minutes After: 2 minutes 😀

Zero-bug policy

Zero open bugs. Always.

Our goal is zero open bug reports at all times. A bug with steps to reproduce is picked up quickly and fixed as soon as possible.

Live from GitHub0open bug reports is the goal
  1. Report it with a reproduction

    Open an issue with the steps, or a small repository, that reproduce the bug.

  2. It gets picked up fast

    Reproducible bugs go to the top of the queue. The issue list is kept at zero.

  3. Fixed in the next release

    Fixes ship quickly, usually in the next patch or minor release.

  4. Report a bugSuggest a feature

Issues are for bugs only. Feature requests and questions live in GitHub Discussions.

Ready to reclaim your disk and your time?

pnpm is a drop-in replacement for npm. Install it once, run pnpm install in any project — your package.json works as-is.

$curl -fsSL https://get.pnpm.io/install.sh | sh -