TECH_COMPARISON

Biome vs ESLint: Linting and Formatting Tools Compared

Compare Biome and ESLint on speed, configuration, formatting, rule coverage, and migration from existing setups.

14 min readUpdated Jan 15, 2025
biomeeslintlintingformatting

Overview

Biome and ESLint represent two different generations of JavaScript tooling. ESLint has been the standard JavaScript linter for over a decade, with a massive plugin ecosystem and deep integration into every editor and CI system. Biome (formerly Rome) is a Rust-based toolchain that combines linting and formatting into a single, blazingly fast tool — aiming to replace ESLint and Prettier together.

The appeal of Biome is simplicity and speed. Instead of configuring ESLint, Prettier, eslint-config-prettier, @typescript-eslint/parser, and a dozen plugins, you install one tool with sensible defaults.

Key Technical Differences

Biome's Rust implementation delivers dramatic speed improvements. On large codebases with thousands of files, Biome completes linting and formatting in milliseconds where ESLint takes seconds. This difference matters in CI pipelines and in editor integrations where responsiveness affects the development experience. The speed comes from native parsing, parallel execution, and zero JavaScript interpreter overhead.

Biome unifies linting and formatting. ESLint handles linting and Prettier handles formatting, but combining them requires eslint-config-prettier to disable conflicting rules and eslint-plugin-prettier to run Prettier as an ESLint rule. This setup is fragile and confusing. Biome handles both concerns natively — one tool, one config file, no conflicts.

The trade-off is rule coverage and extensibility. ESLint's plugin ecosystem provides rules for React, Vue, accessibility (eslint-plugin-jsx-a11y), imports (eslint-plugin-import), and hundreds of other concerns. Biome has 200+ built-in rules covering common JavaScript, TypeScript, and React patterns, but it does not yet support plugins. If you need niche rules for your framework or internal coding standards, ESLint is the only option.

Biome also lacks type-aware linting. ESLint with @typescript-eslint can use TypeScript's type checker to enforce rules like no-floating-promises or no-misused-promises. Biome's rules are syntax-based only, which means certain categories of type-safety rules are not available.

Performance & Scale

Biome is 10-100x faster than ESLint depending on project size and rule configuration. For a monorepo with 10,000+ files, this translates from minutes to seconds in CI. The speed advantage is also felt in editors — formatting on save is essentially instant, even for large files.

Biome's migration tooling (biome migrate) can automatically convert ESLint and Prettier configurations, mapping rules to their Biome equivalents. This reduces the friction of switching, though manual adjustments are needed for rules without direct equivalents.

When to Choose Each

Choose Biome for new projects where you want the simplest possible setup with maximum speed. One dependency, one config file, and sensible defaults cover most TypeScript and React projects. The speed improvements in CI and editor responsiveness are immediately noticeable.

Choose ESLint when you need the breadth of its plugin ecosystem, type-aware linting rules, or have complex existing configurations. ESLint's extensibility and community are unmatched, and ESLint v9's flat config simplifies configuration significantly.

Bottom Line

Biome is the future of JavaScript tooling — faster, simpler, and unified. ESLint is the proven present — more rules, more plugins, and deeper ecosystem integration. Choose Biome for speed and simplicity; choose ESLint for extensibility and rule coverage.

GO DEEPER

Master this topic in our 12-week cohort

Our Advanced System Design cohort covers this and 11 other deep-dive topics with live sessions, assignments, and expert feedback.