Hi, thank you for visiting or contributing to our project, we are always looking to improve this benchmark platform, if you wish to help us by sponsoring or donating, all the money is invested into infrastructure costs, we are currently aiming for hardware upgrades that would substantially improve our benchmarks.
HTTP framework benchmark platform.
29 test profiles. 64-core dedicated hardware. Same conditions for every framework.
View Leaderboard | Documentation | Add a Framework
| Command | Description |
|---|---|
/benchmark -f <framework> |
Run every test the framework subscribes to |
/benchmark -f <framework> -t <test> |
Run one test only |
/benchmark -f <framework> --save |
Run and save results (updates the leaderboard on merge) |
/benchmark -f <framework> -t <test> --save |
Run one test and save results |
/benchmark -f <framework> --compare <other> |
Measure the deltas against another framework instead of this one |
Always specify -f <framework>; the flags combine in any order. Results come back as a comment with a per-profile table of RPS, p99, CPU and memory.
What the deltas are measured against. By default, this framework's own results published on main - answering "did this change help?". When you are tuning a variant or a successor entry, --compare re-bases them on another entry instead:
/benchmark -f genhttp-11 --compare genhttp
The reply states which baseline it used, and profiles the other framework does not run show n/a rather than a delta.
| Category | Profiles | Description |
|---|---|---|
| Connection | baseline, pipelined, limited-conn |
Mixed GET/POST with query parsing (512/4K conns), 16× batched pipelining, short-lived connections that close after 10 requests |
| Workload | json, json-comp, json-tls, upload, static |
JSON serialization, gzip/brotli compression, HTTP/1.1 over TLS, 20 MB body ingestion, 20-file static asset serving |
| Database | async-db, crud |
Async Postgres sequential scan; realistic REST API with cached reads, list, upsert, update, and optional Redis cache |
| Templates | fortunes * |
DB query + HTML template render (TechEmpower-style Fortunes). Reference-only — measures template-engine throughput, not part of the composite score |
| Multi-endpoint | api-4, api-16 |
Mixed baseline + JSON + async-db at CPU-budget cliffs (4 and 16 logical CPUs, i.e. 2 and 8 full SMT cores) |
| H/2 | baseline-h2, static-h2, baseline-h2c, json-h2c |
Baseline + static over TLS with h2 stream multiplexing; baseline + JSON over cleartext h2 (prior-knowledge, port 8082) |
| H/3 | baseline-h3, static-h3 |
Baseline and static over QUIC with TLS 1.3 |
| gRPC | unary-grpc, unary-grpc-tls, stream-grpc, stream-grpc-tls |
Unary and server-streaming gRPC over plaintext HTTP/2 and TLS |
| Gateway | gateway-64, gateway-h3 |
Reverse proxy + server stack over HTTP/2 and HTTP/3 with mixed workload |
| Production Stack | production-stack |
Four-service architecture: edge + Redis + JWT auth sidecar + server, 10K-item cache-aside, concurrent reads + writes |
| WebSocket | echo-ws, echo-ws-pipeline, echo-ws-limited |
Echo throughput across connection counts; 16x batched echo; echo with each connection closed after 10 messages (upgrade-handshake cost) |
git clone https://github.com/MDA2AV/HttpArena.git
cd HttpArena
./scripts/validate.sh <framework> # correctness check
./scripts/benchmark.sh <framework> # all profiles
./scripts/benchmark.sh <framework> baseline # specific profile
./scripts/benchmark.sh <framework> --save # save results- Add a new framework
- Improve an existing implementation — open a PR modifying files under
frameworks/<name>/ - Open an issue
- Comment on any open issue or PR
Add your GitHub username to the maintainers array in your framework's meta.json to get notified when someone opens a PR that touches your framework:
"maintainers": ["your-github-username"]Benchmarked on HttpArena? Add the badge to your project's README — it links to the live leaderboard and adapts to light & dark themes automatically.
[](https://www.http-arena.com/)Prefer HTML, e.g. to set the size:
<a href="https://www.http-arena.com/">
<img src="https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/wordmark.svg" alt="Benchmarked by HttpArena" height="44">
</a>Another badge variants:
- Http/1.1:
https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/httparena-badge-h1.svg - Http/2:
https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/httparena-badge-h2.svg - Http/3:
https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/httparena-badge-h3.svg - Gateway:
https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/httparena-badge-gateway.svg - WebSocket:
https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/httparena-badge-websocket.svg - gRPC:
https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/httparena-badge-grpc.svg
|
|
|
|
|
|
|
|
