
node-to-bun
Migrate Node.js projects to Bun with compatibility analysis. Use when converting existing npm/pnpm/yarn projects to Bun or auditing dependencies for Bun compatibility.
- Installs
- 45
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/daleseo/bun-skills --skill node-to-bun- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads node-to-bun automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Node.js to Bun Migration
You are assisting with migrating an existing Node.js project to Bun. This involves analyzing dependencies, updating configurations, and ensuring compatibility.
Migration Workflow
1. Pre-Migration Analysis
Check if Bun is installed:
bun --version
Analyze current project:
# Check Node.js version
node --version
# Check package manager
ls -la | grep -E "package-lock.json|yarn.lock|pnpm-lock.yaml"
Read package.json to understand the project structure.
2. Dependency Compatibility Check
Read and analyze all dependencies from package.json:
cat package.json
Check for known incompatible native modules:
Common problematic packages (check against current dependencies):
bcrypt→ Usebcryptjsor@node-rs/bcryptinsteadsharp→ Bun has native support, but may need version checknode-canvas→ Limited support, check version compatibilitysqlite3→ Usebun:sqliteinsteadnode-gypdependent packages → May require alternative pure JS versionsfsevents→ macOS-specific, usually optional dependencyesbuild→ Bun has built-in bundler, may be redundant
Check workspace configuration (for monorepos):
# Check if workspaces are defined
grep -n "workspaces" package.json
3. Generate Compatibility Report
Create a migration report file BUN_MIGRATION_REPORT.md:
# Bun Migration Analysis Report
## Project Overview
- **Name**: [project name]
- **Current Node Version**: [version]
- **Package Manager**: [npm/yarn/pnpm]
- **Project Type**: [app/library/monorepo]
## Dependency Analysis
### ✅ Compatible Dependencies
[List dependencies that are Bun-compatible]
### ⚠️ Potentially Incompatible Dependencies
[List dependencies that may have issues]
**Recommended Actions:**
- [Specific migration steps for each incompatible dependency]
### 🔄 Recommended Replacements
[List suggested package replacements]
## Configuration Changes Needed
### package.json
- [ ] Update scripts to use `bun` instead of `npm`/`yarn`
- [ ] Review and update `engines` field
- [ ] Check `type` field (ESM vs CommonJS)
### tsconfig.json
- [ ] Update `moduleResolution` to `"bundler"`
- [ ] Add `bun-types` to types array
- [ ] Set `allowImportingTsExtensions` to `true`
### Build Configuration
- [ ] Review webpack/rollup/esbuild config (may use Bun bundler)
- [ ] Update test runner config (use Bun test instead of Jest)
## Migration Steps
1. Install Bun dependencies
2. Update configuration files
3. Run tests to verify compatibility
4. Update CI/CD pipelines
5. Update documentation
## Risk Assessment
**Low Risk:**
[List low-risk changes]
**Medium Risk:**
[List items needing testing]
**High Risk:**
[List critical compatibility concerns]
4. Backup Current State
Before making changes:
# Create backup branch if in git repo
git branch -c backup-before-bun-migration
# Or suggest user commits current state
git add -A
git commit -m "Backup before Bun migration"
5. Update package.json
Read current package.json:
// Read and parse package.json
Update scripts to use Bun:
{
"scripts": {
"dev": "bun run --hot src/index.ts",
"start": "bun run src/index.ts",
"build": "bun build src/index.ts --outdir=dist",
"test": "bun test",
"typecheck": "bun run --bun tsc --noEmit",
"lint": "bun run --bun eslint ."
}
}
Update engines field:
{
"engines": {
"bun": ">=1.0.0"
}
}
For libraries, add exports field if not present:
{
"type": "module",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"require": "./dist/index.cjs"
}
}
}
6. Update tsconfig.json
Read current tsconfig:
cat tsconfig.json
Apply Bun-specific updates:
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"types": ["bun-types"],
"lib": ["ES2022"],
"jsx": "react-jsx",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"allowImportingTsExtensions": true,
"noEmit": true
}
}
Key changes explained:
moduleResolution: "bundler"→ Uses Bun's module resolutiontypes: ["bun-types"]→ Adds Bun's TypeScript definitionsallowImportingTsExtensions: true→ Allows importing.tsfiles directlynoEmit: true→ Bun runs TypeScript directly, no compilation needed
7. Handle Workspace Configuration
For monorepos with workspaces:
Verify workspace configuration is compatible:
{
"workspaces": [
"packages/*",
"apps/*"
]
}
Bun supports the same workspace syntax as npm/yarn/pnpm.
Check workspace dependencies:
# Verify workspace structure
find . -name "package.json" -not -path "*/node_modules/*"
8. Install Dependencies with Bun
Remove old lockfiles:
rm -f package-lock.json yarn.lock pnpm-lock.yaml
Install with Bun:
bun install
This creates bun.lockb (Bun's binary lockfile).
For workspaces:
bun install --frozen-lockfile # Equivalent to npm ci
9. Update Test Configuration
If using Jest, migrate to Bun test:
Create bunfig.toml for test configuration:
[test]
preload = ["./tests/setup.ts"]
coverage = true
coverageThreshold = 0.8
Update test files:
- Replace
import { test, expect } from '@jest/globals' - With
import { test, expect } from 'bun:test'
Jest compatibility notes:
- Most Jest APIs work out of the box
jest.mock()→ Usemock()frombun:test- Snapshot testing works the same
- Coverage reports may differ slightly
10. Update Environment Configuration
Check .env files:
ls -la | grep .env
Bun loads .env files automatically (same as dotenv package).
Update environment loading code:
- Remove
require('dotenv').config() - Bun loads
.envby default
11. Update Build Configuration
If using webpack/rollup/esbuild:
Consider replacing with Bun's built-in bundler:
// bun-build.ts
await Bun.build({
entrypoints: ['./src/index.ts'],
outdir: './dist',
minify: true,
splitting: true,
sourcemap: 'external',
target: 'bun',
});
Update build script in package.json:
{
"scripts": {
"build": "bun run bun-build.ts"
}
}
12. Update CI/CD Configuration
GitHub Actions example:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run tests
run: bun test
- name: Type check
run: bun run typecheck
- name: Build
run: bun run build
13. Verification Steps
Run these commands to verify migration:
# 1. Check dependencies installed correctly
bun install
# 2. Run type checking
bun run --bun tsc --noEmit
# 3. Run tests
bun test
# 4. Try development server
bun run dev
# 5. Test production build
bun run build
14. Update Documentation
Create or update these documentation sections:
README.md:
## Prerequisites
- [Bun](https://bun.sh) 1.0 or higher
## Installation
```bash
bun install
Development
bun run dev
Testing
bun test
**CHANGELOG.md entry:**
```markdown
## [Version] - [Date]
### Changed
- Migrated from Node.js/npm to Bun
- Updated all dependencies to Bun-compatible versions
- Replaced [specific packages] with [alternatives]
- Updated TypeScript configuration for Bun
Common Migration Issues & Solutions
Issue: Native Module Incompatibility
Symptoms:
error: Cannot find module "bcrypt"
Solution:
# Replace with pure JavaScript alternative
bun remove bcrypt
bun add bcryptjs
# Update imports
# Before: import bcrypt from 'bcrypt';
# After: import bcrypt from 'bcryptjs';
Issue: ESM/CommonJS Conflicts
Symptoms:
error: require() of ES Module not supported
Solution:
Add to package.json:
{
"type": "module"
}
Or use .mts extension for ES modules and .cts for CommonJS.
Issue: Path Alias Resolution
Symptoms:
error: Cannot resolve "@/components"
Solution:
Verify tsconfig.json paths match:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}
Bun respects TypeScript path aliases automatically.
Issue: Test Failures
Symptoms:
error: jest is not defined
Solution:
Update test imports:
// Before
import { describe, it, expect } from '@jest/globals';
// After
import { describe, it, expect } from 'bun:test';
Migration Checklist
Present this checklist to the user:
- Bun installed and verified
- Dependency compatibility analyzed
- Migration report reviewed
- Current state backed up (git commit/branch)
-
package.jsonscripts updated -
tsconfig.jsonconfigured for Bun - Old lockfiles removed
- Dependencies installed with
bun install - Test configuration migrated
- Tests passing with
bun test - Build process verified
- CI/CD updated for Bun
- Documentation updated
- Team notified of migration
Post-Migration Performance Verification
After migration, help user verify performance improvements:
# Compare install times
time bun install # Should be 3-10x faster than npm
# Compare test execution
time bun test # Should be faster than Jest
# Compare startup time
time bun run src/index.ts # Should be 90% faster than ts-node
Rollback Procedure
If migration encounters critical issues:
# Return to backup branch
git checkout backup-before-bun-migration
# Or restore original state
git reset --hard HEAD~1
# Reinstall original dependencies
npm install # or yarn/pnpm
Completion
Once migration is complete, provide summary:
- ✅ Migration status (success/partial/issues)
- ✅ List of changes made
- ✅ Performance improvements observed
- ✅ Any remaining manual steps
- ✅ Links to Bun documentation for ongoing development
FAQ
What does the node-to-bun skill do?
Migrate Node.js projects to Bun with compatibility analysis. Use when converting existing npm/pnpm/yarn projects to Bun or auditing dependencies for Bun compatibility.
How do I install node-to-bun?
Run npx skills add https://github.com/daleseo/bun-skills --skill node-to-bun in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/node-to-bun/ (personal) or .claude/skills/node-to-bun/ (project).
Which AI agents can use node-to-bun?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is node-to-bun safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains node-to-bun?
It is published by daleseo in daleseo/bun-skills. It has 45 recorded installs.
More from daleseo/bun-skills
bun-test
daleseo/bun-skills
Open the skill to read its SKILL.md instructions.
bun-build
daleseo/bun-skills
Open the skill to read its SKILL.md instructions.
bun-deploy
daleseo/bun-skills
Open the skill to read its SKILL.md instructions.
bun-dev-server
daleseo/bun-skills
Set up high-performance development servers with Hot Module Replacement. Use when creating dev servers for web apps, setting up React Fast Refresh, or configuring API servers with live reload.
bun-init
daleseo/bun-skills
Open the skill to read its SKILL.md instructions.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.