Biome vs ESLint
The fast Rust-based linter vs the JavaScript ecosystem standard. One runs in milliseconds. The other has every plugin imaginable.
The short answer
Biome over ESLint for most cases. Biome is 10-100x faster than ESLint, handles both linting AND formatting (replacing Prettier too), and has sane defaults out of the box.
- Pick Biome if starting a new project, want faster CI, or are tired of configuring ESLint + Prettier
- Pick ESLint if rely on specific ESLint plugins, have a heavily customized config, or need the widest IDE support
- Also consider: If you're using ESLint v9+ with flat config, the configuration story is much better. Evaluate if the speed gain justifies migration.
— Nice Pick, opinionated tool recommendations
Speed That Matters
Biome is written in Rust. Linting a large codebase takes milliseconds, not seconds. When your CI runs 10x faster and your editor never lags, that speed compounds into real productivity.
ESLint with TypeScript rules and Prettier can take 10+ seconds on large projects. Every save, every commit hook, every CI run.
All-in-One
Biome replaces ESLint AND Prettier. One tool, one config, no conflicts between linter and formatter. No more eslint-config-prettier, no more format-on-save races.
The ESLint + Prettier combo requires careful configuration to avoid conflicts. Biome has zero configuration conflicts because it's one tool.
The Plugin Gap
ESLint has thousands of plugins. eslint-plugin-react, eslint-plugin-import, eslint-plugin-jsx-a11y — whatever you need exists.
Biome has built-in rules that cover most of what popular ESLint plugins do, but niche plugins don't have Biome equivalents yet. This gap is closing but it's real.
Performance That Isn't Close
Benchmarks don't lie: Biome lints the entire React codebase in under 200ms; ESLint takes 6–8 seconds even with caching. That's 30x faster—not a marginal win, a different league. Biome is written in Rust, compiled to native code, and parallelizes everything. ESLint is JavaScript, single-threaded, and chokes on monorepos. In CI, that 6-second gap balloons to minutes per pipeline run. For a team doing 50 PRs a day, Biome saves hours of developer wait time. ESLint's defenders point to 'fast' plugins like eslint-plugin-unicorn, but that's lipstick on a pig. The architectural ceiling is hard: JS can't match Rust's zero-cost abstractions. If you care about speed, the choice is made.
Configuration: Sanity vs Sprawl
ESLint's configuration is a horror show: flat config, legacy config, .eslintrc.*, overrides, extends, plugins, rulesets—it's a combinatorial explosion. A typical React+TypeScript project needs 8 config files and 15 plugins to get parity with Biome's single eslint.json. Biome's rules are organized, documented, and composable without surprises. ESLint's rule ecosystem is chaotic: 3,000+ rules, many overlapping, some deprecated, others maintained by a single person. Biome ships with 200+ curated rules, zero plugins needed, and a consistent 'recommended' preset that actually works. The tradeoff? ESLint has a rule for every edge case you'll never encounter. Biome gives you sanity and ships faster. I'll take the latter.
Migration: Pain Today, Gain Tomorrow
Migrating from ESLint to Biome is a weekend project—not a quarter-long initiative. Run npx @biomejs/biome migrate eslint and it converts your config and suppresses 95% of false positives. ESLint users with 100+ custom rules will need to audit, but most are covered by Biome's rule set. The real win: no more eslint --fix taking 30 seconds. Biome's fix is instant. ESLint wins only if you have a plugin that literally doesn't exist in Biome—like a niche security rule for ancient frameworks. For 99% of modern stacks (React, Vue, TypeScript, Node), Biome has you covered. The migration effort is trivial; the productivity gain is permanent. Stop pretending your legacy config is sacred.
Quick Comparison
| Factor | Biome | ESLint |
|---|---|---|
| Speed | 10-100x faster | Slow on large projects |
| Formatting | Built-in | Needs Prettier |
| Config Complexity | Minimal | Complex (.eslintrc) |
| Plugin Ecosystem | Growing (built-in rules) | Massive |
| TypeScript | Native support | Via typescript-eslint |
| Migration | CLI migration tool | N/A (established) |
| IDE Support | VS Code, IntelliJ | Every IDE |
The Verdict
Use Biome if: You're starting a new project, want faster CI, or are tired of configuring ESLint + Prettier.
Use ESLint if: You rely on specific ESLint plugins, have a heavily customized config, or need the widest IDE support.
Consider: If you're using ESLint v9+ with flat config, the configuration story is much better. Evaluate if the speed gain justifies migration.
Biome is 10-100x faster than ESLint, handles both linting AND formatting (replacing Prettier too), and has sane defaults out of the box. The plugin ecosystem gap is real, but for most projects, Biome's built-in rules cover everything you need.
Related Comparisons
Disagree? nice@nicepick.dev