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 92 frameworks
#FrameworkLanguageComposite
1genhttp-ioxideC#7006
2actixRust6799
3fiber-tunedGo6394
4fulmine.jsJS6382
5simplew-tunedC#6023
6bunTS6003
7ntexRust5896
8morojsJS5798
9fiberGo5726
10vertxJava5257
11true-async-serverPHP5232
12swoolePHP4990
13genhttpC#4910
14hyper-expressJS4751
15mq-bridgeRust4563
16ultimate-expressJS4537
17axumRust4508
18luteLuau4424
19drogonC++4408
20micronautJava4389
21cutelystC++4387
22simplewC#4297
23elysiaTS4232
24dustyZig4077
25ktor-tunedKotlin3899
26quarkus-jvmJava3741
27helidon-tunedJava3721
28ring-http-exchangeClojure3649
29genhttp-kestrelC#3513
30oxpeckerF#3472
31carterC#3454
32h2o-mrubyRuby3307
33hono-bunTS3289
34userverC++3264
35go-fasthttpGo3234
36aspnet-minimal-11C#3205
37trilliumRust3203
38helidon-productionJava3184
39aspnet-minimalC#3164
40trillium-tunedRust3114
41rocketRust3071
42fastendpointsC#3059
43ktorKotlin2965
44node-h3JS2868
45joobyJava2489
46netonKotlin2443
47salvoRust2443
48fastifyJS2411
49fletchDart2354
50echoGo2295
51roadrunnerErlang2284
52ginGo2266
53chiGo2209
54mq-bridge-pyPython2190
55siskC#2131
56aiohttpPython2044
57lapisLua2009
58koaJS1980
59go-stdlibGo1886
60http4kKotlin1875
61expressJS1840
62hono-nodeTS1838
63spring-bootJava1777
64phoenix-banditElixir1766
65vibe.dD1756
66hyperfPHP1756
67reititClojure1751
68warpHaskell1698
69blackbullPython1636
70starlettePython1604
71sanicPython1602
72litestarPython1487
73humming-birdSwift1437
74php-fpmPHP1340
75plug-cowboyElixir1320
76rodaRuby1290
77fastapiPython1270
78rageRuby1235
79symfony-spawn-tasPHP1193
80http4sScala1137
81sinatraRuby1136
82robynPython869
83slimewebPython844
84watsonC#831
85railsRuby632
86hanamiRuby617
87http.jlJulia580
88mojoliciousPerl402
89flaskPython337
90bottlePython281
91djangoPython222
92servicestackC#186

Alpha Round, 92 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?

genhttp-ioxide (C#) leads the HTTP/1.1 composite with 7006, ahead of actix (6799) and fiber-tuned (6394). 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?

C#, through genhttp-ioxide. The quickest entry of each language on HTTP/1.1: C# genhttp-ioxide (7006), Rust actix (6799), Go fiber-tuned (6394), JS fulmine.js (6382), TS bun (6003), Java vertx (5257), PHP true-async-server (5232), Luau lute (4424).

How many web frameworks are benchmarked?

160 entries - web frameworks, HTTP engines and reverse proxies - over 27 test profiles. The ranking above is the 92 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