Benchmarks
Measured runtime and product workloads. Each table identifies its binaries, source, measurement method and execution host.
Source: CI run of the aphrody-perf workflow (artifacts perf-report-*).
linux-x64
Fork 1.4.3-aphrody.2 (f7a7086b6) against upstream 1.4.2 (744846f84) on linux 6.17.0-1022-azure x64, AMD EPYC 7763 64-Core Processor x4, 16 GiB; 40 runs, 5 warmup, engine hyperfine, measured 2026-10-09T02:29:50.614Z. Median (p95); ratio = fork / upstream, lower is faster for times.
| Measure | Upstream | Fork | Ratio | Gate |
|---|---|---|---|---|
bun --version | 1.40 ms (p95 1.64 ms) | 1.54 ms (p95 2.10 ms) | 1.098 | ok |
bun -e '' | 1.49 ms (p95 1.86 ms) | 1.44 ms (p95 1.80 ms) | 0.961 | ok |
bun run (empty script) | 4.33 ms (p95 5.44 ms) | 4.77 ms (p95 6.20 ms) | 1.101 | ok |
bun test (one empty test) | 4.94 ms (p95 6.69 ms) | 5.60 ms (p95 6.70 ms) | 1.133 | ok |
bun build (small project) | 5.11 ms (p95 6.67 ms) | 5.79 ms (p95 7.25 ms) | 1.132 | ok |
bun install offline (warm cache) | 3.24 ms (p95 3.91 ms) | 3.58 ms (p95 4.03 ms) | 1.102 | ok |
| RSS at startup | 17.3 MiB (p95 17.4 MiB) | 32.7 MiB (p95 32.7 MiB) | 1.893 | info |
| RSS after loading node:* modules | 28.0 MiB (p95 31.2 MiB) | 41.5 MiB (p95 44.1 MiB) | 1.481 | info |
require of node:* modules | 37.5 ms (p95 39.2 ms) | 36.1 ms (p95 39.5 ms) | 0.963 | ok |
import() of node:* modules | 37.6 ms (p95 39.7 ms) | 36.5 ms (p95 39.3 ms) | 0.970 | ok |
require of bun:* modules | 1.31 ms (p95 1.73 ms) | 1.38 ms (p95 1.52 ms) | 1.053 | ok |
Bun.serve hello + first request | 1.64 ms (p95 1.78 ms) | 1.73 ms (p95 1.89 ms) | 1.054 | ok |
local fetch latency (p50) | 0.11 ms (p95 0.13 ms) | 0.12 ms (p95 0.14 ms) | 1.077 | ok |
local fetch latency (p99) | 0.16 ms (p95 0.18 ms) | 0.17 ms (p95 0.19 ms) | 1.032 | info |
local fetch, sequential throughput | 8,485 req/s (p95 9,552 req/s) | 8,208 req/s (p95 10,272 req/s) | 1.034 | info |
require of fork-only modules (fork only) | n/a | 4.23 ms (p95 4.88 ms) | info | |
| Binary size | 75.8 MiB | 84.8 MiB | 1.118 | ok |
Run note: Release upstream bun-v1.4.3 absente : repli sur bun-v1.4.2. Versions de base différentes (fork 1.4.3-aphrody.2, upstream 1.4.2) : l'écart inclut le travail amont entre les deux; taille et RSS ne bloquent pas (--strict pour les imposer).
windows-x64
Fork 1.4.3-aphrody.2 (f7a7086b6) against upstream 1.4.2 (744846f84) on win32 10.0.26100 x64, AMD EPYC 9V45 96-Core Processor x4, 16 GiB; 40 runs, 5 warmup, engine hyperfine, measured 2026-10-09T02:30:06.789Z. Median (p95); ratio = fork / upstream, lower is faster for times.
| Measure | Upstream | Fork | Ratio | Gate |
|---|---|---|---|---|
bun --version | 4.09 ms (p95 4.29 ms) | 4.06 ms (p95 4.20 ms) | 0.994 | ok |
bun -e '' | 4.06 ms (p95 4.20 ms) | 4.07 ms (p95 4.43 ms) | 1.002 | ok |
bun run (empty script) | 10.1 ms (p95 12.3 ms) | 11.2 ms (p95 12.0 ms) | 1.108 | ok |
bun test (one empty test) | 10.6 ms (p95 12.1 ms) | 11.6 ms (p95 12.2 ms) | 1.089 | ok |
bun build (small project) | 8.85 ms (p95 9.37 ms) | 9.08 ms (p95 9.34 ms) | 1.027 | ok |
bun install offline (warm cache) | 26.5 ms (p95 38.2 ms) | 19.6 ms (p95 32.3 ms) | 0.739 | ok |
| RSS at startup | 15.4 MiB (p95 15.4 MiB) | 18.5 MiB (p95 18.5 MiB) | 1.196 | info |
| RSS after loading node:* modules | 23.6 MiB (p95 23.6 MiB) | 27.3 MiB (p95 27.3 MiB) | 1.155 | info |
require of node:* modules | 25.5 ms (p95 26.5 ms) | 25.3 ms (p95 26.3 ms) | 0.994 | ok |
import() of node:* modules | 26.8 ms (p95 31.1 ms) | 26.5 ms (p95 34.6 ms) | 0.989 | ok |
require of bun:* modules | 1.03 ms (p95 1.16 ms) | 1.08 ms (p95 1.27 ms) | 1.050 | ok |
Bun.serve hello + first request | 4.08 ms (p95 4.34 ms) | 4.26 ms (p95 4.87 ms) | 1.044 | ok |
local fetch latency (p50) | 0.03 ms (p95 0.04 ms) | 0.03 ms (p95 0.04 ms) | 1.015 | ok |
local fetch latency (p99) | 0.09 ms (p95 0.17 ms) | 0.10 ms (p95 0.24 ms) | 1.093 | info |
local fetch, sequential throughput | 27,999 req/s (p95 29,901 req/s) | 26,055 req/s (p95 27,541 req/s) | 1.075 | info |
require of fork-only modules (fork only) | n/a | 3.33 ms (p95 3.96 ms) | info | |
| Binary size | 82.1 MiB | 91.8 MiB | 1.118 | ok |
Run note: Release upstream bun-v1.4.3 absente : repli sur bun-v1.4.2. Versions de base différentes (fork 1.4.3-aphrody.2, upstream 1.4.2) : l'écart inclut le travail amont entre les deux; taille et RSS ne bloquent pas (--strict pour les imposer).
What is measured
bun --versionbun -e ''bun run(empty script)bun test(one empty test)bun build(small project)bun installoffline (warm cache)- RSS at startup
- RSS after loading node:* modules
requireof node:* modulesimport()of node:* modulesrequireof bun:* modulesBun.servehello + first request- local
fetchlatency (p50) - local
fetchlatency (p99) - local
fetch, sequential throughput requireof fork-only modules (fork only)- Binary size
Thresholds live in bench/aphrody/thresholds.json: a case fails when the runtime median exceeds upstream by more than its ratio and its absolute delta.
Run it yourself
git clone https://github.com/aphrody-labs/bun && cd bun
# runtime binary against the upstream release of the same base version
bun scripts/aphrody/perf-gate.ts --fork ~/.bun/bin/bun --upstream-version 1.4.3 --runs 40 --out tmp/perf
The report is written to tmp/perf/perf-report.md and perf-report.json. The upstream micro-benchmarks of bench/ run with cd bench && bun install && bun run <name>.