JS web API framework benchmark

Framework x runtime, realistic API workloads. Results folder: full-1

NodeBunDeno

Overall score

Geometric mean of RPS relative to the best combo in each throughput scenario (100 = best everywhere).

Elysia on bun
87.3
h3 on bun
86.6
Hono on bun
86.4
uWebSockets.js on node
79.4
Bun.serve (baseline) on bun
78.3
Fastify on bun
76.9
HyperExpress on node
74.0
Koa on bun
73.7
Express 5 on bun
71.7
Hono on deno
69.6
h3 on deno
67.9
Deno.serve (baseline) on deno
67.2
Hapi on bun
66.7
Elysia on deno
65.7
NestJS (Fastify) on bun
61.0
node:http (baseline) on bun
60.8
Hono on node
60.6
Fastify on node
59.2
Elysia on node
58.9
Fastify on deno
57.9
h3 on node
57.4
Koa on node
57.4
node:http (baseline) on node
57.1
NestJS (Express) on bun
56.9
Koa on deno
56.6
Express 5 on node
52.6
NestJS (Fastify) on node
51.1
Hapi on node
50.4
NestJS (Fastify) on deno
49.5
node:http (baseline) on deno
49.5
Express 5 on deno
46.9
Hapi on deno
46.9
NestJS (Express) on node
43.9
NestJS (Express) on deno
39.9

Framework x runtime

FrameworkNodeBunDeno
node:http (baseline)57.160.849.5
Bun.serve (baseline)–78.3–
Deno.serve (baseline)––67.2
Express 552.671.746.9
Fastify59.276.957.9
Koa57.473.756.6
Hapi50.466.746.9
NestJS (Express)43.956.939.9
NestJS (Fastify)51.161.049.5
Hono60.686.469.6
Elysia58.987.365.7
h357.486.667.9
uWebSockets.js79.4N/A–
HyperExpress74.0N/A–

GET /plaintext

Bar = requests per second (longer is better). Right column shows p99 latency.

uWebSockets.js on node
139,732
p99 0.87 ms
Hono on bun
125,903
p99 1.033 ms
Hono on deno
123,760
p99 0.651 ms
Elysia on deno
119,204
p99 0.673 ms
Elysia on bun
117,899
p99 1.14 ms
h3 on bun
113,334
p99 1.123 ms
HyperExpress on node
110,570
p99 1.124 ms
h3 on deno
105,064
p99 1.763 ms
Deno.serve (baseline) on deno
102,347
p99 0.781 ms
node:http (baseline) on node
89,332
p99 1.407 ms
Bun.serve (baseline) on bun
85,112
p99 1.539 ms
Hono on node
84,843
p99 1.483 ms
Fastify on bun
81,445
p99 1.682 ms
Elysia on node
79,978
p99 1.566 ms
NestJS (Fastify) on bun
77,389
p99 1.593 ms
Express 5 on bun
72,984
p99 1.697 ms
Fastify on node
72,248
p99 1.789 ms
NestJS (Fastify) on node
71,560
p99 1.757 ms
Koa on bun
71,151
p99 1.733 ms
NestJS (Express) on bun
67,681
p99 1.818 ms
Fastify on deno
67,430
p99 2.625 ms
Koa on node
59,143
p99 2.185 ms
node:http (baseline) on bun
58,993
p99 2.18 ms
NestJS (Fastify) on deno
57,858
p99 2.594 ms
Koa on deno
57,398
p99 2.736 ms
Hapi on bun
56,384
p99 2.177 ms
h3 on node
49,884
p99 2.908 ms
Express 5 on node
49,366
p99 2.519 ms
Hapi on node
49,041
p99 2.546 ms
Hapi on deno
44,848
p99 3.366 ms
Express 5 on deno
43,379
p99 3.125 ms
NestJS (Express) on node
42,938
p99 2.918 ms
NestJS (Express) on deno
40,254
p99 3.141 ms
node:http (baseline) on deno
40,043
p99 2.57 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1uWebSockets.js on node139,7320.40.7610.8793970
2Hono on bun125,9030.4450.8421.03367990
3Hono on deno123,7600.510.5570.651102970
4Elysia on deno119,2040.530.5790.67389970
5Elysia on bun117,8990.4830.8541.1470990
6h3 on bun113,3340.5060.9121.12368990
7HyperExpress on node110,5700.5320.6521.124114980
8h3 on deno105,0640.5790.6351.7631721100
9Deno.serve (baseline) on deno102,3470.6180.680.781102970
10node:http (baseline) on node89,3320.6750.7711.407124970
11Bun.serve (baseline) on bun85,1120.681.0251.53962990
12Hono on node84,8430.7140.81.483128980
13Fastify on bun81,4450.7090.9731.682122980
14Elysia on node79,9780.760.8421.566128980
15NestJS (Fastify) on bun77,3890.7740.8781.593154990
16Express 5 on bun72,9840.820.9511.697121990
17Fastify on node72,2480.8261.0571.789126980
18NestJS (Fastify) on node71,5600.8540.941.757184980
19Koa on bun71,1510.8460.9821.7331231000
20NestJS (Express) on bun67,6810.8890.9951.818156990
21Fastify on deno67,4300.8910.9692.6251961160
22Koa on node59,1431.021.2322.185132980
23node:http (baseline) on bun58,9931.0321.2372.1895990
24NestJS (Fastify) on deno57,8581.0431.1162.5942541160
25Koa on deno57,3981.0331.1392.7361961200
26Hapi on bun56,3841.0741.2152.1771431000
27h3 on node49,8841.1581.7412.908137980
28Express 5 on node49,3661.2331.4572.519167980
29Hapi on node49,0411.2581.3852.546191980
30Hapi on deno44,8481.2811.4143.3662121330
31Express 5 on deno43,3791.3961.4933.1251961150
32NestJS (Express) on node42,9381.4381.5622.918183990
33NestJS (Express) on deno40,2541.5011.6093.1412351160
34node:http (baseline) on deno40,0431.5451.8242.571731030

GET /json

Bar = requests per second (longer is better). Right column shows p99 latency.

