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 103 frameworks
#FrameworkLanguageComposite
1dusty-tunedZig7432
2cpeakRust7387
3genhttp-ioxideC#7023
4dustyZig7018
5takoRust6674
6spliffyJS6597
7morojsJS6430
8fulmine.jsJS6363
9trillium-tunedRust6070
10fiber-tunedGo6020
11actixRust5971
12fiberGo5652
13simplew-tunedC#5636
14bunTS5512
15vertxJava5482
16flareMojo5410
17araaraOCaml5346
18ntexRust5346
19micronaut-tunedJava5301
20libuvcppC++4918
21true-async-serverPHP4884
22swoolePHP4666
23hyper-expressJS4385
24micronautJava4369
25genhttpC#4357
26luteLuau4333
27trilliumRust4267
28drogonC++4254
29cutelystC++4235
30mq-bridgeRust4208
31ultimate-expressJS4191
32axumRust4184
33helidon-tunedJava4173
34micronaut-productionJava4162
35simplewC#4002
36helidon-productionJava3987
37elysiaTS3871
38ktor-tunedKotlin3778
39go-fasthttpGo3515
40quarkus-jvmJava3503
41ring-http-exchangeClojure3366
42ktorKotlin3346
43oxpeckerF#3239
44h2o-mrubyRuby3217
45carterC#3214
46hono-bunTS3100
47genhttp-kestrelC#3084
48userverC++3033
49aspnet-minimal-11C#2995
50aspnet-minimalC#2959
51rocketRust2865
52fastendpointsC#2862
53codebehindC#2772
54node-h3JS2646
55roadrunnerErlang2584
56salvoRust2362
57netonKotlin2310
58joobyJava2267
59fastifyJS2259
60fletchDart2141
61echoGo2121
62ginGo2109
63mq-bridge-pyPython2109
64chiGo2046
65siskC#2001
66zincGo1966
67lapisLua1952
68aiohttpPython1949
69koaJS1875
70http4kKotlin1789
71go-stdlibGo1754
72expressJS1742
73reititClojure1733
74hono-nodeTS1710
75phoenix-banditElixir1700
76spring-bootJava1680
77vibe.dD1673
78warpHaskell1658
79hyperfPHP1645
80blackbullPython1559
81starlettePython1517
82sanicPython1502
83rageRuby1465
84humming-birdSwift1416
85litestarPython1392
86php-fpmPHP1272
87plug-cowboyElixir1271
88fastapiPython1209
89symfony-spawn-tasPHP1115
90sinatraRuby1111
91http4sScala1094
92rodaRuby1022
93robynPython860
94slimewebPython815
95watsonC#813
96hanamiRuby696
97railsRuby637
98http.jlJulia550
99mojoliciousPerl397
100flaskPython315
101bottlePython281
102djangoPython211
103servicestackC#176

Alpha Round, 103 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-tuned (Zig) leads the HTTP/1.1 composite with 7432, ahead of cpeak (7387) and genhttp-ioxide (7023). 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-tuned. The quickest entry of each language on HTTP/1.1: Zig dusty-tuned (7432), Rust cpeak (7387), C# genhttp-ioxide (7023), JS spliffy (6597), Go fiber-tuned (6020), TS bun (5512), Java vertx (5482), Mojo flare (5410).

How many web frameworks are benchmarked?

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