Skip to main content

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 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.

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

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. 1

    Install pnpm once — no Node.js required if you use the standalone script.

  2. 2

    Run pn install in any existing project — pn is the built-in short alias for pnpm. Your package.json works as-is.

  3. 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.ts

Need another install method? Read the full installation guide.

pnpm vs npm

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

Featurepnpmnpm
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 😀