Skip to Content
GuideAll API Comparisons

All API performance comparisons

All 26 exported operation families are measured through the public package, in synchronous and Promise forms. Each API has its own table below, including every measured loss. This is a baseline for choosing native work, not a claim that replacing every Node call with Rust is beneficial.

Reading the results

Measured on Apple M4 Pro, 14 logical CPUs, darwin/arm64, release build. Runtimes: v22.22.0, v24.21.0. 2 warmups and 10 samples per cell; tables show median milliseconds for the entire workload, lower is better. The reports include p90, raw wall/CPU samples, memory deltas and logical throughput. These are local warm-cache results; Windows/Linux performance has not been measured.

  • single is one call; batch-256 is 256 distinct paths (sync sequential, async bounded to eight in flight). This is caller batching, not a Vooya bulk-call extension.
  • Tree cases have 4 or 1,000 files of 4 KiB each, nested directories and one empty directory. File cases also cover an 8 MiB Buffer. UTF-8 cases contain non-ASCII text; stat/lstat separately exercise links.
  • fs-extra and graceful-fs are Node wrappers for ordinary calls. They are useful migration baselines, not independent Rust engines. rimraf and mkdirp have both their default and explicit manual implementations shown.
  • Vooya c4 explicitly selects four internal traversal workers. Node fallback means the public Vooya API delegates to Node; sync cp/rm have no native acceleration, including their c4 column.
  • copyFile / preserve is a composed stat + copy + timestamp/mode restoration workload matching copy-file. scan peers compose crawl + lstat + complete metadata objects + sorting; Node has no identical scan method.
  • Every sample starts with freshly prepared equivalent state. Setup, GC, independent result/content/metadata validation and cleanup are excluded. Mutations are fully checked after timing. No fsync/flush is requested; copies may use filesystem cloning. Logical throughput is not physical disk bandwidth.
  • RSS/heap/external deltas are not peaks. Sub-millisecond single-call rankings are particularly noisy. Neither cold I/O, process startup, error races nor event-loop responsiveness is measured.

Versions: fs-extra 11.4.1; graceful-fs 4.2.11; rimraf 6.1.3; mkdirp 3.0.1; copy-file 11.1.0; fdir 6.5.0; tinyglobby 0.2.17; fast-glob 3.3.3; glob 13.0.6.

Adapter contracts, peer sources and reproduction instructions . The earlier real-repository glob/readdir comparison provides additional tree shapes and multi-pattern workloads.

Batch overview

One representative async row per API/runtime: batch-256 (Buffer or default variant), or tree-1000. The full tables below also show synchronous, tiny, large-file and other variants. The peer column is the fastest non-Vooya implementation in that row, including Node and its wrappers; close differences are not robust rankings.

