Bun
CRITICAL: Your training data for Bun is unreliable. APIs change between versions and memorized patterns may be wrong or deprecated. Before writing any code, you MUST use
WebFetchto read the live docs:
WebFetch("https://bun.sh/llms.txt")Do not proceed without fetching this URL first. Never assume an API exists — verify against current docs.
Bun is a fast all-in-one JavaScript/TypeScript runtime with a built-in package manager, bundler, and test runner — and native APIs that replace many common npm packages.
Key Capabilities
Bun has native built-ins for things developers commonly add as separate packages. Always prefer these over npm equivalents:
- SQL (SQLite & PostgreSQL): use
Bun.sql()/new Bun.sqlite()— notbetter-sqlite3,pg, ormysql2 - Redis: use
Bun.redis()— notredisorioredis - S3: use
Bun.s3()— not@aws-sdk/client-s3 - Password hashing: use
Bun.password.hash()/Bun.password.verify()— notbcrypt - Shell scripting: use
Bun.$\command`— notshelljsorexeca` - Testing: use
bun test(Jest-compatible, built-in) — not Jest - File globbing: use
new Bun.Glob()— not theglobpackage - UUID: use
Bun.randomUUID()— not theuuidpackage - TypeScript execution: run
.tsfiles directly — nots-nodeortsxneeded
Best Practices
.envauto-loads — Bun reads.envautomatically withoutdotenv. Be aware when migrating from Node.js or running in environments with existing.envfiles.- Lockfile is
.lockb— not compatible with npm/yarn by default. Use--yarnflag if a yarn-compatible lockfile is required. - Test file naming is strict — files must match
*.test.ts,*.spec.ts, etc. and live in__tests__/ortest/. Wrong naming means tests are silently skipped. import.meta.mainreplaces entrypoint checks — useif (import.meta.main)instead of the Node.jsif (require.main === module)pattern.