- Bun v1.3.13 cập nhật bun test với --isolate, --parallel, --changed, --shard, giảm memory bun install 17x, source map 8x và runtime 5%.
- 82 issue được fix, nhờ 8 contributor.
- Bản release hướng tới reliability và monorepo ở quy mô thật.
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:
--isolatechạ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/Nchia 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--changedvà--randomize.--changedchỉ chạy test bị ảnh hưởng bởi git change. Phân tích import graph mà không vàonode_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 và --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ục | Trước | Sau | Cải thiện |
|---|---|---|---|
| (v1.3.12) | (v1.3.13) | ||
| bun install memory (repo lớn) | baseline | baseline ÷17 | 17× ít hơn |
| Isolated linker install (monorepo) | 20.5s | 2.4s | ~8.5× |
| Source map resident (tsc.js, 563k mappings) | 11.3 MB | 1.29 MB | 8.7× |
First .stack trên module 150k dòng | ~5 ms | ~0.1 ms | 98% nhanh hơn |
| RSS stack trace overhead | +2.3 MB | +0.06 MB | ~38× |
| deflate (zlib-ng) | 373 µs | 68 µs | 5.48× |
| gzipSync | 275 µs | 107 µs | 2.59× |
Array iteration (expect.toContain) | 11,493 ns | 8,031 ns | 1.43× |
| Runtime memory baseline | 100% | 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 installgiờ chạy được trên máy 512MB RAM nhờ streaming tarball. Không còn OOM khi installnext,playwright, v.v. - TDD loop:
bun test --changed --watchchỉ 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; X25519deriveBitshoà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
--isolatecò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 --compilebinary 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=1nế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.
