· javascript / typescript / linting
Oxc vs Biome — toolchain JS nào dùng được cho production?
Biome thắng cho dự án mới, Oxc thắng cho codebase ESLint lớn. Cả hai nhanh hơn ESLint 10–62×. Benchmark, so sánh tính năng, và hướng dẫn migration.
Bởi Ethan · Cập nhật 1 tháng 6, 2026
2.206 từ · 12 phút đọc
Biome nếu bạn đang bắt đầu dự án mới hoặc muốn một lệnh duy nhất xử lý cả lint, format, và sắp xếp import mà không cần config. Oxlint nếu bạn có codebase ESLint lớn và muốn tăng tốc ngay mà không phải thay đổi toàn bộ. Vite+ (bundle sẵn Oxlint + Oxfmt + Rolldown) nếu stack của bạn đã dùng hệ sinh thái Vite — Vite 8 đã chạy Oxc sẵn rồi, nên hoàn thiện thêm phần còn lại là chuyện nhỏ.
Bài này dành cho ai
Các JS/TS developer ở mức mid đến senior đang cân nhắc có nên bỏ ESLint và Prettier để chuyển sang toolchain Rust không. Nếu bạn đang hài lòng với tốc độ ESLint hiện tại và không chạy CI trên monorepo lớn, việc nâng cấp này sẽ không tạo ra nhiều khác biệt.
Chúng tôi thử nghiệm cái gì
Biome v2.4 (tháng 2/2026) — 502 lint rule, Biotype (type-aware linting không cần TSC), 97% tương thích Prettier, plugin GritQL, HTML formatter (thử nghiệm). Oxlint v1.0 (stable từ 10/6/2025) với JS Plugins alpha (tháng 3/2026) — 650+ rule Rust native cộng thêm lớp tương thích plugin ESLint. Oxfmt beta (tháng 2/2026) — vượt 100% test conformance của Prettier cho JS/TS. Cả hai tool được thử trên benchmark cộng đồng với codebase thực tế; repo benchmark chính thức là oxc-project/bench-linter và oxc-project/bench-formatter.
So sánh tính năng Oxc vs Biome
Tình trạng hiện tại của từng tool:
| Tính năng | Biome v2.4 | Oxlint v1.0 + Oxfmt beta |
|---|---|---|
| Linting | ✅ 502 rule | ✅ 650+ rule |
| Formatting | ✅ 97% tương thích Prettier | ✅ 100% tương thích Prettier JS/TS (beta) |
| Type-aware linting | ✅ Biotype (không cần TSC) | ✅ qua tsgo (cần cài TypeScript) |
| Sắp xếp import | ✅ | ✅ (qua Oxlint) |
| CSS | ✅ | Một phần (Oxfmt tập trung JS/TS) |
| GraphQL | ✅ | ❌ |
| HTML | ✅ Thử nghiệm | ✅ Oxfmt beta |
| Vue/Svelte/Astro | Thử nghiệm | Hạn chế |
| Bundling | ❌ Ngoài phạm vi | ✅ Rolldown (mặc định của Vite 8) |
| Transpilation | ❌ | ✅ Oxc Transformer |
| Minification | ❌ | ✅ Oxc Minifier |
| Một file config duy nhất | ✅ biome.json | ❌ Config riêng cho từng tool |
| Tương thích plugin ESLint | Tập con chọn lọc | ✅ JS Plugins alpha (80% coverage) |
| Plugin GritQL | ✅ | ❌ |
| Type checking không cần cài TypeScript | ✅ Biotype | ❌ cần TypeScript |
Điểm khác biệt cốt lõi: Biome là linter + formatter all-in-one với phạm vi cố tình giới hạn. Oxc là toolchain đầy đủ (parse, lint, format, transform, bundle, minify) xây trên một AST dùng chung. Hai cái này không hẳn cùng danh mục sản phẩm; sự so sánh thực ra là bạn chấp nhận đánh đổi DX nào.
Benchmark tốc độ
Linting
Từ repo oxc-project/bench-linter chính thức (codebase VS Code, MacBook Pro M2 Max 12 core):
| Tool | Thời gian | So với ESLint |
|---|---|---|
| Oxlint (multi-thread) | 499.6 ms | ~62× nhanh hơn |
| Oxlint (single-thread) | 1.824 ms | ~17× nhanh hơn |
| Biome | ~10–25× nhanh hơn ESLint (benchmark cộng đồng) | — |
| ESLint | 31.025 ms | baseline |
Thời gian ESLint dao động 20.957–31.025 ms tùy phần cứng; Oxlint đạt ~118× trên máy nhiều core hơn (benchmark M4 Max). Oxlint nhanh hơn Biome khoảng 2× trong workload lint thuần. Trên codebase thực tế, khoảng cách này giữ nguyên:
- Airbnb: 126.000+ file trong 7 giây.
- Mercedes-Benz: giảm 71% thời gian lint trung bình; một số dự án giảm 97%.
Formatting
Từ oxc-project/bench-formatter (Biome 2.4.15, Oxfmt 0.52.0, Prettier 3.8.3):
| Benchmark | Oxfmt vs Prettier | Biome vs Prettier |
|---|---|---|
| File đơn lớn (TypeScript parser.ts, ~540KB) | 5.9× nhanh hơn | 5.6× nhanh hơn |
| Codebase JS/TS (repo Outline) | 36.6× nhanh hơn | 11.3× nhanh hơn |
Oxfmt nhanh hơn Biome 1.1–3.2× tùy kích thước codebase — khoảng cách này mở rộng đáng kể trên repo nhiều file lớn. Mức tăng tốc 35× so với Prettier là của Oxfmt trên codebase JS/TS; lợi thế của Biome là 5.6–11.3× tùy loại và kích thước file. Về Prettier compat: Biome đạt 97% (có một số khác biệt có chủ ý về tab/space mặc định và một số trường hợp đặc biệt về dấu nháy). Oxfmt vượt qua 100% test conformance JavaScript và TypeScript của Prettier tính đến beta tháng 2/2026.
Type-aware linting
Cả hai cách đều rút ngắn vòng lặp type-checking 7 phút thông thường (TSC + typescript-eslint trên monorepo) xuống dưới 1.5 giây trên dự án thực tế (benchmark tháng 7/2025, Jökull Sólberg, monorepo TripToJapan.com). Cơ chế khác nhau:
- Biome Biotype: một Rust type synthesizer tùy chỉnh, tái triển khai TypeScript type inference mà không cần TypeScript compiler. Không cần cài TypeScript. Hiện tại có ít rule —
noFloatingPromiseslà rule đầu tiên ra mắt, bắt được ~75% trường hợp màtypescript-eslintgắn cờ cho pattern đó (theo benchmark v2). Nhiều rule hơn trong roadmap 2026. - Oxlint type-aware: bọc
tsgo(bản Go của TypeScript compiler do Microsoft phát triển) để chạy 43 rule có giá trị cao từ typescript-eslint. Cần cài TypeScript local. Độ chính xác đến từ type checker chính thức thay vì một bản tái triển khai.
⚠️ Con số 1.5s là từ benchmark tháng 7/2025, trước Biome v2 và Oxlint 1.0. Cả hai tool đã có nhiều thay đổi lớn kể từ đó. Hãy chạy lại benchmark trên codebase của bạn trước khi quyết định.
Độ phức tạp khi chuyển đổi
Chuyển sang Biome
Biome có sẵn tooling hỗ trợ migration tự động:
# Chuyển đổi .eslintrc + .eslintignore → biome.json
biome migrate eslint --write
# Chuyển đổi .prettierrc → biome.json
biome migrate prettier --write
Hỗ trợ TypeScript ESLint, ESLint JSX A11y, ESLint React, và ESLint Unicorn. Config ESLint dạng YAML chưa được hỗ trợ tự động. Sau migration, biome check xử lý cả lint + format + sắp xếp import trong một lần chạy.
Những hạn chế cần lưu ý:
- ESLint có hơn 4.000 community plugin. Biome triển khai một tập con chọn lọc và không có shim tương thích cho plugin tùy ý.
- SCSS chưa được hỗ trợ (dự kiến năm 2026).
- HTML và Markdown formatting vẫn đang thử nghiệm; hỗ trợ Vue/Svelte/Astro nằm trong roadmap 2026.
- 97% tương thích Prettier nghĩa là ~3% diff formatting khi chạy lần đầu — chuẩn bị cho một initial diff nhiễu.
Phù hợp nhất với: team muốn đánh đổi sự phong phú của plugin ESLint để đổi lấy toolchain đơn giản hơn. Dự trù 2–3 tuần để migration trên repo lớn, xử lý các gap về rule và plugin tùy chỉnh. Xem hướng dẫn migration từ ESLint và Prettier sang Biome để có walkthrough chi tiết các trường hợp edge case.
Chuyển sang Oxlint
Oxlint được thiết kế như một bổ sung từng bước cho ESLint, không phải buộc bạn thay thế ngay:
# Thêm Oxlint như một cổng kiểm tra nhanh trước ESLint; ESLint vẫn chạy
npx oxlint src/
Với JS Plugins alpha (tháng 3/2026), câu chuyện thay đổi: “80% người dùng ESLint có thể chuyển sang Oxlint và dùng được ngay.” Tỷ lệ pass test tương thích plugin:
| Plugin | Số test | Tỷ lệ pass |
|---|---|---|
| ESLint built-in | 33.006 | 100% |
| React hooks | 5.007 | 100% |
| ESLint Stylistic | 18.310 | 99.99% |
| Testing Library | 17.016 | 100% |
Oxfmt cũng có migration config từ Prettier và Biome:
# Tạo oxfmt.config.ts từ Prettier config của bạn
oxfmt migrate --from prettier
Hạn chế: hỗ trợ template Vue, Svelte, và Angular còn hạn chế. Rule type-aware tùy chỉnh không được hỗ trợ trong chế độ JS plugin. Windows có một số trường hợp hết bộ nhớ trên repo rất lớn.
Phù hợp nhất với: codebase lớn mà bỏ ESLint một lần là quá rủi ro. Chạy Oxlint song song, migrate rule từng bước, cắt hẳn khi đã tự tin về coverage.
Sức khỏe hệ sinh thái
Biome
- GitHub stars: 24.494
- npm downloads hàng tháng: 15M+ (tháng 1/2026); ~8,8M hàng tuần (tháng 5/2026)
- Hỗ trợ editor: VS Code, IntelliJ IDEA, WebStorm, Zed, Neovim, Helix
- Công ty lớn đang dùng: Vercel, Astro, Node.js, AWS, Cloudflare, Coinbase, Discord, Google, Microsoft, Slack
- Tốc độ release: v2.0 → v2.4 trong ~8 tháng (tháng 6/2025 → tháng 2/2026)
- Cấu trúc tổ chức: cộng đồng dẫn dắt; Depot là nhà tài trợ platinum; Vercel có quan hệ đối tác chính thức về type inference
Biome là fork của dự án Rome đã bị Meta bỏ. Hôm nay nó có lượng cộng đồng lớn hơn Rome từng đạt được. Quan hệ đối tác với Vercel trên Biotype là tín hiệu đáng chú ý — kỹ sư Vercel đóng góp thời gian engineering thực sự, không chỉ tiền. Đọc đánh giá Biome 2 để xem chi tiết những gì đã thay đổi trong bản v2.
Oxc / VoidZero
- Oxlint downloads hàng tuần: ~6,7M (tháng 5/2026)
- Công ty lớn đang dùng: Shopify (admin console), Airbnb (126k+ file), Mercedes-Benz, Bun, Preact, Vue.js core, Vercel Turborepo, Sentry, HuggingFace.js
- Hỗ trợ editor: VS Code (extension riêng), IntelliJ, WebStorm, Zed
- Hậu thuẫn tài chính: VoidZero Inc. (VC-backed; công ty của Evan You)
- Đòn bẩy hệ sinh thái: Vite 8 dùng Rolldown làm bundler mặc định — mọi người dùng Vite đều đang chạy Oxc rồi
Kết nối với Vite là sự thật cấu trúc quan trọng nhất về quỹ đạo của Oxc. Mọi dự án Vite 8 đều đã là dự án Rolldown. Thêm Oxlint + Oxfmt là mở rộng ngang, không phải quyết định adoption mới. CLI vp của VoidZero (Vite+, open-source từ tháng 3/2026) bundle tất cả vào một lệnh: Vite, Vitest, Oxlint, Oxfmt, Rolldown, và tsdown. Về phía bundler, xem Turbopack vs Vite — bài đó phân tích vị trí của Rolldown trong bức tranh bundler.
Kết luận
Dự án mới hoặc greenfield: Biome
Bắt đầu không cần config. Một file biome.json duy nhất. Một lệnh (biome check) cho lint + format + sắp xếp import. Type-aware linting không cần cài TypeScript. Vercel, Astro, và Node.js đang dùng trong production.
Ngoại lệ: nếu dự án dùng Vite và bạn muốn lint + format + bundle + test từ một CLI duy nhất, Vite+ (Oxc) là lựa chọn tự nhiên — và bạn đã chạy Rolldown rồi.
Codebase lớn đã có sẵn: Oxlint (từng bước)
Thêm Oxlint chạy song song với ESLint. Nó bắt được 80%+ lỗi chỉ trong mili giây trong khi ESLint lo phần còn lại. Không cần config migration ngay từ đầu. Khi độ tự tin về coverage đủ lớn, cắt ESLint từng rule một. biome migrate eslint --write của Biome là con đường thay thế hoàn toàn mượt mà nhất nếu bạn muốn làm một lần, nhưng hãy dự trù 2–3 tuần cho gap về rule và plugin tùy chỉnh.
Monorepo
Biome có nested config tự nhiên qua "root": false và cú pháp "extends": "//" — hoạt động ngay mà không cần tooling thêm. Vite+ xử lý task orchestration trong monorepo với dependency resolution và caching cho repo Vite.
Kết quả: Biome cho đơn giản về repo config; Vite+ cho monorepo Vite.
Lưu ý
Các con số về type-aware linting (1.5s) đến từ benchmark tháng 7/2025 trên một monorepo cụ thể. Cả hai tool đều đã ra nhiều phiên bản lớn kể từ đó. Benchmark có giá trị để hiểu mức cải thiện về bậc độ lớn so với TSC + typescript-eslint; hãy xem các con số cụ thể như định hướng chứ không phải tuyệt đối.
Oxfmt vẫn đang beta tính đến tháng 2/2026. 100% conformance với Prettier trên JS/TS đã được xác nhận; CSS và các format khác đang trong quá trình hoàn thiện. Đừng đánh giá Oxfmt về độ rộng format ở thời điểm này.
Số liệu npm downloads là snapshot từ tháng 5/2026, bao gồm cả CI pull và cài tự động. Lấy số mới nhất từ npmtrends.com khi ra quyết định.
Bài này chứa affiliate link đến Zed editor. Zed là editor có tích hợp native chặt chẽ nhất với cả Biome và Oxlint, và cả hai link đều phản ánh trải nghiệm thực tế. Kết luận ở trên sẽ không thay đổi dù không có mối quan hệ đó.
Tài liệu tham khảo
- Tài liệu Oxc — Oxc là gì
- Benchmark Oxc
- Thông báo Oxlint 1.0 stable
- Thông báo Oxfmt beta
- Oxlint JS Plugins alpha
- VoidZero — recap tháng 3/2026
- bench-linter (oxc-project)
- bench-formatter (oxc-project)
- Thông báo Biome v2 (Biotype)
- Roadmap Biome 2026
- Biome — migrate từ ESLint + Prettier
- Type-Aware Lint Rules nhanh hơn: Biome vs. Oxlint — Jökull Sólberg
- npm trends: Biome vs Oxlint