· javascript / typescript / linting

Oxc vs Biome — which Rust JS toolchain is production-ready?

Biome wins for greenfield projects; Oxc wins for large ESLint codebases. Both are 10–62× faster than ESLint. Benchmarks, feature matrix, and migration guide.

By · Updated June 1, 2026

1,862 words · 10 min read

Biome if you are starting a new project or want one command that handles lint, format, and import sorting with zero config. Oxlint if you have a large existing ESLint codebase and want immediate speed wins without ripping everything out. Vite+ (which bundles Oxlint + Oxfmt + Rolldown) if your stack is already in the Vite ecosystem — you are already running Oxc under the hood in Vite 8, so finishing the job is low-friction.

Who this is for

Mid-to-senior JS/TS developers evaluating whether to drop ESLint and Prettier for a Rust-based toolchain. If you are happy with ESLint’s speed and do not run CI on large monorepos, this upgrade will not change your life.

What we tested

Biome v2.4 (February 2026) — 502 lint rules, Biotype (type-aware linting without TSC), 97% Prettier compat, GritQL plugins, HTML formatter (experimental). Oxlint v1.0 (June 10, 2025 stable) with JS Plugins alpha (March 2026) — 650+ native Rust rules plus ESLint plugin compatibility layer. Oxfmt beta (February 2026) — 100% Prettier JS/TS conformance test pass rate. Both tools tested against community benchmarks on real codebases; the official benchmark repos are oxc-project/bench-linter and oxc-project/bench-formatter.

Oxc vs Biome feature matrix

Where each tool stands today:

CapabilityBiome v2.4Oxlint v1.0 + Oxfmt beta
Linting✅ 502 rules✅ 650+ rules
Formatting✅ 97% Prettier compat✅ 100% Prettier JS/TS compat (beta)
Type-aware linting✅ Biotype (no TSC needed)✅ via tsgo (requires TS installed)
Import organizer✅ (via Oxlint)
CSSPartial (Oxfmt JS/TS focus)
GraphQL
HTML✅ Experimental✅ Oxfmt beta
Vue/Svelte/AstroExperimentalLimited
Bundling❌ Not in scope✅ Rolldown (Vite 8 default)
Transpilation✅ Oxc Transformer
Minification✅ Oxc Minifier
Single config filebiome.json❌ Separate configs per tool
ESLint plugin compatCurated subset✅ JS Plugins alpha (80% coverage)
GritQL plugins
Zero-install type checking✅ Biotype❌ requires TypeScript

The core divergence: Biome is an all-in-one linter + formatter with deliberate scope limits. Oxc is a full toolchain (parse, lint, format, transform, bundle, minify) built around a shared AST. They are not really the same product category; the comparison collapses to which DX tradeoffs you care about.

Speed benchmarks

Linting

From the official oxc-project/bench-linter repo (VS Code codebase, MacBook Pro M2 Max 12 cores):

ToolTimevs ESLint
Oxlint (multi-thread)499.6 ms~62× faster
Oxlint (single-thread)1,824 ms~17× faster
Biome~10–25× faster than ESLint (community benchmarks)
ESLint31,025 msbaseline

ESLint time varies 20,957–31,025 ms depending on hardware; Oxlint scales to ~118× on higher core count machines (M4 Max benchmark). Oxlint is approximately 2× faster than Biome on equivalent lint-only workloads. On real codebases the gap holds:

  • Airbnb: 126,000+ files in 7 seconds.
  • Mercedes-Benz: 71% decrease in lint time on average; some projects saw 97%.

Formatting

From oxc-project/bench-formatter (Biome 2.4.15, Oxfmt 0.52.0, Prettier 3.8.3):

BenchmarkOxfmt vs PrettierBiome vs Prettier
Large single file (TypeScript parser.ts, ~540KB)5.9× faster5.6× faster
JS/TS codebase (Outline repo)36.6× faster11.3× faster

Oxfmt is 1.1–3.2× faster than Biome depending on codebase size — the gap widens significantly on large multi-file repos. The 35× Prettier speedup belongs to Oxfmt on a JS/TS codebase; Biome’s advantage is 5.6–11.3× depending on file type and size. Prettier compat: Biome is 97% compatible (a few deliberate deviations on tab-vs-space defaults and some edge-case quoting). Oxfmt passes 100% of Prettier’s JavaScript and TypeScript conformance tests as of the February 2026 beta.

Type-aware linting

Both approaches collapse the canonical 7-minute type-checking loop (TSC + typescript-eslint on a monorepo) to under 1.5 seconds on a real project (Jul 2025 benchmark, Jökull Sólberg, TripToJapan.com monorepo). The mechanisms differ:

  • Biome Biotype: a custom Rust type synthesizer that re-implements TypeScript type inference without the TypeScript compiler. No TypeScript installation required. A small rule set today — noFloatingPromises was the first shipped and catches ~75% of cases typescript-eslint flags for that pattern (per the v2 launch benchmark). More rules on the 2026 roadmap.
  • Oxlint type-aware: wraps tsgo (Microsoft’s Go port of the TypeScript compiler) to run 43 high-value typescript-eslint rules. Requires TypeScript installed locally. Correctness comes from the official type checker rather than a reimplementation.

⚠️ The 1.5s figure is from July 2025, pre-Biome v2 and pre-Oxlint 1.0. Both tools have shipped significant changes since. Rerun the benchmark on your codebase before committing to either approach.

Migration friction

Migrating to Biome

Biome ships automated migration tooling:

# Converts .eslintrc + .eslintignore → biome.json
biome migrate eslint --write

# Converts .prettierrc → biome.json
biome migrate prettier --write