uWebSockets.js on node
130,406
p99 0.939 ms
HyperExpress on node
110,096
p99 1.125 ms
Elysia on bun
96,637
p99 1.325 ms
h3 on deno
89,962
p99 2.129 ms
node:http (baseline) on node
89,229
p99 1.4 ms
Hono on bun
88,477
p99 1.479 ms
Hono on deno
83,327
p99 0.975 ms
Elysia on deno
82,234
p99 0.981 ms
h3 on bun
80,299
p99 1.632 ms
Bun.serve (baseline) on bun
73,376
p99 1.81 ms
Deno.serve (baseline) on deno
71,194
p99 1.14 ms
Hono on node
63,708
p99 1.964 ms
Elysia on node
61,076
p99 2.065 ms
NestJS (Fastify) on bun
59,641
p99 2.084 ms
Fastify on node
58,063
p99 2.198 ms
NestJS (Fastify) on node
57,658
p99 2.193 ms
Fastify on bun
57,152
p99 2.32 ms
h3 on node
56,901
p99 2.26 ms
Express 5 on bun
55,299
p99 2.306 ms
Koa on bun
54,752
p99 2.262 ms
NestJS (Express) on bun
51,880
p99 2.369 ms
NestJS (Fastify) on deno
51,671
p99 2.905 ms
Fastify on deno
50,099
p99 3.248 ms
node:http (baseline) on bun
48,487
p99 2.6 ms
Koa on node
48,013
p99 2.601 ms
Hapi on bun
47,570
p99 2.58 ms
Koa on deno
45,475
p99 3.225 ms
Hapi on node
40,162
p99 3.114 ms
NestJS (Express) on node
38,937
p99 3.191 ms
Express 5 on node
38,515
p99 3.18 ms
node:http (baseline) on deno
38,328
p99 2.58 ms
Hapi on deno
38,172
p99 3.949 ms
NestJS (Express) on deno
38,055
p99 3.385 ms
Express 5 on deno
35,507
p99 3.756 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1uWebSockets.js on node130,4060.4340.8190.93993970
2HyperExpress on node110,0960.5340.6591.125113980
3Elysia on bun96,6370.5881.0981.32570990
4h3 on deno89,9620.6820.7572.1291711090
5node:http (baseline) on node89,2290.6790.7561.4124980
6Hono on bun88,4770.6491.1061.47967990
7Hono on deno83,3270.7490.8520.975102970
8Elysia on deno82,2340.7720.860.98189970
9h3 on bun80,2990.7351.0321.63269990
10Bun.serve (baseline) on bun73,3760.7871.1961.8165990
11Deno.serve (baseline) on deno71,1940.8771.0031.14102970
12Hono on node63,7080.9451.0851.964128980
13Elysia on node61,0761.0061.1112.065129980
14NestJS (Fastify) on bun59,6411.0171.1392.084154990
15Fastify on node58,0631.0581.2322.198127980
16NestJS (Fastify) on node57,6581.0711.172.193183980
17Fastify on bun57,1521.0421.2972.32133990
18h3 on node56,9011.0871.2152.26126980
19Express 5 on bun55,2991.0811.2882.306118990
20Koa on bun54,7521.1091.2622.2621171000
21NestJS (Express) on bun51,8801.1631.3112.3691561000
22NestJS (Fastify) on deno51,6711.171.2752.9052541160
23Fastify on deno50,0991.2031.3363.2481931150
24node:http (baseline) on bun48,4871.2521.472.695990
25Koa on node48,0131.2721.4432.601134980
26Hapi on bun47,5701.271.4892.581401000
27Koa on deno45,4751.3171.4463.2252011180
28Hapi on node40,1621.5461.6623.114195980
29NestJS (Express) on node38,9371.581.7183.191183990
30Express 5 on node38,5151.5821.8163.18169980
31node:http (baseline) on deno38,3281.5911.8772.581751030
32Hapi on deno38,1721.5151.7253.9492091320
33NestJS (Express) on deno38,0551.5951.7333.3852361160
34Express 5 on deno35,5071.7071.8753.7561961140

GET /json (256 conns)

Bar = requests per second (longer is better). Right column shows p99 latency.

uWebSockets.js on node
140,376
p99 3.436 ms
HyperExpress on node
101,734
p99 4.808 ms
Elysia on bun
101,299
p99 4.867 ms
Hono on bun
91,344
p99 5.303 ms
Hono on deno
89,120
p99 3.51 ms
Elysia on deno
83,705
p99 3.824 ms
h3 on bun
82,597
p99 5.954 ms
Deno.serve (baseline) on deno
80,500
p99 4.004 ms
h3 on deno
76,837
p99 5.372 ms
Bun.serve (baseline) on bun
71,735
p99 6.667 ms
Fastify on bun
66,574
p99 5.223 ms
Fastify on node
64,540
p99 4.924 ms
Hono on node
64,040
p99 4.921 ms
h3 on node
62,268
p99 5.014 ms
Elysia on node
61,220
p99 5.134 ms
NestJS (Fastify) on bun
58,962
p99 5.669 ms
NestJS (Fastify) on node
56,391
p99 5.431 ms
Express 5 on bun
56,300
p99 5.817 ms
node:http (baseline) on node
55,189
p99 6.026 ms
Koa on bun
54,520
p99 5.943 ms
Fastify on deno
53,825
p99 6.784 ms
NestJS (Express) on bun
53,100
p99 6.168 ms
Koa on node
52,884
p99 5.547 ms
NestJS (Fastify) on deno
50,482
p99 6.942 ms
node:http (baseline) on bun
46,906
p99 7.161 ms
Koa on deno
46,307
p99 8.149 ms
Hapi on bun
46,002
p99 6.855 ms
Express 5 on node
43,217
p99 6.782 ms
Hapi on node
41,075
p99 7.256 ms
NestJS (Express) on node
38,666
p99 7.765 ms
node:http (baseline) on deno
38,099
p99 10.575 ms
Hapi on deno
36,531
p99 13.085 ms
Express 5 on deno
36,075
p99 11.553 ms
NestJS (Express) on deno
33,951
p99 12.308 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1uWebSockets.js on node140,3761.7052.0213.43693970
2HyperExpress on node101,7342.4622.614.808115980
3Elysia on bun101,2992.4432.6874.86771990
4Hono on bun91,3442.6783.0425.30368990
5Hono on deno89,1202.8913.0523.51108970
6Elysia on deno83,7052.9613.3553.82494970
7h3 on bun82,5973.0193.3515.95470990
8Deno.serve (baseline) on deno80,5003.0763.5084.004108970
9h3 on deno76,8373.2383.5815.3721781080
10Bun.serve (baseline) on bun71,7353.4033.9436.66763990
11Fastify on bun66,5743.7754.2945.223139990
12Fastify on node64,5403.9434.1634.924157980
13Hono on node64,0403.9224.1514.921157980
14h3 on node62,2684.094.345.014155980
15Elysia on node61,2204.1574.4045.134159980
16NestJS (Fastify) on bun58,9624.2624.8635.669170990
17NestJS (Fastify) on node56,3914.534.7655.431190980
18Express 5 on bun56,3004.3855.0345.8171391000
19node:http (baseline) on node55,1894.5035.2196.026152970
20Koa on bun54,5204.6325.1255.9431461000
21Fastify on deno53,8254.6885.4896.7842001040
22NestJS (Express) on bun53,1004.7415.3776.1681721000
23Koa on node52,8844.7864.995.547167990
24NestJS (Fastify) on deno50,4824.9385.7676.9422551050
25node:http (baseline) on bun46,9065.375.9727.161122990
26Koa on deno46,3075.3846.4528.1492091060
27Hapi on bun46,0025.4986.1096.8551891000
28Express 5 on node43,2175.896.2656.782172981
29Hapi on node41,0756.2016.5297.256200991974
30NestJS (Express) on node38,6666.5366.9787.765191994014
31node:http (baseline) on deno38,0996.4438.57810.5751791040
32Hapi on deno36,5316.6548.81113.0852341240
33Express 5 on deno36,0756.749.1711.5532081150
34NestJS (Express) on deno33,9517.2018.94512.3082421170

