· bun / deno / runtime

Bun vs Deno — Chọn JavaScript Runtime nào cho 2026?

Bun dẫn đầu về tốc độ và cloud primitives; Deno dẫn đầu về toolchain hoàn chỉnh và độ ổn định. Chọn runtime JavaScript phù hợp cho dự án tiếp theo của bạn.

Bởi Ethan · Cập nhật 20 tháng 5, 2026

2.228 từ · 12 phút đọc

Chọn Bun nếu bạn cần HTTP throughput cao nhất có thể, cold start nhanh nhất, hoặc một runtime tích hợp sẵn S3, Postgres, và Redis client ngay từ đầu. Chọn Deno nếu bạn muốn một toolchain hoàn chỉnh không cần cấu hình thêm, cơ chế kiểm soát quyền tường minh, và một platform hosting edge tích hợp sẵn. Cả hai đều chạy được npm package trong năm 2026 — điểm khác biệt nằm ở mọi thứ còn lại.

Bài viết này dành cho ai

Các lập trình viên JavaScript và TypeScript đang chọn runtime cho dự án mới trong năm 2026. Nếu bạn đang migrate từ Node.js, bài này sẽ chỉ ra con đường nào ít vấp váp hơn. Nếu bạn đã dùng một trong hai runtime và đang cân nhắc chuyển sang cái kia, hãy bỏ qua thẳng đến phần phù hợp nhất với mình.

Phiên bản tham chiếu

Tất cả kết quả dưới đây được đo với:

RuntimePhiên bảnNgày phát hành
Bun1.3.142026-05-13
Deno2.7.02026-02-25

Hiệu năng Bun vs Deno

HTTP throughput

Benchmark của BetterStack (phương pháp Bun HTTP Framework Benchmark, Express.js trên phần cứng giống nhau, năm 2026) cho thấy khoảng cách rõ ràng:

RuntimeHTTP req/s (Express)
Bun 1.3.x52.479
Deno 2.x22.286
Node.js 2213.254

Bun nhanh hơn Deno 2,4 lần với Express và nhanh hơn Node 4 lần.

TechEmpower FrameworkBenchmarks đã ngừng hoạt động từ ngày 2026-03-24. Hiện tại, benchmark cộng đồng là nguồn tham chiếu thực tế.

Các tác vụ khác (so với baseline Node.js)

Các client tích hợp của Bun vượt trội so với các package tương đương trong hệ sinh thái Node.js:

Tác vụBun so với package Node tương đương
S3 readsNhanh hơn 5× so với @aws-sdk/client-s3
Postgres readsNhanh hơn 1,5× so với node-postgres
RedisNhanh hơn 7,9× so với ioredis
DiffieHellman cryptoNhanh hơn 400×
React SSR (compiled standalone)Nhanh hơn 1,8× so với nginx

Khả năng tương thích với Node.js

Bun

Bun kiểm tra tính tương thích dựa trên test suite của Node.js v23 với mỗi commit. Với các module thường dùng:

  • Đã triển khai đầy đủ: assert, buffer, console, events (100%), fs (92%), http, https, net, os (100%), path (100%), stream, string_decoder (100%), url, zlib (98%)
  • Triển khai một phần: async_hooks, child_process, cluster, crypto, http2 (95,25% test gRPC), module, process, tls, util, v8, vm, worker_threads, inspector
  • Chưa triển khai: node:repl, node:trace_events (dùng bun:sqlite thay cho node:sqlite)

Lưu ý: tính năng load-balancing của node:cluster trên nhiều process chỉ hoạt động trên Linux qua SO_REUSEPORT. V8 heap snapshot dùng định dạng wire của JavaScriptCore thay vì V8 — điều này có thể làm hỏng một số workflow profiling.

Deno

Deno 2.0 đã hỗ trợ đầy đủ package.json, node_modules, và npm: specifier. Tính đến v2.7:

  • Hỗ trợ đầy đủ (22 module): assert, buffer, child_process, console, crypto, events, fs, module, os, path, readline, sqlite, stream, string_decoder, test, timers, tty, url, và các module khác
  • Hỗ trợ một phần (16 module): async_hooks, dgram, dns, http, http2, https, net, perf_hooks, process, tls, util, v8, vm, worker_threads, zlib, inspector
  • Stub không hoạt động (6 module): cluster, domain, repl, sea, trace_events, wasi

Deno hỗ trợ đầy đủ node:sqlitenode:test — hai thứ này còn thiếu hoặc chưa đầy đủ trong Bun. Ngược lại, Bun có ưu thế hơn với native addon: lớp tương thích V8 C++ API của Bun xử lý file .node tốt hơn flag --unstable-node-addons của Deno.

Kết luận thực tế: cả hai đều chạy được Next.js, Astro, Remix, SvelteKit, Express, Prisma, và gRPC mà không cần vá lỗi. Native addon phức tạp hoạt động tốt hơn trong Bun.