APINode runtimeNode msBest peer msVooya msNode / Vooya
accessv22.22.01.011fs-extra 0.8140.7541.34Ă—
accessv24.21.00.832graceful-fs 0.8060.7211.15Ă—
appendFilev22.22.05.050node 5.0505.3860.94Ă—
appendFilev24.21.05.163fs-extra 5.0764.8141.07Ă—
chmodv22.22.01.260node 1.2601.5200.83Ă—
chmodv24.21.01.358node 1.3581.6080.84Ă—
chownv22.22.01.197node 1.1971.4830.81Ă—
chownv24.21.01.200node 1.2001.4540.83Ă—
copyFilev22.22.010.392fs-extra 10.28210.4630.99Ă—
copyFilev24.21.010.700fs-extra 10.23010.5081.02Ă—
cpv22.22.0155.804fs-extra 60.992100.3291.55Ă—
cpv24.21.0156.143fs-extra 57.583103.5391.51Ă—
existsv22.22.01.041fs-extra 0.9050.8361.25Ă—
existsv24.21.00.887graceful-fs 0.8800.7161.24Ă—
globv22.22.05.779fdir 1.2083.7501.54Ă—
globv24.21.05.190fdir 1.1883.7531.38Ă—
linkv22.22.034.086graceful-fs 33.17433.1211.03Ă—
linkv24.21.034.108graceful-fs 33.12632.8401.04Ă—
lstatv22.22.01.106fs-extra 1.0030.9651.15Ă—
lstatv24.21.00.966graceful-fs 0.8820.9501.02Ă—
mkdirv22.22.017.899node 17.89917.6351.01Ă—
mkdirv24.21.018.227fs-extra 18.13717.9681.01Ă—
mkdtempv22.22.06.134fs-extra 5.9426.4550.95Ă—
mkdtempv24.21.06.034node 6.0346.5740.92Ă—
readFilev22.22.03.458fs-extra 2.3541.7561.97Ă—
readFilev24.21.03.384fs-extra 2.3121.8171.86Ă—
readdirv22.22.06.050fdir 1.2231.4884.06Ă—
readdirv24.21.05.732fdir 1.2281.6383.50Ă—
readlinkv22.22.00.867node 0.8670.8311.04Ă—
readlinkv24.21.01.094fs-extra 0.9180.7561.45Ă—
realpathv22.22.01.917node 1.9171.6221.18Ă—
realpathv24.21.01.812node 1.8121.6221.12Ă—
renamev22.22.08.234graceful-fs 7.4407.3551.12Ă—
renamev24.21.07.351node 7.3517.3831.00Ă—
rmv22.22.028.889rimraf-manual 26.18645.5650.63Ă—
rmv24.21.028.562rimraf-manual 25.84142.9180.67Ă—
rmdirv22.22.05.151fs-extra 5.0384.9171.05Ă—
rmdirv24.21.05.164graceful-fs 5.0475.2190.99Ă—
scanv22.22.011.681fdir 6.3116.6361.76Ă—
scanv24.21.010.587tinyglobby 5.8976.3701.66Ă—
statv22.22.01.034graceful-fs 0.8900.9641.07Ă—
statv24.21.01.096graceful-fs 0.9071.0051.09Ă—
symlinkv22.22.06.343graceful-fs 6.3276.3001.01Ă—
symlinkv24.21.06.380graceful-fs 6.3496.3871.00Ă—
truncatev22.22.04.000graceful-fs 3.9273.1781.26Ă—
truncatev24.21.04.186fs-extra 4.1033.3491.25Ă—
unlinkv22.22.05.034graceful-fs 4.9594.9831.01Ă—
unlinkv24.21.05.003graceful-fs 4.9734.9781.00Ă—
utimesv22.22.01.135node 1.1351.6020.71Ă—
utimesv24.21.01.230node 1.2301.4660.84Ă—
writeFilev22.22.09.003node 9.0038.0271.12Ă—
writeFilev24.21.08.817fs-extra 8.6907.9351.11Ă—

Per-API tables

access

F_OK on existing regular files. Permission failures are not timed.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0070.0070.0060.007native
v22.22.0single / defaultasync0.0370.0300.0240.040native
v22.22.0batch-256 / defaultsync0.3830.3530.3540.392native
v22.22.0batch-256 / defaultasync1.0110.8140.8720.754native
v24.21.0single / defaultsync0.0070.0080.0060.006native
v24.21.0single / defaultasync0.0310.0260.0230.023native
v24.21.0batch-256 / defaultsync0.3650.3480.3530.362native
v24.21.0batch-256 / defaultasync0.8320.8110.8060.721native

appendFile

