HttpArena

July 24, 2026 · View on GitHub

Discord Sponsored by Anthropic

Hardware Upgrade

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


PR Commands

CommandDescription
/benchmark -f <framework>Run every test the framework subscribes to
/benchmark -f <framework> -t <test>Run one test only
/benchmark -f <framework> --saveRun and save results (updates the leaderboard on merge)
/benchmark -f <framework> -t <test> --saveRun 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.


Test Profiles

CategoryProfilesDescription
Connectionbaseline, pipelined, `limited-conn$\text{Mixed} \text{GET}/\text{POST} \text{with} \text{query} \text{parsing} (512/4\text{K} \text{conns}), 16 \times \text{batched} \text{pipelining}, \text{short}-\text{lived} \text{connections} \text{that} \text{close} \text{after} 10 \text{requests}
\text{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
Databaseasync-db, crudAsync Postgres sequential scan; realistic REST API with cached reads, list, upsert, update, and optional Redis cache
Templatesfortunes *DB query + HTML template render (TechEmpower-style Fortunes). Reference-only — measures template-engine throughput, not part of the composite score
Multi-endpointapi-4, api-16Mixed baseline + JSON + async-db at CPU-budget cliffs (4 and 16 logical CPUs, i.e. 2 and 8 full SMT cores)
H/2baseline-h2, static-h2, baseline-h2c, json-h2cBaseline + static over TLS with h2 stream multiplexing; baseline + JSON over cleartext h2 (prior-knowledge, port 8082)
H/3baseline-h3, static-h3Baseline and static over QUIC with TLS 1.3
gRPCunary-grpc, unary-grpc-tls, stream-grpc, stream-grpc-tlsUnary and server-streaming gRPC over plaintext HTTP/2 and TLS
Gatewaygateway-64, gateway-h3Reverse proxy + server stack over HTTP/2 and HTTP/3 with mixed workload
Production Stackproduction-stackFour-service architecture: edge + Redis + JWT auth sidecar + server, 10K-item cache-aside, concurrent reads + writes
WebSocketecho-ws, echo-ws-pipeline, echo-ws-limitedEcho throughput across connection counts; 16x batched echo; echo with each connection closed after 10 messages (upgrade-handshake cost)

Run Locally

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

Contributing

Framework Maintainers

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"]

Add the badge

Benchmarked on HttpArena? Add the badge to your project's README — it links to the live leaderboard and adapts to light & dark themes automatically.

[![Benchmarked by HttpArena](https://cdn.jsdelivr.net/gh/MDA2AV/httparena-badge/wordmark.svg)](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

Benchmarked by HttpArena

Benchmarked by HttpArena H/1.1 Benchmarked by HttpArena H/1.1 Benchmarked by HttpArena H/1.1
Benchmarked by HttpArena H/1.1 Benchmarked by HttpArena H/1.1 Benchmarked by HttpArena H/1.1