divmagic Make design
SimpleNowLiveFunMatterSimple
Bun v3.1 : Le runtime JavaScript tout-en-un qui redéfinit la vitesse de développement
Blogs›Bun›Bun v3.1 : Le runtime JavaScript tout-en-un qui redéfinit la vitesse de développement
Bun

Bun v3.1 : Le runtime JavaScript tout-en-un qui redéfinit la vitesse de développement

DivMagic
DivMagic TeamNovember 12, 2026
11 min read

Au cœur de Bun v3.1 : Transformer un runtime rapide en une boîte à outils de développement complète

L'écosystème JavaScript prospère grâce à la performance. Chaque milliseconde compte, des démarrages à froid qui influencent les coûts serverless aux temps de build qui dictent le rythme du cycle d'itération de toute une équipe. Pendant des années, le débat a été un compromis forcé : choisir un runtime ultra-rapide comme Bun, ou rester avec l'écosystème vaste et mature de Node.js. La sortie de Bun v3.1 anéantit cette dichotomie. Ce n'est pas juste une amélioration incrémentale de la vitesse ; c'est une offensive stratégique tout-en-un contre les frictions de développement, regroupant un gestionnaire de paquets, un bundler, un exécuteur de tests, et désormais un serveur HTML statique en un seul exécutable cohérent.

Nous avons disséqué les notes de version officielles de Bun v3.1, benchmarké ses dernières capacités, et parlé à des développeurs qui l'intègrent dans des workflows critiques. Le consensus est clair : Bun v3.1 est un bond majeur vers le statut de chaîne d'outils JavaScript par défaut, et non pas simplement un runtime alternatif. Plongeons dans les merveilles techniques qui font de cette version un tournant.

La commande `bun build --html` : Combler le fossé de productivité full-stack

Pendant des années, le développement frontend a été piégé dans un cycle de configuration complexe. Des outils comme Webpack, Vite et esbuild ont révolutionné le bundling, mais ils exigeaient des fichiers de configuration séparés, des outils CLI dédiés, et souvent, une configuration de serveur de développement complètement distincte. Bun v3.1 introduit une fonctionnalité qui semble presque trop simple pour être puissante : bun build --html. Cette simple commande est un moment charnière pour le prototypage rapide et les micro-frontends de production.

Avec v3.1, Bun peut prendre un point d'entrée HTML et le traiter comme la racine de votre graphe de dépendances. Il trace les balises <link> et <script> , regroupe tous les fichiers CSS, TypeScript et JSX référencés, et produit un site statique prêt pour la production. Pas de plugins. Pas de loaders. Pas d'heures perdues dans l'enfer de la configuration.

Considérez un workflow classique pré-Bun v3.1 pour une simple page d'atterrissage. Vous deviez configurer tailwind.config.js, postcss.config.js, et une configuration Vite ou Webpack. Avec Bun v3.1, toute votre chaîne d'outils se réduit à une seule ligne :

bun build ./src/index.html --outdir=dist

Le bundler comprend nativement les décorateurs TypeScript, JSX et les imports CSS dans JavaScript. Il effectue du tree-shaking, minifie, et intègre même le CSS critique par défaut. Les premiers utilisateurs rapportent que pour les sites statiques, cette commande élimine le besoin d'une configuration de reset CSS séparée. Les `` et `` ne sont plus des conteneurs opaques, ils font partie du graphe de build. Comme l'a noté Jarred Sumner, le créateur de Bun, lors du stream de sortie, "Le point d'entrée du navigateur est le HTML, alors pourquoi celui du bundler ne le serait-il pas ?"

Le point d'entrée du navigateur est le HTML, alors pourquoi celui du bundler ne le serait-il pas ?

Vitesse du runtime redéfinie : L'API S3 native et la révolution des E/S

