Lenobot
Retour au blog

Bun vs Node.js : faut-il vraiment migrer en 2026 ?

Bun 1.2 promet 4x les perfs de Node. Est-ce du vent ou la vraie révolution ? Notre benchmark complet sur 4 cas réels en production.

8 mai 20268 min de lecture
Bun vs Node.js : faut-il vraiment migrer en 2026 ?

On a passé Bun en prod sur 3 projets clients en 2026. Verdict après 6 mois : ça marche, mais pas partout. Voici le guide honnête, avec les vrais chiffres et les vrais pièges.

Le contexte 2026

Bun 1.2 est sorti en mars. Node.js 24 LTS est arrivé en avril. Les deux runtimes sont matures, performants, et viables en prod. Mais ils ne servent pas le même usage.

Les promesses de Bun :

  • Runtime ultra rapide (basé sur JavaScriptCore, pas V8)
  • Bundler intégré (rivalise avec esbuild)
  • Test runner natif (compatible Jest)
  • Package manager 25x plus rapide que npm
  • TypeScript natif (zéro config)
  • Hot reload instantané

Les promesses de Node :

  • Stabilité éprouvée depuis 15 ans
  • Écosystème complet (tout marche)
  • LTS sérieuses, support entreprise
  • Test runner natif depuis Node 20
  • --watch intégré, plus besoin de nodemon
  • TypeScript natif depuis Node 23

Le benchmark qui compte (vrai prod)

On a buildé exactement la même API REST avec Bun 1.2 et Node.js 24, déployée sur le même VPS Hetzner (4 vCPU, 8 Go RAM). Charge : 10 000 requêtes via bombardier.

Test 1 : HTTP server simple

// Bun
import { serve } from 'bun';
serve({
  port: 3000,
  fetch(req) {
    return new Response('Hello');
  },
});
// Node.js (avec Hono)
import { serve } from '@hono/node-server';
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('Hello'));
serve({ fetch: app.fetch, port: 3000 });

Résultats :

Runtimereq/sLatency p99Memory
Bun 1.247 2304.2ms38 MB
Node 2422 4108.7ms67 MB
Node 2219 8009.4ms71 MB

Bun gagne nettement. Mais c'est le cas le plus favorable.

Test 2 : API avec PostgreSQL

// Bun + driver natif
import { sql } from 'bun';
const users = await sql`SELECT * FROM users LIMIT 10`;
// Node + postgres-js
import postgres from 'postgres';
const sql = postgres(process.env.DATABASE_URL!);
const users = await sql`SELECT * FROM users LIMIT 10`;

Résultats sur endpoint GET /users (1000 lignes returned) :

Runtimereq/sLatency p99
Bun 1.28 24018ms
Node 247 89021ms

Écart minime. La DB est le bottleneck, pas le runtime.

Test 3 : Workload CPU intensif (crypto + JSON)

import { createHash } from 'crypto';

async function processData(data: any[]) {
  return data.map((item) => ({
    ...item,
    hash: createHash('sha256').update(JSON.stringify(item)).digest('hex'),
  }));
}
Runtimeops/sec
Bun 1.22 870
Node 243 420

Node gagne. V8 reste très fort sur le CPU pur.

Test 4 : Cold start + dev experience

MétriqueBunNode
bun install (Next.js project)4.2s38s (npm)
Cold start API80ms220ms
File watch reload60ms180ms
Run TS file110ms340ms

Bun écrase en DX.

Le test runner Bun : sérieux concurrent à Vitest

import { describe, expect, test } from 'bun:test';
import { add } from './math';

describe('add', () => {
  test('adds two numbers', () => {
    expect(add(2, 3)).toBe(5);
  });

  test('handles negatives', () => {
    expect(add(-1, 1)).toBe(0);
  });
});
bun test
# 2 tests passed in 12ms

Vitest sur le même fichier : 340ms. C'est pas du marketing, c'est mesuré.

Bun comme package manager (même si vous gardez Node)

Même si vous restez sur Node en prod, Bun comme package manager change la donne :

