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 96 frameworks
#FrameworkLanguageComposite
1genhttp-ioxideC#7006
2actixRust6799
3fiber-tunedGo6394
4fulmine.jsJS6382
5simplew-tunedC#6023
6bunTS6003
7ntexRust5896
8fiberGo5726
9vertxJava5257
10true-async-serverPHP5232
11swoolePHP4990
12genhttpC#4910
13hyper-expressJS4751
14mq-bridgeRust4563
15ultimate-expressJS4537
16axumRust4508
17luteLuau4424
18drogonC++4408
19micronautJava4389
20cutelystC++4387
21simplewC#4297
22elysiaTS4232
23dustyZig4077
24ktor-tunedKotlin3899
25quarkus-jvmJava3741
26helidon-tunedJava3721
27ring-http-exchangeClojure3649
28alephClojure3615
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
46salvoRust2443
47fastifyJS2411
48fletchDart2354
49echoGo2295
50roadrunnerErlang2284
51ginGo2266
52ring-jetty-adapterClojure2265
53chiGo2209
54mq-bridge-pyPython2190
55netonKotlin2160
56siskC#2130
57ring-jetty9-adapterClojure2070
58aiohttpPython2044
59lapisLua2009
60koaJS1980
61go-stdlibGo1886
62http4kKotlin1875
63expressJS1840
64hono-nodeTS1838
65spring-bootJava1777
66phoenix-banditElixir1765
67vibe.dD1756
68hyperfPHP1755
69reititClojure1751
70warpHaskell1698
71blackbullPython1636
72starlettePython1604
73sanicPython1602
74litestarPython1486
75humming-birdSwift1437
76php-fpmPHP1340
77plug-cowboyElixir1320
78rodaRuby1290
79fastapiPython1270
80rageRuby1234
81symfony-spawn-tasPHP1193
82http4sScala1137
83sinatraRuby1136
84pedestalClojure972
85http-kitClojure965
86robynPython869
87slimewebPython844
88watsonC#831
89railsRuby632
90hanamiRuby617
91http.jlJulia579
92mojoliciousPerl402
93flaskPython337
94bottlePython281
95djangoPython222
96servicestackC#186

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

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