CS AI Oct 13, 2026 2 min read

Better Worktrees, Part 2: The Benchmarks

Putting Treepool to the test and finding some differences between package managers along the way


This follows up on my Treepool post with some benchmark numbers.

The experiment

I measured how much time twt could save across monorepos of different sizes and different package managers on my M4 Pro.

The monorepos had the following numbers of direct dependencies:

  • XS: 160
  • S: 240
  • M: 320
  • L: 400
  • XL: 473

These counts include only direct dependencies. The XL fixtures contain roughly 5,700 unique package/version pairs, including transitive dependencies.

I tested the following runtimes/package managers:

  • npm
  • yarn v1
  • yarn berry with nodeLinker=node_modules
  • pnpm with default node-linker=isolated
  • bun with linker=isolated

Both paths used a warm package cache, which is a reasonable assumption for development environments. The twt path also used an available warm slot where dependencies had already been installed at least once.

I then measured the time it takes to:

  • Create a new regular worktree and install deps
  • versus allocate a warm twt slot and install dependencies

The observations & my thoughts

  • twt was fastest in every tested case, which is unsurprising since twt slots literally have the dependencies pre-installed.
  • Bun is fast. twt still reduces the time until a worktree is ready, but the absolute savings are smaller with Bun.
  • The time saved with twt is cool, but I was more fascinated by the differences in install time between package managers, even with warm caches.

The raw numbers

