Benchmarks

MiiaJS is a decorator-driven framework with DI, routing, guards, middleware, and validation — yet it stays competitive with bare routers in throughput.

Apple M1 Pro, 32 GB RAM, macOS

Synthetic

Minimal handlers — measures pure framework overhead.

GET /

Return { "message": "Hello, World!" }. No middleware, no parsing.

Hono (Deno)
98,204
MiiaJS (Bun)
95,646
Hono uWS (Node)
94,313
MiiaJS (Deno)
94,099
Hono (Bun)
92,541
MiiaJS uWS (Node)
91,534
Fastify (Bun)
90,563
Elysia (Bun)
85,662
Fastify (Node)
80,387
MiiaJS (Node)
78,044
NestJS+Fastify (Bun)
73,734
NestJS+Fastify (Node)
70,880
Hono (Node)
69,066
Show full table
FrameworkReq/secLatency (avg)vs leader
Hono (Deno)98,2040.22ms
MiiaJS (Bun)95,6460.32ms-2.6%
Hono uWS (Node)94,3130.40ms-4.0%
MiiaJS (Deno)94,0990.29ms-4.2%
Hono (Bun)92,5410.37ms-5.8%
MiiaJS uWS (Node)91,5340.39ms-6.8%
Fastify (Bun)90,5630.51ms-7.8%
Elysia (Bun)85,6620.95ms-12.8%
Fastify (Node)80,3871.01ms-18.1%
MiiaJS (Node)78,0441.05ms-20.5%
NestJS+Fastify (Bun)73,7341.07ms-24.9%
NestJS+Fastify (Node)70,8801.06ms-27.8%
Hono (Node)69,0661.06ms-29.7%

POST /json

Parse JSON body, generate UUID, return response.

Hono uWS (Node)
92,336
MiiaJS (Bun)
91,660
Hono (Bun)
88,818
Elysia (Bun)
87,498
MiiaJS uWS (Node)
85,635
MiiaJS (Deno)
82,467
Hono (Deno)
74,764
MiiaJS (Node)
55,672
Fastify (Bun)
52,537
NestJS+Fastify (Bun)
43,173
Fastify (Node)
43,155
NestJS+Fastify (Node)
39,984
Hono (Node)
25,423
Show full table
FrameworkReq/secLatency (avg)vs leader
Hono uWS (Node)92,3360.45ms
MiiaJS (Bun)91,6600.50ms-0.7%
Hono (Bun)88,8180.51ms-3.8%
Elysia (Bun)87,4980.53ms-5.2%
MiiaJS uWS (Node)85,6350.82ms-7.3%
MiiaJS (Deno)82,4670.99ms-10.7%
Hono (Deno)74,7641.03ms-19.0%
MiiaJS (Node)55,6721.16ms-39.7%
Fastify (Bun)52,5371.21ms-43.1%
NestJS+Fastify (Bun)43,1732.02ms-53.2%
Fastify (Node)43,1552.11ms-53.3%
NestJS+Fastify (Node)39,9842.20ms-56.7%
Hono (Node)25,4233.55ms-72.5%

Realistic API

Full middleware stack — CORS, JWT, routing, body parsing, validation. The way real APIs work.

GET /api/users/:userId/posts/:postId

CORS, JWT verification, nested route params, JSON response.

MiiaJS (Bun)
39,731
Elysia (Bun)
39,048
MiiaJS (Deno)
36,231
Fastify (Bun)
35,767
Hono (Bun)
34,030
NestJS+Fastify (Bun)
31,744
MiiaJS uWS (Node)
30,443
Hono (Deno)
28,037
NestJS+Fastify (Node)
26,839
MiiaJS (Node)
26,412
Fastify (Node)
25,214
Hono uWS (Node)
20,529
Hono (Node)
19,626
Show full table
FrameworkReq/secLatency (avg)vs leader
MiiaJS (Bun)39,7311.92ms
Elysia (Bun)39,0481.98ms-1.7%
MiiaJS (Deno)36,2312.18ms-8.8%
Fastify (Bun)35,7672.42ms-10.0%
Hono (Bun)34,0302.50ms-14.3%
NestJS+Fastify (Bun)31,7442.57ms-20.1%
MiiaJS uWS (Node)30,4432.79ms-23.4%
Hono (Deno)28,0373.08ms-29.4%
NestJS+Fastify (Node)26,8393.23ms-32.4%
MiiaJS (Node)26,4123.29ms-33.5%
Fastify (Node)25,2143.47ms-36.5%
Hono uWS (Node)20,5294.37ms-48.3%
Hono (Node)19,6264.59ms-50.6%