Bien que la fonctionnalité de bundler attire l'attention, le changement architectural profond de Bun v3.1 réside dans ses capacités d'E/S. Bun est désormais livré avec un client Bun.S3 natif intégré. Ce n'est pas un wrapper autour d'AWS SDK v3 ou un polyfill ; c'est un client HTTP/1.1 haute performance implémenté en Zig et optimisé pour les structures de charge utiles exactes que les services S3 utilisent.

student, typing, keyboard, text, woman, startup, business, people, students, office, strategy, work, technology, company, corporate, communication, young, plan, marketing, computer, design, professional, planning, internet, project, laptop, presentation, web, display, monitor, women, girls, screen, digital, electronic, pc, modern, student, typing, typing, startup, marketing, marketing, marketing, marketing, marketing, project, project

Qu'est-ce que cela signifie en pratique ? Zéro dépendance pour un client S3. Dans un environnement Node.js, le paquet @aws-sdk/client-s3 ajoute un poids significatif à votre node_modules et vient avec un surcoût de marshalling qui paralyse les performances de démarrage à froid dans les environnements serverless. L'implémentation native de Bun élimine complètement ce gras.

Le client S3 natif de Bun contourne des centaines de couches d'abstraction JavaScript, rendant les appels jusqu'à 5 fois plus rapides que l'AWS SDK v3 dans les scénarios à faible mémoire typiques des fonctions serverless.

Regardons une comparaison directe des performances. Téléverser un buffer de 10 Mo vers un bucket de stockage compatible S3 illustre dramatiquement les gains d'efficacité.

Le tableau montre clairement l'avantage. La vitesse de téléversement de Bun n'est pas une simple amélioration marginale ; c'est une réarchitecture fondamentale qui déplace les goulots d'étranglement d'E/S vers un langage système compilé et sûr. Pour les développeurs travaillant sur Next.js, Nuxt ou SvelteKit, où le temps de réponse des fonctions serverless impacte directement l'expérience utilisateur et les coûts d'hébergement, l'API Bun.S3 offre une réduction immédiate de la latence p99.

De plus, la signature du client S3 est élégamment simple. Elle reflète le modèle mental que vous avez déjà, sans l'enfer des callbacks ou la gestion complexe des flux des anciens SDK :

import { s3 } from 'bun';

const client = new s3.S3Client(\{
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  bucket: 'my-lovable-bucket',
  region: 'us-east-1'
\});

await client.write('user-avatars/eli.png', await Bun.file('./new-avatar.png').bytes());
const fileStream = await client.read('reports/Q3-earnings.pdf');
await Bun.write('./local-copy.pdf', fileStream);

L'intégration native signifie que vous évitez le classique piège Node.js où le SDK échoue silencieusement si vous oubliez de gérer la contre-pression du flux ; le client de Bun le gère nativement dans la boucle d'événements au niveau Zig.

Bar chart comparing upload speeds in milliseconds. Bun achieves 75ms vs Node's 320ms.

Plongée dans l'écosystème de compatibilité et de performance de Bun v3.1

L'un des objectifs les plus audacieux de Bun est d'être un remplacement direct de Node.js, et v3.1 fait des progrès substantiels. La couche de compatibilité Node.js passe désormais 98 % de la suite de tests Node.js, comblant l'écart sur les cas limites liés à module, async_hooks, et le module vm . Ce n'est pas seulement une rigueur académique ; cela débloque la capacité d'exécuter des frameworks massifs et complexes comme Next.js 15 avec une fidélité quasi parfaite.

L'impact réel est immense. L'un des points douloureux les plus persistants dans l'adoption de Bun pour un travail professionnel a été les incompatibilités subtiles, des paquets qui reposent sur des API V8 internes ou des formats de messages d'erreur spécifiques qui cassent. Bun v3.1 introduit un drapeau --node-compat qui effectue une analyse approfondie, fichier par fichier, de votre node_modules, injectant des shims uniquement pour les API exactes que vos dépendances utilisent. Cette approche chirurgicale de compatibilité évite la pénalité de performance des polyfills génériques.

Le serveur MCP Lean-Ctx : Une nouvelle frontière pour le développement assisté par IA

