tl;dr; oxlint is as fast as biome and oxlint --type-aware a bit slower but they accomplish slightly different things.
oxlint is a JavaScript/TypeScript linter. Like eslint, but newer and faster.
They recently added "type-aware", via a oxlint-tsgolint which uses the Go powered typescript-go port of tsc.
But I like Biome and use it on all my side projects because it combines what eslint and prettier does but does it incredibly fast(er).
To compare oxlint vs. biome we need to check with and without type-aware linting: hyperfine "bunx oxlint --type-aware" "bunx biome check" "bunx oxlint"
The results are:
Benchmark 1: bunx oxlint --type-aware
Time (mean ± σ): 560.4 ms ± 34.4 ms [User: 1022.7 ms, System: 279.8 ms]
Range (min … max): 517.4 ms … 644.3 ms 10 runs
Benchmark 2: bunx biome check
Time (mean ± σ): 269.0 ms ± 10.7 ms [User: 267.9 ms, System: 58.7 ms]
Range (min … max): 252.0 ms … 291.8 ms 10 runs
Benchmark 3: bunx oxlint
Time (mean ± σ): 219.1 ms ± 8.3 ms [User: 59.4 ms, System: 35.3 ms]
Range (min … max): 203.1 ms … 229.1 ms 14 runs
Summary
bunx oxlint ran
1.23 ± 0.07 times faster than bunx biome check
2.56 ± 0.18 times faster than bunx oxlint --type-aware
The repo I'm testing it on is mostly .tsx file but some .ts files too. Not sure if it matters. I think biome checks some .json files too. It's clear when you run them one at a time:
> bunx oxlint
...
Found 3 warnings and 0 errors.
Finished in 8ms on 178 files with 89 rules using 12 threads.
and
> bunx oxlint --type-aware
...
Found 50 warnings and 0 errors.
Finished in 335ms on 178 files with 103 rules using 12 threads.
and
> bunx biome check
Checked 195 files in 29ms. No fixes applied.
There's still lots of learn about oxlint and what it can do to make my TypeScript tooling better. But in terms of speed, it's clearly fast enough.
Comments