GET /users/:id (Postgres PK lookup)

Bar = requests per second (longer is better). Right column shows p99 latency.

Elysia on bun
11,946
p99 8.295 ms
Hono on bun
11,934
p99 8.334 ms
NestJS (Fastify) on bun
11,766
p99 8.499 ms
Fastify on bun
11,756
p99 8.437 ms
Koa on bun
11,605
p99 8.636 ms
NestJS (Express) on bun
11,601
p99 8.683 ms
h3 on bun
11,593
p99 8.638 ms
Hapi on bun
11,587
p99 8.736 ms
Express 5 on bun
11,443
p99 8.681 ms
Bun.serve (baseline) on bun
11,244
p99 8.84 ms
node:http (baseline) on bun
10,137
p99 9.731 ms
h3 on deno
8,948
p99 10.341 ms
Fastify on deno
8,909
p99 10.672 ms
uWebSockets.js on node
8,810
p99 10.683 ms
Koa on deno
8,725
p99 11.132 ms
Hapi on deno
8,721
p99 11.903 ms
Elysia on deno
8,719
p99 10.58 ms
Hono on deno
8,718
p99 10.676 ms
NestJS (Fastify) on deno
8,651
p99 10.806 ms
Hono on node
8,643
p99 10.941 ms
Fastify on node
8,618
p99 10.93 ms
Elysia on node
8,618
p99 10.861 ms
NestJS (Fastify) on node
8,609
p99 10.996 ms
NestJS (Express) on node
8,588
p99 11.175 ms
HyperExpress on node
8,585
p99 11.115 ms
Deno.serve (baseline) on deno
8,576
p99 10.81 ms
Hapi on node
8,571
p99 11.403 ms
h3 on node
8,536
p99 11.038 ms
Express 5 on node
8,521
p99 11.203 ms
Express 5 on deno
8,508
p99 11.248 ms
NestJS (Express) on deno
8,504
p99 11.002 ms
Koa on node
8,502
p99 11.322 ms
node:http (baseline) on deno
8,161
p99 11.419 ms
node:http (baseline) on node
8,012
p99 11.745 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1Elysia on bun11,9465.3396.5888.295115990
2Hono on bun11,9345.3146.6188.334114990
3NestJS (Fastify) on bun11,7665.3836.7318.4991891000
4Fastify on bun11,7565.4266.6218.437162990
5Koa on bun11,6055.4626.8448.6361581000
6NestJS (Express) on bun11,6015.4526.9338.6831921000
7h3 on bun11,5935.4756.8938.638109990
8Hapi on bun11,5875.4726.9548.7361701000
9Express 5 on bun11,4435.5456.9988.6811551000
10Bun.serve (baseline) on bun11,2445.6627.048.84107990
11node:http (baseline) on bun10,1376.2157.9029.7311181000
12h3 on deno8,9487.6119.10210.3411991020
13Fastify on deno8,9097.2749.06610.6722211040
14uWebSockets.js on node8,8107.2778.30110.6831791010
15Koa on deno8,7257.3989.10511.1322261050
16Hapi on deno8,7217.3399.33711.9032371090
17Elysia on deno8,7197.8049.29710.581771010
18Hono on deno8,7187.7949.30510.6761891010
19NestJS (Fastify) on deno8,6517.3978.81210.8062791040
20Hono on node8,6437.4288.52410.9412121010
21Fastify on node8,6187.4278.50410.932081010
22Elysia on node8,6187.4388.55610.8612101010
23NestJS (Fastify) on node8,6097.488.62910.9962631010
24NestJS (Express) on node8,5887.4688.97111.1752531010
25HyperExpress on node8,5857.4698.63311.1151941030
26Deno.serve (baseline) on deno8,5767.9399.42710.811881000
27Hapi on node8,5717.448.99411.4031911010
28h3 on node8,5367.5438.66611.0382091010
29Express 5 on node8,5217.5359.01811.2031961010
30Express 5 on deno8,5087.4149.22911.2482151040
31NestJS (Express) on deno8,5047.5028.95311.0022561050
32Koa on node8,5027.5238.97511.3222021010
33node:http (baseline) on deno8,1617.9549.68811.4191801020
34node:http (baseline) on node8,0127.9959.80311.7451751010

GET /posts (JOIN + pagination)

Bar = requests per second (longer is better). Right column shows p99 latency.

HyperExpress on node
6,157
p99 29.962 ms
h3 on deno
5,870
p99 30.19 ms
uWebSockets.js on node
5,863
p99 34.585 ms
Elysia on bun
5,690
p99 52.819 ms
Hono on bun
5,661
p99 49.387 ms
Hono on deno
5,571
p99 34.279 ms
Fastify on bun
5,453
p99 49.008 ms
h3 on bun
5,432
p99 50.138 ms
NestJS (Fastify) on bun
5,424
p99 44.751 ms
Elysia on node
5,372
p99 31.33 ms
Koa on bun
5,371
p99 47.978 ms
Hono on node
5,366
p99 34.054 ms
Express 5 on bun
5,311
p99 49.815 ms
NestJS (Express) on bun
5,311
p99 43.179 ms
Elysia on deno
5,293
p99 35.524 ms
NestJS (Fastify) on deno
5,225
p99 33.782 ms
NestJS (Fastify) on node
5,140
p99 33.805 ms
Fastify on node
5,129
p99 33.965 ms
Koa on node
5,104
p99 34.024 ms
Koa on deno
5,084
p99 33.459 ms
Deno.serve (baseline) on deno
5,076
p99 36.674 ms
Fastify on deno
5,073
p99 34.351 ms
NestJS (Express) on node
4,958
p99 29.603 ms
Express 5 on node
4,835
p99 31.35 ms
Bun.serve (baseline) on bun
4,835
p99 55.788 ms
NestJS (Express) on deno
4,831
p99 28.339 ms
Express 5 on deno
4,823
p99 28.917 ms
Hapi on bun
4,790
p99 35.562 ms
h3 on node
4,616
p99 36.637 ms
Hapi on deno
4,511
p99 26.41 ms
node:http (baseline) on node
4,354
p99 28.538 ms
Hapi on node
4,223
p99 28.46 ms
node:http (baseline) on deno
3,922
p99 44.801 ms
node:http (baseline) on bun
3,810
p99 71.938 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1HyperExpress on node6,1579.517.84629.962201930
2h3 on deno5,87010.12117.34430.19194920
3uWebSockets.js on node5,8639.76918.58634.585195920
4Elysia on bun5,6907.52625.49752.819113680
5Hono on bun5,6618.34624.05449.387111720
6Hono on deno5,57110.54818.77534.279181900
7Fastify on bun5,4538.93824.54449.008151750
8h3 on bun5,4328.79525.04750.138105710
9NestJS (Fastify) on bun5,4249.7823.19844.751202830
10Elysia on node5,37211.29419.36931.33210910
11Koa on bun5,3719.72324.25547.978156790
12Hono on node5,36611.09419.40434.054209900
13Express 5 on bun5,3119.17525.27349.815156770
14NestJS (Express) on bun5,3119.89322.77643.179196850
15Elysia on deno5,29311.1819.54635.524180910
16NestJS (Fastify) on deno5,22511.60519.57933.782256950
17NestJS (Fastify) on node5,14011.64519.42433.805274910
18Fastify on node5,12911.72320.83133.965210960
19Koa on node5,10411.81120.63634.024217910
20Koa on deno5,08411.919.66833.459219940
21Deno.serve (baseline) on deno5,07611.70120.26836.674179910
22Fastify on deno5,07311.72920.68234.351207980
23NestJS (Express) on node4,95812.56319.03329.603252940
24Express 5 on node4,83512.70319.75531.35216970
25Bun.serve (baseline) on bun4,83510.33527.73655.78898720
26NestJS (Express) on deno4,83112.83418.68128.339247980
27Express 5 on deno4,82312.74719.28128.9172081010
28Hapi on bun4,79012.53320.6235.5622211090
29h3 on node4,61613.20621.3936.637209890
30Hapi on deno4,51113.63119.70226.412601060
31node:http (baseline) on node4,35414.35821.33528.538202940
32Hapi on node4,22314.89520.46628.462761240
33node:http (baseline) on deno3,92215.41923.84344.801184930
34node:http (baseline) on bun3,81013.35631.96871.938119700

