Skip to content

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.

RouteFrameworkRequests/secp99 (ms)
PlaintextKruda850,894.280.556
PlaintextFiber876,850.830.735
PlaintextActix818,243.640.686
Static JSONKruda852,975.050.569
Static JSONFiber871,425.090.850
Static JSONActix808,455.680.689
JSON serializationKruda816,186.870.642
JSON serializationFiber816,411.190.910
JSON serializationActix783,652.580.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 rangesRequests/secp99 (ms)
Kruda813,022.98–831,506.230.621–0.644
Fiber807,104.91–838,149.800.880–0.980
Actix773,865.91–788,263.490.674–0.695

Latency profile

Same procedure, with 128 connections and four wrk threads.

RouteKruda req/s / p99 msFiber req/s / p99 msActix req/s / p99 ms
Plaintext845,186.97 / 0.279892,386.15 / 0.356821,249.44 / 0.339
Static JSON844,369.28 / 0.265838,637.04 / 0.396800,879.61 / 0.343
JSON serialization813,903.07 / 0.334807,273.15 / 0.483780,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.

Released under the MIT License.