/install bun
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.nextTicktiming differs from Node — race conditions appear that didn't exist before, usequeueMicrotaskfor cross-runtime code__dirnameand__filenamedon't exist in ESM — useimport.meta.dirandimport.meta.file, forgetting causes ReferenceErrorfs.watchmisses events that Node catches — file watcher scripts silently miss changes, add polling fallbackchild_process.spawnoptions subset — some stdio configurations silently ignored, test subprocess code explicitlyclustermodule not supported — app crashes immediately if code uses cluster, must refactor to workersvmmodule partial — sandboxed code may escape or behave differently, security implications
Bundler Traps
--target=browserstrips Node APIs silently — build succeeds, then runtime crashes onfs,path, etc.--splittingrequires--format=esm— error message doesn't mention this, just fails cryptically- Everything bundled by default — server code bundles node_modules, use
--external:packagefor server deps - Tree-shaking assumes no side effects — code with side effects may be removed, add
"sideEffects": falseto package.json or lose code - CSS imports work differently than webpack —
url()paths resolve wrong, test in actual browser --minifymangles names aggressively — debugging production crashes is harder, use--minify-syntaxfor safer minification
Package Manager Traps
bun.lockbis 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 installresolves differently than npm — "works on my machine" when teammate uses npm- Workspaces
link:protocol behaves differently — imports from workspace packages may fail bun addmodifiespackage.jsonformatting — unwanted diff noise in commits- No
npm auditequivalent — 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.jsonpaths work differently — imports that worked in Node+tsc may fail- Decorators experimental — behavior may differ from tsc, especially with legacy decorators
Testing Traps
bun testhas 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 --hotdoesn'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
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install bun - After installation, invoke the skill by name or use
/bun - Provide required inputs per the skill's parameter spec and get structured output
What is Bun?
Build with Bun runtime avoiding Node.js compatibility traps, bundler pitfalls, and package manager gotchas. It is an AI Agent Skill for Claude Code / OpenClaw, with 727 downloads so far.
How do I install Bun?
Run "/install bun" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Bun free?
Yes, Bun is completely free (open-source). You can download, install and use it at no cost.
Which platforms does Bun support?
Bun is cross-platform and runs anywhere OpenClaw / Claude Code is available (linux, darwin, win32).
Who created Bun?
It is built and maintained by Iván (@ivangdavila); the current version is v1.0.0.