POST /users (validate + INSERT)

Bar = requests per second (longer is better). Right column shows p99 latency.

Hono on bun
11,653
p99 8.93 ms
Elysia on bun
11,651
p99 8.592 ms
Fastify on bun
11,413
p99 8.932 ms
h3 on bun
11,388
p99 9.312 ms
Bun.serve (baseline) on bun
11,201
p99 9.087 ms
Koa on bun
11,121
p99 9.15 ms
Express 5 on bun
11,062
p99 9.193 ms
Hapi on bun
11,031
p99 9.326 ms
NestJS (Express) on bun
10,735
p99 9.551 ms
NestJS (Fastify) on bun
10,680
p99 9.518 ms
node:http (baseline) on bun
9,991
p99 10.345 ms
h3 on deno
9,152
p99 10.582 ms
Fastify on deno
8,801
p99 10.959 ms
Hono on deno
8,746
p99 10.924 ms
HyperExpress on node
8,721
p99 10.706 ms
uWebSockets.js on node
8,675
p99 10.748 ms
Koa on deno
8,666
p99 11.065 ms
NestJS (Fastify) on deno
8,608
p99 10.979 ms
Elysia on deno
8,582
p99 11.469 ms
Deno.serve (baseline) on deno
8,534
p99 11.036 ms
Hono on node
8,504
p99 10.706 ms
Fastify on node
8,399
p99 11.242 ms
Express 5 on deno
8,383
p99 11.469 ms
Hapi on deno
8,320
p99 12.448 ms
h3 on node
8,282
p99 11.607 ms
Express 5 on node
8,266
p99 11.385 ms
Koa on node
8,264
p99 11.617 ms
NestJS (Fastify) on node
8,264
p99 11.342 ms
Elysia on node
8,247
p99 12.154 ms
Hapi on node
8,211
p99 11.764 ms
NestJS (Express) on deno
8,189
p99 11.393 ms
NestJS (Express) on node
8,159
p99 11.619 ms
node:http (baseline) on deno
7,996
p99 11.483 ms
node:http (baseline) on node
7,151
p99 13.986 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1Hono on bun11,6535.3976.8568.93115970
2Elysia on bun11,6515.3446.7578.592119970
3Fastify on bun11,4135.5167.0298.932186980
4h3 on bun11,3885.5297.1439.312120970
5Bun.serve (baseline) on bun11,2015.6537.1419.087106970
6Koa on bun11,1215.6227.2939.15176980
7Express 5 on bun11,0625.6477.2159.193184980
8Hapi on bun11,0315.77.3649.326204990
9NestJS (Express) on bun10,7355.8447.599.551235990
10NestJS (Fastify) on bun10,6805.8527.5599.518228980
11node:http (baseline) on bun9,9916.3418.14710.345133990
12h3 on deno9,1527.3669.09110.5822121020
13Fastify on deno8,8017.3178.82310.9592221030
14Hono on deno8,7467.7589.47610.9242031000
15HyperExpress on node8,7217.328.35110.7061961000
16uWebSockets.js on node8,6757.3388.40810.7481841000
17Koa on deno8,6667.4278.94511.0652371040
18NestJS (Fastify) on deno8,6087.4729.03710.9792901040
19Elysia on deno8,5827.8419.6511.4691871000
20Deno.serve (baseline) on deno8,5348.0029.63711.0361921000
21Hono on node8,5047.5718.52910.7062191000
22Fastify on node8,3997.6068.62311.2422181010
23Express 5 on deno8,3837.6089.15511.4692301040
24Hapi on deno8,3207.6749.62812.4482441110
25h3 on node8,2827.6678.97711.6072051000
26Express 5 on node8,2667.7498.90111.3852191000
27Koa on node8,2647.7399.08911.6172131010
28NestJS (Fastify) on node8,2647.7838.83211.3422731010
29Elysia on node8,2477.79.49712.1542391030
30Hapi on node8,2117.7759.04211.7642471020
31NestJS (Express) on deno8,1897.7899.37311.3932701050
32NestJS (Express) on node8,1597.8549.17311.6192701010
33node:http (baseline) on deno7,9968.1279.55711.4832101020
34node:http (baseline) on node7,1518.80110.92913.9862071000

PATCH /users/:id (validate + UPDATE)

Bar = requests per second (longer is better). Right column shows p99 latency.

