benchmarks #

tsv is a formatter, parser, and future linter + more for TypeScript, Svelte, and CSS.

Please note, this is an early-stage project and these numbers will change, both upwards and downwards.

tsv native tsv native json tsv wasm tsv wasm json biome oxc canonical

Binary size
#

Rather than supporting many languages, tsv focuses on Svelte, TypeScript, and CSS. This lets it be smaller when it's all you need, a quality that's more relevant when used in the browser via wasm:

wasm

tsv_parse_wasm
1.6 MB 514 KB gz 0.6x
oxc-parser (wasm)
1.8 MB 507 KB gz 0.6x
tsv_format_wasm
2.1 MB 699 KB gz 0.8x
tsv_wasm
2.8 MB 890 KB gz 1.0x
biome (wasm)
32.8 MB 7.8 MB gz 11.9x

native

oxc-parser (native)
2.5 MB 1009 KB gz 0.7x
tsv
3.7 MB 1.5 MB gz 1.0x
oxfmt (native)
7.6 MB 3.1 MB gz 2.1x

Speedier than Prettier
#

tsv is heavily inspired by and borrows architectural patterns from Prettier. We're very grateful for the hard work of its contributors. tsv offers a speedup over Prettier:

Svelte
1194 of 1240 files
TypeScript
3701 of 4025 files
CSS
165 of 193 files
native12.4x10.3x17.3x
wasm9.06x7.66x12.9x

Format
#

tsv's formatter is similar to Oxfmt and Biome. Today it can format TypeScript, Svelte, and CSS, plus JS as strict-mode TypeScript:

Formatting 1194 of 1240 svelte files:聽路 annotation = files handled / total

prettier
3,156 ms 1201/1240 1.0x
oxfmt
3,363 ms 1201/1240 0.94x
biome wasm
652 ms 1238/1240 4.84x
tsv_wasm
348 ms 1202/1240 9.06x
tsv
254 ms 1202/1240 12.4x

Formatting 3701 of 4025 typescript files:聽路 annotation = files handled / total

prettier
8,774 ms 3855/4025 1.0x
biome wasm
3,651 ms 4025/4025 2.40x
tsv_wasm
1,145 ms 3743/4025 7.66x
tsv
855 ms 3743/4025 10.3x
oxfmt
802 ms 3836/4025 10.9x

Formatting 165 of 193 css files:聽路 annotation = files handled / total

prettier
731 ms 192/193 1.0x
oxfmt
760 ms 192/193 0.96x
biome wasm
207 ms 193/193 3.53x
tsv_wasm
57 ms 165/193 12.9x
tsv
42 ms 165/193 17.3x

Parse
#

The parse rows that build a full JS AST are directly comparable: tsv and oxc-parser both serialize the AST to JSON in Rust and deserialize it in JS, native and wasm alike. The tsv-internal and tsv_wasm-internal rows are tsv's parse-only numbers - they build the native AST but skip JS-side materialization, so they show raw in-engine speed rather than a cross-tool comparison.

Parsing 1192 of 1240 svelte files:聽路 annotation = files handled / total

svelte/compiler
354 ms 1193/1240 1.0x
tsv_wasm json
516 ms 1202/1240 0.69x
tsv json
485 ms 1202/1240 0.73x
tsv_wasm internal
45 ms 1202/1240 7.81x
tsv internal
37 ms 1202/1240 9.55x

Parsing 3603 of 4025 typescript files:聽路 annotation = files handled / total

acorn-typescript
2,213 ms 3693/4025 1.0x
tsv_wasm json
2,224 ms 3743/4025 1.00x
tsv json
2,050 ms 3743/4025 1.08x
oxc-parser wasm
977 ms 4025/4025 2.27x
oxc-parser
865 ms 3833/4025 2.56x
tsv_wasm internal
293 ms 3743/4025 7.56x
tsv internal
236 ms 3743/4025 9.37x

Parsing 159 of 193 css files:聽路 annotation = files handled / total

svelte/compiler
19 ms 163/193 1.0x
tsv_wasm json
223 ms 165/193 0.09x
tsv json
177 ms 165/193 0.11x
tsv_wasm internal
32 ms 165/193 0.60x
tsv internal
23 ms 165/193 0.84x

Benchmarking details
#

All numbers are single-threaded: every library formats or parses one file at a time, measured sequentially with no cross-file parallelism. These are per-file, single-core latency and throughput numbers - not the multi-core batch throughput a CLI gets when it formats many files at once, which most of these tools (tsv included) can do.

corpus

  • svelte: 1240 files
  • typescript: 4025 files
  • css: 193 files

versions

  • svelte 5.56.1
  • acorn 8.16.0
  • acorn-typescript 1.0.10
  • prettier 3.8.3
  • prettier-plugin-svelte 3.5.2
  • oxc-parser 0.134.0
  • oxfmt 0.53.0
  • biome 2.4.16

run

  • June 12, 2026
  • 9b5c4e98