It also covers the Bun-vs-Node tradeoff — Bun runs .ts/.tsx natively with no transpile step and does not down-convert modern syntax, but neither its runtime nor bundler perform type checking, so tsc --noEmit stays in CI regardless.
Out of scope: Node.js runtime setup (native type stripping, node:test) belongs to ts-runtime-node; tsconfig details belong to ts-config.
TypeScript on BunAgent Workflow (MANDATORY)
Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:
- fuse-ai-pilot:explore-codebase - Inspect
package.json,bunfig.toml,tsconfig.json - fuse-ai-pilot:research-expert - Verify Bun 1.4.x behavior via Context7/Exa
- mcp__context7__query-docs - Check Bun runtime, test, and bundler docs
After implementation, run fuse-ai-pilot:sniper for validation.
Use when
- Running
.ts/.tsxdirectly on Bun with no separate transpile step - Configuring
bunfig.toml([test]coverage thresholds, JUnit reporter, preload) - Bundling with
Bun.build/bun build, or producing a--compilesingle-file binary - Structuring a Bun workspaces monorepo
- Deciding Bun vs Node for a given project
Do NOT use for
- Node's native type stripping /
node:test→ use ts-runtime-node - Linting / formatting → use ts-lint-format
- Framework runtimes that own their build pipeline (Next.js, Astro)
Critical Rules
- Bun runs
.ts/.tsxnatively - Its transpiler handles TS + JSX with no config; unlike Node,.tsx,enum, and decorators work at runtime. - Bun does NOT down-convert syntax - Recent ECMAScript appears as-is in bundled output; the bundler is not a replacement for
tsctypechecking. bunfig.tomlis Bun-only - It complements, never replaces,package.jsonandtsconfig.json; CLI flags overridebunfigvalues.bun testis Jest-compatible - Import frombun:test; not every Jest feature is implemented.- Type-check separately - Keep
tsc --noEmit(orbun x tsc) in CI; Bun's runtime and bundler do no type checking.
Architecture
monorepo/
├── package.json # "workspaces": ["packages/*"]
├── bunfig.toml # [test] coverage + [test.reporter] junit
├── bun.lock
├── tsconfig.json
└── packages/
├── core/ # bun:test, Bun.build
└── cli/ # bun build --compile → binary
→ See bun-project-setup.md for a complete setup
Reference Guide
Concepts
| Topic | Reference | When to Consult |
|---|---|---|
| bunfig + test | bunfig-test.md | Coverage thresholds, JUnit, preload, watch |
| Build + compile | build-compile.md | Bun.build, single-file executables, cross-compile |
| Workspaces | workspaces.md | Monorepo layout, workspace:*, --filter, catalogs |
| Bun vs Node | references/bun-vs-node.md | Choosing a runtime; transpiler differences |
Templates
| Template | When to Use |
|---|---|
| bun-project-setup.md | Starting a Bun TS project or monorepo |
Best Practices
DO
- Put coverage thresholds and the JUnit reporter in
bunfig.tomlfor CI - Use
bun test --coverageand--reporter=junit --reporter-outfilein pipelines - Use
--compile --target=to cross-compile CLIs for other platforms
DON'T
- Treat
bun buildas a typechecker — runtsc --noEmitalongside it - Assume Bun downlevels modern syntax — it does not
- Duplicate
tsconfigsettings intobunfig.toml— Bun readstsconfigdirectly