JS Runtimes

Deno 2.0 vs Bun 1.2 vs Node.js 23: The Ultimate HTTP Server Benchmark

An in-depth performance benchmark of JavaScript runtimes in 2026. See how Deno 2.0, Bun 1.2, and Node.js 23 handle high-concurrency HTTP traffic.

Sachin Sharma
Sachin SharmaCreator
Jun 1, 2026
4 min read
Deno 2.0 vs Bun 1.2 vs Node.js 23: The Ultimate HTTP Server Benchmark
Featured Resource
Quick Overview

An in-depth performance benchmark of JavaScript runtimes in 2026. See how Deno 2.0, Bun 1.2, and Node.js 23 handle high-concurrency HTTP traffic.

Deno 2.0 vs Bun 1.2 vs Node.js 23: The Ultimate HTTP Server Benchmark

In 2026, the JavaScript runtime landscape is more competitive than ever. Node.js 23 continues to modernize with native TypeScript support and modular loading. Deno 2.0 has reached peak enterprise maturity with standard npm compatibility. Meanwhile, Bun 1.2 remains the blazing-fast contender, optimized from the ground up in Zig.

For backend engineers, the choice of runtime dictates not only developer velocity but also operational infrastructure costs. To provide a definitive answer on raw performance, we set up a rigorous, zero-cache HTTP server benchmark comparing all three runtimes.

We measured throughput (requests per second), latency profiles (p50, p99), memory footprints under load, and CPU core scalability. Here are the results.


⚑ 1. The Benchmark Methodology

To ensure fairness, we ran all tests on an isolated bare-metal instance (16 vCPUs, 64 GB RAM) running Ubuntu 24.04 LTS. We used the load testing tool Bombardier to generate high-concurrency traffic over a 10Gbps local network loopback.

We tested the native HTTP server API provided by each runtime without any routing frameworks (like Express or Hono) to isolate the raw capabilities of the underlying engines:

Node.js 23 (Native HTTP)

javascript
import http from 'node:http'; http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ message: "Hello from Node.js!" })); }).listen(3000);

Deno 2.0 (Deno.serve)

typescript
Deno.serve({ port: 3000 }, (req) => { return Response.json({ message: "Hello from Deno!" }); });

Bun 1.2 (Bun.serve)

typescript
Bun.serve({ port: 3000, fetch(req) { return Response.json({ message: "Hello from Bun!" }); }, });

πŸ“Š 2. Throughput: Requests Per Second (RPS)

We tested concurrency levels ranging from 100 to 10,000 concurrent connections. Each benchmark run lasted 60 seconds.

ConcurrencyNode.js 23Deno 2.0Bun 1.2
10082,450 RPS124,120 RPS212,890 RPS
1,00079,800 RPS120,400 RPS208,400 RPS
5,00071,200 RPS114,800 RPS194,500 RPS
10,00062,500 RPS102,100 RPS179,200 RPS

Analysis: Bun 1.2 maintains a massive lead, crossing 200,000 RPS at moderate concurrency. Bun's custom HTTP implementation, which bypasses much of the standard event-loop binding layer directly into native C++ calls, yields outstanding raw throughput. Deno 2.0 outperforms Node.js by nearly 60%, showing the benefit of its Rust-based Hyper HTTP engine integrations.


⏱️ 3. Latency Profile under High Load (5,000 Concurrency)

Throughput is only half the story; consistent latency is critical to prevent cascading failures in microservice meshes.

  • Node.js 23:
    • p50 (Median): 12.4 ms
    • p99 (Tail): 48.2 ms
  • Deno 2.0:
    • p50 (Median): 8.1 ms
    • p99 (Tail): 22.4 ms
  • Bun 1.2:
    • p50 (Median): 4.2 ms
    • p99 (Tail): 9.8 ms

Analysis: Bun 1.2 shines in tail latency. At 5,000 concurrent requests, Bun keeps its p99 latency under 10ms, whereas Node.js drifts toward 50ms. This latency consistency is highly beneficial for SLA compliance.


πŸ“‰ 4. Memory Footprint under Heavy Traffic

We monitored the resident set size (RSS) memory consumption during the peak 10,000 concurrency load test.

[Node.js 23 Memory under Load] ──(Average)──> 142 MB
[Deno 2.0 Memory under Load]   ──(Average)──> 98 MB
[Bun 1.2 Memory under Load]    ──(Average)──> 42 MB

Analysis: Bun is extremely memory-efficient. Built using the Zig programming language and relying on tight, manual memory-allocator strategies, Bun operates at a fraction of the memory footprint of Node.js. Node's V8 engine overhead and garbage collection passes result in a higher, more volatile memory footprint.


🏁 5. Conclusion: Which Runtime Wins in 2026?

Each runtime has clear, distinct strengths in modern web architectures:

  • Choose Bun 1.2 if you require the absolute highest raw speed, lowest latency, and minimal hosting costs. Bun is exceptionally well-suited for serverless functions, real-time gateways, and API proxies.
  • Choose Deno 2.0 if you want modern TypeScript out-of-the-box, top-tier security standards, and outstanding performance without configuration overhead.
  • Choose Node.js 23 if you rely on mature enterprise ecosystems, deep legacy libraries, and native C++ integrations that require extensive battle-tested stability.
Sachin Sharma

Sachin Sharma

Software Developer

Building digital experiences at the intersection of design and code. Sharing weekly insights on engineering, productivity, and the future of tech.