Stable-release benchmark — 12 September 2026
Kruda v1.7.2, Fiber v3.5.0 and Actix Web v4.15.0 on a quiet Linux host. These are scoped lab results, not a universal ranking.
Throughput profile
Four wrk threads, 256 connections. Medians of five 15-second rounds after a 15-second warmup per route/profile. p99 is the median of per-round percentiles, not a pooled percentile.
| Route | Framework | Requests/sec | p99 (ms) |
|---|---|---|---|
| Plaintext | Kruda | 850,894.28 | 0.556 |
| Plaintext | Fiber | 876,850.83 | 0.735 |
| Plaintext | Actix | 818,243.64 | 0.686 |
| Static JSON | Kruda | 852,975.05 | 0.569 |
| Static JSON | Fiber | 871,425.09 | 0.850 |
| Static JSON | Actix | 808,455.68 | 0.689 |
| JSON serialization | Kruda | 816,186.87 | 0.642 |
| JSON serialization | Fiber | 816,411.19 | 0.910 |
| JSON serialization | Actix | 783,652.58 | 0.692 |
JSON throughput was effectively equal between Kruda and Fiber (Kruda was 0.03% lower), with Kruda's median p99 29.45% lower. Relative to Actix, Kruda throughput was 4.15% higher and p99 7.23% lower. Fiber led throughput on plaintext and static JSON.
| JSON round ranges | Requests/sec | p99 (ms) |
|---|---|---|
| Kruda | 813,022.98–831,506.23 | 0.621–0.644 |
| Fiber | 807,104.91–838,149.80 | 0.880–0.980 |
| Actix | 773,865.91–788,263.49 | 0.674–0.695 |
Latency profile
Same procedure, with 128 connections and four wrk threads.
| Route | Kruda req/s / p99 ms | Fiber req/s / p99 ms | Actix req/s / p99 ms |
|---|---|---|---|
| Plaintext | 845,186.97 / 0.279 | 892,386.15 / 0.356 | 821,249.44 / 0.339 |
| Static JSON | 844,369.28 / 0.265 | 838,637.04 / 0.396 | 800,879.61 / 0.343 |
| JSON serialization | 813,903.07 / 0.334 | 807,273.15 / 0.483 | 780,292.93 / 0.344 |
Conditions and limitations
- Kruda release commit:
1e35d1764d7463ed8dc08fed768536e266f52bfc(v1.7.2). Fiber v3.5.0; Actix Web v4.15.0. - Go 1.26.7; Rust/Cargo 1.93.1. Kruda used Sonic, Fiber its default encoder, Actix serde_json. This is not an encoder-controlled router comparison.
- Load generator and servers shared a 16-vCPU KVM guest on an Intel i5-13500 host, using HTTP/1.1 loopback. Kruda used Wing with inline CPU dispatch.
- GOMAXPROCS 8; Kruda and Actix each configured with four workers. These are selected harness settings, not every framework's defaults.
- Containers and CI runners were stopped during measurement. Baseline samples reached 100% idle; vmstat recorded up to 2% CPU steal. Physical-host interference was not entirely excluded.
- Framework order: Actix → Fiber → Kruda. An earlier shared-host run used the reverse order. Both host activity and order changed, so their individual effects cannot be isolated.
- All 90 measurements completed with zero socket errors and zero non-2xx responses. Closed-loop, CPU-only tests do not establish production, TLS, HTTP/2, database or memory-efficiency performance.
- June comparisons cannot establish version improvements or regressions without testing old and new versions under identical conditions.
Download all 90 measurements (CSV) · Read the raw wrk logs
The CSV preserves measured values; raw-file paths have been shortened to filenames. The log collection is grouped by filename. The migrated harness is retained locally and is not included here, so these downloads are measurement evidence, not a complete reproduction package.
