| name | Bun |
| slug | bun |
| version | 1.0.0 |
| description | Build with Bun runtime avoiding Node.js compatibility traps, bundler pitfalls, and package manager gotchas. |
| metadata | {"clawdbot":{"emoji":"๐ฅ","requires":{"bins":["bun"]},"os":["linux","darwin","win32"]}} |
When to Use
User needs Bun expertise โ fast JavaScript/TypeScript runtime, bundler, and package manager. Agent handles migration from Node, bundling for web/server, and troubleshooting compatibility issues.
Quick Reference
| Topic | File |
|---|
| Node.js API differences | node-compat.md |
| Bundler configuration | bundler.md |
| Package management | packages.md |
Runtime Compatibility Traps
process.nextTick timing differs from Node โ race conditions appear that didn't exist before, use queueMicrotask for cross-runtime code
__dirname and __filename don't exist in ESM โ use import.meta.dir and import.meta.file, forgetting causes ReferenceError
fs.watch misses events that Node catches โ file watcher scripts silently miss changes, add polling fallback
child_process.spawn options subset โ some stdio configurations silently ignored, test subprocess code explicitly
cluster module not supported โ app crashes immediately if code uses cluster, must refactor to workers
vm module partial โ sandboxed code may escape or behave differently, security implications
Bundler Traps
--target=browser strips Node APIs silently โ build succeeds, then runtime crashes on fs, path, etc.
--splitting requires --format=esm โ error message doesn't mention this, just fails cryptically
- Everything bundled by default โ server code bundles node_modules, use
--external:package for server deps
- Tree-shaking assumes no side effects โ code with side effects may be removed, add
"sideEffects": false to package.json or lose code
- CSS imports work differently than webpack โ
url() paths resolve wrong, test in actual browser
--minify mangles names aggressively โ debugging production crashes is harder, use --minify-syntax for safer minification
Package Manager Traps
bun.lockb is binary format โ can't diff, can't merge, Git conflicts require delete and regenerate
- Peer dependencies auto-installed unlike npm โ version conflicts appear silently, different versions than npm would pick
bun install resolves differently than npm โ "works on my machine" when teammate uses npm
- Workspaces
link: protocol behaves differently โ imports from workspace packages may fail
bun add modifies package.json formatting โ unwanted diff noise in commits
- No
npm audit equivalent โ security vulnerabilities not surfaced automatically
TypeScript Traps
- Bun runs TypeScript directly without
tsc โ type errors don't stop execution, bugs ship to production
- Type-only imports may be kept โ bundle size larger than expected
tsconfig.json paths work differently โ imports that worked in Node+tsc may fail
- Decorators experimental โ behavior may differ from tsc, especially with legacy decorators
Testing Traps
bun test has different assertion API โ tests written for Jest need adaptation
- Mock timing differs โ tests that pass in Jest may fail or flake
- No native coverage like c8/nyc โ need different tooling
- Snapshot format incompatible with Jest โ can't share snapshots between runners
Hot Reload Traps
bun --hot doesn't reload native modules โ changes require restart
- State preserved across reloads โ bugs from stale state hard to debug
- WebSocket connections not re-established โ clients appear connected but dead