Bun 1.2 has officially outpaced Node.js 22 and Deno 2 in raw HTTP throughput, delivering 112,400 requests per second compared to Node's 48,900 and Deno's 71,300. These results come from a rigorous benchmarking suite run on identical AWS c7i.2xlarge instances, isolating the runtime's performance by pinning the load generator to a separate machine to eliminate client-side saturation. The data confirms that for I/O-bound workloads, Bun's architectural choices are currently paying off in measurable latency and throughput gains.
Architectural Advantages and Trade-offs
The performance gap stems largely from Bun replacing libuv with a custom Zig-native I/O layer. By issuing epoll_wait batches directly, Bun avoids the 4-thread UV_THREADPOOL_SIZE bottleneck that limits Node.js filesystem operations. This results in significantly faster cold startsβ11 ms for Bun versus 42 ms for Nodeβand lower memory usage, with Bun consuming just 112 MB per 10k keep-alive connections compared to Node's 210 MB. However, this integrated design introduces risks; a stalled syscall on network storage can block Bun's event loop entirely, causing p99 latency to spike from 2.1 ms to 240 ms under specific NFS conditions.
Package Resolution and Installation Speed
Bun's installer is structurally faster because it does not implement a JavaScript module-graph resolver. Instead, it uses a SQLite-backed lockfile and content-addressed hard-linking from a global cache, reducing stat calls from ~48k to ~1.2k for common dependency trees. A cold-cache install of express, ws, and axios takes 0.9 seconds in Bun, compared to 4.1 seconds in Node and 2.3 seconds in Deno. For large Next.js trees, the difference is even more pronounced, with Bun completing the install in 4.6 seconds versus 38.4 seconds for npm.
Ecosystem Compatibility and Hidden Risks
Despite the performance wins, Node.js 22 remains the safer choice for teams relying on native N-API modules like Prisma, sharp, or better-sqlite3. Bun's ~95% npm compatibility hides subtle failure modes, such as silent data corruption in worker threads due to zero-copy ArrayBuffer transfers that Node handles differently. Additionally, Node's V8 engine still holds an advantage in CPU-bound tasks, where its deeper JIT compilation can outperform Bun's JavaScriptCore in steady-state scenarios. Teams must weigh the 2.3x throughput gain against the potential for obscure debugging sessions when native modules misbehave.
Key Takeaways
- Bun 1.2 delivers 2.3x higher HTTP throughput than Node.js 22 in plaintext benchmarks.
- Bun's cold-start time is 11 ms, significantly faster than Node.js's 42 ms.
- Node.js 22 remains superior for CPU-bound workloads and native N-API module compatibility.
- Bun's installer is 4.5x faster than npm for cold-cache installations of common packages.
- Deno 2 offers a middle ground with strong TypeScript support and permission sandboxing, though it trails Bun in raw speed.
The Bottom Line
Bun 1.2 is the clear winner for greenfield edge and API-gateway projects where raw speed matters, but Node.js 22 remains the pragmatic choice for complex, native-module-heavy enterprise stacks where ecosystem stability outweighs throughput gains.