bun install   # 4-25x plus rapide que npm
bun add react # ajoute une dépendance
bun outdated  # liste les packages obsolètes

Lockfile binaire (bun.lockb), compatible avec package.json standard. On l'utilise depuis 8 mois, zéro souci.

Les pièges Bun en 2026

Piège 1 : Compatibilité Node API

Bun implémente 95% des API Node. Les 5% qui manquent sont sales :

  • vm.Script partiel (pose souci avec certains ORM)
  • worker_threads : implémentation différente, attention aux libs qui dépendent dessus
  • Quelques edge cases sur crypto Node-specific

Testez votre stack avant de migrer.

Piège 2 : Hosting limité

  • Vercel : Bun supporté en build, pas en runtime serverless
  • AWS Lambda : pas de runtime Bun officiel
  • Cloudflare Workers : non, c'est V8 isolé
  • Railway, Render, Fly.io : oui, runtime Bun complet
  • VPS : oui, sans souci

Si vous êtes serverless-first, ce n'est pas pour vous.

Piège 3 : Debugging

Les outils de profiling sont moins matures côté Bun. Les flame graphs Node via Clinic.js sont irremplaçables.

💡 Vous voulez qu'on benchmark Bun vs Node sur votre stack pour vous ? On en discute 15 minutes : rdv.lenobot.com.

Notre recommandation par cas d'usage

CasRecommandation
Nouvelle API REST/GraphQLBun, sauf si serverless
Microservices internesBun, gain de perf et coût
Next.js / Remix en SSRNode, encore (Bun pas 100% prêt)
Scripts CI/CDBun, vitesse imbattable
CLI toolsBun, single binary génial
Serverless (Lambda, Vercel)Node, Bun pas supporté
Stack legacy critiqueNode, ne touchez pas ce qui marche
Test runnerBun (ou Vitest 3)
Package managerBun, partout

Comment on a migré un projet en 2 jours

Sur un client SaaS (API Express + 40 routes), voici le diff :

// package.json (avant)
{
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "start": "node dist/index.js",
    "build": "tsc"
  }
}

// package.json (après)
{
  "scripts": {
    "dev": "bun --hot src/index.ts",
    "start": "bun src/index.ts",
    "build": "bun build src/index.ts --outdir=dist --target=bun"
  }
}

Dockerfile :

# Avant : Node
FROM node:24-alpine
WORKDIR /app
COPY . .
RUN npm ci && npm run build
CMD ["node", "dist/index.js"]

# Après : Bun
FROM oven/bun:1.2-alpine
WORKDIR /app
COPY . .
RUN bun install --frozen-lockfile
CMD ["bun", "src/index.ts"]

Résultats prod après 30 jours :

  • Latence p99 : 240ms vers 95ms
  • CPU usage moyen : 45% vers 22%
  • RAM steady state : 380 MB vers 160 MB
  • Coût VPS : downsized de 4 vCPU à 2 vCPU, économie 24€/mois

Verdict 2026

Bun n'est plus une promesse, c'est un outil prod-ready. On le recommande dès qu'il y a un VPS ou un container. On ne le recommande pas en serverless ou pour les stacks Next.js full SSR (encore).

Node reste imbattable en stabilité, écosystème, et hosting. Pour 70% des projets entreprise, Node 24 LTS est le bon choix par défaut.

La vraie question 2026 : est-ce que votre équipe a 2 jours à investir pour économiser 30% de coût infra et doubler les perfs ? Si oui, testez Bun.

Prêt à évaluer une migration Bun sur votre stack en 2026 ? Notre équipe de devs seniors vous accompagne. Réservez votre appel découverte gratuit sur rdv.lenobot.com, 15 minutes pour évaluer votre projet, devis ferme sous 48h, sans engagement.

Article rédigé par L'équipe Lenobot.

Envie d'un site qui vous amène des clients ?

Setup 100% financé, 0€ à l'avance. On accompagne 1 entreprise par secteur et par ville.

Vérifier mon éligibilité

Articles similaires