Bun runtime patterns and best practices. Use when running bun commands (bun run, bun test, bunx), working with package.json or bun.lock, writing TypeScript scripts that run under Bun, developing Claude Code skills/hooks/scripts (which use Bun as their runtime), or working in projects that use Bun as their package manager. Covers bunx execution, lockfile handling, module resolution, shell scripting with Bun.$, subprocess spawning, file I/O, and testing with bun test.
Generates Bun runtime commands and scripts for package management, testing, and shell operations with TypeScript support.
npx claudepluginhub bendrucker/claudeThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/bunx.mdreferences/file-io.mdreferences/lockfile.mdreferences/resolution.mdreferences/shell.mdreferences/spawn.mdreferences/testing.mdUse --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).
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.
Runtime flags must precede the script path: bun --cwd ./packages/app run dev. Never use .js extensions in TypeScript imports — Bun resolves them natively.
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.
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.
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.
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.