← Back to articles

Biome vs ESLint vs Oxlint (2026 Comparison)

JavaScript linting in 2026 has new contenders. ESLint is the veteran. Biome (formerly Rome) combines linting and formatting. Oxlint is the Rust-speed newcomer from the Oxc project. Here's the comparison.

Quick Verdict

  • Biome — Best all-in-one (lint + format). Fast, zero config, replaces ESLint + Prettier.
  • ESLint — Most rules, most plugins, most customizable. The ecosystem standard.
  • Oxlint — Fastest linter. Use alongside Prettier. Not a full replacement yet.

Speed

Linting a large codebase (1,000 files):

BiomeESLintOxlint
Cold run~200ms~8s~100ms
Watch mode~50ms~2s~30ms
Speedup vs ESLint40x1x80x

Oxlint and Biome are written in Rust. ESLint is JavaScript. The speed difference is massive and real — especially in CI where linting runs on every push.

Features

FeatureBiomeESLintOxlint
Linting✅ (270+ rules)✅ (300+ rules + plugins)✅ (400+ rules)
Formatting✅ (Prettier-compatible)❌ (use Prettier)❌ (use Prettier)
Auto-fix✅ (partial)
TypeScript✅ (with parser)
JSX/React✅ (with plugin)
Vue/Svelte✅ (with plugins)
Import sorting✅ (with plugin)
Custom rules✅ Best
Plugin ecosystem✅ Massive
Config complexityLowHighLow

Configuration

Biome

// biome.json
{
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "suspicious": { "noExplicitAny": "error" }
    }
  },
  "formatter": {
    "indentStyle": "space",
    "indentWidth": 2
  }
}

One config file. Linting + formatting. Done.

ESLint

// eslint.config.js (flat config)
import tseslint from 'typescript-eslint'
import react from 'eslint-plugin-react'
import prettier from 'eslint-config-prettier'

export default [
  ...tseslint.configs.recommended,
  react.configs.flat.recommended,
  prettier,
  {
    rules: {
      '@typescript-eslint/no-explicit-any': 'error',
    },
  },
]

Plus Prettier config, plus TypeScript parser config, plus framework plugins. ESLint's configuration is notoriously complex.

Oxlint

# Zero config — just run it
oxlint .

Or with config:

// .oxlintrc.json
{
  "rules": {
    "no-unused-vars": "warn"
  }
}

Winner: Biome for simplicity. One tool, one config, lint + format.

The ESLint Plugin Ecosystem

ESLint's biggest advantage is plugins. Some critical ones:

  • eslint-plugin-react — React-specific rules
  • eslint-plugin-react-hooks — Hook rules (critical)
  • @typescript-eslint — TypeScript rules
  • eslint-plugin-import — Import ordering and validation
  • eslint-plugin-a11y — Accessibility rules
  • eslint-plugin-tailwindcss — Tailwind class ordering

Biome and Oxlint have no plugin system. They implement rules directly. This means fewer rules but zero plugin management headaches.

Migration from ESLint

To Biome

npx @biomejs/biome migrate eslint --write

Biome's migration tool reads your ESLint config and converts compatible rules. Covers ~70% of common rules. Manual adjustment needed for the rest.

To Oxlint

Oxlint implements many ESLint rules with the same names. Add it alongside ESLint and gradually disable ESLint rules that Oxlint covers.

Formatting

Biome

Built-in formatter, Prettier-compatible output. One command: biome format .

ESLint + Prettier

Two tools, configured to not conflict:

npx prettier --write .
npx eslint --fix .

Oxlint + Prettier

Same as ESLint — Oxlint doesn't format.

Winner: Biome. One tool handles both. No Prettier config, no conflicts.

When to Use Each

Choose Biome When

  • Starting a new project
  • Want one tool for lint + format
  • Tired of ESLint + Prettier config
  • Speed matters (CI optimization)
  • Don't need niche ESLint plugins

Choose ESLint When

  • Existing project with ESLint config
  • Need specific plugins (a11y, Tailwind, custom rules)
  • Vue or Svelte project (Biome doesn't support yet)
  • Team has ESLint expertise
  • Need custom rules

Choose Oxlint When

  • Want the absolute fastest linting
  • Large monorepo where lint time matters
  • Use alongside ESLint for speed (lint fast, then ESLint for edge cases)
  • Experimenting with faster tooling

The Practical Approach

For many teams, the best approach in 2026:

  1. New projects: Biome (lint + format, zero config)
  2. Existing ESLint projects: Keep ESLint, add Oxlint for speed
  3. Vue/Svelte: ESLint (Biome doesn't support yet)

FAQ

Can Biome fully replace ESLint + Prettier?

For most React/Next.js/TypeScript projects, yes. You'll miss some niche plugins but cover 90%+ of common rules.

Is Oxlint production-ready?

Yes for linting. It's used by large projects. But it's a linter only — you still need Prettier for formatting.

Will ESLint become irrelevant?

Not soon. The plugin ecosystem is massive and irreplaceable. But Biome and Oxlint are taking market share for new projects.

Should I migrate my existing ESLint setup?

If it works, keep it. Migrate when you start a new project or when ESLint config becomes a maintenance burden.

Bottom Line

Biome is the future of JavaScript linting + formatting. One tool, one config, 40x faster than ESLint. ESLint remains essential for its plugin ecosystem. Oxlint is the speed demon for large codebases.

New project: Biome. Existing ESLint: keep it (maybe add Oxlint for speed). Vue/Svelte: ESLint.

Get AI tool guides in your inbox

Weekly deep-dives on the best AI coding tools, automation platforms, and productivity software.