Bun a fait du chemin depuis sa sortie. En 2026, est-il prêt à remplacer Node.js ? La réponse courte : ça dépend. La réponse longue est dans cet article.
Performance : Bun gagne, mais de combien ?
Démarrage
Le temps de cold start est le point fort de Bun :
| Runtime | Hello World | API Elysia/Express | Build TypeScript |
|---|---|---|---|
| Bun 1.3 | ~12ms | ~45ms | ~80ms |
| Node 22 | ~35ms | ~120ms | ~250ms (tsc) |
Bun est 3x plus rapide au démarrage grâce à son moteur JavaScriptCore (Safari) vs V8 (Chrome) de Node.
Throughput HTTP
Sur un benchmark simple (JSON response) :
Bun + Elysia: ~180,000 req/s
Node + Fastify: ~75,000 req/s
Node + Express: ~15,000 req/s
En production réelle, l'écart se réduit car le bottleneck est rarement le runtime mais la base de données, le réseau ou la logique métier.
Bundling
Bun embarque un bundler natif qui remplace esbuild/webpack :
bash# Bun (bundler intégré)
bun build ./src/index.ts --outdir ./dist
# ~200ms pour un projet moyen
# esbuild (Node)
npx esbuild src/index.ts --bundle --outdir=dist
# ~400ms pour le même projet
Écosystème : Node.js reste roi
Compatibilité npm
Bun est compatible avec 95%+ des packages npm. Les 5% restants sont généralement :
- Des packages avec des bindings natifs compilés pour Node spécifiquement
- Des packages qui dépendent de APIs Node non implémentées dans Bun
- Des outils qui inspectent
process.versions.node
Frameworks
| Framework | Bun | Node |
|---|---|---|
| Elysia | Natif | Non supporté |
| Express | Compatible | Natif |
| Fastify | Compatible | Natif |
| Next.js | Partiel | Natif |
| Nuxt | Non testé | Natif |
| Hono | Natif | Natif |
Bases de données
typescript// PostgreSQL — fonctionne sur les deux
import { Pool } from "pg";
// Bun natif (sans package)
const db = Bun.sql`SELECT * FROM users`;
// Prisma — fonctionne sur les deux
import { PrismaClient } from "@prisma/client";
Quand choisir Bun ?
Cas idéaux pour Bun
- Nouveau projet sans legacy — pas de contrainte de compatibilité
- API backend légère — Elysia + Bun = stack ultra-performante
- Scripts et CLI — le démarrage rapide fait la différence
- Monorepo avec TypeScript — exécution native sans compilation
- Prototypage —
bun init+bun run= zéro config
Cas où Node.js reste le meilleur choix
- Projet existant large — le coût de migration est rarement justifié
- Next.js / Nuxt en production — support Bun encore partiel
- Équipe qui connaît Node — la familiarité a de la valeur
- Packages avec bindings natifs — certains ne compilent pas sous Bun
- Hosting managé — tous les hébergeurs supportent Node, pas tous Bun
Ma stack en 2026
Après avoir testé Bun en production sur plusieurs projets, voici mes choix :
Nouveaux projets backend → Bun + Elysia
Scripts & outils internes → Bun (démarrage rapide)
Frontend (Next.js) → Node (meilleur support)
Projets existants → Node (pas de migration inutile)
CI/CD → Node (meilleur support hébergeurs)
Exemple : API avec Bun + Elysia
typescriptimport { Elysia, t } from "elysia";
import { cors } from "@elysiajs/cors";
const app = new Elysia()
.use(cors())
.get("/health", () => ({ status: "ok" }))
.post("/users", ({ body }) => {
return db.insert("users", body);
}, {
body: t.Object({
name: t.String(),
email: t.String({ format: "email" }),
}),
})
.listen(3000);
La vraie question n'est pas "Bun ou Node ?" mais "est-ce que le gain de performance justifie le risque de compatibilité pour MON projet ?". Dans la majorité des cas, les deux fonctionnent très bien.
Conclusion
Bun est excellent pour les nouveaux projets backend et les outils internes. Node.js reste incontournable pour l'écosystème frontend et les projets legacy. En 2026, les deux coexistent — et c'est très bien comme ça.