· 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 · 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-linteroxc-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ăngBiome v2.4Oxlint 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)
CSSMột phần (Oxfmt tập trung JS/TS)
GraphQL
HTML✅ Thử nghiệm✅ Oxfmt beta
Vue/Svelte/AstroThử nghiệmHạ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ấtbiome.json❌ Config riêng cho từng tool
Tương thích plugin ESLintTậ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):

ToolThời gianSo 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)
ESLint31.025 msbaseline

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 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):

BenchmarkOxfmt vs PrettierBiome vs Prettier
File đơn lớn (TypeScript parser.ts, ~540KB)5.9× nhanh hơn5.6× nhanh hơn
Codebase JS/TS (repo Outline)36.6× nhanh hơn11.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 — noFloatingPromises là rule đầu tiên ra mắt, bắt được ~75% trường hợp mà typescript-eslint gắ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:

PluginSố testTỷ lệ pass
ESLint built-in33.006100%
React hooks5.007100%
ESLint Stylistic18.31099.99%
Testing Library17.016100%

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