Worktree → ready to code 5 runs / median time
Regular worktree Warm Treepool slot
XS160 direct dependencies · 12 workspaces
Seconds · same linear scale for all managers in this size
npm v11.19.0 4.5× faster · 2.61 s saved
Regular
3.35 s
Treepool
0.74 s
Breakdown & measurements 1,016 unique packages
Unique package/version pairs
1,016
Installed instances
1,091
Median times in seconds
StageRegularTreepool
Allocate0.04 s0.20 s
Install3.31 s0.54 s
Total3.35 s0.74 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2440.7200.965
1Regular0.0463.3363.383
2Regular0.0423.3103.353
2Treepool0.2070.4910.699
3Treepool0.1860.5410.728
3Regular0.0453.3013.347
4Regular0.0393.2603.299
4Treepool0.2040.5420.747
5Treepool0.2030.5370.742
5Regular0.0473.3583.406
Yarn v1 v1.22.22 8.5× faster · 3.18 s saved
Regular
3.60 s
Treepool
0.42 s
Breakdown & measurements 1,021 unique packages
Unique package/version pairs
1,021
Installed instances
1,106
Median times in seconds
StageRegularTreepool
Allocate0.04 s0.18 s
Install3.56 s0.24 s
Total3.60 s0.42 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2430.2390.483
1Regular0.0385.3705.410
2Regular0.0403.5593.600
2Treepool0.1830.2380.422
3Treepool0.1870.2410.428
3Regular0.0383.5623.601
4Regular0.0383.5553.593
4Treepool0.1830.2310.414
5Treepool0.1800.2360.417
5Regular0.0703.5993.671
Yarn Berry v4.18.1 3.6× faster · 2.22 s saved
Regular
3.07 s
Treepool
0.85 s
Breakdown & measurements 1,036 unique packages
Unique package/version pairs
1,036
Installed instances
1,126
Median times in seconds
StageRegularTreepool
Allocate0.04 s0.20 s
Install3.02 s0.65 s
Total3.07 s0.85 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.0463.0243.072
1Treepool0.2580.7711.030
2Treepool0.1890.6480.838
2Regular0.0403.0053.046
3Regular0.0413.0283.070
3Treepool0.2070.6630.871
4Treepool0.1910.6500.842
4Regular0.0442.9162.961
5Regular0.0443.0443.088
5Treepool0.1970.6550.853
pnpm v12.10.1 4.4× faster · 0.81 s saved
Regular
1.05 s
Treepool
0.24 s
Breakdown & measurements 1,016 unique packages
Unique package/version pairs
1,016
Installed instances
1,016
Median times in seconds
StageRegularTreepool
Allocate0.05 s0.19 s
Install1.01 s0.05 s
Total1.05 s0.24 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.0793.2523.332
1Treepool0.2590.2560.516
2Treepool0.1900.0450.237
2Regular0.0461.0081.054
3Regular0.0481.0051.055
3Treepool0.2040.0410.246
4Treepool0.1920.0470.240
4Regular0.0460.9761.023
5Regular0.0450.9701.016
5Treepool0.1860.0460.233
Bun v1.3.14 3.0× faster · 0.45 s saved
Regular
0.68 s
Treepool
0.23 s
Breakdown & measurements 1,016 unique packages
Unique package/version pairs
1,016
Installed instances
1,018
Median times in seconds
StageRegularTreepool
Allocate0.04 s0.18 s
Install0.60 s0.04 s
Total0.68 s0.23 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.1800.4040.588
1Regular0.0761.0711.147
2Regular0.0400.6410.682
2Treepool0.2380.0390.278
3Treepool0.1850.0390.225
3Regular0.0400.5980.639
4Regular0.0730.6020.676
4Treepool0.1830.0370.220
5Treepool0.1790.0400.220
5Regular0.0380.6040.643
S240 direct dependencies · 24 workspaces
Seconds · same linear scale for all managers in this size
npm v11.19.0 7.2× faster · 9.79 s saved
Regular
11.36 s
Treepool
1.57 s
Breakdown & measurements 1,855 unique packages
Unique package/version pairs
1,855
Installed instances
3,337
Median times in seconds
StageRegularTreepool
Allocate0.09 s0.20 s
Install11.28 s1.36 s
Total11.36 s1.57 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.07811.50011.578
1Treepool0.1981.4561.655
2Treepool0.2091.3611.571
2Regular0.08811.29311.381
3Regular0.08111.27911.361
3Treepool0.1981.3591.558
4Treepool0.1891.4181.608
4Regular0.09011.24911.340
5Regular0.08811.27211.361
5Treepool0.2031.3601.563
Yarn v1 v1.22.22 23.6× faster · 13.09 s saved
Regular
13.67 s
Treepool
0.58 s
Breakdown & measurements 1,864 unique packages
Unique package/version pairs
1,864
Installed instances
3,350
Median times in seconds
StageRegularTreepool
Allocate0.07 s0.24 s
Install13.59 s0.35 s
Total13.67 s0.58 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.07615.26015.337
1Treepool0.2420.3520.595
2Treepool0.1850.3510.537
2Regular0.07214.49114.564
3Regular0.07513.42713.504
3Treepool0.2410.3400.583
4Treepool0.2350.3400.577
4Regular0.06813.51413.584
5Regular0.07413.59413.669
5Treepool0.2280.3490.578
Yarn Berry v4.18.1 4.9× faster · 6.53 s saved
Regular
8.20 s
Treepool
1.66 s
Breakdown & measurements 1,876 unique packages
Unique package/version pairs
1,876
Installed instances
3,169
Median times in seconds
StageRegularTreepool
Allocate0.08 s0.20 s
Install8.11 s1.47 s
Total8.20 s1.66 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2481.6221.872
1Regular0.0748.1308.205
2Regular0.0858.1098.195
2Treepool0.1981.5241.724
3Treepool0.1951.4681.664
3Regular0.0488.1558.204
4Regular0.0848.0678.152
4Treepool0.1871.4511.640
5Treepool0.2001.4571.658
5Regular0.0808.0498.131
pnpm v12.10.1 21.4× faster · 6.56 s saved
Regular
6.88 s
Treepool
0.32 s
Breakdown & measurements 1,855 unique packages
Unique package/version pairs
1,855
Installed instances
1,880
Median times in seconds
StageRegularTreepool
Allocate0.09 s0.21 s
Install6.80 s0.09 s
Total6.88 s0.32 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2020.3740.578
1Regular0.0728.6758.748
2Regular0.0856.7096.796
2Treepool0.2060.0790.285
3Treepool0.2380.0830.322
3Regular0.0896.8226.912
4Regular0.0826.7986.882
4Treepool0.2490.0860.337
5Treepool0.1890.0900.280
5Regular0.0896.7816.871
Bun v1.3.14 4.0× faster · 1.11 s saved
Regular
1.47 s
Treepool
0.37 s
Breakdown & measurements 1,855 unique packages
Unique package/version pairs
1,855
Installed instances
1,943
Median times in seconds
StageRegularTreepool
Allocate0.07 s0.24 s
Install1.39 s0.12 s
Total1.47 s0.37 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.0701.9872.059
1Treepool0.2390.4540.695
2Treepool0.2380.1230.362
2Regular0.0781.3881.467
3Regular0.0731.4351.509
3Treepool0.2340.1310.365
4Treepool0.2420.1220.366
4Regular0.0701.3921.464
5Regular0.0761.3941.471
5Treepool0.1870.0770.265
M320 direct dependencies · 36 workspaces
Seconds · same linear scale for all managers in this size
npm v11.19.0 8.0× faster · 22.04 s saved
Regular
25.17 s
Treepool
3.13 s
Breakdown & measurements 2,980 unique packages
Unique package/version pairs
2,980
Installed instances
5,561
Median times in seconds
StageRegularTreepool
Allocate0.08 s0.20 s
Install25.09 s2.93 s
Total25.17 s3.13 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.1992.9333.133
1Regular0.08425.06125.147
2Regular0.08425.19325.277
2Treepool0.2443.0493.294
3Treepool0.1982.8263.025
3Regular0.13824.96925.108
4Regular0.08625.16525.252
4Treepool0.2523.1533.406
5Treepool0.2032.8383.042
5Regular0.08325.08625.170
Yarn v1 v1.22.22 90.7× faster · 66.31 s saved
Regular
67.05 s
Treepool
0.74 s
Breakdown & measurements 3,014 unique packages
Unique package/version pairs
3,014
Installed instances
5,445
Median times in seconds
StageRegularTreepool
Allocate0.13 s0.24 s
Install66.93 s0.50 s
Total67.05 s0.74 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2340.5040.739
1Regular0.12966.68566.815
2Regular0.12667.60067.728
2Treepool0.2920.5040.798
3Treepool0.1850.5060.692
3Regular0.12666.92767.054
4Regular0.13066.83666.967
4Treepool0.2900.5060.797
5Treepool0.2360.5030.740
5Regular0.13066.97667.107
Yarn Berry v4.18.1 6.3× faster · 15.64 s saved
Regular
18.62 s
Treepool
2.98 s
Breakdown & measurements 3,028 unique packages
Unique package/version pairs
3,028
Installed instances
4,799
Median times in seconds
StageRegularTreepool
Allocate0.08 s0.26 s
Install18.55 s2.72 s
Total18.62 s2.98 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.09018.86718.958
1Treepool0.2542.7583.012
2Treepool0.3142.4462.761
2Regular0.08218.50918.592
3Regular0.07018.61618.688
3Treepool0.2572.7192.977
4Treepool0.1982.5252.723
4Regular0.07218.54718.620
5Regular0.08018.52618.607
5Treepool0.2672.7453.013
pnpm v12.10.1 61.2× faster · 22.98 s saved
Regular
23.36 s
Treepool
0.38 s
Breakdown & measurements 2,994 unique packages
Unique package/version pairs
2,994
Installed instances
3,116
Median times in seconds
StageRegularTreepool
Allocate0.08 s0.25 s
Install23.27 s0.14 s
Total23.36 s0.38 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.08325.65825.743
1Treepool0.2540.6710.926
2Treepool0.1980.1460.345
2Regular0.08026.75826.839
3Regular0.09023.27423.365
3Treepool0.2570.1410.399
4Treepool0.2490.1320.381
4Regular0.07921.86421.944
5Regular0.08221.11721.200
5Treepool0.2010.1410.343
Bun v1.3.14 12.9× faster · 4.99 s saved
Regular
5.41 s
Treepool
0.42 s
Breakdown & measurements 2,978 unique packages
Unique package/version pairs
2,978
Installed instances
3,194
Median times in seconds
StageRegularTreepool
Allocate0.08 s0.24 s
Install5.34 s0.18 s
Total5.41 s0.42 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2370.7711.009
1Regular0.1316.7666.898
2Regular0.0695.2075.277
2Treepool0.2330.1760.410
3Treepool0.1800.1830.364
3Regular0.0755.3355.411
4Regular0.0725.2985.370
4Treepool0.2370.1880.426
5Treepool0.2370.1820.420
5Regular0.0775.4625.540
L400 direct dependencies · 48 workspaces
Seconds · same linear scale for all managers in this size
npm v11.19.0 8.1× faster · 32.82 s saved
Regular
37.45 s
Treepool
4.63 s
Breakdown & measurements 3,936 unique packages
Unique package/version pairs
3,936
Installed instances
7,059
Median times in seconds
StageRegularTreepool
Allocate0.14 s0.26 s
Install37.32 s4.36 s
Total37.45 s4.63 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.14137.12437.268
1Treepool0.2564.4644.721
2Treepool0.1934.0914.285
2Regular0.20036.82737.029
3Regular0.12837.31837.449
3Treepool0.3044.4244.732
4Treepool0.2564.1434.400
4Regular0.13737.86238.001
5Regular0.13237.93838.072
5Treepool0.2614.3644.627
Yarn v1 v1.22.22 111.8× faster · 105.72 s saved
Regular
106.68 s
Treepool
0.95 s
Breakdown & measurements 3,982 unique packages
Unique package/version pairs
3,982
Installed instances
6,761
Median times in seconds
StageRegularTreepool
Allocate0.13 s0.29 s
Install106.55 s0.66 s
Total106.68 s0.95 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.127106.549106.678
1Treepool0.2890.6640.954
2Treepool0.2420.6600.903
2Regular0.132107.156107.289
3Regular0.128105.921106.050
3Treepool0.3170.6710.989
4Treepool0.1940.6390.833
4Regular0.135106.208106.344
5Regular0.130107.494107.625
5Treepool0.2970.6690.967
Yarn Berry v4.18.1 6.6× faster · 23.71 s saved
Regular
27.92 s
Treepool
4.21 s
Breakdown & measurements 3,995 unique packages
Unique package/version pairs
3,995
Installed instances
6,115
Median times in seconds
StageRegularTreepool
Allocate0.13 s0.26 s
Install27.81 s3.95 s
Total27.92 s4.21 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2623.9514.215
1Regular0.13028.07928.211
2Regular0.12927.80827.938
2Treepool0.2594.0084.268
3Treepool0.2043.6833.888
3Regular0.08527.83827.924
4Regular0.14227.60127.744
4Treepool0.2583.9724.232
5Treepool0.1923.6573.850
5Regular0.13727.51727.655
pnpm v12.10.1 32.5× faster · 31.00 s saved
Regular
31.98 s
Treepool
0.98 s
Breakdown & measurements 3,957 unique packages
Unique package/version pairs
3,957
Installed instances
4,082
Median times in seconds
StageRegularTreepool
Allocate0.14 s0.25 s
Install31.84 s0.72 s
Total31.98 s0.98 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2660.7160.983
1Regular0.14331.83631.980
2Regular0.13330.44330.577
2Treepool0.2630.7230.987
3Treepool0.1960.1470.344
3Regular0.14730.82230.969
4Regular0.08935.20235.292
4Treepool0.2490.7741.024
5Treepool0.2040.1900.395
5Regular0.13837.29937.438
Bun v1.3.14 18.5× faster · 9.08 s saved
Regular
9.59 s
Treepool
0.52 s
Breakdown & measurements 3,935 unique packages
Unique package/version pairs
3,935
Installed instances
4,165
Median times in seconds
StageRegularTreepool
Allocate0.13 s0.24 s
Install9.47 s0.29 s
Total9.59 s0.52 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.13010.02910.160
1Treepool0.2351.1031.339
2Treepool0.2300.2860.518
2Regular0.1329.99910.133
3Regular0.1279.4659.593
3Treepool0.2360.2780.515
4Treepool0.2320.2850.518
4Regular0.1299.4389.568
5Regular0.1279.4229.551
5Treepool0.2420.2360.479
XL473 direct dependencies · 60 workspaces
Seconds · same linear scale for all managers in this size
npm v11.19.0 5.9× faster · 39.94 s saved
Regular
48.13 s
Treepool
8.19 s
Breakdown & measurements 5,712 unique packages
Unique package/version pairs
5,712
Installed instances
10,743
Median times in seconds
StageRegularTreepool
Allocate0.14 s0.25 s
Install47.99 s7.99 s
Total48.13 s8.19 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2537.8918.145
1Regular0.14448.35148.496
2Regular0.14547.86448.012
2Treepool0.3128.2628.576
3Treepool0.2007.9888.189
3Regular0.13847.74347.882
4Regular0.14548.94849.096
4Treepool0.3028.1668.471
5Treepool0.2027.8218.024
5Regular0.14047.98948.130
Yarn v1 v1.22.22 133.3× faster · 152.17 s saved
Regular
153.32 s
Treepool
1.15 s
Breakdown & measurements 5,763 unique packages
Unique package/version pairs
5,763
Installed instances
10,125
Median times in seconds
StageRegularTreepool
Allocate0.14 s0.24 s
Install153.18 s0.90 s
Total153.32 s1.15 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2390.9361.177
1Regular0.183162.353162.540
2Regular0.132153.132153.265
2Treepool0.2450.9051.151
3Treepool0.2460.8911.138
3Regular0.150172.647172.798
4Regular0.142153.176153.320
4Treepool0.2540.9231.178
5Treepool0.2000.8721.079
5Regular0.133151.710151.844
Yarn Berry v4.18.1 6.3× faster · 29.96 s saved
Regular
35.66 s
Treepool
5.70 s
Breakdown & measurements 5,779 unique packages
Unique package/version pairs
5,779
Installed instances
9,690
Median times in seconds
StageRegularTreepool
Allocate0.13 s0.25 s
Install35.53 s5.45 s
Total35.66 s5.70 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.12835.53335.663
1Treepool0.2505.4505.702
2Treepool0.2014.9485.150
2Regular0.12934.84934.979
3Regular0.14635.89836.045
3Treepool0.2515.4585.710
4Treepool0.2004.9315.132
4Regular0.14634.73434.881
5Regular0.13436.29836.433
5Treepool0.2615.4765.739
pnpm v12.10.1 36.4× faster · 42.07 s saved
Regular
43.26 s
Treepool
1.19 s
Breakdown & measurements 5,730 unique packages
Unique package/version pairs
5,730
Installed instances
5,977
Median times in seconds
StageRegularTreepool
Allocate0.14 s0.24 s
Install43.12 s0.95 s
Total43.26 s1.19 s
Every run · seconds
RunModeAllocateInstallTotal
1Regular0.13846.42246.561
1Treepool0.2531.1231.377
2Treepool0.1970.2090.407
2Regular0.13439.28639.421
3Regular0.12636.87537.002
3Treepool0.2451.0161.263
4Treepool0.1990.2100.410
4Regular0.14343.12043.264
5Regular0.14544.94145.087
5Treepool0.2380.9501.189
Bun v1.3.14 12.5× faster · 11.72 s saved
Regular
12.74 s
Treepool
1.02 s
Breakdown & measurements 5,705 unique packages
Unique package/version pairs
5,705
Installed instances
6,050
Median times in seconds
StageRegularTreepool
Allocate0.13 s0.24 s
Install12.61 s0.78 s
Total12.74 s1.02 s
Every run · seconds
RunModeAllocateInstallTotal
1Treepool0.2362.0582.295
1Regular0.12914.79314.923
2Regular0.12613.05113.178
2Treepool0.2580.7741.034
3Treepool0.2490.7741.023
3Regular0.13412.51612.650
4Regular0.14712.55712.704
4Treepool0.2390.7761.016
5Treepool0.1850.7800.967
5Regular0.12912.61312.743
More details

Total is elapsed time from allocation through install, before verification and cleanup. Stage medians are calculated separately, so they may not add up to the total median. Speedup is regular median total ÷ Treepool median total.

Both paths use warm package caches and identical dependency inputs. Treepool also retains an installed dependency tree. Install scripts are disabled, and execution order alternates across five runs. Initial cache and slot preparation are excluded. Network access is disabled for Yarn, npm and pnpm; Bun uses its warm cache, with offline mode only when supported.

Sizes vary workspace count, dependency overlap and versions as well as direct dependencies. Unique packages means external name/version pairs; installed instances also count duplicate copies and peer variants, excluding workspace packages. These results measure this fixture and machine, with no dependency changes between tasks.

Measured 9 October 2026 · macOS-26.6.2-arm64-arm-64bit · Node v24.21.0 · twt 0.2.1. Run: 20261009T045559-61968.

Explore the source dataJSON ↓Raw CSV ↓