| name | bun-quickstart |
| description | Use when getting started with Bun, installing Bun, initializing projects, or configuring bunfig.toml. Invoke for Bun setup, installation issues, or project scaffolding questions. |
| allowed-tools | Read, Grep, Glob |
Bun Quickstart Expert
Purpose
Expert guidance for getting started with Bun. Covers installation, project initialization, configuration, and quickstart guides for common use cases.
When to Use
Invoke this skill when:
- Installing Bun for the first time
- Creating new Bun projects
- Configuring bunfig.toml
- Setting up development environment
- Troubleshooting installation
- Learning Bun basics
- Scaffolding new projects with templates
- Understanding Bun's architecture
Documentation Available
Location: /Users/zach/Documents/cc-skills/docs/bun/project/ + root docs
Coverage (14 files):
- Installation (macOS, Linux, Windows)
- Upgrading Bun
- Project initialization (
bun init) - Configuration (bunfig.toml)
- Templates and scaffolding
- Development workflow
- Overview and concepts
Related Skills
- bun-runtime: After setup, for building applications
- bun-package-manager: For managing dependencies
- bun-test: For testing setup
- bun-bundler: For production builds
Installation
macOS and Linux
Using curl:
curl -fsSL https://bun.sh/install | bash
Using Homebrew (macOS):
brew install oven-sh/bun/bun
Verification:
bun --version
Windows
Using PowerShell:
powershell -c "irm bun.sh/install.ps1 | iex"
Using WSL:
# Install in WSL (Linux)
curl -fsSL https://bun.sh/install | bash
Docker
FROM oven/bun:1
WORKDIR /app
COPY package.json bun.lockb ./
RUN bun install
COPY . .
CMD ["bun", "run", "start"]
Upgrading Bun
# Upgrade to latest version
bun upgrade
# Upgrade to specific version
bun upgrade --version 1.0.0
# Upgrade to canary (nightly)
bun upgrade --canary
Project Initialization
Create New Project
# Interactive init
bun init
# With name
bun init my-app
# Skip prompts
bun init -y
Generated files:
my-app/
├── package.json
├── tsconfig.json
├── index.ts
└── README.md
Using Templates
# Create from template
bun create <template> <destination>
# React app
bun create react my-react-app
# Next.js app
bun create next my-next-app
# Vite app
bun create vite my-vite-app
# Express-like server
bun create hono my-api
Available templates:
react- React with Vitenext- Next.jsvite- Vitehono- Hono server frameworkelysia- Elysia server framework
Configuration
bunfig.toml
Create bunfig.toml in project root or ~/.bun/bunfig.toml globally:
# Install configuration
[install]
# Auto install peer dependencies
peer = true
# Production mode
production = false
# Registry
registry = "https://registry.npmjs.org"
# Cache directory
cache = "~/.bun/install/cache"
# Test configuration
[test]
# Preload files before tests
preload = ["./setup.ts"]
# Code coverage
coverage = true
# Default timeout
timeout = 5000
# Run configuration
[run]
# Shell for scripts
shell = "bash"
# Automatically install on bun run
autoInstall = true
Development Workflow
Running Files
# Run TypeScript directly
bun run index.ts
# Run with watch mode (hot reload)
bun --watch index.ts
# Run with environment variables
FOO=bar bun run index.ts
# Run from package.json script
bun run dev
REPL (Interactive Shell)
# Start REPL
bun
# In REPL:
> 2 + 2
4
> const data = await fetch("https://api.github.com").then(r => r.json())
> data
Package Scripts
package.json:
{
"scripts": {
"dev": "bun --watch src/index.ts",
"build": "bun build src/index.ts --outdir dist --minify",
"start": "bun dist/index.js",
"test": "bun test",
"lint": "eslint src"
}
}
Run scripts:
bun run dev
bun run build
bun run start
bun test # Shortcut (no "run" needed)
Environment Variables
.env File
# .env
DATABASE_URL=postgresql://localhost/mydb
API_KEY=secret123
NODE_ENV=development
Access in code:
// Bun-native (recommended)
const dbUrl = Bun.env.DATABASE_URL
// Node.js compatible
const apiKey = process.env.API_KEY
Load from different file:
bun --env-file=.env.production run index.ts
Quickstart Examples
Example 1: Simple HTTP Server
# Create project
bun init my-server
cd my-server
# Write server code
cat > index.ts << 'EOF'
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("Hello from Bun!")
},
})
console.log(`Server running at http://localhost:${server.port}`)
EOF
# Run server
bun --watch index.ts
Example 2: React App
# Create React app
bun create react my-react-app
cd my-react-app
# Install dependencies (if needed)
bun install
# Start dev server
bun run dev
Example 3: API with Database
# Create project
bun init my-api
cd my-api
# Install dependencies
bun add postgres
# Create database client
cat > db.ts << 'EOF'
import postgres from 'postgres'
export const sql = postgres(Bun.env.DATABASE_URL!)
EOF
# Create API
cat > index.ts << 'EOF'
import { sql } from './db'
const server = Bun.serve({
port: 3000,
async fetch(req) {
const url = new URL(req.url)
if (url.pathname === '/users') {
const users = await sql`SELECT * FROM users`
return Response.json(users)
}
return new Response('Not found', { status: 404 })
},
})
console.log(`API running at http://localhost:${server.port}`)
EOF
# Run with .env
bun --watch index.ts
Common Commands
# Version
bun --version
# Help
bun --help
# Run file
bun run file.ts
# Install dependencies
bun install
# Add package
bun add react
# Remove package
bun remove react
# Run tests
bun test
# Build for production
bun build index.ts --outdir dist
# Create executable
bun build index.ts --compile --outfile myapp
# Upgrade Bun
bun upgrade
# REPL
bun
# Execute package
bun x cowsay "Hello!"
Troubleshooting
Installation Issues
macOS: "command not found: bun"
# Add to shell profile
echo 'export BUN_INSTALL="$HOME/.bun"' >> ~/.zshrc
echo 'export PATH="$BUN_INSTALL/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Linux: Permission denied
# Give execute permission
chmod +x ~/.bun/bin/bun
Windows: Execution policy
# Allow script execution
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Common Errors
"Cannot find module"
# Install dependencies
bun install
# Or auto-install
bun run --install index.ts
"Port already in use"
# Find process using port
lsof -i :3000
# Kill process
kill -9 <PID>
Performance
Why Bun is fast:
- JavaScriptCore - Safari's JS engine (faster startup than V8)
- Zig - Built in Zig (low-level, fast)
- Native APIs - Optimized file I/O, HTTP, etc.
- No transpilation - Runs TypeScript natively
Benchmarks:
- 4x faster startup than Node.js
- 25x faster installs than npm
- 100x faster bundling than Webpack
- 20-40x faster tests than Jest
Search Helpers
# Find installation docs
grep -r "install\|setup" docs/bun/project/
# Find config docs
grep -r "bunfig\|config" docs/bun/project/
# Find init docs
grep -r "init\|create" docs/bun/project/
# List all quickstart docs
ls docs/bun/project/
Best Practices
- Use TypeScript - Bun runs it natively, no config needed
- Enable watch mode - Faster development with
--watch - Use bunfig.toml - Centralized configuration
- Leverage .env - Environment-specific config
- Use bun create - Scaffolding with templates
- Hot reload - Use
--hotfor instant updates - Profile performance - Use
bun:jscfor profiling
Next Steps
After setup:
- Build APIs → See bun-runtime skill
- Write tests → See bun-test skill
- Manage packages → See bun-package-manager skill
- Bundle for production → See bun-bundler skill
Notes
- Documentation covers latest Bun version
- Bun is compatible with Node.js APIs
- TypeScript works out of the box
- File paths reference local documentation cache
- For latest updates, check https://bun.sh/docs