J'ai commencé à tester Bun parce que je voulais un runtime simple pour de petits scripts et des projets TypeScript. Cet article reste un retour d'expérience : les commandes et la compatibilité changent avec les versions, alors vérifie la documentation officielle avant de migrer un projet existant.
Les premiers benchmarks plaçaient souvent Bun devant Node sur des tâches courtes. Le runtime s'appuie sur JavaScriptCore et une implémentation en Zig, mais les chiffres changent selon la version et le scénario. Je préfère donc regarder ce que cela change dans un projet réel.

Les benchmarks d'époque plaçaient Bun devant Node sur plusieurs tâches simples. Comme toujours, le résultat dépend de la version et du scénario ; je retiens surtout le démarrage rapide, TypeScript pris en charge sans étape supplémentaire et bun add.
Bun se démarque également par sa flexibilité. Conçu à partir de zéro, il a la capacité d'adopter de nouvelles fonctionnalités et API au fil du temps. Par exemple, il prend en charge les modules TypeScript natifs pour simplifier le développement, et s'entend très bien avec les modules WebAssembly, ouvrant la porte à des applications Web à la pointe de la technologie.
L'installation est rapide : tu télécharges le binaire adapté à ton système, puis tu peux lancer un script ou créer un projet. La compatibilité avec les modules Node facilite les essais, même si elle ne garantit pas que toutes les dépendances fonctionneront sans ajustement.
Pour installer Bun, tu peux utiliser le script officiel :
curl -fsSL https://bun.sh/install | bash
Plus d'informations ici : https://bun.sh/
Pour créer un projet, tu peux utiliser create ou init :
bun create <template> [<destination>]
Plus d'informations ici : https://bun.sh/docs/cli/bun-create
Tu peux aussi initialiser un projet dans un dossier avec init :
bun init
Plus d'informations ici : https://bun.sh/docs/cli/init
Après avoir configuré ton projet, le gestionnaire de paquets Bun permet d'installer une dépendance, par exemple :
bun add sqlite3
Plus d'informations ici : https://bun.sh/docs/cli/add
Pour exécuter ton projet avec Bun, indique simplement le fichier d'entrée :
bun run index.ts
Plus d'informations ici : https://bun.sh/docs/cli/run
ou en mode --watch
bun run --watch index.ts
Plus d'informations ici : https://bun.sh/docs/runtime/hot
Bun propose d'autres outils autour du runtime et du gestionnaire de paquets. La documentation officielle reste le meilleur endroit pour vérifier les commandes disponibles.

Bun m'a convaincu pour les scripts, les prototypes et certains services isolés. Je garde Node quand la compatibilité d'une dépendance ou du déploiement compte davantage que le temps gagné à l'installation. C'est une conclusion moins spectaculaire, mais plus utile qu'un “remplaçant de Node” annoncé trop tôt.
Dans mes essais, j'ai surtout apprécié de pouvoir utiliser TypeScript et le mode
--watchsans ajouter de dépendance. La compatibilité CommonJS/ESM dépend toutefois du projet : je la vérifie toujours avec les packages réellement utilisés.
Le chargement d'un fichier
.envet le watcher intégrés sont pratiques pour les scripts locaux. Ce sont de petits détails, mais ils réduisent le nombre d'outils à configurer.
Le gestionnaire de paquets est rapide, surtout sur un projet neuf. Pour une application déjà installée, le temps gagné dépend davantage du cache et de la compatibilité des dépendances.

Je continue à suivre Bun, surtout pour les outils de développement et les petits services. Si tu l'essaies, compare-le à ton cas d'usage réel : scripts, CI, compatibilité des packages et observabilité valent mieux qu'un benchmark isolé. La documentation est disponible sur bun.sh.
Soutien
Si cet article t'a été utile, tu peux soutenir le projet sur Liberapay ou Buy Me a Coffee.
Article co-écrit avec l'IA · Images générées avec l'IA.
