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.
What We Measure
Section titled “What We Measure”| Scenario | Description |
|---|---|
| JSON | Serialize a fixed JSON response — measures pure routing + serialization overhead |
| Validate | Parse and validate a POST body — measures the validation pipeline cost |
| DB | Full request with SQLite read — measures realistic end-to-end latency |
| Middleware | Route through a 5-layer middleware chain — measures middleware dispatch overhead |
| Startup | Cold start to first response — measures framework initialization cost |
Test Configuration
Section titled “Test Configuration”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
Results
Section titled “Results”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.
Latency Percentiles (JSON Scenario)
All values in milliseconds. Lower is better.
| Rank | Framework | req/s | p50 | p75 | p90 | p95 | p99 |
|---|---|---|---|---|---|---|---|
| 1 | typokit-rust-axum | 83,655.42 | 1.10 | 1.50 | 1.97 | 2.31 | 3.23 |
| 2 | raw-axum | 82,990.37 | 1.11 | 1.51 | 1.98 | 2.33 | 3.27 |
| 3 | competitor-elysia | 51,275.05 | 1.93 | 2.03 | 2.28 | 2.47 | 3.45 |
| 4 | raw-bun | 42,310.28 | 2.38 | 2.46 | 2.66 | 2.76 | 2.94 |
| 5 | typokit-node-native-cluster | 40,224.99 | 2.34 | 3.18 | 4.22 | 4.95 | 6.70 |
| 6 | typokit-bun-native | 29,225.38 | 3.51 | 3.75 | 3.96 | 4.15 | 4.48 |
| 7 | typokit-bun-fastify | 24,188.71 | 4.31 | 4.93 | 5.60 | 5.91 | 6.64 |
| 8 | competitor-h3 | 20,445.7 | 4.78 | 5.53 | 5.89 | 6.14 | 6.69 |
| 9 | raw-node | 18,056.62 | 5.73 | 6.39 | 7.73 | 7.84 | 8.09 |
| 10 | typokit-node-fastify | 16,754.98 | 6.19 | 7.14 | 8.11 | 8.48 | 8.97 |
| 11 | typokit-node-native | 16,227.24 | 6.28 | 7.25 | 8.28 | 8.63 | 9.16 |
| 12 | competitor-fastify | 16,039.83 | 6.29 | 7.26 | 8.29 | 8.90 | 9.25 |
| 13 | typokit-bun-express | 15,966.16 | 6.44 | 7.34 | 8.24 | 8.68 | 9.47 |
| 14 | typokit-bun-hono | 15,817.29 | 6.37 | 7.50 | 8.43 | 8.88 | 9.84 |
| 15 | competitor-adonis | 14,328.27 | 7.44 | 7.97 | 9.12 | 9.55 | 9.92 |
How to Read These Charts
Section titled “How to Read These Charts”- 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.
Running Benchmarks Locally
Section titled “Running Benchmarks Locally”# Run the full benchmark suitepnpm nx bench benchmarks
# Run only TypoKit appspnpm nx bench benchmarks -- --filter "typokit-*"
# Run only the JSON scenariopnpm nx bench benchmarks -- --scenario json
# Print system infopnpm nx bench-info benchmarks
# Print reproduce instructionspnpm nx bench-reproduce benchmarks