- Jarred Sumner - creator của Bun - vốn là Yarn user, và Yarn dùng `yarn add`, nên Bun cũng dùng `bun add` theo muscle memory của anh ấy.
- Khi Bun v0.1 ra mắt tháng 7/2022, feedback lớn nhất từ cộng đồng là: tại sao `bun install <pkg>` không chạy.
- Bun v1.3 hiện tại nhanh hơn npm 18 lần khi cold install, 89.7k GitHub stars, Anthropic dùng cho Claude Code.
TL;DR
Bun dùng bun add <pkg> để thêm package mới - không phải bun install <pkg>. Lý do? Jarred Sumner, creator của Bun, luôn dùng Yarn trước khi xây dựng Bun. Yarn thì có yarn add. Thế là Bun có bun add. Một quyết định thiết kế xuất phát từ thói quen cá nhân của một lập trình viên - và giờ hàng triệu developer phải nhớ theo.
Câu chuyện thật sự
Tuần này, Jarred Sumner đăng một tweet ngắn trên X, tiết lộ nguồn gốc của một trong những điểm gây nhầm lẫn nhất của Bun package manager:
"Khi Bun v0.1 ra mắt, một trong những feedback lớn nhất là: tại sao
bun install <pkg>không chạy? Tại sao tôi phải gõbun add <pkg>? Tôi luôn dùng Yarn - mà Yarn thì làm theo cách đó. Nên bây giờ tôi nghĩ đến điều này mỗi khi thấy ai gõcli add <pkg>."
Không phải triết lý thiết kế sâu xa. Không phải benchmark hay RFC. Chỉ là: creator dùng Yarn, nên anh ấy nghĩ add là chuẩn. Và Bun được xây dựng với logic đó từ những ngày đầu tiên.
bun add hay bun install - phân biệt cho rõ
Đây là điểm nhiều developer nhầm khi mới chuyển sang Bun, đặc biệt nếu xuất phát từ npm:
| Muốn làm gì | npm | Bun | Yarn | pnpm |
|---|---|---|---|---|
| Cài tất cả deps | npm install | bun install | yarn install | pnpm install |
| Thêm package mới | npm install <pkg> | bun add <pkg> | yarn add <pkg> | pnpm add <pkg> |
| Chạy package | npx <pkg> | bunx <pkg> | yarn dlx <pkg> | pnpm dlx <pkg> |
| CI reproducible | npm ci | bun ci | yarn install --immutable | pnpm install --frozen-lockfile |
npm là trường hợp đặc biệt: nó dùng install cho cả hai mục đích - cài tất cả và thêm mới. Yarn, pnpm, và Bun đều tách riêng hai lệnh này. Và cả ba đều dùng add để thêm package mới. Nếu bạn từng dùng Yarn hay pnpm trước khi đến với Bun, bạn sẽ thấy CLI của Bun hoàn toàn tự nhiên.
Từ v0.1 đến 89.7k stars
Bun v0.1.1 ra mắt ngày 5 tháng 7 năm 2022. Lúc đó, tool còn rất thô - có Web Streams, WebSocket global, dynamic require, và 50% nhanh hơn TextEncoder. Đủ để gây chú ý, cũng đủ để nhận về hàng đống feedback về CLI.
Ba năm sau, Bun đã là một câu chuyện khác. v1.0 ra mắt tháng 9 năm 2023, production-ready. Hiện tại là v1.3.13, với những con số đáng nể:
- Cold install: 0.8 giây so với npm 14 giây - nhanh hơn 18 lần
- Warm install với cache: 0.3 giây so với npm 8 giây
- 17 lần ít RAM hơn khi streaming tarballs xuống disk (v1.3.13)
- 48 network requests đồng thời mặc định khi install
- Dùng
clonefiletrên macOS,hardlinktrên Linux - fastest system calls có sẵn
89.7k GitHub stars. 896 contributor. 62k project dùng Bun làm dependency. Anthropic chạy Bun trong production cho Claude Code.
Bài học thiết kế từ một tweet
Câu chuyện của Jarred thú vị không phải vì nó giải thích một CLI quirk. Nó thú vị vì nó cho thấy cách API được sinh ra trong thực tế: từ thói quen, từ tool người tạo ra nó đang dùng hàng ngày, từ những quyết định không-ai-ngồi-xuống-để-quyết-định.
Khi bạn xây dựng một tool, những lựa chọn thiết kế của bạn phản chiếu mental model của chính bạn. Jarred dùng Yarn - nên Bun có bun add. Nếu anh ấy là npm user từ đầu, rất có thể hôm nay chúng ta đã gõ bun install <pkg> mà không ai phàn nàn gì.
Điều đó cũng có nghĩa: khi bạn thấy một CLI trông "kỳ lạ", rất có thể đằng sau nó là một câu chuyện như thế này - không phải thiếu suy nghĩ, mà là suy nghĩ được đặt trong một context khác với context của bạn.
Bạn có nên dùng Bun không?
Với project TypeScript mới: nên thử ngay. Native TS/JSX không cần config, install nhanh, một tool cho runtime, bundler, test runner và package manager.
Với project legacy cần 100% Node.js compat: chờ thêm. Bun hiện ~99% compatible, vẫn còn edge cases ở vm module và một số crypto methods.
Với CI/CD pipeline: rất đáng. 18 lần nhanh hơn npm nghĩa là pipeline ngắn hơn, cost thấp hơn. Bun có official GitHub Action (oven-sh/setup-bun) và Vercel support sẵn.
Và khi bạn chuyển sang dùng, nhớ một điều: bun add <pkg>, không phải bun install <pkg>. Bây giờ bạn đã biết tại sao.
Nguon: @jarredsumner tren X, Bun documentation, DeployHQ benchmark.
