JavaScript-Entwicklung war jahrelang mit einem stillen Seufzen verbunden: npm install dauert ewig, der Test-Runner muss separat konfiguriert werden, die TypeScript-Transpilierung braucht einen extra Build-Schritt, und Node.js ist zwar zuverlaessig, aber nicht gerade bekannt fuer Geschwindigkeit. Bun hat das in weniger als drei Jahren fundamental veraendert.
Gemeinsam mit Claude Code entsteht ein Workflow, der JavaScript-Projekte auf ein neues Geschwindigkeitsniveau hebt — vom ersten bun init bis zum finalen Deployment. In diesem Artikel schauen wir uns an, was Bun wirklich kann, wie die wichtigsten Features in der Praxis aussehen und wie eine Migration von Node.js gelingt.
1. Was ist Bun? Der All-in-one-Ansatz
Bun ist kein weiterer JavaScript-Runtime-Klon. Es ist ein vollstaendiges JavaScript-Toolchain in einer einzigen Binary: Runtime, Package Manager, Bundler und Test-Runner gleichzeitig — geschrieben in Zig, gebaut auf JavaScriptCore (dem Engine aus WebKit/Safari statt V8), und darauf optimiert, eben schnell zu sein.
Vier Tools. Eine Binary.
RuntimePackage ManagerBundlerTest Runner
Statt node + npm + webpack/vite + jest/vitest einzeln zu installieren und zu konfigurieren, liefert bun alles in einer Binary — und jede dieser Komponenten ist auf Geschwindigkeit ausgelegt.
Benchmark: Bun vs. Node.js vs. Deno
Geschwindigkeitsversprechen klingen immer gut — aber was sagen reale Benchmarks? Stand Anfang 2026 (Bun 1.2.x) liefern unabhaengige Benchmarks folgende Richtwerte:
Benchmark
Bun 1.2
Node.js 22
Deno 2
HTTP-Requests/s (hello world)
~127.000 req/s
~54.000 req/s
~73.000 req/s
SQLite-Reads/s (in-process)
~680.000 ops/s
~210.000 ops/s
~290.000 ops/s
Package Install (React-Projekt)
~0,3 s
~8,1 s
~2,4 s
TypeScript-Datei starten (kalt)
~28 ms
~310 ms
~95 ms
Hinweis zu Benchmarks: Zahlen variieren je nach Hardware, Workload und Konfiguration. Die Kernaussage bleibt jedoch konsistent: Bun ist in IO-intensiven und startup-sensitiven Szenarien deutlich schneller als Node.js.
Der Grund: JavaScriptCore hat eine aggressivere JIT-Strategie fuer kurzlebige Prozesse, und Bun's I/O-Layer ist direkt auf Linux io_uring / macOS kqueue aufgesetzt — ohne Node.js's libuv als Zwischenschicht.
2. Installation und erstes Setup
Bun ist als einzelne Binary verfuegbar und braucht keine globalen npm-Abhaengigkeiten. Die Installation dauert Sekunden.
Installation
TerminalShell
# macOS / Linux (curl-Installer)curl-fsSL https://bun.sh/install |bash# Windows (PowerShell)powershell-c"irm bun.sh/install.ps1 | iex"# Via npm (falls bereits installiert)npm install -g bun
# Version prüfenbun--version# 1.2.x
Neues Projekt initialisieren
TerminalShell
bun init my-project
# Interaktiv: Name, Einstiegspunkt, TypeScript? (ja/nein)cd my-project
# Oder non-interaktiv mit Defaults:bun init -y
Das erzeugte package.json enthaelt bereits ein korrektes "type": "module" und einen TypeScript-freundlichen Einstiegspunkt. Kein tsconfig.json noetig — Bun versteht TypeScript nativ, ohne separaten Compiler-Schritt.
Scripts ausfuehren
Terminal + package.jsonBeispiel
// package.json scripts:
{
"scripts": {
"dev": "bun run --watch src/index.ts",
"build": "bun build src/index.ts --outdir dist",
"test": "bun test",
"start": "bun src/index.ts"
}
}
# Ausfuehren:bun run dev
bun run build
Automatisches .env-Loading
Einer der unterschaetzten Komfort-Features: Bun laedt .env automatisch — kein dotenv-Package noetig, kein require('dotenv').config().
src/config.tsTypeScript
// .env enthaelt: DATABASE_URL=postgres://localhost/mydb// API_KEY=secret-key-123// In deinem Code — einfach lesen:constdbUrl = process.env.DATABASE_URL;
constapiKey = process.env.API_KEY;
// Oder mit Bun's eigenem Env-Objekt:constport = Bun.env.PORT ?? "3000";
// Bun laedt automatisch (in Reihenfolge):// .env.local -> .env.{NODE_ENV} -> .env
Claude Code + Bun Tip: Claude Code erkennt automatisch, ob ein Projekt Bun verwendet (anhand von bun.lockb oder bun.lock), und nutzt dann bun run statt npm run in vorgeschlagenen Commands.
3. Bun als Package Manager
Der Package Manager ist oft der erste Kontaktpunkt mit Bun — und der Geschwindigkeitsunterschied ist sofort spuerbar. Bun cached aggressiv lokal und parallelisiert Downloads maximal.
Bun nutzt ein binaeres Lockfile (bun.lockb), das wesentlich kompakter als package-lock.json oder yarn.lock ist. Ab Bun 1.1 gibt es optional auch ein textbasiertes bun.lock fuer bessere Git-Diffs.
# Alle Workspaces installieren (ein Befehl, Root-Ebene)bun install
# Script in einem spezifischen Workspace ausfuehrenbun run --filter"@myrepo/api" dev
bun run --filter"./apps/web" build
# Alle Workspaces bauenbun run --filter"*" build
# Package zu einem Workspace hinzufuegenbun add zod --cwd packages/shared
Warum bun install so schnell ist
Bun nutzt einen globalen Cache auf dem Dateisystem und Hard-Links statt Kopien in node_modules. Nach dem ersten Install einer Package-Version landen alle weiteren Projekte, die dieselbe Version nutzen, bei einem Hard-Link — kein Re-Download, minimaler Disk-Overhead.
In CI-Umgebungen ist bun install oft 10–25x schneller als npm install — wenn der Cache warm ist, sogar noch schneller.
4. Bun APIs: Das Standard-Toolkit
Neben Node.js-Kompatibilitaet bietet Bun eine eigene, hochperformante API-Schicht — Bun.* Namespaced — fuer die haeufigsten Aufgaben: Dateizugriff, HTTP-Server, SQLite, Kryptographie, und mehr.
Bun.file()
Lazy File-Handle mit Stream-, Text- und JSON-Zugriff ohne extra Import
Bun.serve()
HTTP/HTTPS/WebSocket-Server mit eingebautem TLS — kein Express noetig
Bun.sqlite()
In-process SQLite mit synchronen Queries — schnellste embedded DB in JS
Bun.password
bcrypt / argon2 Hashing nativ, ohne native bindings
Kein separates Testing-Framework mehr installieren. bun test ist der integrierte Test-Runner mit einer Jest-kompatiblen API — was bedeutet, dass bestehende Jest-Tests ohne Aenderung laufen.
# Alle Tests ausfuehrenbun test
# Watch-Modus (bei Dateiänderungen re-run)bun test --watch# Spezifische Datei oder Patternbun test src/__tests__/calculator.test.ts
bun test --test-name-pattern"adds two"# Coverage-Reportbun test --coverage# Timeout setzen (ms)bun test --timeout5000# Bail nach N Fehlernbun test --bail3# Snapshots aktualisierenbun test --update-snapshots
Jest-Kompatibilitaet im Detail
Bun's bun:test implementiert den groeßten Teil der Jest-API: describe, it/test, expect, beforeEach/afterEach, beforeAll/afterAll, Mocks, Spies, Fake Timers und Snapshots. Die meisten bestehenden Jest-Test-Dateien laufen nach Aendern des Import-Pfads von @jest/globals auf bun:test sofort.
Wichtig: Coverage-Reports sind noch nicht so ausgereift wie in Jest — fuer detaillierte Coverage-Anforderungen (z.B. Branch Coverage in CI) ggf. nyc/c8 als Post-Processor nutzen.
6. Migration von Node.js zu Bun
Bun ist darauf ausgelegt, als Drop-in-Replacement fuer Node.js zu funktionieren. In der Praxis bedeutet das: Die meisten Node.js-Projekte laufen ohne Code-Aenderungen mit Bun. Es gibt aber Ausnahmen, die zu kennen sich lohnt.
Bun implementiert die Node.js API-Oberflaeche vollstaendig — inklusive fs, path, os, crypto, http, https, stream, events, child_process und mehr.
Schritt-fuer-Schritt Migration
1
Bun installieren und Runtime tauschen
Statt node src/index.js einfach bun src/index.js verwenden. In package.json Scripts node durch bun ersetzen.
2
Package Manager migrieren
rm -rf node_modules package-lock.json && bun install — das erzeugt bun.lockb und richtet den schnelleren Cache ein.
3
dotenv entfernen
Falls dotenv nur fuer .env-Loading genutzt wird: Package entfernen, require('dotenv').config() loeschen — Bun macht das automatisch.
4
Test-Runner migrieren
Jest-Tests funktionieren in der Regel direkt mit bun test. Import-Pfad von "@jest/globals" auf "bun:test" aendern fuer native Bun-Features.
5
TypeScript-Config aufraeumen
Da Bun TypeScript nativ versteht, kann ts-node, tsx, und ts-jest oft entfernt werden. Auch Build-Schritte fuer reine Entwicklung entfallen.
6
Native Module pruefen
Packages mit C/C++ native bindings (.node-Dateien) koennen Probleme machen. Alternativen in der Bun-Community suchen oder Node.js fuer diese Packages als Fallback nutzen.
Bekannte Limitierungen
Bekannte Limitierungen (Stand 2026-Q2):
Native Addons (.node): Packages die N-API-Bindings nutzen (z.B. manche Datenbank-Treiber, native crypto-Module) funktionieren moeglicherweise nicht vollstaendig.
Worker Threads API: Bun hat eine eigene Worker-Implementierung, die nicht 100% Node.js-kompatibel ist — Edge Cases moeglich.
vm-Modul:node:vm hat partielle Unterstuetzung. Komplexe Sandbox-Szenarien koennen abweichen.
Empfehlung: Fuer neue Projekte direkt mit Bun starten. Fuer bestehende Projekte: testen, dann schrittweise migrieren.
Bun in CI/CD: GitHub Actions
.github/workflows/ci.ymlCI/CD
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run tests
run: bun test --coverage
- name: Build
run: bun run build
CI/CD-Tipp: Statt actions/setup-node + npm ci genuegt oven-sh/setup-bun@v2 + bun install --frozen-lockfile. Pipeline-Zeit reduziert sich bei den meisten Projekten um 40-70%. Der globale Bun-Cache kann in GitHub Actions zusaetzlich gespeichert werden fuer noch schnellere Runs.
Fazit: Bun ist bereit fuer Production
Bun hat 2026 den Status "interessantes Experiment" hinter sich gelassen. Mit Version 1.2.x ist es stabil, Node.js-kompatibel genug fuer die grosse Mehrheit der Projekte, und in Geschwindigkeit und Developer Experience klar ueberlegen.
Wann Bun waehlen?
Sofort: Neue Projekte, APIs, CLI-Tools, Script-Automatisierung, serverless Functions, Monorepos.
Mit Testing: Bestehende Node.js-Projekte die aktiv weiterentwickelt werden — Migration ist meistens unter 30 Minuten.
Abwarten: Legacy-Systeme mit vielen native bindings oder vm-intensivem Einsatz — hier erst gruendlich testen.
Die Kombination mit Claude Code macht den Einstieg noch einfacher: Projekte initialisieren, migrieren, testen und deployen — alles unterstuetzt durch KI-assistiertes Tooling, das Bun als First-Class-Runtime behandelt. Wer heute mit einem neuen JavaScript-Projekt startet und auf modernen Tooling-Komfort ohne Konfigurationsaufwand setzt, sollte Bun als erste Wahl in Betracht ziehen.
KI-assistierte Entwicklung mit Bun starten
Erlebe wie Claude Code und Bun zusammen JavaScript-Entwicklung auf ein neues Level heben — von der ersten Zeile bis zum Production-Deploy.