Để so sánh từng runtime với Node.js, xem Bun vs Node.jsDeno vs Node.js.

Hệ sinh thái

Quản lý package

Bun đi kèm bun install, bun add, bun remove, bun audit, bun why, và dependency catalog cho monorepo. Từ phiên bản 1.2, lockfile mặc định là bun.lock (JSONC, đọc được bằng mắt thường) thay cho binary bun.lockb cũ. bun install nhanh hơn 30% so với phiên bản 1.1.

Deno đi kèm deno add / deno remove và tích hợp với cả package.json lẫn deno.json. deno install benchmark cho thấy nhanh hơn npm 15% khi cache lạnh và 90% khi cache nóng.

Registry JSR của Deno (jsr.io) là nền tảng publish native TypeScript: package đi kèm TypeScript source và type info, không cần cài thêm @types/*. Năm 2026, JSR đang dần được chú ý nhưng kho hơn 2 triệu package của npm vẫn là nguồn mặc định của cả hai runtime.

Trải nghiệm lập trình

So sánh toolchain

Công cụBun 1.3Deno 2.7
TypeScript (native)
Test runnerbun testdeno test
Bundlerbun builddeno bundle (phục hồi trong 2.4)
Formatter❌ dùng Biome/Prettierdeno fmt (HTML, CSS, YAML, TS)
Linter❌ dùng ESLint/Biomedeno lint (plugin API từ 2.2)
REPL✅ (native từ 1.3.10)deno repl
Mô hình bảo mật❌ không giới hạn✅ cờ quyền tường minh

Test runner của Bun đã hoàn thiện: --parallel, --isolate, --shard, inline snapshot, expectTypeOf(), và tích hợp VS Code Test Explorer. Việc thiếu formatter và linter tích hợp không phải thảm họa — Biome bù đắp được cả hai — nhưng đây vẫn là điểm yếu.

Bun 1.3 còn bổ sung dev server HTML zero-config với HMR:

bun ./index.html

Lệnh đó khởi động dev server ngay, không cần file cấu hình nào.

Ví dụ code

HTTP server

// Bun 1.3 — native API
Bun.serve({
  port: 3000,
  routes: {
    "/": new Response("Hello from Bun!"),
    "/api/users": {
      GET: async () => Response.json({ users: [] }),
    },
    "/api/users/:id": async (req) => {
      const { id } = req.params;
      return Response.json({ id });
    },
  },
});
console.log("Listening on http://localhost:3000");
// Deno 2.x — native API
Deno.serve({ port: 3000 }, (req) => {
  const url = new URL(req.url);
  if (url.pathname === "/") return new Response("Hello from Deno!");
  if (url.pathname.startsWith("/api/users")) {
    return Response.json({ users: [] });
  }
  return new Response("Not Found", { status: 404 });
});

Đọc file

// Bun
const file = Bun.file("./data.json");
const data = await file.json();
const stat = await file.stat();
console.log(stat.size);

// Deno
const text = await Deno.readTextFile("./data.json");
const data = JSON.parse(text);
const stat = await Deno.stat("./data.json");
console.log(stat.size);

Test runner

// Bun — bun:test
import { test, expect } from "bun:test";

test("add numbers", () => {
  expect(1 + 1).toBe(2);
});

test("async fetch", async () => {
  const res = await fetch("https://example.com");
  expect(res.status).toBe(200);
});
// Deno — deno test
import { assertEquals } from "jsr:@std/assert";

Deno.test("add numbers", () => {
  assertEquals(1 + 1, 2);
});

Deno.test("async fetch", async () => {
  const res = await fetch("https://example.com");
  assertEquals(res.status, 200);
});

Triển khai

Nền tảng hosting

Deno có hệ sinh thái hosting tích hợp; Bun thì không.

Deno Deploy (console.deno.com) chạy trên mô hình V8 isolate với cold start nhanh hơn lambda truyền thống và gói miễn phí khá hào phóng. Một điểm cần chú ý: Deno Deploy Classic (dash.deno.com) sẽ dừng hoạt động vào ngày 2026-07-20. Nếu bạn đang dùng Classic, hãy migrate sang console mới trước ngày đó.

Bun triển khai qua Docker container hoặc các platform hỗ trợ custom runtime: Fly.io, Render, Railway, Vercel (Vercel đã tích hợp Bun natively cho Next.js từ cuối năm 2025). Tính đến tháng 5 năm 2026, Oven/Anthropic chưa ra mắt dịch vụ edge hosting chính thức.

Edge runtime

PlatformBunDeno
Cloudflare Workers⚠️ Dùng Bun làm bundler; Workers chạy V8 isolate✅ Tài liệu + hướng dẫn chính thức
AWS Lambda✅ Custom layer hoặc Docker✅ Docker hoặc WASM
Vercel✅ Native Next.js
Supabase Edge Functions✅ Chạy trên Deno
Deno Deploy✅ Native

Với Cloudflare Workers, Deno có tài liệu chính thức và hướng dẫn cụ thể. Bun có thể tạo output bundle nhưng bản thân Workers runtime là V8 — bạn không thực sự chạy Bun trên production ở đây.

Độ ổn định

Issue mở (GitHub, tháng 5 năm 2026)

Chỉ sốBunDeno
Stars92.079106.790
Issue mở6.9832.257

Deno có ít issue mở hơn Bun tới 3 lần, dù có nhiều star hơn. Bun release liên tục và tích lũy nhiều bug chưa giải quyết hơn. Với workload không quá đặc thù, cả hai đều ổn; tuy nhiên khoảng cách này đáng lưu ý nếu bạn chạy production và không thể chịu đựng lỗi bất ngờ.

Nhịp độ phát hành

Bun: cập nhật nhanh. Các major release (1.1, 1.2, 1.3) ra mắt khoảng mỗi quý; patch hàng tuần hoặc hai tuần một lần.

Deno: mỗi tháng một minor release — từ 2.1 đến 2.7 ra mắt trong khoảng chín tháng. Deno giới thiệu mô hình LTS từ phiên bản 2.1 với cửa sổ vá lỗi 6 tháng. Nếu bạn cần một target ổn định cho triển khai doanh nghiệp, LTS của Deno là lựa chọn duy nhất giữa hai runtime này.

Quản trị

Khía cạnhBunDeno
LicenseMITMIT
Chủ sở hữuOven (công ty con của Anthropic từ ngày 2025-12-02)Deno Land Inc.
Người sáng lậpJarred SumnerRyan Dahl (người tạo Node.js ban đầu)

Bun gia nhập Anthropic ngày 2025-12-02. Anthropic dùng Bun để vận hành Claude Code và Claude Agent SDK — đây là bằng chứng production đáng kể và đi kèm nguồn tài chính vững chắc. Đánh đổi là rủi ro tập trung vào một thực thể duy nhất: một công ty kiểm soát cả runtime, các tích hợp hosting chính, lẫn use case production chủ đạo.

Deno Land được VC rót vốn và có lợi nhuận từ SaaS Deno Deploy. Ryan Dahl là người tạo ra Node.js trước khi xây dựng Deno, điều này mang lại uy tín trong việc tư duy dài hạn về runtime. Cả hai dự án đều chưa có mô hình quản trị kiểu OpenJS Foundation.

Kết luận

Chọn Bun nếu:

  • HTTP throughput thuần là ưu tiên — 52.479 req/s so với 22.286 req/s là khoảng cách không nhỏ
  • Cold start nhanh là yêu cầu bắt buộc (serverless, CLI tool) — engine JavaScriptCore của Bun ưu tiên tốc độ khởi động
  • Bạn muốn S3, Postgres, và Redis client tích hợp sẵn mà không cần cài thêm package
  • Bạn cần dev server full-stack với HMR không cần cấu hình
  • Bạn đang build standalone executable compile từ TypeScript
  • Team của bạn đang dùng toolchain Anthropic/Claude Code
  • Bạn cần thay thế trực tiếp Node.js (ít stub module hơn, hỗ trợ native addon tốt hơn)

Chọn Deno nếu:

  • Bạn muốn một binary duy nhất lo hết format, lint, bundle, và test — không cần công cụ riêng lẻ
  • Bảo mật là ưu tiên: cờ quyền tường minh ngăn chặn truy cập file hoặc mạng ngoài ý muốn
  • Bạn muốn hosting edge không cần DevOps — Deno Deploy là con đường đơn giản nhất để triển khai toàn cầu
  • Bạn cần LTS track cho workload doanh nghiệp hoặc môi trường regulated
  • Bạn publish TypeScript library và muốn mô hình type-in-registry của JSR
  • Bạn triển khai trên Supabase Edge Functions hoặc muốn tích hợp Cloudflare Workers gọn gàng nhất
  • Ít bug hơn quan trọng hơn hiệu năng cực đại

Lưu ý

Các benchmark trên đến từ bài test năm 2026 của BetterStack sử dụng Express.js. TechEmpower, vốn là benchmark khắt khe nhất, đã ngừng hoạt động từ ngày 2026-03-24, nên dữ liệu cộng đồng hiện là nguồn tham chiếu tốt nhất hiện có.

Cả hai runtime đều không phải Node.js. Cả hai đều có coverage module chưa đầy đủ. Trước khi cam kết, hãy kiểm tra các dependency quan trọng của bạn với ma trận tương thích của từng runtime (Bun, Deno).

Bài viết này có chứa affiliate link đến Cloudflare Workers. toolchew nhận hoa hồng nếu bạn đăng ký qua các link đó.

Tài liệu tham khảo