Skip to content

Benchmarks

TypoKit is designed to add minimal overhead over raw HTTP servers while providing full type-safety, validation, and middleware. These benchmarks quantify that overhead across every supported platform and server adapter.

ScenarioDescription
JSONSerialize a fixed JSON response — measures pure routing + serialization overhead
ValidateParse and validate a POST body — measures the validation pipeline cost
DBFull request with SQLite read — measures realistic end-to-end latency
MiddlewareRoute through a 5-layer middleware chain — measures middleware dispatch overhead
StartupCold start to first response — measures framework initialization cost

All benchmarks use bombardier with identical settings:

  • Connections: 64 concurrent
  • Duration: 10 seconds per scenario
  • Warmup: 3 seconds
  • Runs: 3 (results averaged)
  • Database: In-memory SQLite with identical schema and seed data

JSON Serialization — Requests/sec

Logarithmic scale. Higher is better.

Validation — Requests/sec

Logarithmic scale. Includes request body parsing and validation.

Database (SQLite) — Requests/sec

Logarithmic scale. Full request lifecycle including SQLite read.

Cold Start Times (ms)

Linear scale. Lower is better. Time from process start to first response.

TypoKit Platform × Server Heatmap

JSON scenario req/s across all 13 TypoKit combinations. Rust/Axum shown in orange.

native
fastify
hono
express
axum
node
16k
17k
12k
10k
—
bun
39k
24k
15k
16k
—
deno
27k
26k
14k
19k
—
rust
—
—
—
—
85k

Latency Percentiles (JSON Scenario)

All values in milliseconds. Lower is better.

Rank Framework req/s p50 p75 p90 p95 p99
1 raw-axum 85,321.97 1.07 1.47 1.93 2.27 3.17
2 typokit-rust-axum 84,779.28 1.09 1.48 1.94 2.27 3.14
3 competitor-elysia 53,368.87 1.87 1.97 2.21 2.43 3.37
4 raw-bun 43,222.08 2.31 2.36 2.59 2.66 2.75
5 raw-deno 42,729.57 2.33 2.39 2.46 2.50 2.61
6 typokit-node-native-cluster 41,660.73 2.21 3.08 4.17 4.94 6.78
7 typokit-bun-native 39,059.54 2.56 2.64 2.86 2.95 3.09
8 typokit-deno-native 26,649.38 3.69 3.81 3.98 4.09 4.34
9 typokit-deno-fastify 26,420.59 3.70 3.81 4.04 4.25 4.55
10 competitor-h3 25,364.17 4.03 4.18 4.29 4.34 4.67
11 raw-node 23,700.12 4.68 5.14 5.81 5.90 6.04
12 typokit-bun-fastify 23,667.87 4.57 5.04 5.30 5.57 5.98
13 typokit-deno-express 18,863.85 5.20 5.36 5.67 5.80 6.19
14 competitor-fastify 17,587.28 6.37 6.53 7.99 8.04 8.11
15 typokit-node-fastify 17,321.16 6.37 6.84 8.13 8.21 8.43
  • TypoKit entries (purple) show TypoKit running on each platform × server adapter combination
  • Rust/Axum (orange) is visually distinguished since it’s a compiled binary, not a JS runtime
  • Raw baselines (gray) are zero-framework HTTP servers — the theoretical performance ceiling
  • Competitors (colored by framework) show popular Node.js/Bun frameworks for reference

The closer TypoKit is to the raw baseline for a given platform, the lower TypoKit’s overhead. See the Methodology page for full details on how benchmarks are run and how to reproduce them.

Terminal window
# Run the full benchmark suite
pnpm nx bench benchmarks
# Run only TypoKit apps
pnpm nx bench benchmarks -- --filter "typokit-*"
# Run only the JSON scenario
pnpm nx bench benchmarks -- --scenario json
# Print system info
pnpm nx bench-info benchmarks
# Print reproduce instructions
pnpm nx bench-reproduce benchmarks