Type to search the fnpm documentation.

SOON fnpm v0.0.3

Less time
installing.
Less disk.
Fuck NPM.

A Rust-backed package manager for JavaScript. Native installs, a shared package store, and familiar Node.js projects. Bring your lockfile. Keep building.

Try fnpm
npm install -g fnpm

Public npm publication pending. Build from source ↗

Then follow the quickstart

Installing OpenNext Cloudflare

23 workspaces · pnpm lockfile · 8ea9eb9 ↗

LINUX X64

Warm cache · seconds, median of 3 runs

fnpmv0.0.2
781msfnpm 0.0.2 · 0.7809 s (range 0.5714–1.0977 s) · lock: migrated from pnpm-lock.yaml
bunv1.4.4
963msbun 1.4.4 · 0.9632 s (range 0.5732–1.1921 s) · lock: migrated from pnpm-lock.yaml
pnpmv10.33.0
6.19spnpm 10.33.0 · 6.1904 s (range 6.0119–6.3856 s) · lock: the project's own pnpm-lock.yaml
yarnv1.22.22 · fresh resolve
can't install this repository
—yarn 1.22.22: yarn cannot read catalog: dependency specifiers
npmv11.19.1 · fresh resolve
can't install this repository
—npm 11.19.1: npm cannot read workspace: or catalog: dependency specifiers
View data table
OpenNext Cloudflare: Install duration, median of 3 runs
Tool / versionSecondsLockfile
fnpm 0.0.20.7809migrated from pnpm-lock.yaml
bun 1.4.40.9632migrated from pnpm-lock.yaml
pnpm 10.33.06.1904the project's own pnpm-lock.yaml
yarn 1.22.22—yarn cannot read catalog: dependency specifiers
npm 11.19.1—npm cannot read workspace: or catalog: dependency specifiers
fnpmOther package managersLower is better

1.23× faster than Bun in this snapshot

Measured October 26, 2026 · fnpm · Bun · pnpm · Yarn · npm · scripts disabled · warm OS and registry caches. A tool that cannot install a repository's format keeps its row. 8 more repositories are being measured. Methodology ↗

MEASURED IN 2 REAL REPOSITORIES

OpenNext ↗tRPC ↗

INSTALL BENCHMARKS

The install you
actually run.

Cold cache, warm cache, or a no-op reinstall. fnpm, Bun, pnpm, Yarn and npm on 2 pinned repositories, each followed by a real project check.

Full results & methodology →
Seconds · median of three runs · lower is better

Cold install, with a lockfile

Empty package cache · no node_modules · prepared lockfile

fnpmv0.0.2
5.54sfnpm 0.0.2 · 5.5416 s (range 4.7688–5.7745 s) · lock: migrated from pnpm-lock.yaml
bunv1.4.4
5.68sbun 1.4.4 · 5.6774 s (range 4.9622–6.8519 s) · lock: migrated from pnpm-lock.yaml
pnpmv10.33.0
15.24spnpm 10.33.0 · 15.2390 s (range 14.9222–15.8688 s) · lock: the project's own pnpm-lock.yaml
yarnv1.22.22 · fresh resolve
can't install this repository
—yarn 1.22.22: yarn cannot read catalog: dependency specifiers
npmv11.19.1 · fresh resolve
can't install this repository
—npm 11.19.1: npm cannot read workspace: or catalog: dependency specifiers
View data table
OpenNext Cloudflare: Install duration, median of 3 runs
Tool / versionSecondsLockfile
fnpm 0.0.25.5416migrated from pnpm-lock.yaml
bun 1.4.45.6774migrated from pnpm-lock.yaml
pnpm 10.33.015.2390the project's own pnpm-lock.yaml
yarn 1.22.22—yarn cannot read catalog: dependency specifiers
npm 11.19.1—npm cannot read workspace: or catalog: dependency specifiers

1.02× faster than Bun in this snapshot

Fresh checkout, warm cache

Packages already cached · node_modules rebuilt

