Versioned performance evidence
Rust edge performance you can audit before sizing servers.
Immutable benchmark snapshots tie every published result to a Webship release, test environment, and measurement date.
- Test platform
- Debian GNU/Linux 12 · Intel Xeon Gold 5115
- Accepted samples
- 5 × at least 20 seconds
- Reported unit
- Median requests per second
Direct static response
Median requests per second. Higher is better.
| Server | HTTP/1.1 | HTTP/1.1 TLS | h2c | HTTP/2 TLS | HTTP/3 TLS |
|---|---|---|---|---|---|
| Webship | 370,695.68 | 295,743.59 | 1,015,870.4 | 903,321.85 | 317,138 |
| Bun 1.4.0 | 372,219.68 | 255,396.19 | Not supported | Not supported | 230,417 |
| Nginx 1.30.4 | 240,142.5 | 185,768.53 | 192,324.4 | 248,365.2 | 153,415 |
| Lighttpd 1.4.85 | 356,939.44 | 208,937.56 | 906,863.8 | 748,882.3 | Not supported |
| Caddy 2.11.4 | 40,261.01 | 38,991.09 | 27,528.05 | 26,978.05 | 25,998 |
| HAProxy 3.4.3 | 315,331.71 | 184,118.43 | 322,094.3 | 241,427.15 | 167,337 |
| Envoy 1.39.0 | 108,796.75 | 96,458.79 | 156,744.5 | 152,475.5 | 35,207 |
| Pingora 0.8.1 | 186,113.23 | 137,096.75 | 220,524.8 | 167,851.6 | Not supported |
Reverse proxy
Median requests per second. Higher is better.
| Server | HTTP/1.1 | HTTP/1.1 TLS | h2c | HTTP/2 TLS | HTTP/3 TLS |
|---|---|---|---|---|---|
| Webship | 131,232.68 | 117,443.78 | 130,484 | 126,185.35 | 99,201 |
| Bun 1.4.0 | 85,216.58 | 73,177.59 | Not supported | Not supported | 57,273 |
| Nginx 1.30.4 | 166,486.78 | 116,404.58 | 116,547.15 | 89,214.5 | 75,715 |
| Lighttpd 1.4.85 | 52,428.64 | 50,443.84 | 52,687.4 | 49,841.15 | Not supported |
| Caddy 2.11.4 | 30,768.2 | 28,295.09 | 22,329.65 | 20,932 | 17,761 |
| HAProxy 3.4.3 | 133,241.07 | 103,362.54 | 136,518.9 | 106,301.45 | 71,476 |
| Envoy 1.39.0 | 41,765.24 | 38,818.89 | 40,941.55 | 40,803.5 | 17,675 |
| Pingora 0.8.1 | 67,020.68 | 53,565.95 | 63,159.1 | 52,411.35 | Not supported |
Reproducible method
Each supported result is the median of five accepted samples. TCP and TLS workloads include warm-up; HTTP/3 includes a calibrated prime.
Server and load-generator processes ran on disjoint physical cores. Reverse-proxy runs also isolated the static origin.
Every accepted sample passed zero-error correctness gates and the published stability limits. Failed samples are never silently included.
A published snapshot is immutable. New Webship releases receive new benchmark versions instead of replacing historical results.