Benchmarks Bundlers
Candidates
Vite vs esbuild vs tsup
Tick the candidates you care about and the charts, winners and table redraw for just them: same run, same rig, 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)
All 20 samples as a table
| Run | esbuild | Vite | tsup |
|---|---|---|---|
| 1 | 16.8 ms | 163.6 ms | 203.4 ms |
| 2 | 15.9 ms | 161.8 ms | 200.4 ms |
| 3 | 15.7 ms | 169.1 ms | 203.8 ms |
| 4 | 15.0 ms | 168.5 ms | 202.6 ms |
| 5 | 16.5 ms | 171.9 ms | 203.2 ms |
| 6 | 15.6 ms | 175.2 ms | 202.8 ms |
| 7 | 16.4 ms | 170.7 ms | 203.0 ms |
| 8 | 17.3 ms | 171.7 ms | 206.3 ms |
| 9 | 15.9 ms | 170.8 ms | 205.3 ms |
| 10 | 16.7 ms | 184.9 ms | 204.5 ms |
| 11 | 15.6 ms | 175.8 ms | 204.2 ms |
| 12 | 16.2 ms | 172.7 ms | 202.7 ms |
| 13 | 15.4 ms | 171.8 ms | 203.8 ms |
| 14 | 17.1 ms | 169.3 ms | 206.7 ms |
| 15 | 16.2 ms | 173.6 ms | 203.4 ms |
| 16 | 16.5 ms | 169.9 ms | 202.9 ms |
| 17 | 15.3 ms | 167.9 ms | 202.9 ms |
| 18 | 15.5 ms | 167.8 ms | 204.1 ms |
| 19 | 14.9 ms | 169.7 ms | 205.3 ms |
| 20 | 14.7 ms | 170.1 ms | 204.2 ms |
Winner esbuild (16.0 ms)
Full report, as hyperfine prints it
Benchmark 1: esbuild 0.28.2fastest
- Time (mean ± σ)
- 16.0 ms ± 0.7 ms
- Range (min … max)
- 14.7 ms … 17.3 ms
- Median
- 15.9 ms 20 runs
Benchmark 2: Vite 8.2.2
- Time (mean ± σ)
- 170.8 ms ± 4.7 ms
- Range (min … max)
- 161.8 ms … 184.9 ms
- Median
- 170.4 ms 20 runs
Benchmark 3: tsup 8.5.1
- Time (mean ± σ)
- 203.8 ms ± 1.4 ms
- Range (min … max)
- 200.4 ms … 206.7 ms
- Median
- 203.6 ms 20 runs
Test conditions: rig, corpus, protocol
- Machine
- MacBook Pro
- Chip
- Apple M2 Max
- Cores
- 12 CPU cores
- Memory
- 96 GB
- OS
- macOS 26.6.2 (arm64)
- Runtime
- Node 24.19.0 (Vite, tsup); esbuild native binary; Bun 1.4.0 harness
Rig
- Name
- zod 4.5.4 library source
- Source
github.com/colinhacks/zod@v4.5.4/src- Files
- 124
- Lines
- 36,620
- Size
- 1.30 MB
Corpus
- Warmups
- 3 unmeasured passes
- Measured
- 20 passes per tool
- Process
- A new CLI process for every measured pass, output directory cleared between passes
- Cache
- Warm filesystem cache after 3 unmeasured passes per candidate
- Output
- Bundled output emitted to a dedicated directory per tool
Protocol
Scorecard
| Candidate | Time per pass (ms, lower is better) |
|---|---|
| esbuild | 16.0 ms |
| Vite | 170.8 ms |
| tsup | 203.8 ms |