fnpmv0.0.2
781msfnpm 0.0.2 · 0.7809 s (range 0.5714–1.0977 s) · lock: migrated from pnpm-lock.yaml
bunv1.4.4
963msbun 1.4.4 · 0.9632 s (range 0.5732–1.1921 s) · lock: migrated from pnpm-lock.yaml
pnpmv10.33.0
6.19spnpm 10.33.0 · 6.1904 s (range 6.0119–6.3856 s) · lock: the project's own pnpm-lock.yaml
yarnv1.22.22 · fresh resolve
can't install this repository
—yarn 1.22.22: yarn cannot read catalog: dependency specifiers
npmv11.19.1 · fresh resolve
can't install this repository
—npm 11.19.1: npm cannot read workspace: or catalog: dependency specifiers
View data table
OpenNext Cloudflare: Install duration, median of 3 runs
Tool / versionSecondsLockfile
fnpm 0.0.20.7809migrated from pnpm-lock.yaml
bun 1.4.40.9632migrated from pnpm-lock.yaml
pnpm 10.33.06.1904the project's own pnpm-lock.yaml
yarn 1.22.22—yarn cannot read catalog: dependency specifiers
npm 11.19.1—npm cannot read workspace: or catalog: dependency specifiers

1.23× faster than Bun in this snapshot

Everything already up to date

Keep cache and node_modules · reinstall after nothing changed

fnpmv0.0.2
6.8msfnpm 0.0.2 · 0.0068 s (range 0.0066–0.0074 s) · lock: migrated from pnpm-lock.yaml
bunv1.4.4
89msbun 1.4.4 · 0.0888 s (range 0.0773–0.0928 s) · lock: migrated from pnpm-lock.yaml
pnpmv10.33.0
2.64spnpm 10.33.0 · 2.6415 s (range 2.636–2.7777 s) · lock: the project's own pnpm-lock.yaml
yarnv1.22.22 · fresh resolve
can't install this repository
—yarn 1.22.22: yarn cannot read catalog: dependency specifiers
npmv11.19.1 · fresh resolve
can't install this repository
—npm 11.19.1: npm cannot read workspace: or catalog: dependency specifiers
View data table
OpenNext Cloudflare: Install duration, median of 3 runs
Tool / versionSecondsLockfile
fnpm 0.0.20.0068migrated from pnpm-lock.yaml
bun 1.4.40.0888migrated from pnpm-lock.yaml
pnpm 10.33.02.6415the project's own pnpm-lock.yaml
yarn 1.22.22—yarn cannot read catalog: dependency specifiers
npm 11.19.1—npm cannot read workspace: or catalog: dependency specifiers

13.06× faster than Bun in this snapshot

Linux x64 / ext4 · 8 CPU cores · Node 24.22.1 · private package-manager caches · lifecycle scripts disabled · shared machine. Versions: Bun 1.4.4; pnpm 10.33.0, 12.4.1; Yarn 1.22.22; npm 11.19.1. “Fresh resolve” means the tool had no lockfile of its own in that repository, so its package versions can differ. 4 tool/repository pairs could not install and are marked. See ranges, package sets, and project checks ↗

DISK USAGE

Count the cache.
Not just the folder.

Combined physical space for node_modules and each tool's private package cache or store, measured before any build. Shared hardlinks count once.

How the package store works →

OpenNext Cloudflare · combined physical disk, lower is better

fnpmv0.0.2
2.53 GiBfnpm 0.0.2 · 2592.96 MiB · node_modules 2518.90 MiB + store 74.06 MiB · lock: migrated from pnpm-lock.yaml
bunv1.4.4
2.59 GiBbun 1.4.4 · 2653.38 MiB · node_modules 2588.28 MiB + store 65.10 MiB · lock: migrated from pnpm-lock.yaml
pnpmv10.33.0
2.52 GiBpnpm 10.33.0 · 2580.19 MiB · node_modules 2449.55 MiB + store 130.64 MiB · lock: the project's own pnpm-lock.yaml
yarnv1.22.22 · fresh resolve
can't install this repository
—yarn 1.22.22: yarn cannot read catalog: dependency specifiers
npmv11.19.1 · fresh resolve
can't install this repository
—npm 11.19.1: npm cannot read workspace: or catalog: dependency specifiers
View data table
OpenNext Cloudflare: Combined physical disk (node_modules + cache/store)
Tool / versionMiBLockfile
fnpm 0.0.22592.96migrated from pnpm-lock.yaml
bun 1.4.42653.38migrated from pnpm-lock.yaml
pnpm 10.33.02580.19the project's own pnpm-lock.yaml
yarn 1.22.22—yarn cannot read catalog: dependency specifiers
npm 11.19.1—npm cannot read workspace: or catalog: dependency specifiers

fnpm used 2.3% less disk than Bun

Shared reflink extents are not identified. Package sets differ where a tool resolved its own versions. Every repository ↗