Append one payload to an existing file containing an identical payload. Fresh state per sample; no flush.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / buffersync0.0510.0530.0610.047native
v22.22.0single / bufferasync0.1800.1910.1300.084native
v22.22.0batch-256 / buffersync8.2898.2517.9667.976native
v22.22.0batch-256 / bufferasync5.0505.0545.1725.386native
v22.22.0single / utf8sync0.0510.0500.0510.059native
v22.22.0single / utf8async0.1770.1330.1240.082native
v22.22.0batch-256 / utf8sync8.3268.4418.5068.470native
v22.22.0batch-256 / utf8async5.3515.3675.3434.951native
v22.22.08MiB / buffersync0.6140.6100.6000.606native
v22.22.08MiB / bufferasync0.9390.7120.7520.782native
v24.21.0single / buffersync0.0520.0630.0640.060native
v24.21.0single / bufferasync0.1260.1020.1050.073native
v24.21.0batch-256 / buffersync8.8809.4228.7298.942native
v24.21.0batch-256 / bufferasync5.1635.0765.0854.814native
v24.21.0single / utf8sync0.0600.0570.0560.051native
v24.21.0single / utf8async0.1270.1010.1060.072native
v24.21.0batch-256 / utf8sync10.10110.02710.17810.191native
v24.21.0batch-256 / utf8async5.3275.2515.3225.168native
v24.21.08MiB / buffersync0.6280.6370.6470.625native
v24.21.08MiB / bufferasync0.9830.7290.7280.836native

chmod

Change regular-file permissions to 0640. This is a POSIX workload.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0220.0200.0180.019native
v22.22.0single / defaultasync0.0600.0660.0670.052native
v22.22.0batch-256 / defaultsync2.3772.3832.3432.366native
v22.22.0batch-256 / defaultasync1.2601.3871.4361.520native
v24.21.0single / defaultsync0.0200.0210.0200.019native
v24.21.0single / defaultasync0.0550.0630.0580.051native
v24.21.0batch-256 / defaultsync2.4902.4802.5162.454native
v24.21.0batch-256 / defaultasync1.3581.4731.5131.608native

chown

Set each file to the current uid/gid. This measures the allowed syscall path, not a privileged ownership change.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0210.0190.0210.019native
v22.22.0single / defaultasync0.0650.0630.0610.053native
v22.22.0batch-256 / defaultsync2.4762.3772.3002.428native
v22.22.0batch-256 / defaultasync1.1971.4501.4561.483native
v24.21.0single / defaultsync0.0180.0190.0190.019native
v24.21.0single / defaultasync0.0560.0570.0530.051native
v24.21.0batch-256 / defaultsync2.6282.6142.5862.581native
v24.21.0batch-256 / defaultasync1.2001.4901.3471.454native

copyFile

Default rows copy bytes/mode to a fresh destination. Preserve rows also restore timestamps/mode and request advisory cloning. copy-file only participates in the latter contract. Filesystem cloning can dominate large-file results; these numbers are not disk bandwidth.

RuntimeWorkload / variantModenodefs-extragraceful-fscopy-filevooyaVooya route
v22.22.0single / defaultsync0.1130.1140.112—0.105native
v22.22.0single / defaultasync0.1330.1410.138—0.134native
v22.22.0batch-256 / defaultsync22.88923.01422.896—22.546native
v22.22.0batch-256 / defaultasync10.39210.28210.530—10.463native
v22.22.08MiB / buffersync4.0984.1124.093—0.128native
v22.22.08MiB / bufferasync4.0864.1374.127—0.181native
v22.22.0preserve-8MiB / preservesync4.0604.1124.0924.1410.193native
v22.22.0preserve-8MiB / preserveasync4.1654.1634.2014.1780.249native
v24.21.0single / defaultsync0.1140.1160.114—0.107native
v24.21.0single / defaultasync0.1650.1400.153—0.131native
v24.21.0batch-256 / defaultsync23.61923.58723.509—23.395native
v24.21.0batch-256 / defaultasync10.70010.23010.493—10.508native
v24.21.08MiB / buffersync4.0964.1494.108—0.133native
v24.21.08MiB / bufferasync4.2974.2624.303—0.230native
v24.21.0preserve-8MiB / preservesync4.1874.1794.2174.2250.208native
v24.21.0preserve-8MiB / preserveasync4.3314.2994.2864.4120.292native

