Skip to main content
JavaScriptbendrucker

bun

Bun runtime patterns. Use when running bun commands, working with package.json/bun.lock, writing TypeScript scripts under Bun, or developing Claude Code plugins.

Stars
13
Source
bendrucker/claude
Updated
2026-05-31
Slug
bendrucker--claude--bun
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/bendrucker/claude/HEAD/plugins/bun/skills/bun/SKILL.md -o .claude/skills/bun.md

Drops the SKILL.md into .claude/skills/bun.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Bun

bunx

Use --bun before the executable name to force the Bun runtime over Node shebangs. Use -p/--package when the binary name differs from the package name (e.g., bunx -p @angular/cli ng).

See references/bunx.md

Lockfile

bun.lock is a text-based lockfile. Resolve merge conflicts by deleting it and running bun install to regenerate from scratch — never attempt to merge lockfile contents.

See references/lockfile.md

Resolution

Runtime flags must precede the script path: bun --cwd ./packages/app run dev. Never use .js extensions in TypeScript imports — Bun resolves them natively.

See references/resolution.md

Shell

Bun.$ is a tagged template for shell execution. Use response methods (.text(), .json(), .lines()) to extract output, .nothrow() to handle failures without exceptions, and pipe/redirect syntax for composing commands.

See references/shell.md

Subprocess

Bun.spawn spawns subprocesses with streaming I/O. Use Bun.spawnSync for synchronous execution. Configure stdin/stdout/stderr, environment variables, and working directory. Check exitCode for error handling.

See references/spawn.md

File I/O

Bun.file() creates file handles with .text(), .json(), .arrayBuffer(), and .stream() methods. Bun.write() writes content to files or stdout/stderr. Both support streaming for large files.

See references/file-io.md

Testing

Bun runs tests in a single process. Use describe/it/test for structure, expect matchers for assertions, lifecycle hooks (beforeEach, afterEach) for setup/teardown, mock() for function mocking, and .toMatchSnapshot() for snapshot testing. Set AGENT=1 to suppress passing test output.

See references/testing.md