NextRush
Performance

Benchmarks

Transparent, reproducible benchmarks — framework comparisons and deep performance profiling.

Last updated: 2026-06-08

All figures come from one lab setup (CPU, OS, Node, tool versions). Your hardware will give different absolute RPS, but relative rankings stay consistent. Use the same scripts for your own numbers. In production, databases and external calls usually dominate latency — not the framework choice.

How to read this page

Published RPS are snapshots, not guarantees. Run apps/benchmark locally when you need numbers for capacity planning.

Overview

The benchmark suite in apps/benchmark supports 2 tools that produce slightly different absolute numbers but the same relative rankings:

wrk

Primary — C-based

Runs as a separate C process, isolated from Node.js. No event loop interference. Install via `apt install wrk`. Used for deep profiling.

autocannon

Fallback — Node.js

Runs in-process. Always available via pnpm. Shares the event loop with the server — numbers may differ slightly from wrk. Used for quick comparisons.

The runner auto-detects wrk first; use --tool wrk|autocannon to force a specific tool.


Tool Comparison: NextRush v3

How the same test scenarios differ between wrk and autocannon on identical hardware (64 connections, 10s):

Scenariowrk RPSautocannon RPSVariance
Hello World31,31131,733+1.3%
Route Parameters29,68829,534-0.5%
POST JSON18,46019,192+4.0%
Middleware Stack32,37732,220-0.5%

The numbers are within ~4% across all scenarios, so relative framework rankings stay consistent regardless of which tool you use.


Framework Comparison (autocannon)

Head-to-head comparison against popular Node.js frameworks. All servers implement identical endpoints with equivalent work.

Test Environment

PropertyValue
Node.jsv25.9.0
PlatformLinux (x64)
CPUIntel Core i5-8300H @ 2.30GHz
Cores8
Memory15.5 GB
FrameworkVersion
Raw Node.jsbuilt-in (zero-framework baseline)
NextRush v33.0.x
Fastify5.x
Hono4.x (via @hono/node-server)
Koa3.x (with koa-router)
Express5.x
SettingValue
Toolautocannon v8
Duration10 seconds per test
Connections64 concurrent
Pipelining1 (no pipelining — realistic)
Profilequick (single run per scenario)

Detailed Scenarios

Baseline — a JSON response with no routing or body parsing.

app.get('/', (ctx) => ctx.json({ message: 'Hello World' }));

Hello World Throughput

higher is better
Raw Node.js36,903 RPS

1ms p50, 3ms p99

Fastify34,063 RPS

1ms p50, 3ms p99

NextRush v331,733 RPS

1ms p50, 3ms p99

Hono28,209 RPS

2ms p50, 4ms p99

Koa23,845 RPS

2ms p50, 5ms p99

Express19,496 RPS

3ms p50, 6ms p99

FrameworkRPSLatency p50Latency p99
Raw Node.js36,9031ms3ms
Fastify34,0631ms3ms
NextRush v331,7331ms3ms
Hono28,2092ms4ms
Koa23,8452ms5ms
Express19,4963ms6ms

Dynamic route — measures router performance.

app.get('/users/:id', (ctx) => ctx.json({ id: ctx.params.id }));

Route Parameter Throughput

higher is better
Raw Node.js33,936 RPS

1ms p50, 3ms p99

Fastify31,095 RPS

2ms p50, 3ms p99

NextRush v329,534 RPS

2ms p50, 4ms p99

Hono25,966 RPS

2ms p50, 4ms p99

Koa22,421 RPS

2ms p50, 5ms p99

Express18,209 RPS

3ms p50, 6ms p99

FrameworkRPSLatency p50Latency p99
Raw Node.js33,9361ms3ms
Fastify31,0952ms3ms
NextRush v329,5342ms4ms
Hono25,9662ms4ms
Koa22,4212ms5ms
Express18,2093ms6ms

POST with JSON body — body parser overhead.

app.post('/users', (ctx) => ctx.json(ctx.body, 201));

POST JSON Throughput

higher is better
Raw Node.js24,936 RPS

2ms p50, 4ms p99

NextRush v319,192 RPS

3ms p50, 6ms p99

Fastify18,532 RPS

3ms p50, 6ms p99

Koa15,323 RPS

4ms p50, 7ms p99

Express13,063 RPS

4ms p50, 9ms p99

Hono10,798 RPS

5ms p50, 11ms p99

FrameworkRPSLatency p50Latency p99
Raw Node.js24,9362ms4ms
NextRush v319,1923ms6ms
Fastify18,5323ms6ms
Koa15,3234ms7ms
Express13,0634ms9ms
Hono10,7985ms11ms

NextRush stays within 4% of Fastify here — body parsing is a common bottleneck, so the gap narrows when frameworks do real work.