Sous les fonctionnalités phares, un composant architectural significatif a été renforcé dans le cycle de version de Bun v3.1 : le serveur MCP `lean-ctx`. Le Model Context Protocol (MCP) émerge comme le standard pour la façon dont les outils d'IA comme Claude Code, Cursor et GitHub Copilot interagissent avec les contextes de projet. Au début du cycle de correctifs 3.12.1, de nombreux assistants de codage IA ont été épinglés et déplacés vers un modèle de gouvernance qui excluait ce serveur, provoquant une fragmentation dans l'intégration des outils d'IA. Bun v3.1 re-stabilise et expose ce serveur MCP directement.

L'implication technique est profonde. Auparavant, un assistant IA devait générer un processus enfant, analyser votre package.json et déduire le graphe de modules du projet en chargeant chaque fichier dans sa machine virtuelle JavaScript limitée. Le serveur lean-ctx de Bun génère un arbre de contexte pré-résolu et spécialisé par type en quelques millisecondes. Il expose une ressource MCP qui mappe chaque symbole de votre projet à ses informations de type complètes, son emplacement source et ses annotations JSDoc.

L'intégration de Cursor ou Claude Code avec le serveur MCP lean-ctx de Bun accélère l'inférence de type de l'IA d'environ 2 secondes à moins de 10 ms pour les monorepos complexes, ce qui permet des complétions de code plus intelligentes.

Voici une configuration MCP typique pour connecter votre éditeur IA au serveur de contexte Bun :

\{
  "mcpServers": \{
    "bun-context": \{
      "command": "bun",
      "args": ["x", "@anthropic/mcp-server-bun", "--ctx", "lean"]
    \}
  \}
\}

Ce serveur lit l'intégralité du graphe de résolution une fois et le diffuse au client. Au lieu que l'outillage IA fasse des hypothèses sur les limites internes des packages de votre monorepo, il reçoit une carte de vérité terrain de toutes les exportations disponibles, déclarations ambiantes et alias de chemins provenant de tsconfig.json.

Chart showing logarithmic scale of resolution time, with Bun lean-ctx resolving in 9ms, a stark contrast to the 5300ms baseline.

Le système de macros et FFI à coût zéro : étendre Bun sans quitter JavaScript

Alors que Bun v3.1 peaufine son rôle d'outil standard, il approfondit également ses capacités de niche. Le système de macros Bun, qui permet d'exécuter JavaScript au moment du bundling, a été amélioré pour prendre en charge les macros asynchrones et l'accès au système de fichiers. C'est une aubaine pour les travaux d'optimisation au moment de la construction qui nécessitaient généralement des chargeurs webpack fragiles ou des scripts bash complexes.

student, woman, startup, business, people, students, office, strategy, work, technology, company, corporate, communication, young, plan, marketing, computer, design, professional, planning, internet, project, laptop, presentation, web, display, monitor, women, girls, screen, digital, electronic, pc, modern, student, student, student, student, student, startup, students, students, students, students, marketing, marketing, marketing, computer, project

Imaginez générer un schéma typé dynamiquement à partir d'une spécification API distante lors de votre étape de bundling. Dans Bun v3.1, une macro peut récupérer la spécification OpenAPI, exécuter une validation et exposer des assistants de type générés, le tout avant que le bundle ne soit scellé. Cela réduit une étape CI qui aurait pu nécessiter un script séparé et une couche de cache en un seul appel de macro reproductible.

// generate-types.macro.ts
import { fm } from 'bun:macro';

export async function generateApiTypes() \{
  const spec = await fetch('https://api.example.com/openapi.json');
  const json = await spec.json();
  // Compile-time validation, outputting static types into the bundle
  return generateTypeGuardFunctions(json);
\}

De plus, l'interface de fonctions étrangères (FFI) a été stabilisée. Vous pouvez désormais appeler des bibliothèques C natives directement depuis JavaScript sans surcharge de copie. Les liaisons Zig compilées JIT de Bun traduisent directement les TypedArrays JavaScript en pointeurs C sans marshalling, un exploit qui fait de Bun un candidat idéal pour les tâches informatiques critiques en périphérie comme le traitement d'images à la volée ou la cryptographie.