POST /api/workspaces/:ws/projects/:proj/tasks

CORS, JWT, JSON body, path params, query params, custom headers, UUID, 201 status. The heaviest test.

MiiaJS (Bun)
35,535
Elysia (Bun)
35,220
Hono (Bun)
31,480
Fastify (Bun)
29,443
MiiaJS (Deno)
29,179
MiiaJS uWS (Node)
28,549
NestJS+Fastify (Bun)
25,762
Hono (Deno)
24,168
MiiaJS (Node)
23,471
Fastify (Node)
22,838
NestJS+Fastify (Node)
21,497
Hono uWS (Node)
20,306
Hono (Node)
13,729
Show full table
FrameworkReq/secLatency (avg)vs leader
MiiaJS (Bun)35,5352.40ms
Elysia (Bun)35,2202.27ms-0.9%
Hono (Bun)31,4802.59ms-11.4%
Fastify (Bun)29,4432.88ms-17.1%
MiiaJS (Deno)29,1792.99ms-17.9%
MiiaJS uWS (Node)28,5493.02ms-19.7%
NestJS+Fastify (Bun)25,7623.43ms-27.5%
Hono (Deno)24,1683.66ms-32.0%
MiiaJS (Node)23,4713.77ms-33.9%
Fastify (Node)22,8383.90ms-35.7%
NestJS+Fastify (Node)21,4974.17ms-39.5%
Hono uWS (Node)20,3064.42ms-42.9%
Hono (Node)13,7296.78ms-61.4%

Methodology

All benchmarks run under controlled conditions with randomized server order to reduce bias. Use the tabs above to compare environments.

Load parameters

  • Tool: Autocannon v8+
  • Connections: 100 concurrent
  • Duration: 30s per pass
  • Warmup: 5s (full connections for JIT)
  • Passes: 5 (averaged with stddev)
  • Pipelining: 1 (disabled)
  • Runtimes: Bun 1.3+, Deno 2.6+, Node.js 22+
  • Machine: Apple M1 Pro, 32 GB RAM, macOS

What the API scenarios test

  • CORS — origin validation and preflight headers
  • JWT — Bearer token extraction and HS256 verification
  • Routing — path parameter extraction from nested segments
  • Body parsing — JSON deserialization (POST scenarios)
  • Query parsing — URL search parameter extraction
  • Response — JSON serialization with custom status codes

Test environments

Apple M1 Pro

  • 10 cores (8P + 2E)
  • 32 GB RAM
  • macOS, Bun 1.3+, Deno 2.6+, Node.js 22+

2×Xeon 5218R

  • 40 cores / 80 threads @ 2.10 GHz
  • 128 GB RAM
  • Debian 12, Kernel 5.10, Bun 1.3+, Deno 2.6+, Node.js 22+

Frameworks compared

FrameworkTypeRuntimes
MiiaJSDecorator-driven, DI, guards, middlewareBun, Deno, Node, uWS
HonoLightweight multi-runtime routerBun, Deno, Node, uWS
ElysiaBun-native frameworkBun
FastifyPlugin-based Node.js frameworkBun, Node
NestJS+FastifyEnterprise decorator frameworkBun, Node

Last updated: April 10, 2026.

Reproduce

The benchmark suite is open source. The interactive CLI lets you pick scenarios, runtimes, and number of passes.

git clone https://github.com/miiajs/benchmarks.git
cd benchmarks
bun install
bun run run.ts