xiaohongshu
xiaohongshu
deno-to-bun
Migrate Deno projects to Bun with API compatibility analysis. Use when converting Deno.* APIs to Bun equivalents, migrating from Deno Deploy, or updating permissions model and import maps.
Full skill instructions
You are assisting with migrating an existing Deno project to Bun. This involves converting Deno APIs, updating configurations, and adapting to Bun's runtime model.
For detailed patterns, see:
Check if Bun is installed:
bun --version
Analyze current Deno project:
# Check Deno version
deno --version
# Check for deno.json/deno.jsonc
ls -la | grep -E "deno.json|deno.jsonc"
# List permissions used
grep -r "deno run" .
Read deno.json or deno.jsonc to understand the project configuration.
Common Deno APIs and their Bun equivalents:
// Deno
const text = await Deno.readTextFile("file.txt");
await Deno.writeTextFile("file.txt", "content");
// Bun
const text = await Bun.file("file.txt").text();
await Bun.write("file.txt", "content");
// Deno
Deno.serve({ port: 3000 }, (req) => {
return new Response("Hello");
});
// Bun
Bun.serve({
port: 3000,
fetch(req) {
return new Response("Hello");
},
});
// Deno
const value = Deno.env.get("KEY");
// Bun (same as Node.js)
const value = process.env.KEY;
// Deno
const data = await Deno.readTextFile("data.json");
const json = JSON.parse(data);
// Bun
const json = await Bun.file("data.json").json();
For complete API mapping, see api-mapping.md.
Convert deno.json to package.json and bunfig.toml:
deno.json:
{
"tasks": {
"dev": "deno run --allow-net --allow-read main.ts",
"test": "deno test"
},
"imports": {
"oak": "https://deno.land/x/[email protected]/mod.ts"
},
"compilerOptions": {
"lib": ["deno.window"]
}
}
package.json (Bun):
{
"name": "my-bun-project",
"type": "module",
"scripts": {
"dev": "bun run --hot main.ts",
"test": "bun test"
},
"dependencies": {
"hono": "^3.0.0"
}
}
bunfig.toml:
[test]
preload = ["./tests/setup.ts"]
Deno imports:
// Deno - URL imports
import { serve } from "https://deno.land/[email protected]/http/server.ts";
import { oak } from "https://deno.land/x/[email protected]/mod.ts";
Bun imports:
// Bun - npm packages
import { Hono } from "hono";
// Or for std library equivalents, use npm packages
Common replacements:
deno.land/std/http → hono or native Bun.servedeno.land/x/oak → hono or expressdeno.land/std/testing → bun:testdeno.land/std/path → Node.js path moduleDeno permissions:
deno run --allow-read --allow-write --allow-net main.ts
Bun (no permission system):
bun run main.ts # Full system access by default
Security implications:
For detailed permission migration, see permissions.md.
Deno allows extension-less imports:
// Deno
import { helper } from "./utils"; // Resolves to utils.ts
Bun requires extensions:
// Bun
import { helper } from "./utils.ts"; // Explicit extension
Deno test:
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
Deno.test("example", () => {
assertEquals(1 + 1, 2);
});
Bun test:
import { test, expect } from "bun:test";
test("example", () => {
expect(1 + 1).toBe(2);
});
Create or update package.json:
{
"name": "migrated-from-deno",
"type": "module",
"scripts": {
"dev": "bun run --hot main.ts",
"start": "bun run main.ts",
"test": "bun test"
},
"dependencies": {
"hono": "^3.0.0"
}
}
# Remove deno.lock if present
rm deno.lock
# Install Bun dependencies
bun install
Create tsconfig.json:
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"types": ["bun-types"],
"lib": ["ES2022"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"allowImportingTsExtensions": true,
"noEmit": true
}
}
Deno:
Deno.serve({ port: 3000 }, (req) => {
const url = new URL(req.url);
if (url.pathname === "/") {
return new Response("Hello");
}
return new Response("Not found", { status: 404 });
});
Bun:
Bun.serve({
port: 3000,
fetch(req) {
const url = new URL(req.url);
if (url.pathname === "/") {
return new Response("Hello");
}
return new Response("Not found", { status: 404 });
},
});
Deno:
const file = await Deno.open("file.txt");
const decoder = new TextDecoder();
const content = decoder.decode(await Deno.readAll(file));
file.close();
Bun:
const content = await Bun.file("file.txt").text();
Deno:
const apiKey = Deno.env.get("API_KEY");
Deno.env.set("NEW_VAR", "value");
Bun:
const apiKey = process.env.API_KEY;
process.env.NEW_VAR = "value"; // Note: Setting at runtime doesn't persist
Deno:
const command = new Deno.Command("ls", {
args: ["-la"],
});
const { stdout } = await command.output();
Bun:
import { $ } from "bun";
const output = await $`ls -la`.text();
Run these commands to verify migration:
# 1. Install dependencies
bun install
# 2. Type check
bun run --bun tsc --noEmit
# 3. Run tests
bun test
# 4. Try development server
bun run dev
# 5. Test production build (if applicable)
bun run build
Present this checklist to the user:
bun installbun testDeno.* APIs (use Bun/Node equivalents)Once migration is complete, provide summary:
Suggest to the user:
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience