Benchmarks Code quality

ESLint vs Biome

Every candidate on one rig, from the same samples. Winners come from the numbers alone; the story is in the post.

Tests

Test 1 Time per pass

20 measured passes over the corpus. Box is the middle half of the runs, line is the median, whiskers reach the fastest and slowest pass, dots are every run. (LOWER ms = FASTER)

Time per pass (ms)
ESLint
Biome
All 20 samples as a table
RunESLintBiome
1108.8 ms75.1 ms
2105.9 ms74.0 ms
3107.2 ms73.6 ms
4107.5 ms72.1 ms
5105.2 ms75.3 ms
6105.5 ms78.7 ms
7105.2 ms79.6 ms
8104.6 ms78.5 ms
9104.2 ms79.4 ms
10108.9 ms76.3 ms
11108.7 ms77.8 ms
12103.5 ms76.2 ms
13104.9 ms74.6 ms
14106.4 ms75.4 ms
15106.9 ms72.8 ms
16105.4 ms75.6 ms
17105.9 ms74.8 ms
18105.6 ms72.5 ms
19105.6 ms75.1 ms
20104.8 ms71.5 ms

Winner Biome (75.4 ms)

Full report, as hyperfine prints it

Benchmark 1: ESLint 9.34.0

Time (mean ± σ)
106.0 ms ± 1.5 ms
Range (min … max)
103.5 ms … 108.9 ms
Median
105.6 ms 20 runs

Benchmark 2: Biome 2.2.2fastest

Time (mean ± σ)
75.4 ms ± 2.4 ms
Range (min … max)
71.5 ms … 79.6 ms
Median
75.2 ms 20 runs
Test conditions: rig, corpus, protocol
Rig
Machine
MacBook Pro
Chip
Apple M2 Max
Cores
12 CPU cores
Memory
96 GB
OS
macOS 26.5.2 (arm64)
Runtime
Bun 1.4.0
Corpus
Name
ESLint 9.34.0 library source
Source
node_modules/eslint/lib/**/*.js
Files
391
Lines
99,880
Size
2.73 MB
Protocol
Warmups
3 unmeasured passes
Measured
20 passes per tool
Process
A new CLI process for every measured pass
Cache
Warm filesystem cache after three unmeasured passes
Output
Diagnostics produced and redirected away from the terminal

Scorecard

Mean time per pass for the candidates you picked. The best value is marked in red.
CandidateTime per pass (ms, lower is better)
ESLint106.0 ms
Biome75.4 ms