Claude-skills bun-runtime

Use for Bun runtime, bunfig.toml, watch/hot modes, env vars, CLI flags, and module resolution.

install
source · Clone the upstream repo
git clone https://github.com/secondsky/claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/secondsky/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/bun/skills/bun-runtime" ~/.claude/skills/secondsky-claude-skills-bun-runtime && rm -rf "$T"
manifest: plugins/bun/skills/bun-runtime/SKILL.md
source content

Bun Runtime

Bun is a fast all-in-one JavaScript runtime built on JavaScriptCore (Safari's engine). It provides 4x faster startup than Node.js on Linux.

Quick Start

# Run a file
bun run index.ts
bun index.ts  # shorthand

# Run with watch mode
bun --watch run index.ts

# Run package.json script
bun run dev

# Run with hot reloading
bun --hot run server.ts

Core CLI Flags

FlagPurpose
--watch
Restart on file changes
--hot
Hot module replacement (preserves state)
--smol
Reduce memory usage (slower GC)
--inspect
Enable debugger
--preload
Load modules before execution
--env-file
Load specific .env file
-e, --eval
Evaluate code string

Running Files

Bun transpiles TypeScript and JSX on-the-fly:

bun run index.js
bun run index.ts
bun run index.jsx
bun run index.tsx

Important: Put Bun flags immediately after

bun
:

bun --watch run dev    # Correct
bun run dev --watch    # Wrong - flag passed to script

Package.json Scripts

# Run script
bun run dev
bun dev  # shorthand (if no Bun command conflicts)

# List available scripts
bun run

# Run with Bun instead of Node
bun run --bun vite

Bun respects lifecycle hooks (

preclean
,
postclean
, etc.).

Watch Mode vs Hot Reloading

ModeFlagBehavior
Watch
--watch
Full process restart on changes
Hot
--hot
Replace modules, preserve state
# Watch mode - full restart
bun --watch run server.ts

# Hot reloading - preserves connections/state
bun --hot run server.ts

Environment Variables

Bun automatically loads

.env
files:

# Loads automatically: .env, .env.local, .env.development
bun run index.ts

# Specify env file
bun --env-file .env.production run index.ts

# Disable auto-loading
# In bunfig.toml: env = false

Access in code:

const apiKey = process.env.API_KEY;
const bunEnv = Bun.env.NODE_ENV;

Globals Available

GlobalSourceNotes
Bun
BunMain API object
Buffer
Node.jsBinary data
process
Node.jsProcess info
fetch
WebHTTP requests
Request/Response
WebHTTP types
WebSocket
WebWebSocket client
crypto
WebCryptography
console
WebLogging
__dirname
Node.jsCurrent directory
__filename
Node.jsCurrent file

Preload Scripts

Load modules before your main script:

bun --preload ./setup.ts run index.ts

Or in

bunfig.toml
:

preload = ["./setup.ts"]

Use cases: polyfills, global setup, instrumentation.

Stdin Execution

# Pipe code to Bun
echo "console.log('Hello')" | bun run -

# Redirect file
bun run - < script.js

Workspaces & Monorepos

# Run script in specific packages
bun run --filter 'pkg-*' build

# Run in all workspaces
bun run --filter '*' test

Debugging

# Start debugger
bun --inspect run index.ts

# Wait for debugger connection
bun --inspect-wait run index.ts

# Break on first line
bun --inspect-brk run index.ts

Connect via Chrome DevTools or VS Code.

Common Errors

ErrorCauseFix
Cannot find module
Missing dependencyRun
bun install
Top-level await
Using await outside asyncWrap in async function or use
.mts
--watch not working
Flag in wrong positionPut flag before
run

When to Load References

Load

references/bunfig.md
when:

  • Configuring bunfig.toml
  • Setting up test configuration
  • Configuring package manager behavior
  • Setting JSX options

Load

references/cli-flags.md
when:

  • Need complete CLI flag reference
  • Configuring advanced runtime options
  • Setting up debugging

Load

references/module-resolution.md
when:

  • Troubleshooting import errors
  • Configuring path aliases
  • Understanding Bun's resolution algorithm