Biome vs ESLint vs Prettier (2026)
Code quality tools: Biome does formatting + linting in one fast tool. ESLint + Prettier is the established combo. Here's whether to switch.
Quick Comparison
| Feature | Biome | ESLint + Prettier | ESLint (flat config) |
|---|---|---|---|
| Type | Formatter + Linter | Linter + Formatter | Linter (+ stylistic) |
| Speed | 35x faster | Baseline | Baseline |
| Config | Minimal JSON | Multiple files | Single flat config |
| Languages | JS/TS, JSON, CSS, GraphQL | JS/TS (+ plugins) | JS/TS (+ plugins) |
| Formatting | Built-in | Prettier (separate) | ESLint Stylistic |
| Zero config | ✅ | ❌ | ❌ |
| Plugin ecosystem | Small | Massive | Massive |
| Written in | Rust | JavaScript | JavaScript |
Biome: One Tool, Fast
Strengths
35x faster. Biome is written in Rust. On a large codebase, ESLint + Prettier takes 30 seconds. Biome takes under 1 second. This isn't a benchmark trick — the speed difference is real and noticeable in CI and on save.
One tool instead of two. No more configuring ESLint and Prettier separately, resolving conflicts between them, or maintaining two config files. One biome.json:
{
"formatter": {
"indentStyle": "space",
"indentWidth": 2
},
"linter": {
"rules": {
"recommended": true
}
}
}
Zero config works. npx @biomejs/biome check . — formats and lints with sensible defaults. No config file needed to start.
Prettier-compatible formatting. Biome's formatter produces output nearly identical to Prettier (97%+ compatibility). Switching is almost invisible to your codebase.
Editor support. VS Code extension with format-on-save, inline diagnostics, and quick fixes. JetBrains plugin available.
Weaknesses
- Smaller plugin ecosystem. ESLint has thousands of plugins (React, Next.js, import sorting, accessibility, etc.). Biome has built-in rules for many common cases but can't match ESLint's breadth.
- Fewer language plugins. ESLint plugins exist for Vue, Svelte, Angular templates, MDX, YAML, and more. Biome supports JS/TS, JSON, CSS, and GraphQL natively.
- Newer, less battle-tested. ESLint has 10+ years of production use. Biome (formerly Rome) is younger with a smaller track record.
- Custom rules are harder. ESLint custom rules are JavaScript functions. Biome custom rules require more effort.
- Community knowledge. Fewer Stack Overflow answers, fewer blog posts, fewer troubleshooting resources.
Best For
New projects wanting fast, simple code quality tooling. Teams tired of ESLint + Prettier configuration complexity. CI pipelines where speed matters.
ESLint + Prettier: The Standard
Strengths
Massive ecosystem. Plugins for everything:
eslint-plugin-react/eslint-plugin-react-hookseslint-plugin-next(Next.js specific rules)eslint-plugin-import(import organization)eslint-plugin-jsx-a11y(accessibility)@typescript-eslint(TypeScript rules)- Hundreds more
Battle-tested. Used by virtually every JavaScript project. Every edge case has been encountered and solved. Every framework has an ESLint config.
ESLint Flat Config (v9+). The new configuration system is much simpler:
// eslint.config.js
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
export default [
js.configs.recommended,
...tseslint.configs.recommended,
{
rules: {
'no-unused-vars': 'warn',
},
},
];
Custom rules. Write project-specific lint rules as JavaScript functions. Enforce team conventions that no generic tool covers.
Weaknesses
- Slow. JavaScript-based, single-threaded. Large codebases: 10-60 seconds. Noticeable in CI and on save for big projects.
- Two tools. ESLint for linting, Prettier for formatting. Two configs, potential conflicts, two dependencies to maintain.
- Config complexity. Despite flat config improvements, ESLint configuration is still more complex than Biome's.
- Plugin conflicts. Plugins can conflict with each other.
eslint-config-prettierexists specifically to disable ESLint rules that conflict with Prettier.
ESLint Stylistic (Alternative to Prettier)
ESLint Stylistic replaces Prettier by adding formatting rules to ESLint:
- One tool instead of two
- Same ESLint config
- No Prettier conflicts
- Still JavaScript-speed (not Rust-speed)
import stylistic from '@stylistic/eslint-plugin';
export default [
stylistic.configs.recommended,
];
Best For
Projects needing specific framework plugins (React, Next.js, Vue). Teams with existing ESLint configs they don't want to migrate. Projects requiring custom lint rules.
Migration Guide: ESLint → Biome
Step 1: Install
npm install --save-dev @biomejs/biome
npx @biomejs/biome init
Step 2: Migrate Config
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
Biome reads your ESLint and Prettier configs and generates equivalent biome.json.
Step 3: Update Scripts
{
"scripts": {
"lint": "biome check .",
"format": "biome format --write .",
"check": "biome check --write ."
}
}
Step 4: Remove Old Tools
npm uninstall eslint prettier eslint-config-prettier @typescript-eslint/eslint-plugin
Step 5: Verify
npx @biomejs/biome check .
Migration time: 30-60 minutes for most projects. The migrate command handles most of the work.
Decision Matrix
| If You Need... | Choose |
|---|---|
| Fastest possible | Biome |
| Simplest setup | Biome |
| React/Next.js plugins | ESLint (for now) |
| Maximum rule coverage | ESLint |
| Custom lint rules | ESLint |
| One tool (format + lint) | Biome |
| Vue/Svelte/Angular | ESLint |
| CI speed | Biome |
| Battle-tested | ESLint + Prettier |
The 2026 Trend
Biome adoption is accelerating. The speed advantage and simplified configuration are compelling. More projects are adopting Biome for new codebases.
ESLint isn't going anywhere. The plugin ecosystem is irreplaceable for many teams. ESLint flat config and ESLint Stylistic address the biggest pain points.
Prettier is being squeezed. Both Biome (built-in formatting) and ESLint Stylistic (formatting in ESLint) reduce the need for Prettier as a separate tool.
FAQ
Will Biome replace ESLint?
Not yet. ESLint's plugin ecosystem is too large and valuable. Biome will continue gaining share for new projects and simpler setups. ESLint will remain dominant for projects needing specific framework plugins.
Can I use Biome for formatting and ESLint for linting?
Yes. Use Biome as a Prettier replacement (formatting only) while keeping ESLint for linting. Best of both worlds: fast formatting + full ESLint plugin ecosystem.
Is the speed difference actually noticeable?
On small projects (<100 files): barely. On large projects (1000+ files): very noticeable. In CI pipelines: Biome saves 20-50 seconds per run, which compounds across many PRs per day.
Should I migrate my existing project?
If ESLint + Prettier works fine and you don't have speed issues: no rush. If CI is slow, config is painful, or you're starting a new project: try Biome. The migration tool makes switching low-risk.
Bottom Line
Biome for new projects, speed-sensitive CI, and teams wanting simplicity. One tool, minimal config, 35x faster.
ESLint + Prettier for projects needing the plugin ecosystem. React hooks rules, accessibility linting, import organization, and framework-specific rules.
The pragmatic approach: Try Biome on your next new project. Keep ESLint on existing projects that depend on its plugins. Evaluate as Biome's plugin ecosystem grows.