Elysia on bun
12,437
p99 8.07 ms
Hono on bun
12,319
p99 8.194 ms
h3 on bun
12,186
p99 8.134 ms
Fastify on bun
12,178
p99 8.424 ms
NestJS (Fastify) on bun
11,755
p99 8.712 ms
Koa on bun
11,747
p99 8.613 ms
Express 5 on bun
11,715
p99 8.699 ms
Bun.serve (baseline) on bun
11,694
p99 8.557 ms
Hapi on bun
11,516
p99 8.893 ms
NestJS (Express) on bun
11,456
p99 8.872 ms
node:http (baseline) on bun
10,213
p99 9.864 ms
Hono on deno
9,083
p99 10.387 ms
Fastify on deno
9,000
p99 11.216 ms
Elysia on deno
8,914
p99 10.678 ms
NestJS (Fastify) on deno
8,866
p99 10.461 ms
Koa on deno
8,795
p99 10.967 ms
Deno.serve (baseline) on deno
8,742
p99 10.953 ms
Hono on node
8,704
p99 10.681 ms
Fastify on node
8,695
p99 10.727 ms
h3 on deno
8,671
p99 10.809 ms
Koa on node
8,657
p99 10.671 ms
uWebSockets.js on node
8,622
p99 10.953 ms
HyperExpress on node
8,611
p99 11.013 ms
Express 5 on deno
8,574
p99 11.137 ms
NestJS (Fastify) on node
8,566
p99 10.68 ms
Elysia on node
8,549
p99 11.431 ms
Hapi on deno
8,546
p99 12.245 ms
NestJS (Express) on deno
8,541
p99 11.03 ms
Express 5 on node
8,422
p99 11.146 ms
h3 on node
8,415
p99 11.31 ms
NestJS (Express) on node
8,391
p99 11.351 ms
node:http (baseline) on deno
8,386
p99 10.934 ms
Hapi on node
8,356
p99 11.686 ms
node:http (baseline) on node
8,149
p99 11.271 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1Elysia on bun12,4375.0796.3158.07119980
2Hono on bun12,3195.146.4058.194117990
3h3 on bun12,1865.1586.3098.134114980
4Fastify on bun12,1785.1726.488.424170990
5NestJS (Fastify) on bun11,7555.3476.7928.712218990
6Koa on bun11,7475.3716.8018.613166990
7Express 5 on bun11,7155.3866.7868.699166990
8Bun.serve (baseline) on bun11,6945.46.7198.557108980
9Hapi on bun11,5165.4717.0128.893177990
10NestJS (Express) on bun11,4565.4887.0278.872211990
11node:http (baseline) on bun10,2136.1517.8549.8641291000
12Hono on deno9,0837.4128.97810.3871871000
13Fastify on deno9,0007.1028.65811.2162221060
14Elysia on deno8,9147.5559.11310.6782051010
15NestJS (Fastify) on deno8,8667.2638.7210.4612871040
16Koa on deno8,7957.3068.78810.9672341050
17Deno.serve (baseline) on deno8,7427.6749.32110.9531921030
18Hono on node8,7047.3478.3610.6812161010
19Fastify on node8,6957.3638.38310.7272001010
20h3 on deno8,6717.8119.40910.8092101030
21Koa on node8,6577.48.46310.6712151010
22uWebSockets.js on node8,6227.3918.44310.9532031030
23HyperExpress on node8,6117.4328.51311.0132051030
24Express 5 on deno8,5747.4428.88411.1372271050
25NestJS (Fastify) on node8,5667.4838.44610.682681010
26Elysia on node8,5497.4268.79911.4312451040
27Hapi on deno8,5467.3839.47812.2452331140
28NestJS (Express) on deno8,5417.4588.96411.032911060
29Express 5 on node8,4227.588.7711.1461971010
30h3 on node8,4157.5938.73611.312201040
31NestJS (Express) on node8,3917.6088.88511.3512671020
32node:http (baseline) on deno8,3867.6489.14310.9342041030
33Hapi on node8,3567.6429.03411.6862421030
34node:http (baseline) on node8,1497.8848.94311.2712021010

GET /me/feed (request-id, logger, CORS, JWT, query)

Bar = requests per second (longer is better). Right column shows p99 latency.

h3 on bun
11,935
p99 8.322 ms
Elysia on bun
11,547
p99 8.42 ms
Fastify on bun
11,304
p99 8.727 ms
Hono on bun
11,148
p99 8.903 ms
NestJS (Fastify) on bun
11,112
p99 9.104 ms
Bun.serve (baseline) on bun
11,061
p99 8.846 ms
Express 5 on bun
10,983
p99 9.044 ms
Koa on bun
10,974
p99 9.049 ms
NestJS (Express) on bun
10,931
p99 9.158 ms
Hapi on bun
10,867
p99 9.304 ms
node:http (baseline) on bun
9,468
p99 10.509 ms
uWebSockets.js on node
8,439
p99 11.523 ms
Elysia on node
8,305
p99 11.619 ms
HyperExpress on node
8,267
p99 11.73 ms
Koa on node
8,236
p99 11.731 ms
Fastify on deno
8,202
p99 11.55 ms
Fastify on node
8,184
p99 11.903 ms
Hapi on node
8,105
p99 11.844 ms
NestJS (Fastify) on deno
8,066
p99 11.724 ms
Express 5 on node
8,015
p99 11.958 ms
h3 on node
8,013
p99 11.918 ms
NestJS (Fastify) on node
8,011
p99 11.926 ms
Elysia on deno
7,994
p99 11.523 ms
Koa on deno
7,915
p99 11.839 ms
Deno.serve (baseline) on deno
7,859
p99 11.676 ms
Hono on deno
7,808
p99 11.84 ms
Hapi on deno
7,783
p99 12.748 ms
h3 on deno
7,765
p99 12.516 ms
Express 5 on deno
7,732
p99 12.411 ms
NestJS (Express) on deno
7,694
p99 12.273 ms
Hono on node
7,676
p99 12.597 ms
NestJS (Express) on node
7,654
p99 12.914 ms
node:http (baseline) on node
7,639
p99 12.67 ms
node:http (baseline) on deno
7,422
p99 13.217 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1h3 on bun11,9355.3026.7118.3221261110
2Elysia on bun11,5475.4936.8518.421271100
3Fastify on bun11,3045.6127.0888.7271841110
4Hono on bun11,1485.717.1978.9031261110
5NestJS (Fastify) on bun11,1125.6797.2879.1042131110
6Bun.serve (baseline) on bun11,0615.7267.2378.8461221110
7Express 5 on bun10,9835.7567.3339.0441581100
8Koa on bun10,9745.7677.3269.0491811110
9NestJS (Express) on bun10,9315.7767.3579.1582061100
10Hapi on bun10,8675.827.4289.3041971110
11node:http (baseline) on bun9,4686.78.55910.5091431120
12uWebSockets.js on node8,4397.5599.62111.5232031070
13Elysia on node8,3057.6979.72311.6192191030
14HyperExpress on node8,2677.7059.82311.732031060
15Koa on node8,2367.7559.87311.7312311020
16Fastify on deno8,2028.0189.60311.552681110
17Fastify on node8,1847.7989.94611.9032341060
18Hapi on node8,1057.89110.02911.8442091020
19NestJS (Fastify) on deno8,0668.1269.70911.7243281120
20Express 5 on node8,0157.95610.1111.9582191010
21h3 on node8,0137.98710.1211.9182141020
22NestJS (Fastify) on node8,0117.94510.05311.9262711020
23Elysia on deno7,9948.0069.28211.5233121080
24Koa on deno7,9158.2519.77911.8392681110
25Deno.serve (baseline) on deno7,8598.1269.48911.6763081070
26Hono on deno7,8088.1269.62111.842821090
27Hapi on deno7,7838.33610.16712.7482511170
28h3 on deno7,7658.2119.76912.5162891100
29Express 5 on deno7,7328.53510.20812.4112531120
30NestJS (Express) on deno7,6948.54310.05812.2732941120
31Hono on node7,6768.29510.62412.5972171010
32NestJS (Express) on node7,6548.30910.77512.9142681020
33node:http (baseline) on node7,6398.35610.64712.672121060
34node:http (baseline) on deno7,4228.85410.74613.2172301140

