oxc-vs-biome
Overview
Both Oxc and BiomeJS represent the shift toward Rust-based JavaScript/TypeScript tooling, offering dramatic performance improvements over traditional tools like ESLint and Prettier. This comparison helps decide which tool fits different project needs.
Quick Comparison
| Feature | Oxc (oxlint/oxfmt) | BiomeJS |
|---|---|---|
| Linter Status | Production Ready | Production Ready |
| Formatter Status | Alpha | Production Ready |
| Linting Speed | 50-100x faster than ESLint | ~10-15x faster than ESLint |
| Formatting Speed | 30x faster than Prettier | 20x faster than Prettier |
| Rule Count | 610+ rules | 340+ rules |
| Type-Aware Linting | Yes (preview) | Yes (v2.0+) |
| Plugin System | Experimental (JS plugins) | Yes (v2.0+) |
| Config Complexity | .oxlintrc.json | biome.json (minimal config) |
| Bundler Integration | Vite/Rolldown native | Standalone |
Oxc: The Speed Champion
What Oxc Includes
Oxc is a modular compiler suite with individual tools:
Oxc Project├── oxc-parser ✅ (3x faster than SWC)├── oxlint ✅ (50-100x faster than ESLint)├── oxfmt 🚧 Alpha (30x faster than Prettier)├── oxc-transform ✅ (Babel-compatible)├── oxc-resolver ✅ (28x faster than enhanced-resolve)└── oxc-minifier 🚧 Alphaoxlint Features
- 610+ rules from ESLint, typescript-eslint, React, Jest, Unicorn, JSX-A11y
- Type-aware linting (requires
oxlint-tsgolintpackage, preview mode) - Multi-core scaling - uses all CPU cores
- Languages: JS, TS, Vue, Astro, Svelte
- ESLint migration: Use
eslint-plugin-oxlintto disable overlapping rules
oxfmt (Formatter)
- 30x faster than Prettier
- Prettier-compatible output (aiming for drop-in replacement)
- Current Status: Alpha - not production-ready yet
When to Choose Oxc
- Vite/Rolldown projects - Native integration in the VoidZero toolchain
- Performance-critical CI - Fastest available linting
- Large monorepos - Multi-core scaling provides biggest gains
- Willing to wait for formatter - Or use Prettier/Biome for formatting
Installation
# Linter onlynpm install -D oxlint
# Or run directlynpx oxlint@latestBiomeJS: The Unified Solution
What BiomeJS Includes
BiomeJS provides a single unified binary:
BiomeJS v2.x├── Formatter ✅ (Prettier-compatible)├── Linter ✅ (340+ rules)├── Type-Aware ✅ (v2.0+)├── Multi-file ✅ (v2.0+)└── Plugins ✅ (v2.0+)Key Features
- Zero-config defaults - Works out of the box
- 340+ lint rules from ESLint, typescript-eslint, and custom sources
- Languages: JavaScript, TypeScript, JSX, JSON, CSS, GraphQL
- Framework support: Astro, Svelte, Vue (partial)
- LSP support - First-class editor integration
- No Node.js required - Standalone binary
Biome v2.0 Features (June 2025)
- Plugin system - Extend with custom rules
- Type-aware linting - Without full TypeScript compiler
- Multi-file analysis - Rules can query other files
- Block ignores:
// biome-ignore-alland// biome-ignore-start/end
Performance
Formatting 1000 files:- Biome: 50ms- Prettier + ESLint: 1-2 seconds
Energy usage (macOS M3):- Biome uses 70% less energy than alternativesWhen to Choose BiomeJS
- Production projects today - Fully stable formatter + linter
- Simpler toolchain - One tool replaces ESLint + Prettier
- Plugin needs - Growing ecosystem with v2.0
- CSS/GraphQL - Biome supports these; Oxc focuses on JS/TS
- Lower migration friction -
npx @biomejs/biome migrate eslint
Installation
npm install -D @biomejs/biome
# Migrate from ESLintnpx @biomejs/biome migrate eslint .eslintrc.jsonPerformance Benchmarks
Linting Speed (relative to ESLint)
| Tool | Speed Improvement |
|---|---|
| oxlint | 50-100x faster |
| BiomeJS | ~10-15x faster |
| ESLint | baseline |
Formatting Speed (relative to Prettier)
| Tool | Speed Improvement | Status |
|---|---|---|
| oxfmt | 30x faster | Alpha |
| BiomeJS | 20x faster | Stable |
| Prettier | baseline | - |
Migration Strategies
From ESLint + Prettier to BiomeJS
# 1. Install Biomenpm install -D @biomejs/biome
# 2. Migrate ESLint config (converts ~70% of rules)npx @biomejs/biome migrate eslint .eslintrc.json
# 3. Initialize confignpx @biomejs/biome init
# 4. Runnpx biome check --write .From ESLint to oxlint (keeping Prettier)
# 1. Install oxlint and ESLint pluginnpm install -D oxlint eslint-plugin-oxlint
# 2. Update .eslintrc to use plugin (disables overlapping rules)
# 3. Run oxlint first, then ESLint for remaining rulesnpx oxlint && npx eslint .Hybrid: oxlint + Biome Formatter
For maximum linting speed with production formatting:
npm install -D oxlint @biomejs/biome
# Lint with oxlintnpx oxlint .
# Format with Biomenpx biome format --write .Recommendation Matrix
| Project Type | Recommended Tool |
|---|---|
| New project, needs stability | BiomeJS |
| Vite 8 / Rolldown project | Oxc (oxlint) + Biome formatter |
| Large monorepo, CI speed critical | oxlint + Prettier/Biome |
| Want unified toolchain | BiomeJS |
| Need CSS/GraphQL linting | BiomeJS |
| Bleeding edge performance | oxlint + wait for oxfmt |
Future Outlook
Oxc
- oxfmt moving toward stable release
- Deeper Vite/Rolldown integration
- Part of VoidZero’s coordinated toolchain vision
- Focus on maximum performance
BiomeJS
- Growing plugin ecosystem
- More framework integrations
- Type-aware features expanding
- Focus on unified developer experience