5 scenarios · 10 VUs · ~3 min

GraphQL Bench

NestJS — Express vs Fastify vs Mercurius

Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz · 16 cores
Express
0

req/s on health check

avg 1.31msp99 3.39ms
Fastify
0

req/s on health check

avg 0.97msp99 2.6ms
Mercurius
0

req/s on health check

avg 0.62msp99 1.72ms

Throughput by Scenario

Requests per second — lightest to heaviest

Scenario Deep Dive

Express + Apollo
0req/s

baseline

avg 1.31msmed 1.27msp95 2.68msp99 3.39ms
Fastify + Apollo
0req/s

+32% vs slowest

avg 0.97msmed 0.93msp95 2.01msp99 2.6ms
Fastify + Mercurius
0req/s

+98% vs slowest

avg 0.62msmed 0.54msp95 1.24msp99 1.72ms

Latency Percentiles — Health Check (Scalar)

Response time distribution — lower is better

p99 Latency Across Scenarios

Worst 1% of requests — what your unhappiest users experience

Performance Radar

Normalized to fastest per scenario — 100 = best

Key Findings

Mercurius wins 5 of 5 scenarios

Up to 98% faster than slowest on light queries

Express slowest on heavy queries

23% behind fastest on Paginated Users (10)

Mutations: Mercurius wins

Express is 4% slower on writes

Gap shrinks under load

98% on Health Check (Scalar) → 23% on Paginated Users (10). Framework matters less as queries grow

Raw Data — Health Check (Scalar)

All numbers for the selected scenario

FRAMEWORKREQ/SVS SLOWESTAVGMEDP90P95P99MAX
Express + Apollo
5,653baseline1.31ms1.27ms2.24ms2.68ms3.39ms7.7ms
Fastify + Apollo
7,467+32%0.97ms0.93ms1.8ms2.01ms2.6ms7.2ms
Fastify + Mercurius
11,191+98%0.62ms0.54ms1.16ms1.24ms1.72ms4.83ms

Coming Soon

Go

chi · Gin · Fiber

C#

.NET + Hot Chocolate

Java

Spring + Netflix DGS