pnpm: Save time. Save disk space. Supercharge your monorepos.
Get lightning-fast installation speeds and a smarter, safer way to manage dependencies.
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 benchmarksSaving 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 moreWorkspace 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 moreCatalogs
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 moreStrict 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 moreSafer builds
Install scripts don’t run for arbitrary dependencies. You approve which packages may execute build scripts — supply-chain safety without extra tooling.
Learn morePatch dependencies
Fix a bug in a package without waiting for upstream — "pn patch" writes a persistent patch that is reapplied on every install.
Learn moreManaging runtimes
Install and pin Node.js per project straight from pnpm — no nvm, no shell hooks, no “works on my machine” version mismatches.
Learn moreHow 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.
of every file on your disk, shared across all projects
extra disk space when a project reuses a version you already have
no access to undeclared dependencies, by default
Up and running in one command
pnpm is a drop-in replacement for npm. Point it at any existing project — no migration, no rewrites, no lockfile gymnastics.
- 1
Install pnpm once — no Node.js required if you use the standalone script.
- 2
Run
pn installin any existing project —pnis the built-in short alias forpnpm. Yourpackage.jsonworks as-is. - 3
That's it. Reclaim your disk space and watch your installs finish before your coffee does.
$curl -fsSL https://get.pnpm.io/install.sh | sh -$pn install$pn add react$pn build$pn create vite my-app$pnx tsx script.tsNeed another install method? Read the full installation guide.
pnpm vs npm
Everything npm does, plus the features that make large repos manageable.
| Feature | pnpm | npm |
|---|---|---|
| Workspace support | ✓ | ✓ |
| Isolated node_modulesDefault in pnpm. | ✓ | ✓ |
| Hoisted node_modulesDefault in npm. | ✓ | ✓ |
| 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. | ✓ | — |
| Config dependencies | ✓ | — |
| JSR registry support | ✓ | — |
| Listing licensespn licenses list | ✓ | — |
See the full feature comparison in the documentation.
@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 😀