cp

Recursive tree copy, new destination, timestamps not explicitly preserved. fs-extra uses copy; graceful-fs uses cp. Vooya sync is Node fallback; c4 does not change that route.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyavooya-c4Vooya route
v22.22.0tiny-tree / defaultsync0.6180.9360.6320.6720.621Node fallback
v22.22.0tiny-tree / defaultasync1.4250.9391.4510.7060.638native
v22.22.0tree-1000 / defaultsync93.282117.16494.03494.64494.643Node fallback
v22.22.0tree-1000 / defaultasync155.80460.992155.812100.32950.498native
v24.21.0tiny-tree / defaultsync0.6271.0010.6660.6590.649Node fallback
v24.21.0tiny-tree / defaultasync1.4670.9121.4120.7870.623native
v24.21.0tree-1000 / defaultsync96.697118.47496.52996.93896.488Node fallback
v24.21.0tree-1000 / defaultasync156.14357.583155.658103.53951.354native

exists

Existing and missing paths are separate. Node async is access mapped to a Boolean; fs-extra uses pathExists.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0050.0060.0050.007native
v22.22.0single / defaultasync0.0360.0300.0280.029native
v22.22.0batch-256 / defaultsync0.3590.3580.3570.528native
v22.22.0batch-256 / defaultasync1.0410.9050.9060.836native
v22.22.0missing-256 / missingsync0.2890.3040.2830.313native
v22.22.0missing-256 / missingasync1.7061.1971.2300.775native
v24.21.0single / defaultsync0.0040.0070.0060.008native
v24.21.0single / defaultasync0.0270.0280.0270.029native
v24.21.0batch-256 / defaultsync0.3410.3690.3620.500native
v24.21.0batch-256 / defaultasync0.8870.9370.8800.716native
v24.21.0missing-256 / missingsync0.2870.3060.2930.321native
v24.21.0missing-256 / missingasync1.5901.1691.1680.709native

glob