5-layer middleware stack (timing, logging, auth check, CORS, body parsing) — best reflects real-world app overhead.

Middleware Stack Throughput

higher is better
NextRush v332,220 RPS

1ms p50, 3ms p99

Raw Node.js31,471 RPS

1ms p50, 3ms p99

Fastify28,744 RPS

2ms p50, 4ms p99

Hono22,258 RPS

2ms p50, 5ms p99

Koa21,125 RPS

2ms p50, 5ms p99

Express17,352 RPS

3ms p50, 7ms p99

FrameworkRPSLatency p50Latency p99
NextRush v332,2201ms3ms
Raw Node.js31,4711ms3ms
Fastify28,7442ms4ms
Hono22,2582ms5ms
Koa21,1252ms5ms
Express17,3523ms7ms

NextRush outpaces raw Node.js here — compose() pre-compiles the pipeline, so middleware dispatch costs near zero under concurrency.

Average RPS by Framework (autocannon)

Mean throughput across all 4 scenarios.

higher is better
Raw Node.js31,812 RPS

Baseline

Fastify28,109 RPS

-11.6% vs Raw Node.js

NextRush v328,170 RPS

-11.5% vs Raw Node.js

Hono21,808 RPS

-31.5% vs NextRush

Koa20,679 RPS

-35.0% vs NextRush

Express17,030 RPS

-46.5% vs NextRush


Deep Profile (wrk)

NextRush v3 benchmarked with wrk — a C-based HTTP benchmark tool that runs as a separate process, isolated from Node.js. Unlike autocannon, wrk doesn't share the event loop with the server, which eliminates the "testing yourself with yourself" problem.

Methodology

SettingValue
Toolwrk 4.2.0
Duration10 seconds per test
Connections64
PipeliningDisabled (1 request at a time — realistic client)
Threads4

Scenario Breakdown

ScenarioRPSLatency p50Latency p99Memory (RSS peak)
Hello World31,3111ms3ms109.8 MB
Route Parameters29,6882ms4ms109.8 MB
POST JSON18,4603ms6ms109.8 MB
Middleware Stack32,3771ms3ms109.8 MB

NextRush scales efficiently — the middleware stack pre-compilation means it can outperform even the hello-world baseline under concurrency.

Peak RPS by Scenario

wrk, 64 connections, 10s duration

higher is better
Middleware Stack32,377 RPS

1ms p50, 3ms p99 — fastest scenario

Hello World31,311 RPS

1ms p50, 3ms p99

Route Parameters29,688 RPS

2ms p50, 4ms p99 — radix tree overhead is minimal

POST JSON18,460 RPS

3ms p50, 6ms p99 — body parsing cost

Memory Profile

RSS peak

109.8 MB

Highest observed process memory during wrk benchmark.

RSS average

103.3 MB

Average memory across the sampled wrk profile.

Samples

96

Memory samples collected while the profile was running.

Idle footprint

<200KB

Framework-level idle footprint outside the benchmark harness.

The numbers above include the full benchmark harness (wrk + server + monitoring). NextRush's own idle footprint is under 200KB.


Design Trade-offs: Fastify vs NextRush

Fastify edges ahead on raw throughput in these benchmarks. Here is what drives the gap:

AreaFastifyNextRush
JSON serializationAOT with fast-json-stringifyNative JSON.stringify
Routerfind-my-way (radix tree, mature)Custom segment trie (newer)
Schema validationCompiled JSON SchemaUser-supplied transforms
HTTP parsingCustom optimizedStandard Node.js parser

Trade-off

Fastify tunes heavily for Node.js throughput. NextRush prioritizes zero dependencies, full TypeScript, and multi-runtime support. If single-platform HTTP throughput is your only concern, Fastify is the right choice. If you need portability and a lean core, NextRush wins on different terms.


Run Your Own Benchmarks

Quick comparison

cd apps/benchmark
pnpm install
pnpm bench:compare:quick

Defaults to wrk if installed, otherwise falls back to autocannon.

Force a specific tool

# Use autocannon
node scripts/run.js --compare --tool autocannon

# Use wrk with full profile (60s, 4 concurrency levels, 5 runs)
node scripts/run.js --profile full --tool wrk

Results are saved to results/ with timestamps. Each run generates a JSON file and a human-readable report.


How to use these numbers

Fastify edged ahead on mean RPS in this suite. NextRush came second. That ordering is useful for relative comparison on identical hardware — not as a universal ranking.

  1. Fastify tunes aggressively for Node.js throughput. Its serialization choices pay off in micro-benchmarks.
  2. In real apps, a single database call adds milliseconds per request. That gap between frameworks shrinks fast.
  3. NextRush keeps a dependency-free core, ships adapters for several runtimes, and supports optional DI and decorators. Different trade-offs, not a single winner.

Run your own benchmarks on your own hardware. That is the only number that matters.

On this page