HttpArena
Frameworks
Composite ranking

HTTP/1.1 web server benchmarks

Normalized score summed across all HTTP/1.1 profiles (each profile worth 100 to its leader in the full field, so filtering does not change the numbers), per framework type. Higher is better. How it works →

Head to Head Comparison 93 frameworks
#FrameworkLanguageComposite
1dustyZig7096
2genhttp-ioxideC#6993
3actixRust6788
4fiber-tunedGo6384
5fulmine.jsJS6375
6simplew-tunedC#6011
7bunTS5995
8ntexRust5887
9morojsJS5789
10fiberGo5716
11vertxJava5249
12true-async-serverPHP5224
13swoolePHP4981
14genhttpC#4902
15hyper-expressJS4746
16mq-bridgeRust4558
17ultimate-expressJS4532
18helidon-tunedJava4505
19axumRust4504
20luteLuau4415
21drogonC++4399
22micronautJava4383
23cutelystC++4371
24helidon-productionJava4306
25simplewC#4290
26elysiaTS4226
27ktor-tunedKotlin4073
28quarkus-jvmJava3733
29ring-http-exchangeClojure3582
30genhttp-kestrelC#3508
31oxpeckerF#3466
32carterC#3448
33ktorKotlin3309
34h2o-mrubyRuby3301
35hono-bunTS3284
36userverC++3260
37go-fasthttpGo3229
38trilliumRust3201
39aspnet-minimal-11C#3201
40aspnet-minimalC#3159
41trillium-tunedRust3111
42rocketRust3069
43fastendpointsC#3054
44node-h3JS2865
45joobyJava2485
46salvoRust2442
47netonKotlin2440
48fastifyJS2408
49fletchDart2352
50echoGo2293
51roadrunnerErlang2280
52ginGo2264
53chiGo2207
54zincGo2207
55mq-bridge-pyPython2185
56siskC#2128
57aiohttpPython2042
58lapisLua2006
59koaJS1978
60go-stdlibGo1884
61http4kKotlin1874
62expressJS1838
63hono-nodeTS1837
64spring-bootJava1776
65phoenix-banditElixir1764
66vibe.dD1755
67hyperfPHP1754
68reititClojure1748
69warpHaskell1691
70blackbullPython1634
71starlettePython1602
72sanicPython1599
73litestarPython1485
74humming-birdSwift1435
75php-fpmPHP1339
76plug-cowboyElixir1320
77rodaRuby1290
78fastapiPython1268
79rageRuby1234
80symfony-spawn-tasPHP1192
81sinatraRuby1135
82http4sScala1135
83robynPython867
84slimewebPython844
85watsonC#830
86railsRuby632
87hanamiRuby617
88http.jlJulia579
89mojoliciousPerl402
90flaskPython337
91bottlePython281
92djangoPython222
93servicestackC#186

Alpha Round, 93 entries, best first. The interactive board - per-profile numbers, memory efficiency, the other families (HTTP/2, HTTP/3, Gateway, gRPC, WebSocket) - needs JavaScript; every entry has a page of its own, and the same rankings are published as text at /llms.txt.

What HttpArena measures

Every framework, HTTP engine and reverse proxy in the ranking above runs the same 27 test profiles - plain and pipelined requests, JSON, compression, TLS, uploads, static files, Postgres, templates and mixed endpoints - on one dedicated machine, in a container pinned to its own cores. Nothing is self-reported: the implementations are in the public repository and the raw numbers behind every row are published with them.

Questions

What is the fastest web framework?

dusty (Zig) leads the HTTP/1.1 composite with 7096, ahead of genhttp-ioxide (6993) and actix (6788). The composite adds a normalized score over every profile of the family, where the leader of each profile scores 100, so it ranks an entry over the whole suite instead of on one test. The sum is then reduced by 2.5% for each of routing, middleware, the request it hands you and the response it builds that the entry does not do for you, so a framework that does none of the four keeps 90% of what it scored on throughput.

Which language has the fastest web frameworks?

Zig, through dusty. The quickest entry of each language on HTTP/1.1: Zig dusty (7096), C# genhttp-ioxide (6993), Rust actix (6788), Go fiber-tuned (6384), JS fulmine.js (6375), TS bun (5995), Java vertx (5249), PHP true-async-server (5224).

How many web frameworks are benchmarked?

163 entries - web frameworks, HTTP engines and reverse proxies - over 27 test profiles. The ranking above is the 93 flagship and emerging frameworks scored on HTTP/1.1; engines and reverse proxies are ranked in their own league.

How are the benchmarks run?

Every entry runs in a container on the same machine (AMD Ryzen Threadripper PRO 3995WX 64-Cores, 64 cores), pinned to dedicated cores, one connection count per run. Requests per second is the best of three runs; latency, CPU and memory come from that run. Round: Alpha Round.

Can I add my own framework?

Yes. Every entry is a directory in the public repository with its own Dockerfile and its own implementation of the profiles, and a pull request that adds one is benchmarked on the same machine as everything else.

Browse by language

Every entry, one page each · Head-to-head comparisons · How the benchmark works · Add a framework · The rankings as text

Results updated