Pattern **/*, relative strings for files and directories. No dotfiles or symlinks in this synthetic fixture. fs-extra/graceful-fs wrap Node glob.

RuntimeWorkload / variantModenodefs-extragraceful-fsfdirfast-globtinyglobbyglobvooyaVooya route
v22.22.0tiny-tree / defaultsync0.2470.2600.2400.2250.3370.3030.5861.559native
v22.22.0tiny-tree / defaultasync0.3880.3460.3430.3170.3900.3190.5242.191native
v22.22.0tree-1000 / defaultsync4.0123.9913.9872.2122.3432.3213.8643.298native
v22.22.0tree-1000 / defaultasync5.7795.6675.8611.2081.3811.3812.8953.750native
v24.21.0tiny-tree / defaultsync0.2470.2580.2220.2370.3110.2640.5451.797native
v24.21.0tiny-tree / defaultasync0.3930.3920.3460.3150.3680.3050.4763.294native
v24.21.0tree-1000 / defaultsync3.8173.8063.8342.1862.3682.3453.9013.669native
v24.21.0tree-1000 / defaultasync5.1904.9865.0801.1881.3511.2582.7243.753native

Create a hard link and verify its inode and link count.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.2370.2360.2240.229native
v22.22.0single / defaultasync0.2610.2540.2610.251native
v22.22.0batch-256 / defaultsync53.50553.39153.47753.406native
v22.22.0batch-256 / defaultasync34.08633.78133.17433.121native
v24.21.0single / defaultsync0.2370.2310.2270.234native
v24.21.0single / defaultasync0.2940.2620.2590.281native
v24.21.0batch-256 / defaultsync53.37553.08553.47553.258native
v24.21.0batch-256 / defaultasync34.10833.27533.12632.840native

lstat

Separate regular-file and symbolic-link metadata cases. This suite also checks file/link classification.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0090.0080.0080.014native
v22.22.0single / defaultasync0.0300.0300.0250.033native
v22.22.0batch-256 / defaultsync0.5310.5200.5380.706native
v22.22.0batch-256 / defaultasync1.1061.0031.0210.965native
v22.22.0single / symlinksync0.0120.0090.0100.012native
v22.22.0single / symlinkasync0.0330.0350.0300.033native
v22.22.0batch-256 / symlinksync0.6740.6670.6630.830native
v22.22.0batch-256 / symlinkasync0.9640.8450.9050.884native
v24.21.0single / defaultsync0.0090.0080.0080.014native
v24.21.0single / defaultasync0.0350.0330.0310.034native
v24.21.0batch-256 / defaultsync0.5430.5620.5310.664native
v24.21.0batch-256 / defaultasync0.9660.8900.8820.950native
v24.21.0single / symlinksync0.0100.0100.0100.016native
v24.21.0single / symlinkasync0.0320.0360.0290.037native
v24.21.0batch-256 / symlinksync0.6920.6970.6660.786native
v24.21.0batch-256 / symlinkasync0.9560.8350.8130.923native

mkdir

Create missing a/b parents recursively. Compare directory effects; peer-specific return values are outside the shared contract.

RuntimeWorkload / variantModenodefs-extragraceful-fsmkdirpmkdirp-manualvooyaVooya route
v22.22.0single / defaultsync0.1180.1150.1210.1810.1700.142native
v22.22.0single / defaultasync0.2210.2120.2100.3270.2210.153native
v22.22.0batch-256 / defaultsync26.86326.91626.97033.66530.68529.744native
v22.22.0batch-256 / defaultasync17.89918.09718.23320.14418.75317.635native
v24.21.0single / defaultsync0.1260.1300.1280.2020.1820.150native
v24.21.0single / defaultasync0.2310.2220.2220.3450.2330.161native
v24.21.0batch-256 / defaultsync27.44327.29727.21633.89130.87430.122native
v24.21.0batch-256 / defaultasync18.22718.13718.45719.01618.28517.968native

mkdtemp

Create a unique directory for every prefix; verify each returned path exists.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0500.0490.0510.076native
v22.22.0single / defaultasync0.0760.0840.0650.099native
v22.22.0batch-256 / defaultsync9.6549.5989.57612.022native
v22.22.0batch-256 / defaultasync6.1345.9426.1116.455native
v24.21.0single / defaultsync0.0600.0580.0600.088native
v24.21.0single / defaultasync0.0770.0710.0670.087native
v24.21.0batch-256 / defaultsync9.7379.7549.65912.372native
v24.21.0batch-256 / defaultasync6.0346.0806.0346.574native

readFile

Whole-file materialization, Buffer or mixed non-ASCII UTF-8. No streaming or line-range extension measured.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / buffersync0.0280.0320.0310.041native
v22.22.0single / bufferasync0.1190.1080.0950.060native
v22.22.0batch-256 / buffersync3.0663.0383.0123.480native
v22.22.0batch-256 / bufferasync3.4582.3542.6321.756native
v22.22.0single / utf8sync0.0450.0420.0380.044native
v22.22.0single / utf8async0.1280.1190.1080.061native
v22.22.0batch-256 / utf8sync5.7645.7915.7016.354native
v22.22.0batch-256 / utf8async6.2155.0245.0413.379native
v22.22.08MiB / buffersync0.4290.4330.4380.447native
v22.22.08MiB / bufferasync0.6850.6440.6350.489native
v24.21.0single / buffersync0.0320.0350.0310.051native
v24.21.0single / bufferasync0.1150.1190.1010.055native
v24.21.0batch-256 / buffersync3.4443.4053.4003.915native
v24.21.0batch-256 / bufferasync3.3842.3122.3361.817native
v24.21.0single / utf8sync0.0440.0400.0370.044native
v24.21.0single / utf8async0.1240.1130.1060.065native
v24.21.0batch-256 / utf8sync5.8165.8725.7856.455native
v24.21.0batch-256 / utf8async4.0722.6452.6043.563native
v24.21.08MiB / buffersync0.4510.4390.4350.461native
v24.21.08MiB / bufferasync0.6900.6780.6670.489native

readdir

Recursive relative-string listing, including directories. fdir is an independent crawler; fs-extra/graceful-fs wrap Node.

RuntimeWorkload / variantModenodefs-extragraceful-fsfdirvooyavooya-c4Vooya route
v22.22.0tiny-tree / defaultsync0.1590.1420.1350.1580.2090.186native
v22.22.0tiny-tree / defaultasync0.2140.2020.2020.1660.1740.181native
v22.22.0tree-1000 / defaultsync5.0284.9764.9751.8531.3831.331native
v22.22.0tree-1000 / defaultasync6.0506.0686.0811.2231.4881.390native
v24.21.0tiny-tree / defaultsync0.1300.1340.1350.1600.2530.317native
v24.21.0tiny-tree / defaultasync0.2490.2510.2240.2860.2790.303native
v24.21.0tree-1000 / defaultsync4.8284.8364.8241.9751.5011.368native
v24.21.0tree-1000 / defaultasync5.7326.1065.7241.2281.6381.284native

Read a relative file-symlink target; no dereferencing.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0180.0130.0140.013native
v22.22.0single / defaultasync0.0380.0330.0310.031native
v22.22.0batch-256 / defaultsync1.1271.1251.0990.718native
v22.22.0batch-256 / defaultasync0.8671.0251.0760.831native
v24.21.0single / defaultsync0.0170.0180.0190.015native
v24.21.0single / defaultasync0.0410.0390.0400.037native
v24.21.0batch-256 / defaultsync1.1621.1501.1100.716native
v24.21.0batch-256 / defaultasync1.0940.9181.0340.756native

realpath

Resolve existing absolute regular-file paths. No symlink chain in this workload.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0290.0300.0280.025native
v22.22.0single / defaultasync0.0500.2090.2200.045native
v22.22.0batch-256 / defaultsync3.7223.8073.6852.353native
v22.22.0batch-256 / defaultasync1.91712.15411.3191.622native
v24.21.0single / defaultsync0.0270.0310.0270.024native
v24.21.0single / defaultasync0.0510.2050.2070.044native
v24.21.0batch-256 / defaultsync3.7383.7793.7052.322native
v24.21.0batch-256 / defaultasync1.81211.10310.6141.622native

rename

Move within the same temporary directory/filesystem; verify destination bytes and source disappearance.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0810.0740.0700.072native
v22.22.0single / defaultasync0.0820.0820.0800.079native
v22.22.0batch-256 / defaultsync13.99614.01013.93314.040native
v22.22.0batch-256 / defaultasync8.2347.6487.4407.355native
v24.21.0single / defaultsync0.0700.0740.0670.074native
v24.21.0single / defaultasync0.0910.0930.0850.088native
v24.21.0batch-256 / defaultsync13.93813.83813.82313.919native
v24.21.0batch-256 / defaultasync7.3517.6887.7957.383native

rm

Remove a freshly populated tree. fs-extra remove and rimraf default use Node on this platform; explicit rimraf-manual is also shown. Vooya sync is Node fallback.

RuntimeWorkload / variantModenodefs-extragraceful-fsrimrafrimraf-manualvooyavooya-c4Vooya route
v22.22.0tiny-tree / defaultsync0.4270.4260.4210.4340.3540.4140.408Node fallback
v22.22.0tiny-tree / defaultasync0.6110.6100.6000.6200.4950.3320.441native
v22.22.0tree-1000 / defaultsync46.07545.81045.97545.80041.77545.78646.091Node fallback
v22.22.0tree-1000 / defaultasync28.88928.81328.93129.47226.18645.56523.579native
v24.21.0tiny-tree / defaultsync0.3520.3660.3560.3630.3680.3520.351Node fallback
v24.21.0tiny-tree / defaultasync0.6870.6410.6780.6460.5450.3500.590native
v24.21.0tree-1000 / defaultsync46.97046.67846.86646.80741.51246.74246.784Node fallback
v24.21.0tree-1000 / defaultasync28.56228.49528.08028.07625.84142.91823.003native

rmdir

Remove empty directories only; recursive deletion is in rm.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0380.0320.0310.035native
v22.22.0single / defaultasync0.0710.0550.0530.055native
v22.22.0batch-256 / defaultsync8.6798.6788.5018.644native
v22.22.0batch-256 / defaultasync5.1515.0385.1734.917native
v24.21.0single / defaultsync0.0420.0380.0380.038native
v24.21.0single / defaultasync0.0610.0610.0600.058native
v24.21.0batch-256 / defaultsync8.6868.7428.6038.665native
v24.21.0batch-256 / defaultasync5.1645.1985.0475.219native

scan

Return sorted path/name/kind/size/mode/mtime/depth for files and directories. Node, fs-extra, graceful-fs, fdir and tinyglobby are explicitly composed pipelines with lstat; async metadata concurrency is eight. All construction/sorting is timed.

RuntimeWorkload / variantModenodefs-extragraceful-fsfdirtinyglobbyvooyavooya-c4Vooya route
v22.22.0tiny-tree / defaultsync0.1560.1550.1570.1900.3663.2532.432native
v22.22.0tiny-tree / defaultasync0.2910.2650.2590.2460.3823.2521.714native
v22.22.0tree-1000 / defaultsync7.8637.8197.9345.1435.6286.5755.881native
v22.22.0tree-1000 / defaultasync11.68111.54611.0626.3116.8416.6365.052native
v24.21.0tiny-tree / defaultsync0.1650.1570.1590.1980.3663.3631.805native
v24.21.0tiny-tree / defaultasync0.3220.3380.2960.3200.4213.3701.785native
v24.21.0tree-1000 / defaultsync7.5087.5997.4415.1885.6516.5265.705native
v24.21.0tree-1000 / defaultasync10.58710.42210.4456.0575.8976.3705.061native

stat

Metadata for regular files and following symbolic links, measured separately.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0110.0100.0100.016native
v22.22.0single / defaultasync0.0330.0360.0350.034native
v22.22.0batch-256 / defaultsync0.5930.5440.5620.689native
v22.22.0batch-256 / defaultasync1.0340.8910.8900.964native
v22.22.0single / symlinksync0.0160.0110.0110.016native
v22.22.0single / symlinkasync0.0340.0340.0300.039native
v22.22.0batch-256 / symlinksync1.0000.9370.9841.047native
v22.22.0batch-256 / symlinkasync0.9350.9100.8190.768native
v24.21.0single / defaultsync0.0100.0100.0090.016native
v24.21.0single / defaultasync0.0390.0370.0300.038native
v24.21.0batch-256 / defaultsync0.5800.5630.5570.687native
v24.21.0batch-256 / defaultasync1.0960.9870.9071.005native
v24.21.0single / symlinksync0.0110.0100.0120.016native
v24.21.0single / symlinkasync0.0360.0350.0320.038native
v24.21.0batch-256 / symlinksync0.9400.9450.9501.077native
v24.21.0batch-256 / symlinkasync0.9500.7580.7790.872native

Create relative file symlinks and verify their targets.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0520.0550.0600.065native
v22.22.0single / defaultasync0.0740.0740.0740.077native
v22.22.0batch-256 / defaultsync9.7009.7589.77110.638native
v22.22.0batch-256 / defaultasync6.3436.4426.3276.300native
v24.21.0single / defaultsync0.0630.0530.0570.061native
v24.21.0single / defaultasync0.0800.0740.0770.077native
v24.21.0batch-256 / defaultsync9.6699.6329.52310.685native
v24.21.0batch-256 / defaultasync6.3806.4746.3496.387native

truncate

Shrink existing 4 KiB files to 1 KiB; verify retained bytes.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0690.0720.0710.062native
v22.22.0single / defaultasync0.1490.1270.1130.085native
v22.22.0batch-256 / defaultsync10.75610.74510.7999.241native
v22.22.0batch-256 / defaultasync4.0003.9503.9273.178native
v24.21.0single / defaultsync0.0730.0740.0720.063native
v24.21.0single / defaultasync0.1580.1320.1390.088native
v24.21.0batch-256 / defaultsync10.91210.79810.9459.238native
v24.21.0batch-256 / defaultasync4.1864.1034.1383.349native

Remove existing regular files, one path per call.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0510.0420.0440.047native
v22.22.0single / defaultasync0.0640.0670.0610.065native
v22.22.0batch-256 / defaultsync7.7687.6207.5728.381native
v22.22.0batch-256 / defaultasync5.0344.9774.9594.983native
v24.21.0single / defaultsync0.0470.0460.0430.043native
v24.21.0single / defaultasync0.0650.0700.0630.072native
v24.21.0batch-256 / defaultsync7.7747.8657.7228.277native
v24.21.0batch-256 / defaultasync5.0035.0184.9734.978native

utimes

Set fixed access and modification timestamps and verify both.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / defaultsync0.0270.0220.0190.024native
v22.22.0single / defaultasync0.0440.0430.0420.042native
v22.22.0batch-256 / defaultsync2.1232.1052.0282.725native
v22.22.0batch-256 / defaultasync1.1351.2751.3361.602native
v24.21.0single / defaultsync0.0250.0240.0230.025native
v24.21.0single / defaultasync0.0500.0490.0460.050native
v24.21.0batch-256 / defaultsync2.2942.1522.1152.737native
v24.21.0batch-256 / defaultasync1.2301.3161.4051.466native

writeFile

Write to fresh distinct paths, Buffer or mixed non-ASCII UTF-8. No flush or overwrite-race semantics measured.

RuntimeWorkload / variantModenodefs-extragraceful-fsvooyaVooya route
v22.22.0single / buffersync0.0920.0930.0900.088native
v22.22.0single / bufferasync0.1670.1450.1450.108native
v22.22.0batch-256 / buffersync14.71014.59714.52814.515native
v22.22.0batch-256 / bufferasync9.0039.2809.2498.027native
v22.22.0single / utf8sync0.0850.0820.0930.085native
v22.22.0single / utf8async0.1610.1430.1330.092native
v22.22.0batch-256 / utf8sync14.96215.01215.00015.137native
v22.22.0batch-256 / utf8async9.0989.1809.2548.157native
v22.22.08MiB / buffersync0.6860.6390.6650.643native
v22.22.08MiB / bufferasync0.9980.8250.7640.850native
v24.21.0single / buffersync0.0820.0780.0760.082native
v24.21.0single / bufferasync0.1480.1290.1190.096native
v24.21.0batch-256 / buffersync14.46714.62814.33014.344native
v24.21.0batch-256 / bufferasync8.8178.6909.0977.935native
v24.21.0single / utf8sync0.0810.0830.0770.087native
v24.21.0single / utf8async0.1520.1280.1350.103native
v24.21.0batch-256 / utf8sync15.25515.25015.26315.518native
v24.21.0batch-256 / utf8async9.3468.8438.8918.246native
v24.21.08MiB / buffersync0.6780.6670.6780.677native
v24.21.08MiB / bufferasync1.0460.8260.8140.906native

Raw evidence and reproduction

pnpm install --frozen-lockfile pnpm build pnpm test:competitor-contract pnpm perf:all-apis --output .perf/all-apis.json # Focus a follow-up: pnpm perf:all-apis --apis cp,rm,scan --output .perf/batches.json

No runtime default or implementation was changed for these measurements. Before promoting a fast path, repeat the relevant distributions in the target application and platform, with the required options and durability.

Last updated on