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):
| Biome | ESLint | Oxlint | |
|---|---|---|---|
| Cold run | ~200ms | ~8s | ~100ms |
| Watch mode | ~50ms | ~2s | ~30ms |
| Speedup vs ESLint | 40x | 1x | 80x |
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
| Feature | Biome | ESLint | Oxlint |
|---|---|---|---|
| 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 complexity | Low | High | Low |
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 ruleseslint-plugin-react-hooks— Hook rules (critical)@typescript-eslint— TypeScript ruleseslint-plugin-import— Import ordering and validationeslint-plugin-a11y— Accessibility ruleseslint-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:
- New projects: Biome (lint + format, zero config)
- Existing ESLint projects: Keep ESLint, add Oxlint for speed
- 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.