ESLint + Prettier has been the standard JavaScript/TypeScript code quality setup for years. Biome offers a single tool that does both linting and formatting 20-100x faster. Is it ready to replace the incumbents?
What Each Tool Does
ESLint: Linter. Analyzes code for errors, anti-patterns, and style issues. Runs rules against your code and reports violations.
Prettier: Formatter. Reformats code to consistent style (indentation, quotes, semicolons, line breaks). Opinionated, minimal configuration.
Biome: Linter + Formatter in one tool. Written in Rust. Handles everything ESLint and Prettier do, but faster.
Speed Comparison
Linting and formatting a 10,000-file TypeScript project:
| Tool | Time | Speedup vs ESLint+Prettier |
|---|---|---|
| ESLint + Prettier | 45 seconds | Baseline |
| Biome | 0.8 seconds | ~56x faster |
On a single file save (lint + format):
| Tool | Time |
|---|---|
| ESLint + Prettier | 200-500ms |
| Biome | 5-15ms |
Biome is dramatically faster. This matters for:
- CI pipelines (save minutes per run)
- Editor feedback (instant vs noticeable delay)
- Pre-commit hooks (instant vs frustrating wait)
Feature Comparison
| Feature | ESLint + Prettier | Biome |
|---|---|---|
| Linting | 300+ built-in rules | 200+ rules (growing) |
| Formatting | Opinionated + configurable | Prettier-compatible |
| Language support | JS, TS, JSX, TSX + plugins | JS, TS, JSX, TSX, JSON, CSS |
| Framework plugins | React, Vue, Angular, etc. | Growing (limited vs ESLint) |
| Custom rules | Yes (ESLint plugin API) | No (planned) |
| Configuration | .eslintrc + .prettierrc | biome.json (single file) |
| Editor support | All major editors | VS Code, IntelliJ, Neovim |
| Import sorting | eslint-plugin-import | Built-in |
| Auto-fix | Yes (many rules) | Yes (many rules) |
| CSS linting | Separate tool (Stylelint) | Built-in |
Configuration Comparison
ESLint + Prettier
// eslint.config.mjs
import js from '@eslint/js'
import tseslint from 'typescript-eslint'
import react from 'eslint-plugin-react'
import prettier from 'eslint-config-prettier'
export default [
js.configs.recommended,
...tseslint.configs.recommended,
react.configs.recommended,
prettier, // Disables ESLint rules that conflict with Prettier
]
// .prettierrc
{
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "all"
}
Two configuration files. Must coordinate ESLint and Prettier to avoid rule conflicts. The eslint-config-prettier package exists solely to disable ESLint rules that Prettier handles.
Biome
// biome.json
{
"formatter": {
"indentStyle": "space",
"indentWidth": 2
},
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"trailingCommas": "all",
"semicolons": "asNeeded"
}
}
}
Single file. No coordination needed. No plugin conflicts.
What Biome Is Missing (vs ESLint)
| Missing Feature | Impact |
|---|---|
| Custom rule API | Cannot write project-specific rules |
| Some framework-specific rules | React a11y rules partially covered |
| eslint-plugin-import full feature set | Import organization rules partial |
| Angular/Vue template linting | Not supported |
| Ecosystem of 2,000+ community rules | Growing but much smaller |
| Shareable configs | Basic support, less mature |
For projects that rely heavily on specialized ESLint plugins (Angular template checking, a11y enforcement, specific architectural rules), Biome is not yet a complete replacement.
Migration
ESLint + Prettier to Biome
# Install
pnpm add -D @biomejs/biome
# Migrate ESLint config
npx @biomejs/biome migrate eslint
# Migrate Prettier config
npx @biomejs/biome migrate prettier
# Check everything
npx biome check .
# Format everything
npx biome format --write .
Biome provides migration tools that read your existing ESLint and Prettier configurations and generate equivalent Biome configuration.
| Project Size | Migration Time |
|---|---|
| < 50 files | 30 minutes |
| 50-500 files | 1-2 hours |
| 500+ files | 2-4 hours |
Most time is spent on formatting differences (Biome's formatting is Prettier-compatible but not identical).
When to Choose Biome
- New projects (no migration cost, modern defaults)
- Speed-sensitive CI (minutes saved per pipeline run)
- Simpler tooling preference (one tool vs three)
- Standard linting needs (Biome's rules cover 90% of projects)
- Large codebases where lint/format time is noticeable
When to Stay with ESLint + Prettier
- Specialized ESLint plugins your project depends on
- Custom ESLint rules written for your codebase
- Angular or Vue template linting requirements
- Team familiarity (migration has a learning curve)
- Community ecosystem matters (more tutorials, more Stack Overflow answers)
Our Setup
We use Biome for new projects. The speed improvement in CI and local development is significant, and the standard rule set covers everything we need for React/Next.js development.
For existing projects with complex ESLint configurations, we migrate to Biome during major version upgrades rather than as a standalone effort.
Contact us to discuss development tooling for your project.