Biome vs OXC 2026: Linter Showdown
Biome vs OXC 2026: Linter Showdown
TL;DR
Both Biome and OXC (Oxlint + Oxfmt) are Rust-based JavaScript toolchain projects — and in 2026, both are production-ready for linting. Biome wins on features and DX: it's a complete all-in-one linter + formatter with ~200 lint rules, no config required, and excellent editor integration. OXC wins on raw speed: Oxlint runs 2x faster than Biome for linting and Oxfmt runs 3x faster for formatting. The practical recommendation: use Biome for greenfield projects; add Oxlint alongside ESLint for existing codebases where ESLint is too slow.
Key Takeaways
- Oxlint is 2x faster than Biome for linting and 50-100x faster than ESLint — OXC holds the benchmark crown
- Biome has ~200 lint rules; Oxlint has ~300 rules — both cover correctness and best practices, but Biome's rules are more curated
- Oxfmt (OXC's formatter) is 3x faster than Biome and 35x faster than Prettier — beta as of February 2026, but maturing fast
- Biome formats JavaScript, TypeScript, JSON, CSS, GraphQL — Oxfmt supports the same plus YAML, TOML, HTML, Vue, Angular, Markdown, and MDX
- Biome works today as a zero-config drop-in for ESLint + Prettier; OXC requires separate tools (Oxlint + Oxfmt) that are at different maturity levels
- The VoidZero team (behind Vite, Rolldown, Oxc) is aggressively pushing OXC's roadmap — Q1 2026 includes Oxlint JS Plugins Alpha and Formatter Beta
- Neither replaces ESLint entirely — OXC explicitly positions as complementary; Biome is the more direct alternative
What Are Biome and OXC?
These are both Rust-based JavaScript tooling projects, but they have different origins and philosophies.
Biome is a fork of Rome (Meta's abandoned JavaScript toolchain project), maintained by an independent open-source community. It ships as a single binary: one tool that handles linting, formatting, and imports organization for JavaScript, TypeScript, JSON, and CSS. The philosophy is simplicity — one config, one tool, replace ESLint + Prettier in a single install.
OXC (Oxc Project) is a collection of JavaScript/TypeScript tools from VoidZero (the company behind Vite). Rather than one monolithic tool, OXC ships individual components: Oxlint (linter), Oxfmt (formatter), the Oxc parser (used internally by Vite 8, Rolldown, and OXC tools), and the Oxc transformer. Each can be used independently.
Performance Comparison
Speed is where OXC dominates. The benchmark numbers are striking:
| Tool | Linting Speed | Formatting Speed |
|---|---|---|
| ESLint | baseline | — |
| Prettier | — | baseline |
| Biome | ~10x faster than ESLint | ~20x faster than Prettier |
| Oxlint | ~50-100x faster than ESLint | — |
| Oxfmt | — | ~35x faster than Prettier, 3x faster than Biome |
Oxlint vs Biome linting (bench-linter, OXC's public benchmark repo):
- Oxlint is approximately 2x faster than Biome on equivalent codebases
- Both are dramatically faster than ESLint
Oxfmt vs Biome formatting (oxc-project/bench-formatter):
- Oxfmt is 3x faster than Biome and 35x faster than Prettier on initial runs (without cache)
- With caching, both Biome and Oxfmt improve, but Oxfmt retains the lead
For most projects, these performance differences are academic — both tools are so fast that linting and formatting aren't bottlenecks. The difference matters at scale: monorepos with 10,000+ files, CI pipelines where linting takes minutes, or large teams where developer iteration speed adds up.
Feature Comparison: Rules and Coverage
Lint Rules
| Biome | Oxlint | |
|---|---|---|
| Rule count (2026) | ~200 | ~300 |
| ESLint rule coverage | Partial | ~80% |
| Custom rules (plugins) | ✅ Supported | ⚠️ Alpha (JS Plugins) |
| Auto-fix | ✅ Yes | ✅ Yes |
| TypeScript rules | ✅ Yes | ✅ Yes |
| React rules | ✅ Yes (JSX) | ✅ Yes |
Oxlint has more rules in total but focuses heavily on ESLint compatibility — it prioritizes covering the most commonly used ESLint rules so teams can drop ESLint without losing coverage.
Biome's rules are more opinionated and curated. The team carefully reviews each rule for DX impact — they'd rather ship fewer, better rules than maximize rule count. Biome also provides a biome migrate eslint command that converts your ESLint config to Biome equivalents.
Formatting
Biome's formatter has been production-ready since 2023. It's Prettier-compatible for JavaScript and TypeScript, with some intentional deviations documented.
Oxfmt entered beta in February 2026. Key characteristics:
- Prettier-compatible output (same as Biome's goal)
- Broader language support: YAML, TOML, HTML, Vue, Angular, Svelte, Markdown, MDX, GraphQL — more than Biome
- 3x faster than Biome on benchmarks
- Not yet stable — the beta warning applies; breaking changes possible before 1.0
For teams that need YAML, TOML, or HTML formatting in the same tool, Oxfmt's breadth is compelling. For teams that need stability today, Biome is the choice.
Developer Experience
Setup and Config
Biome:
npm install --save-dev @biomejs/biome
npx @biomejs/biome init
That's it. The biome.json generated works immediately with sensible defaults. No plugin config, no shareable configs to manage:
{
"$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
"organizeImports": { "enabled": true },
"linter": { "enabled": true, "rules": { "recommended": true } },
"formatter": { "enabled": true, "indentStyle": "tab" }
}
Oxlint:
npm install --save-dev oxlint
npx oxlint
Oxlint also works zero-config. But since Oxfmt is separate:
npm install --save-dev oxfmt
npx oxfmt .
Two tools to manage instead of one — not complex, but more moving parts.
Editor Integration
Biome has first-class VS Code, Neovim, and WebStorm extensions. The VS Code extension is actively maintained and supports auto-fix on save, format on save, inline diagnostics.
Oxlint has VS Code extension support but less mature tooling than Biome. Oxfmt is newer and editor integration is still developing.
Migrating from ESLint + Prettier
Biome has a dedicated migration command:
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
This automatically converts .eslintrc and .prettierrc to equivalent biome.json config. The migration covers most common rules; complex plugin-heavy configs need manual review.
OXC takes a different approach — it's designed to run alongside ESLint, not replace it:
# Run Oxlint for fast feedback, ESLint for remaining rules
npx oxlint && npx eslint
This dual-linting pattern is common in large codebases: Oxlint catches 80% of common mistakes in milliseconds, then ESLint fills in the gaps. It's not a migration — it's an augmentation.
The VoidZero Factor
OXC is backed by VoidZero, the company that also maintains Vite and Rolldown. This matters for the ecosystem trajectory.
The OXC parser is already embedded in Vite 8's React plugin (for Fast Refresh transforms) and in Rolldown's transform pipeline. As VoidZero ships more of the JavaScript toolchain in Rust, OXC tools become the natural fit — same parser, same AST, zero duplication.
The Q1 2026 OXC roadmap includes:
- Oxlint JS Plugins Alpha — write custom lint rules in JavaScript (previously Rust-only)
- Formatter Beta — Oxfmt stable-track release
- Minifier Beta — Oxc minifier as alternative to Terser/esbuild minifier
- Transformer Milestone 3 — completing TypeScript transform coverage
By end of 2026, OXC could plausibly be a complete toolchain: parse, lint, format, minify, and transform — all in one Rust runtime, tightly integrated with Vite.
When to Use Biome
- Greenfield TypeScript/JavaScript projects — zero-config, one install, covers 90% of teams' needs
- Teams leaving ESLint + Prettier — migration tooling makes it seamless
- Projects needing stable formatter today — Biome's formatter is production-tested and stable
- Projects where DX matters more than maximum speed — better editor integration, more curated rules
- Next.js, React, Vue projects — well-supported, documented, community examples
# Add to existing project
npm install -D @biomejs/biome
npx @biomejs/biome init
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
When to Use OXC (Oxlint)
- Large codebases where ESLint is slow — run Oxlint as a pre-check before ESLint
- CI pipelines where linting is a bottleneck — Oxlint's speed compounds on large repos
- Teams not ready to migrate from ESLint — use Oxlint as an additive layer
- Projects on the Vite 8 ecosystem — OXC's deep integration with VoidZero's toolchain
- Forward-looking stacks — if you want to bet on VoidZero's toolchain consolidation
# Add Oxlint to existing ESLint project (no migration required)
npm install -D oxlint
# Add to package.json scripts
# "lint": "oxlint && eslint ."
Methodology
- Performance benchmarks from oxc-project/bench-linter and oxc-project/bench-formatter (GitHub)
- Rule counts from official documentation: biomejs.dev/linter/rules and oxc.rs/docs/guide/benchmarks
- Oxfmt beta announcement and feature list from oxc.rs/blog/2026-02-24-oxfmt-beta
- OXC Q1 2026 roadmap from oxc.rs project GitHub
Related: OXC vs ESLint vs Biome: JS Linting 2026 · Biome Faster than ESLint + Prettier · Rolldown vs esbuild: Rust Bundler 2026. See all linting and formatting packages on PkgPulse.