GET /cache/posts/:id (Redis cache-aside)

Bar = requests per second (longer is better). Right column shows p99 latency.

uWebSockets.js on node
63,538
p99 1.45 ms
HyperExpress on node
53,215
p99 1.762 ms
h3 on bun
47,332
p99 2.248 ms
Elysia on bun
45,962
p99 2.269 ms
Bun.serve (baseline) on bun
43,525
p99 2.414 ms
Hono on bun
43,021
p99 2.516 ms
h3 on deno
41,905
p99 2.646 ms
Fastify on bun
40,542
p99 2.548 ms
Fastify on node
39,336
p99 2.296 ms
Elysia on deno
39,261
p99 2.319 ms
Deno.serve (baseline) on deno
38,864
p99 2.322 ms
NestJS (Fastify) on bun
38,450
p99 2.787 ms
Hono on node
37,602
p99 2.574 ms
h3 on node
37,430
p99 2.505 ms
Koa on bun
37,122
p99 2.889 ms
Hono on deno
36,885
p99 2.458 ms
Elysia on node
36,844
p99 2.588 ms
Express 5 on bun
36,485
p99 2.827 ms
NestJS (Fastify) on deno
36,409
p99 2.92 ms
NestJS (Fastify) on node
36,335
p99 2.632 ms
Koa on node
36,254
p99 2.546 ms
NestJS (Express) on bun
34,973
p99 3.005 ms
Hapi on bun
34,670
p99 3.018 ms
Fastify on deno
34,235
p99 3.362 ms
Koa on deno
32,215
p99 3.478 ms
Hapi on node
31,445
p99 2.923 ms
Express 5 on node
30,352
p99 2.966 ms
node:http (baseline) on node
30,200
p99 3.154 ms
Hapi on deno
29,358
p99 4.753 ms
node:http (baseline) on deno
28,117
p99 3.675 ms
NestJS (Express) on node
27,869
p99 3.209 ms
node:http (baseline) on bun
27,495
p99 3.944 ms
NestJS (Express) on deno
26,179
p99 4.054 ms
Express 5 on deno
25,191
p99 4.486 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1uWebSockets.js on node63,5380.9911.21.45161940
2HyperExpress on node53,2151.1471.491.762166950
3h3 on bun47,3321.2761.7222.248104970
4Elysia on bun45,9621.3311.7562.269109970
5Bun.serve (baseline) on bun43,5251.4081.8542.414100970
6Hono on bun43,0211.3981.8992.516111980
7h3 on deno41,9051.4211.8812.6461841000
8Fastify on bun40,5421.4881.9882.548159980
9Fastify on node39,3361.5162.0492.296172980
10Elysia on deno39,2611.5511.9752.319160950
11Deno.serve (baseline) on deno38,8641.5731.9852.322155950
12NestJS (Fastify) on bun38,4501.5452.1282.7871871000
13Hono on node37,6021.5822.1932.574180980
14h3 on node37,4301.5942.172.505207990
15Koa on bun37,1221.5942.212.8891501010
16Hono on deno36,8851.6412.1132.458157950
17Elysia on node36,8441.6392.2062.588182970
18Express 5 on bun36,4851.642.182.8271481010
19NestJS (Fastify) on deno36,4091.672.0472.922551100
20NestJS (Fastify) on node36,3351.6382.2442.632212980
21Koa on node36,2541.642.2422.546193990
22NestJS (Express) on bun34,9731.6992.3033.0051851010
23Hapi on bun34,6701.6912.3463.0181701020
24Fastify on deno34,2351.7522.3853.3621971090
25Koa on deno32,2151.8852.1773.4782041120
26Hapi on node31,4451.8832.5682.923219990
27Express 5 on node30,3521.9882.5832.966173990
28node:http (baseline) on node30,2001.9762.683.154171980
29Hapi on deno29,3581.972.7784.7532131280
30node:http (baseline) on deno28,1172.1652.8063.6751821020
31NestJS (Express) on node27,8692.1622.7973.2092501000
32node:http (baseline) on bun27,4952.252.9533.9441221010
33NestJS (Express) on deno26,1792.3092.5554.0542401140
34Express 5 on deno25,1912.4262.5884.4862021130

GET /large-json (~100KB serialize)

Bar = requests per second (longer is better). Right column shows p99 latency.

Hono on bun
4,259
p99 29.211 ms
Elysia on bun
4,257
p99 29.222 ms
h3 on bun
4,219
p99 29.522 ms
NestJS (Fastify) on bun
4,126
p99 20.77 ms
Koa on bun
4,059
p99 30.351 ms
Fastify on bun
3,977
p99 31.142 ms
Bun.serve (baseline) on bun
3,855
p99 32.306 ms
node:http (baseline) on bun
3,232
p99 38.386 ms
NestJS (Express) on bun
3,000
p99 41.355 ms
Express 5 on bun
2,978
p99 41.718 ms
Hapi on bun
2,789
p99 40.631 ms
Hono on deno
2,697
p99 24.919 ms
HyperExpress on node
2,605
p99 48.215 ms
uWebSockets.js on node
2,532
p99 49.654 ms
Elysia on deno
2,490
p99 27.139 ms
Deno.serve (baseline) on deno
2,489
p99 26.874 ms
Hono on node
2,462
p99 50.885 ms
Elysia on node
2,449
p99 51.162 ms
NestJS (Fastify) on node
2,440
p99 51.394 ms
NestJS (Fastify) on deno
2,401
p99 28.867 ms
Fastify on node
2,364
p99 52.859 ms
Fastify on deno
2,357
p99 29.199 ms
h3 on node
2,352
p99 53.097 ms
Koa on node
2,340
p99 53.516 ms
Koa on deno
2,249
p99 32.971 ms
node:http (baseline) on deno
2,087
p99 46.008 ms
Express 5 on node
2,074
p99 60.499 ms
node:http (baseline) on node
2,043
p99 61.206 ms
NestJS (Express) on node
2,042
p99 61.566 ms
Hapi on node
1,545
p99 61.579 ms
h3 on deno
1,414
p99 51.636 ms
Express 5 on deno
948
p99 76.278 ms
NestJS (Express) on deno
947
p99 77.138 ms
Hapi on deno
795
p99 148.825 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1Hono on bun4,25914.73415.66629.2111221120
2Elysia on bun4,25714.72615.61629.222931080
3h3 on bun4,21914.8615.65129.5221161120
4NestJS (Fastify) on bun4,12615.31716.27220.772431030
5Koa on bun4,05915.44116.57830.3512771040
6Fastify on bun3,97715.74116.76331.1421911050
7Bun.serve (baseline) on bun3,85516.31517.24732.306791090
8node:http (baseline) on bun3,23219.51420.52138.3861431070
9NestJS (Express) on bun3,00020.85522.141.3552391050
10Express 5 on bun2,97821.01422.21641.7181931070
11Hapi on bun2,78921.46333.33240.6315332920
12Hono on deno2,69723.7824.13924.9191991000
13HyperExpress on node2,60524.15424.53448.2151691000
14uWebSockets.js on node2,53224.87425.21349.6541621000
15Elysia on deno2,49025.79926.20127.1391921000
16Deno.serve (baseline) on deno2,48925.65326.44126.8741771000
17Hono on node2,46225.56126.14150.8852151010
18Elysia on node2,44925.67626.33551.1622411010
19NestJS (Fastify) on node2,44025.77426.51951.3943091010
20NestJS (Fastify) on deno2,40126.7227.15628.8674061120
21Fastify on node2,36426.57527.36852.8592081010
22Fastify on deno2,35727.08127.82929.1993691120
23h3 on node2,35226.73827.45953.0972601010
24Koa on node2,34026.83827.66353.5162291010
25Koa on deno2,24928.29429.15832.9713491110
26node:http (baseline) on deno2,08730.17931.22346.0084081030
27Express 5 on node2,07430.48331.09860.4992231010
28node:http (baseline) on node2,04330.74331.90761.2062121000
29NestJS (Express) on node2,04230.82931.24961.5662341010
30Hapi on node1,54539.5847.9961.5794392720
31h3 on deno1,41445.10745.61151.6362331010
32Express 5 on deno94866.47472.05976.2783521040
33NestJS (Express) on deno94767.38967.94277.1383471050
34Hapi on deno79579.41894.882148.8255371120