It supports TypeScript ESLint, ESLint JSX A11y, ESLint React, and ESLint Unicorn configs. YAML ESLint configs are not supported for automated migration. After migration, biome check handles lint + format + import sorting in one pass.

Known gaps:

  • ESLint has 4,000+ community plugins. Biome implements a curated subset and does not offer a compatibility shim for arbitrary plugins.
  • SCSS is not yet supported (planned 2026).
  • HTML and Markdown formatting are experimental; Vue/Svelte/Astro support is listed on the 2026 roadmap.
  • 97% Prettier compat means ~3% formatting changes on first run — expect a noise-heavy initial diff.

Best fit: teams willing to trade ESLint’s plugin breadth for a simpler toolchain. Plan a 2–3 week migration window on a large repo to handle rule gaps and custom plugins. See the ESLint and Prettier to Biome migration guide for a step-by-step walkthrough of the edge cases.

Migrating to Oxlint

Oxlint was designed as an incremental complement to ESLint, not a forced replacement:

# Add Oxlint as a pre-ESLint fast gate; ESLint still runs
npx oxlint src/

With JS Plugins alpha (March 2026), the story changed: “80% of ESLint users can now switch to Oxlint and have it just work.” Plugin compatibility test pass rates:

PluginTestsPass rate
ESLint built-in33,006100%
React hooks5,007100%
ESLint Stylistic18,31099.99%
Testing Library17,016100%

Oxfmt also ships config migration from Prettier and Biome:

# Generates oxfmt.config.ts from your Prettier config
oxfmt migrate --from prettier

Known gaps: Vue, Svelte, and Angular template support is limited. Custom type-aware rules are not supported in JS plugin mode. Windows has some out-of-memory edge cases on very large repos.

Best fit: large codebases where ripping out ESLint in one pass is too risky. Run Oxlint in parallel, migrate rules incrementally, cut over when coverage feels solid.

Ecosystem health

Biome

  • GitHub stars: 24,494
  • Monthly npm downloads: 15M+ (January 2026); ~8.8M weekly (May 2026)
  • Editor support: VS Code, IntelliJ IDEA, WebStorm, Zed, Neovim, Helix
  • Major adopters: Vercel, Astro, Node.js, AWS, Cloudflare, Coinbase, Discord, Google, Microsoft, Slack
  • Release velocity: v2.0 → v2.4 in ~8 months (June 2025 → February 2026)
  • Corporate structure: community-driven; Depot is platinum sponsor; Vercel has a formal partnership on type inference work

Biome is the fork of Meta’s abandoned Rome project. It has a larger community footprint today than Rome ever achieved. The Vercel partnership on Biotype is a meaningful signal — Vercel engineers contributed engineering time, not just money. For a detailed look at what shipped in the v2 release, see the Biome 2 review.

Oxc / VoidZero

  • Oxlint weekly downloads: ~6.7M (May 2026)
  • Major adopters: Shopify (admin console), Airbnb (126k+ files), Mercedes-Benz, Bun, Preact, Vue.js core, Vercel Turborepo, Sentry, HuggingFace.js
  • Editor support: VS Code (dedicated extension), IntelliJ, WebStorm, Zed
  • Corporate backing: VoidZero Inc. (VC-backed; Evan You’s company)
  • Ecosystem lever: Vite 8 ships Rolldown as its default bundler — every Vite user now runs Oxc under the hood

The Vite connection is the most important structural fact about Oxc’s trajectory. Every Vite 8 project is already a Rolldown project. Adding Oxlint + Oxfmt on top of that is a lateral expansion, not a new adoption decision. VoidZero’s vp CLI (Vite+, open-sourced March 2026) bundles all of it: Vite, Vitest, Oxlint, Oxfmt, Rolldown, and tsdown under one command. For the bundler side of the picture, see Turbopack vs Vite — it covers where Rolldown fits in the bundler landscape.

Verdict

New or greenfield project: Biome

Zero-config start. Single biome.json. One command (biome check) for lint + format + import sort. Type-aware linting without a TypeScript install. Vercel, Astro, and Node.js adopters back it in production.

Exception: if the project is Vite-based and you want lint + format + bundle + test from a single CLI, Vite+ (Oxc) is the natural fit — and you are already running Rolldown anyway.

Large existing codebase: Oxlint (incremental)

Drop Oxlint alongside ESLint. It catches 80%+ of issues in milliseconds while ESLint handles the long tail. No config migration required at first. As coverage confidence grows, cut ESLint over rule by rule. Biome’s biome migrate eslint --write is the smoothest full-replacement path if you want to commit to a single pass, but plan the 2–3 week effort for rule gaps and custom plugins.

Monorepo

Biome has native nested config via "root": false and "extends": "//" syntax — works out of the box without extra tooling. Vite+ handles monorepo task orchestration with dependency resolution and caching for Vite-based repos.

Winner: Biome for repo-config simplicity; Vite+ for Vite monorepos.

Caveats

The type-aware linting numbers (1.5s) come from a July 2025 benchmark on a specific monorepo. Both tools have shipped several major versions since. The benchmark is useful for understanding the order-of-magnitude improvement over TSC + typescript-eslint; treat the specific numbers as directional.

Oxfmt is still in beta as of February 2026. 100% Prettier conformance on JS/TS is confirmed; CSS and other formats are a work in progress. Don’t evaluate Oxfmt on format breadth today.

npm download figures are snapshots from May 2026 and include CI pulls and automated installs. Pull fresh numbers from npmtrends.com at decision time.

This article contains an affiliate link to Zed editor. Zed is the editor with the tightest native integration for both Biome and Oxlint, and both links reflect genuine testing. The verdict above would be identical without that relationship.

References