TL;DR

Bun phát hành v1.3.13 ngày 20/04/2026 với loạt nâng cấp hướng đến đội dev làm việc trên codebase lớn: bun test có 4 flag mới kiểu Jest/Vitest (--isolate, --parallel, --changed, --shard), bun install dùng ít bộ nhớ hơn 17 lần, source map tiết kiệm 8 lần memory, runtime giảm 5% baseline. Bản này fix 82 issue (xử lý 381 báo cáo), đóng góp bởi 8 contributor.

Có gì mới

Bốn flag mới cho bun test biến nó thành một test runner đúng nghĩa cho CI quy mô lớn:

  • --isolate chạy mỗi file test trong một global object mới trong cùng process. Giữa các file, Bun drain microtasks, đóng socket, cancel timer, kill subprocess, tạo global sạch. Có VM-level transpilation cache: dependency dùng chung chỉ parse 1 lần.
  • --parallel[=N] chia file test ra tối đa N worker process (mặc định = số CPU). Worker rảnh ăn trộm việc từ queue bận nhất (work-stealing). Output serialize chặt để không bị interleave. Worker chạy sẵn với --isolate.
  • --shard=M/N chia test cho nhiều CI runner, cú pháp giống Jest/Vitest/Playwright. Index 1-based, round-robin theo path đã sort. Compose tự nhiên với --changed--randomize.
  • --changed chỉ chạy test bị ảnh hưởng bởi git change. Phân tích import graph mà không vào node_modules, không cần link hay emit code. Kết hợp --watch để feedback loop TDD cực nhanh.

--isolate hiện là experimental, ba flag còn lại stable. Tất cả tương thích với --bail, --randomize, JUnit, LCOV, snapshot.

Vì sao quan trọng

Bun đang trực tiếp ép sân Jest/Vitest/Playwright ở lớp CI — nơi --shard--parallel là điều kiện sống còn cho bất cứ repo nào chạy hàng ngàn test. Mặt khác, giảm memory 17× cho bun install nghĩa là CI runner cũ và monorepo peer-heavy cuối cùng cũng dừng crash. Đây là bản release có cảm giác engineered for production hơn nhiều so với các bản bật feature trước đó.

Technical facts

Hạng mụcTrướcSauCải thiện
(v1.3.12)(v1.3.13)
bun install memory (repo lớn)baselinebaseline ÷1717× ít hơn
Isolated linker install (monorepo)20.5s2.4s~8.5×
Source map resident (tsc.js, 563k mappings)11.3 MB1.29 MB8.7×
First .stack trên module 150k dòng~5 ms~0.1 ms98% nhanh hơn
RSS stack trace overhead+2.3 MB+0.06 MB~38×
deflate (zlib-ng)373 µs68 µs5.48×
gzipSync275 µs107 µs2.59×
Array iteration (expect.toContain)11,493 ns8,031 ns1.43×
Runtime memory baseline100%95%-5%

Dưới mui còn có: 1,316 commit JavaScriptCore upstream được merge (IC cho array.length = N, undefined/true/false/null làm property key, string length folding DFG/FTL, toUpperCase JIT intrinsic, SIMD identifier parsing), mimalloc v2 → v3, libpas scavenger trên Windows & Linux, zlib-ng 2.3.3 với SIMD runtime-dispatched (AVX-512, AVX2, SSE2, NEON, SVE, RISC-V V).

So với Jest/Vitest

Điểm đáng chú ý: Bun chọn cú pháp --shard=M/N giống y Jest/Vitest/Playwright và set luôn JEST_WORKER_ID + BUN_TEST_WORKER_ID làm env var. Nghĩa là một script CI đang chạy Jest có thể đổi command sang bun test --shard=$SHARD/$TOTAL --parallel gần như drop-in. --changed thì tương đương Jest --onlyChanged nhưng phân tích import graph không cần TypeScript emit.

Use cases thực tế

  • Monorepo peer-heavy: install 20.5s → 2.4s nhờ isolated linker — dừng hẳn vụ install hang trên các repo có pnpm-style peer tree.
  • CI runner nhỏ/cũ: bun install giờ chạy được trên máy 512MB RAM nhờ streaming tarball. Không còn OOM khi install next, playwright, v.v.
  • TDD loop: bun test --changed --watch chỉ rerun test liên quan file vừa sửa. Mỗi lần restart lại query git, nên workset luôn tươi.
  • Streaming/file server: Bun.serve() nay hỗ trợ HTTP Range request (206 Partial Content, 416 khi invalid) cho cả static route lẫn dynamic handler — ideal cho video, audio, large asset. Kết hợp gzip 5.5× nhanh hơn.
  • Crypto: SHA3-224/256/384/512 trong WebCrypto & node:crypto; X25519 deriveBits hoàn chỉnh key agreement. BoringSSL được update kèm ML-KEM + ML-DSA (NIST FIPS 203/204) — post-quantum đã nằm sẵn ở tầng lib cho tương lai.

Limitations & pricing

  • --isolate còn là experimental.
  • Format source map mới nén xong to hơn VLQ ~20% — nhưng server-side JS hiếm khi nén sourcemap, trade-off hợp lý. Ngược lại, bun build --compile binary lại nhỏ đi ~1.8 MB cho source map lớn nhờ zero-copy embed.
  • Source map lookup chậm hơn ~6% (bù lại decode gần như 0).
  • Streaming install có thể tắt qua BUN_FEATURE_FLAG_DISABLE_STREAMING_INSTALL=1 nếu gặp vấn đề.
  • Giá: Bun open source (MIT), miễn phí. 28 asset binary cho macOS (x64 + aarch64), Linux (x64 + aarch64, glibc + musl), Windows (x64 + aarch64).

What's next

Ba tín hiệu rõ về roadmap: (1) --isolate sẽ graduated từ experimental sau khi hấp thụ feedback; (2) post-quantum crypto (ML-KEM, ML-DSA) đã nằm ở tầng BoringSSL, sớm muộn cũng lộ qua Web Crypto API; (3) cadence merge JSC upstream đều đặn cho thấy Bun tiếp tục cưỡi performance curve của WebKit.

Nâng cấp bằng bun upgrade. Nguồn: bun.com blog, GitHub release, @bunjavascript.