← Semua picks

Tool Review Conditional

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.

13 Juni 2026 · 9 menit ·Use case: Linter + formatter modern untuk JS/TS project Indonesia 2026
BiomeOxcDeno lintESLint

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

ToolLint time per PRCI minute saved (vs ESLint)
ESLint + Prettier28sbaseline
Biome6s-22s = 880 min/bulan saved
Oxc0.8s-27s = 1080 min/bulan saved
Deno lint4s-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

ToolTime
ESLint 928.4s
Biome 2.01.9s
Oxc0.42s
Deno lint2.8s

Oxc 67x lebih cepat dari ESLint. Biome 15x lebih cepat. Deno lint 10x lebih cepat.

Format full repo

ToolTime
Prettier 3.418.2s
Biome format1.4s
Oxc format0.6s
dprint (alternative)0.9s

Oxc + dprint paling cepat. Biome competitive.

Memory usage

ToolRAM peak
ESLint450 MB
Biome95 MB
Oxc60 MB
Deno lint85 MB

Rust-based tools 4-7x lebih efisien memory.

Feature comparison

FeatureBiomeOxcDeno lintESLint
Rule count270+180+100+300+ (+plugins)
Formatter includedYesYesNo (deno fmt)No (need Prettier)
Type-aware ruleYes (limited)LimitedNoYes (with @typescript-eslint)
Plugin systemLimitedLimitedNoExcellent
JSON / YAML / Markdown lintYesLimitedLimitedPlugin
Monorepo supportYesYesOKYes
LSP integrationYesYesYesYes
Editor integrationExcellentGoodExcellentExcellent
Auto-fixYesYesYesYes
Config DXExcellentGoodExcellentVerbose

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 ruleBiome equivalentOxc equivalentDeno lint
no-unused-varsnoUnusedVariablesno-unused-varsno-unused-vars
no-consolenoConsoleLogno-consoleno-console
prefer-constuseConstprefer-constprefer-const
react-hooks/exhaustive-depsuseExhaustiveDependenciesreact-hooks-exhaustive-depsN/A
@typescript-eslint/no-explicit-anynoExplicitAnyno-explicit-anyno-explicit-any
react-hooks/rules-of-hooksuseHookAtTopLevelreact-hooks-rules-of-hooksN/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

// Pick Tool Review lain


← Semua picks RSS feed