POST /bulk (parse + validate ~100KB)

Bar = requests per second (longer is better). Right column shows p99 latency.

Bun.serve (baseline) on bun
7,125
p99 17.45 ms
h3 on bun
7,116
p99 17.489 ms
Koa on bun
6,484
p99 19.087 ms
Express 5 on bun
6,446
p99 19.113 ms
Deno.serve (baseline) on deno
6,263
p99 10.984 ms
Hapi on bun
6,145
p99 20.078 ms
Fastify on bun
6,088
p99 20.376 ms
Hono on bun
6,005
p99 20.64 ms
h3 on deno
5,735
p99 15.813 ms
Elysia on bun
5,460
p99 22.808 ms
node:http (baseline) on bun
5,309
p99 14.374 ms
HyperExpress on node
5,267
p99 13.065 ms
uWebSockets.js on node
5,182
p99 21.482 ms
h3 on node
5,042
p99 13.919 ms
Koa on node
5,024
p99 24.805 ms
Express 5 on node
5,014
p99 24.78 ms
Koa on deno
4,667
p99 17.933 ms
node:http (baseline) on deno
4,659
p99 22.015 ms
Hono on deno
4,651
p99 14.66 ms
node:http (baseline) on node
4,510
p99 16.587 ms
Hapi on node
4,383
p99 23.276 ms
Express 5 on deno
4,029
p99 20.459 ms
Hono on node
3,747
p99 33.284 ms
Hapi on deno
3,569
p99 31.765 ms
Fastify on deno
3,456
p99 22.329 ms
Fastify on node
3,345
p99 37.331 ms
Elysia on deno
3,024
p99 23.971 ms
Elysia on node
2,680
p99 46.533 ms
NestJS (Express) on node
797
p99 156.201 ms
NestJS (Fastify) on node
784
p99 160.612 ms
NestJS (Express) on deno
650
p99 186.927 ms
NestJS (Fastify) on deno
605
p99 204.805 ms
NestJS (Express) on bun
510
p99 242.594 ms
NestJS (Fastify) on bun
493
p99 253.593 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1Bun.serve (baseline) on bun7,1258.7549.37817.45901100
2h3 on bun7,1168.7959.37817.4891101110
3Koa on bun6,4849.61510.41419.0871901100
4Express 5 on bun6,4469.65510.52919.1131811120
5Deno.serve (baseline) on deno6,26310.20810.52110.9841791000
6Hapi on bun6,14510.14110.89820.0782091090
7Fastify on bun6,08810.27510.89620.3761871050
8Hono on bun6,00510.41411.19920.641091130
9h3 on deno5,73510.78112.88115.8133091130
10Elysia on bun5,46011.49612.07122.8081101030
11node:http (baseline) on bun5,30911.95412.91714.3741611140
12HyperExpress on node5,26712.06112.34413.0652861000
13uWebSockets.js on node5,18212.14712.48521.4822161040
14h3 on node5,04212.5912.87913.9192451010
15Koa on node5,02412.54812.93424.8051791010
16Express 5 on node5,01412.53912.98724.782401010
17Koa on deno4,66714.15714.8817.9333541100
18node:http (baseline) on deno4,65912.82719.22722.0152641060
19Hono on deno4,65113.73114.22814.661881000
20node:http (baseline) on node4,51014.10514.55516.5871761010
21Hapi on node4,38313.75217.7523.2763181210
22Express 5 on deno4,02915.60317.95420.4593501320
23Hono on node3,74716.8817.24433.2841841010
24Hapi on deno3,56917.65423.0531.7653761600
25Fastify on deno3,45618.57119.79122.3292601030
26Fastify on node3,34518.90319.2537.3312131000
27Elysia on deno3,02421.10721.5423.9713151010
28Elysia on node2,68023.56724.00746.5333721020
29NestJS (Express) on node79778.15582.525156.2015701030
30NestJS (Fastify) on node78480.13981.737160.6121961020
31NestJS (Express) on deno650101.103131.357186.9276511480
32NestJS (Fastify) on deno605103.459135.292204.8056101440
33NestJS (Express) on bun510123.883131.509242.5942441120
34NestJS (Fastify) on bun493128.547134.746253.5932441130

POST /auth/login (scrypt + JWT sign)

Bar = requests per second (longer is better). Right column shows p99 latency.

