Biome vs Oxc vs Deno lint: Linter War 2026
Tiga linter Rust-based (Biome, Oxc, Deno lint) plus ESLint. Saya pakai Biome 18 bulan, Oxc 8 bulan, Deno lint 6 bulan. Verdict tergantung stack dan rule set.
TL;DR
- Biome: All-in-one (lint + format), rule set matang. Conditional Recommend default safe.
- Oxc: Tercepat (50-100x ESLint), rule set growing. Conditional Recommend untuk speed-first.
- Deno lint: Curated rule, lightweight, standalone OK. Conditional Recommend untuk Deno atau minimal stack.
- Verdict: Biome default. Oxc untuk scale. Deno lint untuk niche.
Konteks
Saya pakai ketiga di 11 project SMB Indonesia 2024-2026:
- Biome (8 project): SaaS dental, ecommerce klinik, admin HR, marketing site, dan 4 lainnya
- Oxc (2 project): MVP startup speed-first, internal tool warung
- Deno lint (1 project): backend API Deno + Hono
Plus migration history dari ESLint + Prettier untuk semua 11 project. Biome vs ESLint Prettier detail.
Pricing
Ketiga gratis dan open-source. Cost = waktu setup + maintenance.
Saving CI time untuk team 3-5 dev × 5 PR/hari (estimated):
| Tool | Lint time per PR | CI minute saved (vs ESLint) |
|---|---|---|
| ESLint + Prettier | 28s | baseline |
| Biome | 6s | -22s = 880 min/bulan saved |
| Oxc | 0.8s | -27s = 1080 min/bulan saved |
| Deno lint | 4s | -24s = 960 min/bulan saved |
Cost saving CI minute: $5-15/bulan (modest). DX gain (faster dev loop): significant.
Performance benchmark
Test: project Next.js 15 dengan 25K LOC TypeScript.
Lint full repo
| Tool | Time |
|---|---|
| ESLint 9 | 28.4s |
| Biome 2.0 | 1.9s |
| Oxc | 0.42s |
| Deno lint | 2.8s |
Oxc 67x lebih cepat dari ESLint. Biome 15x lebih cepat. Deno lint 10x lebih cepat.
Format full repo
| Tool | Time |
|---|---|
| Prettier 3.4 | 18.2s |
| Biome format | 1.4s |
| Oxc format | 0.6s |
| dprint (alternative) | 0.9s |
Oxc + dprint paling cepat. Biome competitive.
Memory usage
| Tool | RAM peak |
|---|---|
| ESLint | 450 MB |
| Biome | 95 MB |
| Oxc | 60 MB |
| Deno lint | 85 MB |
Rust-based tools 4-7x lebih efisien memory.
Feature comparison
| Feature | Biome | Oxc | Deno lint | ESLint |
|---|---|---|---|---|
| Rule count | 270+ | 180+ | 100+ | 300+ (+plugins) |
| Formatter included | Yes | Yes | No (deno fmt) | No (need Prettier) |
| Type-aware rule | Yes (limited) | Limited | No | Yes (with @typescript-eslint) |
| Plugin system | Limited | Limited | No | Excellent |
| JSON / YAML / Markdown lint | Yes | Limited | Limited | Plugin |
| Monorepo support | Yes | Yes | OK | Yes |
| LSP integration | Yes | Yes | Yes | Yes |
| Editor integration | Excellent | Good | Excellent | Excellent |
| Auto-fix | Yes | Yes | Yes | Yes |
| Config DX | Excellent | Good | Excellent | Verbose |
Trade-off
Biome
Pro: All-in-one — lint + format dalam 1 tool. Rule set comparable ESLint untuk 90% use case. Config minimal (1 file biome.json). Editor integration excellent (VS Code, Zed, Cursor native). LSP fast. Type-aware rule untuk catch type-related bug.
Con: Plugin system limited — tidak ada equivalent ESLint plugin ecosystem. Rule custom org butuh contribute upstream atau wait. Beberapa edge case ESLint rule belum ada (react-hooks-extra exhaustive-deps strict).
Oxc
Pro: Tercepat — 50-100x ESLint. Memory paling efisien. Parser dipakai by Rolldown/Rspack — well-tested. Future-proof: Oxc engine kemungkinan jadi default banyak tool.
Con: Rule set masih 180 (vs Biome 270+, ESLint 300+). Plugin system masih early. Documentation OK tapi tidak as polished. Migration dari ESLint butuh manual rule mapping lebih banyak.
Deno lint
Pro: Built-in Deno — tidak butuh install. Rule curated (quality > quantity). Bisa standalone tanpa Deno runtime. Excellent untuk project minimal.
Con: Tidak ada formatter standalone (pakai deno fmt). Rule set kecil (100+). Bukan default pilihan untuk Node.js stack.
Konteks Indonesia
SaaS dental Jakarta (Biome migration 2024): migrate dari ESLint + Prettier. Effort 60 menit. CI time turun dari 35s → 4s per PR. DX improvement: lint-on-save dari 1.5s → 0.1s. Tim 3 dev save 30-60 menit/hari kombinasi.
MVP AI startup (Oxc): pilih Oxc karena monorepo besar (20+ package, 80K LOC). Lint full repo 1.2s vs Biome 5s. Saving CI time 50% di scale.
Backend API Deno Tangerang: Deno lint built-in. Workflow simpel: deno lint + deno fmt. Cocok untuk project minimal yang tidak butuh rule kompleks.
Migration recipe (60-90 menit)
Step 1: Install Biome (5 menit)
bun add -D @biomejs/biome
bunx @biomejs/biome init
Atau Oxc:
bun add -D oxlint
Step 2: Migrate config (15 menit)
bunx @biomejs/biome migrate eslint --write
bunx @biomejs/biome migrate prettier --write
Output: biome.json dengan rule yang ekuivalen.
Step 3: Review + manual fix (20-40 menit)
Run check:
bunx @biomejs/biome check .
Review violation:
- Auto-fix:
bunx @biomejs/biome check --write . - Manual fix: rule tidak ada equivalent — disable atau refactor
Step 4: Update package.json (5 menit)
{
"scripts": {
"lint": "biome check .",
"lint:fix": "biome check --write .",
"format": "biome format --write ."
}
}
Hapus ESLint + Prettier dep:
bun remove eslint prettier eslint-config-* eslint-plugin-* prettier-plugin-*
Step 5: Update CI (10 menit)
.github/workflows/ci.yml:
- run: bun install
- run: bun run lint
Step 6: Pre-commit hook (10 menit)
.husky/pre-commit:
bunx @biomejs/biome check --write --no-errors-on-unmatched --files-ignore-unknown=true $(git diff --cached --name-only)
Atau lefthook (lebih fast):
pre-commit:
commands:
biome:
run: bunx @biomejs/biome check --write --staged --no-errors-on-unmatched --files-ignore-unknown=true
Step 7: Test + commit (15 menit)
bun run lint
git add .
git commit -m "chore: migrate ESLint + Prettier to Biome"
Rule comparison
| Common ESLint rule | Biome equivalent | Oxc equivalent | Deno lint |
|---|---|---|---|
| no-unused-vars | noUnusedVariables | no-unused-vars | no-unused-vars |
| no-console | noConsoleLog | no-console | no-console |
| prefer-const | useConst | prefer-const | prefer-const |
| react-hooks/exhaustive-deps | useExhaustiveDependencies | react-hooks-exhaustive-deps | N/A |
| @typescript-eslint/no-explicit-any | noExplicitAny | no-explicit-any | no-explicit-any |
| react-hooks/rules-of-hooks | useHookAtTopLevel | react-hooks-rules-of-hooks | N/A |
~85% rule auto-translate. ~15% butuh manual fix atau alternative.
Yang surprising
Biome DX improvement lebih impactful dari yang saya kira. Lint-on-save 100ms vs ESLint 1.5s — bisa enabled di “format on save” tanpa lag. Workflow feel native.
Oxc maturity lebih cepat dari ekspektasi. Q1 2026 stable, banyak tool sudah switch (Rolldown, Rspack, Vite Rolldown). Future-proof bet kuat.
ESLint plugin ecosystem masih ada moat. Untuk klien dengan custom org rule kompleks, masih butuh ESLint atau hybrid (Biome untuk standard rule + ESLint untuk custom plugin).
Verdict
Conditional Recommend untuk ketiga:
Pakai Biome jika:
- Default safe untuk new project SMB Indonesia
- Rule set ESLint-comparable cukup
- Prefer all-in-one (lint + format)
- Stack TypeScript + React/Next.js standard
Pakai Oxc jika:
- Monorepo besar (50K+ LOC)
- Speed paling priority
- Comfort dengan ekosistem yang lebih kecil
- Future-proof bet (Oxc engine kemungkinan jadi default banyak tool)
Pakai Deno lint jika:
- Project Deno-native
- Project minimal (< 5K LOC)
- Prefer rule curated quality > quantity
Stay ESLint jika:
- Custom plugin ekosistem heavy
- Rule org-specific yang belum ada di Biome/Oxc
- Tim sudah deep di ESLint workflow
Untuk perbandingan lebih dalam Biome vs ESLint: Biome vs ESLint Prettier.
Ditulis oleh Asti Larasati