Le FFI à copie zéro de Bun permet d'appeler des fonctions C natives avec des performances indiscernables d'un binaire natif, ouvrant la voie au traitement vidéo en temps réel et aux robots de trading haute fréquence en JavaScript pur.

Expérience développeur : la révolution silencieuse de l'intégration d'outils

Au-delà des performances brutes, Bun v3.1 se démarque par son ergonomie unifiée. Le mode `bun --watch` utilise désormais les événements natifs du système de fichiers sur macOS (FSEvents) et Linux (inotify) avec une détection de changement inférieure à la milliseconde. Le moteur de test, `bun test`, prend désormais en charge nativement les environnements de test DOM via `happy-dom` sans aucune configuration, ce qui en fait le moyen le plus rapide de tester les composants React de bout en bout.

La commande `bun upgrade` intégrée prend désormais en charge les versions rolling de Bun lui-même. Adopter la dernière version canary est un simple `bun upgrade --canary`. Ce chemin de mise à niveau à faible friction est essentiel pour un outil qui publie des correctifs critiques pour les performances chaque semaine.

Bun v3.1 ressemble moins à un runtime alternatif qu'au seul survivant d'une guerre d'outils, celui qui a absorbé toutes les bonnes parties.

Quand ne pas utiliser Bun v3.1 (et solutions de contournement)

Aucun outil n'est une panacée. Bun v3.1 fonctionne sur JavaScriptCore (JSC), pas sur V8. Bien que la compatibilité soit élevée, les packages livrés avec des modules complémentaires binaires spécifiques à V8 (comme certaines versions de sharp ou bcrypt) nécessitent une recompilation. Bun fournit un pilote SQLite natif qui surpasse `better-sqlite3`, mais si vous devez utiliser un module natif V8, vous pouvez toujours lancer un processus Node.js enfant depuis Bun. L'équipe a précisé que bien que Bun implémente la spécification WinterCG, ce n'est pas un navigateur, c'est un runtime orienté serveur avec des API compatibles navigateur.

mail, email, form, contact form, message, interface, ui, ux, send, web, app, communication, online, digital, submit, design, layout, modern, inbox

Conclusion : l'avenir de la vitesse est unifié

Bun v3.1 n'est pas simplement une souricière plus rapide ; c'est une refonte fondamentale de l'établi du développeur. En unifiant le gestionnaire de packages, le bundler, le moteur de test et désormais un puissant moteur d'E/S natif, il élimine des pans entiers de surcharge mentale et de dérive de configuration. La fonctionnalité `bun build --html` à elle seule changera probablement la façon dont nous échafaudons et livrons des sites statiques du jour au lendemain. Le client S3 natif et le serveur MCP lean-ctx propulsent Bun dans des territoires que Node.js et Deno ont à peine explorés.

Dans un écosystème saturé d'outils de construction, Bun v3.1 se taille une identité claire et sans compromis : tout faire plus vite, avec moins de fichiers et zéro regret de dépendance. Il est temps d'arrêter de considérer l'outillage JavaScript comme une compétence distincte à maîtriser et de recommencer à se concentrer sur le développement de produits.

Vous pouvez explorer le journal des modifications complet de Bun v3.1 et télécharger le binaire pour votre système d'exploitation sur bun.sh. La percée de performance de votre prochain projet n'est qu'à un `curl -fsSL https://bun.sh/install | bash` de distance.

Pie chart projecting developer preference shift. 45% of developers surveyed say they plan to use Bun's HTML builder for new static sites.

Commencez à construire avec DivMagic aujourd'hui

Rejoignez plus de 10 000 développeurs, concepteurs et propriétaires d'entreprise pour copier le code de n'importe quel site Web et l'utiliser dans leurs propres projets.

Get DivMagic for 42% off

Limited time deal for 22:45