h3 on bun
968
p99 185.89 ms
Hono on bun
871
p99 210.284 ms
NestJS (Fastify) on bun
860
p99 206.872 ms
Fastify on bun
853
p99 208.939 ms
Elysia on bun
847
p99 215.231 ms
NestJS (Express) on bun
845
p99 213.948 ms
Koa on bun
843
p99 219.001 ms
Hapi on bun
833
p99 215.96 ms
Express 5 on bun
816
p99 223.398 ms
Bun.serve (baseline) on bun
761
p99 237.955 ms
h3 on deno
728
p99 166.181 ms
node:http (baseline) on bun
652
p99 284.334 ms
Hono on deno
608
p99 176.697 ms
Koa on deno
603
p99 183.01 ms
Hapi on deno
601
p99 184.997 ms
NestJS (Fastify) on deno
598
p99 181.888 ms
Elysia on deno
579
p99 185.771 ms
Fastify on deno
578
p99 187.575 ms
Deno.serve (baseline) on deno
570
p99 187.413 ms
Express 5 on deno
565
p99 190.107 ms
uWebSockets.js on node
550
p99 151.907 ms
HyperExpress on node
549
p99 145.847 ms
Elysia on node
546
p99 156.487 ms
NestJS (Express) on deno
538
p99 204.602 ms
node:http (baseline) on deno
512
p99 206.911 ms
Fastify on node
509
p99 161.66 ms
NestJS (Fastify) on node
480
p99 160.409 ms
Hapi on node
476
p99 170.724 ms
Koa on node
475
p99 168.86 ms
NestJS (Express) on node
474
p99 159.864 ms
Hono on node
470
p99 177.261 ms
Express 5 on node
458
p99 174.114 ms
h3 on node
455
p99 182.147 ms
node:http (baseline) on node
384
p99 212.824 ms
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1h3 on bun96858.844117.64185.891597200
2Hono on bun87164.699133.512210.2841507230
3NestJS (Fastify) on bun86066.214133.088206.8722407250
4Fastify on bun85366.915132.747208.9391897260
5Elysia on bun84766.253136.315215.2311897220
6NestJS (Express) on bun84567.243136.381213.9482567280
7Koa on bun84367.235135.358219.0011987260
8Hapi on bun83368.216137.551215.962257240
9Express 5 on bun81669.429138.626223.3982027250
10Bun.serve (baseline) on bun76174.605151.557237.9551607220
11h3 on deno72889.337131.029166.1813287430
12node:http (baseline) on bun65286.798177.573284.3341817330
13Hono on deno608106.754144.444176.6973227460
14Koa on deno603108.215144.329183.013487480
15Hapi on deno601108.358147.225184.9973537470
16NestJS (Fastify) on deno598108.65144.837181.8883777460
17Elysia on deno579113.178149.741185.7713317450
18Fastify on deno578111.882150.101187.5753497470
19Deno.serve (baseline) on deno570114.894153.133187.4132967470
20Express 5 on deno565115.302151.638190.1073517480
21uWebSockets.js on node550114.362125.662151.9071694120
22HyperExpress on node549114.67123.469145.8471924120
23Elysia on node546115.92123.749156.4872244100
24NestJS (Express) on deno538119.931158.484204.6024087480
25node:http (baseline) on deno512128.596165.608206.9113277470
26Fastify on node509125.17139.144161.661794130
27NestJS (Fastify) on node480132.577141.748160.4092034160
28Hapi on node476133.634140.646170.7242004140
29Koa on node475133.088142.793168.861834120
30NestJS (Express) on node474134.122144.28159.8642564120
31Hono on node470133.933144.618177.2611824130
32Express 5 on node458138.255150.096174.1141814140
33h3 on node455138.585151.931182.1471784130
34node:http (baseline) on node384167.287176.03212.8241754060

Mixed traffic at fixed rate (k6)

Bar = p99 latency at a fixed arrival rate (shorter is better). Right column shows achieved RPS.

node:http (baseline) on bun
6.931 ms
p99 1,500 rps
h3 on bun
6.946 ms
p99 1,500 rps
Bun.serve (baseline) on bun
6.961 ms
p99 1,500 rps
Fastify on bun
6.972 ms
p99 1,500 rps
Hono on bun
6.973 ms
p99 1,500 rps
Elysia on bun
6.975 ms
p99 1,500 rps
Express 5 on bun
6.996 ms
p99 1,500 rps
Koa on bun
7.009 ms
p99 1,500 rps
NestJS (Express) on bun
7.026 ms
p99 1,500 rps
NestJS (Fastify) on bun
7.034 ms
p99 1,500 rps
Hapi on bun
7.045 ms
p99 1,500 rps
uWebSockets.js on node
8.364 ms
p99 1,500 rps
Fastify on node
8.377 ms
p99 1,500 rps
h3 on node
8.378 ms
p99 1,500 rps
HyperExpress on node
8.397 ms
p99 1,500 rps
Elysia on node
8.403 ms
p99 1,500 rps
Hono on node
8.41 ms
p99 1,500 rps
NestJS (Fastify) on node
8.411 ms
p99 1,500 rps
Express 5 on node
8.427 ms
p99 1,500 rps
Koa on node
8.439 ms
p99 1,500 rps
Hapi on node
8.44 ms
p99 1,500 rps
NestJS (Express) on node
8.469 ms
p99 1,500 rps
node:http (baseline) on node
8.552 ms
p99 1,500 rps
Hono on deno
8.971 ms
p99 1,500 rps
Deno.serve (baseline) on deno
8.984 ms
p99 1,500 rps
h3 on deno
8.993 ms
p99 1,500 rps
Elysia on deno
8.999 ms
p99 1,500 rps
node:http (baseline) on deno
8.999 ms
p99 1,500 rps
Fastify on deno
9.012 ms
p99 1,500 rps
Express 5 on deno
9.033 ms
p99 1,500 rps
NestJS (Fastify) on deno
9.048 ms
p99 1,500 rps
Koa on deno
9.063 ms
p99 1,500 rps
NestJS (Express) on deno
9.1 ms
p99 1,500 rps
Hapi on deno
9.109 ms
p99 1,500 rps
Table view
#ComboRPSp50 msp90 msp99 msRSS MBCPU %Errors
1node:http (baseline) on bun1,5000.3292.5286.931156580
2h3 on bun1,5000.3392.5636.946149580
3Bun.serve (baseline) on bun1,5000.3352.6096.961136580
4Fastify on bun1,5000.3362.5426.972181590
5Hono on bun1,5000.3392.6196.973138590
6Elysia on bun1,5000.3352.5676.975155580
7Express 5 on bun1,5000.3472.5966.996169600
8Koa on bun1,5000.3452.6027.009204590
9NestJS (Express) on bun1,5000.3542.5667.026231610
10NestJS (Fastify) on bun1,5000.3482.5797.034218600
11Hapi on bun1,5000.3482.6787.045197610
12uWebSockets.js on node1,5000.3442.5798.364165700
13Fastify on node1,5000.3542.6558.377175720
14h3 on node1,5000.3582.5828.378177720
15HyperExpress on node1,5000.3492.5438.397168710
16Elysia on node1,5000.3612.6358.403204720
17Hono on node1,5000.3562.5788.41183730
18NestJS (Fastify) on node1,5000.3632.6228.411266730
19Express 5 on node1,5000.3682.6478.427178740
20Koa on node1,5000.3612.5648.439195740
21Hapi on node1,5000.3712.5698.44198740
22NestJS (Express) on node1,5000.3792.5898.469261750
23node:http (baseline) on node1,5000.3472.6428.552179730
24Hono on deno1,5000.3592.5938.971183770
25Deno.serve (baseline) on deno1,5000.3532.5968.984178760
26h3 on deno1,5000.3642.6298.993178770
27Elysia on deno1,5000.3632.6528.999171780
28node:http (baseline) on deno1,5000.3612.768.999187790
29Fastify on deno1,5000.3642.5949.012187770
30Express 5 on deno1,5000.3782.6629.033195800
31NestJS (Fastify) on deno1,5000.3782.6459.048249810
32Koa on deno1,5000.3772.6819.063235810
33NestJS (Express) on deno1,5000.3932.729.1230820
34Hapi on deno1,5000.3872.7219.109244830

Not available / failed