Skip to content

Commit ccebf0f

Browse files
chore: update benchmarks
1 parent e9b398b commit ccebf0f

3,283 files changed

Lines changed: 169991 additions & 44 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

benchmarks.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Benchmarks of JavaScript Package Managers
22

3-
**Last benchmarked at**: _Aug 18, 2026, 9:49 PM_ (_daily_ updated).
3+
**Last benchmarked at**: _Aug 18, 2026, 11:28 PM_ (_daily_ updated).
44

55
This benchmark compares the performance of npm, pnpm, Yarn, Yarn PnP, and Bun (check [Yarn's benchmarks](https://yarnpkg.com/benchmarks) for any other Yarn modes that are not included here). Every package manager installs through the same [pnpr](https://pnpm.io/pnpr) registry (v0.1.0-alpha.7) across an emulated 50ms round trip at 200 Mbit/s, so they all face one registry over one reproducible network instead of whatever link the benchmark machine happens to have. pnpm 12 is measured twice: once on its own, and once resolving its dependency graph [on the server](https://pnpm.io/pnpr/install-acceleration) instead of walking it itself. The page also compares how fast pnpm, fnm, and nvm install and switch Node.js versions.
66

@@ -18,8 +18,8 @@ Each row's label lists which of `cache`, `lockfile`, and `node_modules` are warm
1818
- `cache`: a developer reinstalling without a lockfile.
1919
- `lockfile`: a CI server doing its first install.
2020
- `cache+lockfile`: a developer reinstalling a known project.
21-
- `node_modules`: the cache and lockfile are deleted and install is run again.
2221
- `cache+node_modules`: the lockfile is deleted and install is run again.
22+
- `node_modules`: the cache and lockfile are deleted and install is run again.
2323
- `lockfile+node_modules`: the cache is deleted and install is run again.
2424
- `cache+lockfile+node_modules`: re-running install when nothing has changed.
2525
- `update`: dependency versions are bumped in `package.json` and install is run again.
@@ -30,35 +30,35 @@ The app's `package.json` [here](https://github.com/pnpm/benchmarks/blob/main/fix
3030

3131
| action | cache | lockfile | node_modules| npm | pnpm | [pnpm 🦀](https://github.com/pnpm/pacquet) | [pnpm + pnpr](https://pnpm.io/pnpr/install-acceleration) | Yarn | Yarn PnP | Bun |
3232
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
33-
| install | | | | 48.1s | 8.2s | 5s | 3.4s | 8.2s | 4.9s | 4.9s |
34-
| install || | | 13.5s | 4.6s | 1.1s | 758ms | 5.6s | 3.7s | 764ms |
35-
| install | || | 12.6s | 6.8s | 4.2s | 3.4s | 6.2s | 2.9s | 3s |
36-
| install ||| | 8.8s | 2.5s | 639ms | 678ms | 2s | 148ms | 743ms |
37-
| install | | || 1.8s | 754ms | 67ms | 71ms | 8.6s | n/a | 4.2s |
38-
| install | | || 1.7s | 749ms | 59ms | 63ms | 3.8s | n/a | 1.9s |
39-
| install | ||| 1.3s | 733ms | 74ms | 80ms | 6.8s | n/a | 45ms |
40-
| install |||| 1.3s | 593ms | 19ms | 18ms | 1.3s | n/a | 46ms |
33+
| install | | | | 47.9s | 8.1s | 5s | 3.4s | 8.2s | 4.8s | 4.9s |
34+
| install || | | 13.3s | 4.5s | 1.1s | 758ms | 5.6s | 3.6s | 764ms |
35+
| install | || | 12.6s | 6.7s | 4.2s | 3.4s | 6.2s | 2.9s | 3s |
36+
| install ||| | 8.5s | 2.4s | 639ms | 662ms | 2s | 148ms | 743ms |
37+
| install | | || 1.7s | 731ms | 59ms | 63ms | 3.8s | n/a | 1.9s |
38+
| install | | || 1.7s | 740ms | 66ms | 71ms | 8.5s | n/a | 4.2s |
39+
| install | ||| 1.3s | 733ms | 72ms | 80ms | 6.7s | n/a | 45ms |
40+
| install |||| 1.3s | 584ms | 19ms | 18ms | 1.3s | n/a | 46ms |
4141
| update | n/a | n/a | n/a | 8.8s | 7.9s | 3.1s | 1.1s | 2.8s | 2.6s | 719ms |
4242

43-
<img alt="Graph of the alotta-files results" src="/img/benchmarks/alotta-files.svg?v=728eb224" />
43+
<img alt="Graph of the alotta-files results" src="/img/benchmarks/alotta-files.svg?v=1a2011e8" />
4444

4545
### pnpm vs pnpm 🦀
4646

4747
pnpm v12 will use a new installation engine for fetching and linking written in Rust. See [pacquet](https://github.com/pnpm/pacquet).
4848

4949
| action | cache | lockfile | node_modules| pnpm | [pnpm 🦀](https://github.com/pnpm/pacquet) |
5050
| --- | --- | --- | --- | --- | --- |
51-
| install | | | | 8.2s | 5s |
52-
| install | || | 6.8s | 4.2s |
53-
| install || | | 4.6s | 1.1s |
54-
| install ||| | 2.5s | 639ms |
55-
| install | | || 754ms | 67ms |
56-
| install | | || 749ms | 59ms |
57-
| install | ||| 733ms | 74ms |
58-
| install |||| 593ms | 19ms |
51+
| install | | | | 8.1s | 5s |
52+
| install | || | 6.7s | 4.2s |
53+
| install || | | 4.5s | 1.1s |
54+
| install ||| | 2.4s | 639ms |
55+
| install | | || 740ms | 66ms |
56+
| install | ||| 733ms | 72ms |
57+
| install | | || 731ms | 59ms |
58+
| install |||| 584ms | 19ms |
5959
| update | n/a | n/a | n/a | 7.9s | 3.1s |
6060

61-
<img alt="Graph comparing pnpm versions on the alotta-files fixture" src="/img/benchmarks/alotta-files-pnpm.svg?v=ff9bfd31" />
61+
<img alt="Graph comparing pnpm versions on the alotta-files fixture" src="/img/benchmarks/alotta-files-pnpm.svg?v=5ae9cbf8" />
6262

6363
## Node.js Version Management
6464

@@ -68,9 +68,9 @@ pnpm installs and switches Node.js versions itself, so a separate version manage
6868
| --- | --- | --- | --- |
6969
| install Node.js 24 with nothing cached | 1.2s | 2.3s | 3.2s |
7070
| install Node.js 24 that was installed before | 170ms | 2.4s | 2.9s |
71-
| run `node` in a project pinned to Node.js 22 | 9ms | 4ms | 96ms |
71+
| run `node` in a project pinned to Node.js 22 | 9ms | 4ms | 94ms |
7272

73-
<img alt="Graph comparing Node.js version managers on installing Node.js" src="/img/benchmarks/node-versions.svg?v=4b19a128" />
73+
<img alt="Graph comparing Node.js version managers on installing Node.js" src="/img/benchmarks/node-versions.svg?v=0565ee83" />
7474

7575
A few things to keep in mind when reading these numbers:
7676

img/benchmarks/alotta-files-pnpm.svg

Lines changed: 5 additions & 5 deletions
Loading

img/benchmarks/alotta-files.svg

Lines changed: 15 additions & 15 deletions
Loading

img/benchmarks/node-versions.svg

Lines changed: 2 additions & 2 deletions
Loading

results/bun/1.3.14/alotta-files-pnpr.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,33 @@
118118
withWarmModules: 4265
119119
updatedDependencies: 733
120120
size: 330577930
121+
- firstInstall: 4993
122+
repeatInstall: 50
123+
withWarmCacheAndLockfile: 764
124+
withWarmCache: 855
125+
withLockfile: 3078
126+
withWarmCacheAndModules: 2042
127+
withWarmModulesAndLockfile: 49
128+
withWarmModules: 4325
129+
updatedDependencies: 824
130+
size: 329759740
131+
- firstInstall: 5027
132+
repeatInstall: 49
133+
withWarmCacheAndLockfile: 766
134+
withWarmCache: 787
135+
withLockfile: 3015
136+
withWarmCacheAndModules: 2149
137+
withWarmModulesAndLockfile: 47
138+
withWarmModules: 4531
139+
updatedDependencies: 825
140+
size: 329871076
141+
- firstInstall: 4999
142+
repeatInstall: 52
143+
withWarmCacheAndLockfile: 744
144+
withWarmCache: 778
145+
withLockfile: 3039
146+
withWarmCacheAndModules: 1940
147+
withWarmModulesAndLockfile: 48
148+
withWarmModules: 4367
149+
updatedDependencies: 729
150+
size: 329759740

results/npm/12.0.2/alotta-files-pnpr.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,33 @@
118118
withWarmModules: 1827
119119
updatedDependencies: 8872
120120
size: 323741734
121+
- firstInstall: 48439
122+
repeatInstall: 1332
123+
withWarmCacheAndLockfile: 8828
124+
withWarmCache: 13667
125+
withLockfile: 12838
126+
withWarmCacheAndModules: 1844
127+
withWarmModulesAndLockfile: 1395
128+
withWarmModules: 1807
129+
updatedDependencies: 8888
130+
size: 323741890
131+
- firstInstall: 47985
132+
repeatInstall: 1317
133+
withWarmCacheAndLockfile: 8546
134+
withWarmCache: 13356
135+
withLockfile: 12608
136+
withWarmCacheAndModules: 1787
137+
withWarmModulesAndLockfile: 1321
138+
withWarmModules: 1780
139+
updatedDependencies: 8834
140+
size: 323741890
141+
- firstInstall: 49139
142+
repeatInstall: 1449
143+
withWarmCacheAndLockfile: 10386
144+
withWarmCache: 15233
145+
withLockfile: 13870
146+
withWarmCacheAndModules: 1959
147+
withWarmModulesAndLockfile: 1449
148+
withWarmModules: 1958
149+
updatedDependencies: 9188
150+
size: 323741890

results/nvm/0.40.7/node-versions.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,12 @@
1616
- cleanInstall: 3419.3
1717
warmStoreInstall: 2936.09
1818
runInProject: 108.78
19+
- cleanInstall: 3552.11
20+
warmStoreInstall: 2979.76
21+
runInProject: 106.23
22+
- cleanInstall: 4064.28
23+
warmStoreInstall: 3110.32
24+
runInProject: 103.54
25+
- cleanInstall: 3655.45
26+
warmStoreInstall: 2960.68
27+
runInProject: 94.36

results/pnpm11/11.22.0/alotta-files-pnpr.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,33 @@
118118
withWarmModules: 761
119119
updatedDependencies: 8021
120120
size: 307865227
121+
- firstInstall: 8155
122+
repeatInstall: 593
123+
withWarmCacheAndLockfile: 2523
124+
withWarmCache: 4655
125+
withLockfile: 6787
126+
withWarmCacheAndModules: 765
127+
withWarmModulesAndLockfile: 778
128+
withWarmModules: 740
129+
updatedDependencies: 8131
130+
size: 307865227
131+
- firstInstall: 8180
132+
repeatInstall: 584
133+
withWarmCacheAndLockfile: 2474
134+
withWarmCache: 4599
135+
withLockfile: 6769
136+
withWarmCacheAndModules: 731
137+
withWarmModulesAndLockfile: 769
138+
withWarmModules: 741
139+
updatedDependencies: 8066
140+
size: 307869323
141+
- firstInstall: 8298
142+
repeatInstall: 603
143+
withWarmCacheAndLockfile: 2714
144+
withWarmCache: 4724
145+
withLockfile: 7035
146+
withWarmCacheAndModules: 764
147+
withWarmModulesAndLockfile: 736
148+
withWarmModules: 781
149+
updatedDependencies: 8123
150+
size: 307865227

results/pnpm12/12.0.0-rc.7/alotta-files-pnpr.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,33 @@
5858
withWarmModules: 69
5959
updatedDependencies: 3335
6060
size: 325844452
61+
- firstInstall: 5223
62+
repeatInstall: 20
63+
withWarmCacheAndLockfile: 700
64+
withWarmCache: 1129
65+
withLockfile: 4537
66+
withWarmCacheAndModules: 63
67+
withWarmModulesAndLockfile: 76
68+
withWarmModules: 68
69+
updatedDependencies: 3309
70+
size: 325836260
71+
- firstInstall: 5083
72+
repeatInstall: 20
73+
withWarmCacheAndLockfile: 663
74+
withWarmCache: 1131
75+
withLockfile: 4582
76+
withWarmCacheAndModules: 61
77+
withWarmModulesAndLockfile: 76
78+
withWarmModules: 69
79+
updatedDependencies: 3311
80+
size: 325844452
81+
- firstInstall: 5147
82+
repeatInstall: 19
83+
withWarmCacheAndLockfile: 643
84+
withWarmCache: 1121
85+
withLockfile: 4326
86+
withWarmCacheAndModules: 61
87+
withWarmModulesAndLockfile: 72
88+
withWarmModules: 66
89+
updatedDependencies: 3254
90+
size: 325836260

0 commit comments

Comments
 (0)