Biome vs ESLint: The Linter Replacement That Is 100x Faster
Biome is rewriting the rules of JavaScript tooling. Here's how it compares to ESLint in speed, configuration, and developer experience — and whether you should make the switch in 2026.
If you've ever waited 30 seconds for ESLint to finish checking a medium-sized monorepo, you already know the pain. Linting should be invisible — fast enough that you forget it's running. Enter Biome, the Rust-powered toolchain that promises formatting and linting in a single binary, and delivers on that promise with staggering speed improvements.
But speed alone doesn't justify a migration. Let's break down where Biome wins, where ESLint still holds ground, and how to make the switch if you decide to.
The Speed Difference Is Real
Biome processes files in parallel using Rust's native threading model. On a typical Next.js project with 500+ TypeScript files, the numbers speak for themselves:
# ESLint (with TypeScript parser + 12 plugins)
time npx eslint src/
# real 0m28.413s
# Biome
time npx biome check src/
# real 0m0.247s
That's not a typo. Biome consistently runs 80-120x faster than a typical ESLint setup with TypeScript support. The reason is architectural: ESLint spawns a Node.js process, parses each file into an AST using JavaScript, then runs each rule sequentially. Biome does everything in compiled Rust with parallel file processing.
Configuration: Less Is More
One of ESLint's biggest pain points is configuration complexity. Between flat config, legacy .eslintrc, plugin conflicts, and parser setup, teams spend hours just getting linting to work. Biome takes a radically simpler approach:
// biome.json
{
"": "https://biomejs.dev/schemas/1.9.0/schema.json",
"organizeImports": { "enabled": true },
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"complexity": {
"noExcessiveCognitiveComplexity": "warn"
},
"suspicious": {
"noExplicitAny": "error"
}
}
},
"formatter": {
"indentStyle": "space",
"indentWidth": 2
}
}
One file. No plugin installation. No parser configuration. Formatting and linting unified. This alone saves significant onboarding time for new team members.
What About ESLint Plugins?
This is where ESLint still has an edge. The plugin ecosystem is massive — eslint-plugin-react, eslint-plugin-jsx-a11y, @typescript-eslint, and hundreds more. Biome has been steadily implementing the most popular rules natively, and as of 2026 it covers roughly 85% of the rules most teams actually use. But if you rely on niche plugins like eslint-plugin-import sorting or custom rules specific to your codebase, you'll need to verify coverage before migrating.
Migration Path
Biome ships a migration command that reads your existing ESLint config and maps rules to their Biome equivalents. It won't catch everything, but it handles the common cases well. For a Next.js project, the typical migration looks like this: install Biome, run the migration, remove ESLint dependencies, and update your CI pipeline.
The biggest win comes in CI. If your lint step was taking 30-45 seconds, it now takes under a second. Multiply that by every PR and every push, and you're saving real developer hours over a quarter.
When to Stay With ESLint
ESLint remains the right choice if your team depends heavily on custom rules, if you need AST-level plugins that Biome hasn't implemented, or if you're in a large organization where the migration cost outweighs the speed benefit. ESLint's new flat config system has also improved the configuration story significantly.
The Verdict
For most frontend teams in 2026, Biome is the better default. It's faster, simpler to configure, and covers the rules that matter. The speed improvement alone transforms the developer experience — linting becomes something you genuinely don't notice, which is exactly how it should be. Start with npx biome init on a side project and see for yourself.
Admin
Cal.com
Open source scheduling — tự host booking system, thay thế Calendly. Free & privacy-first.
Bình luận (0)
Đăng nhập để bình luận
Chưa có bình luận nào. Hãy là người đầu tiên!