Skip to main content
Back to Blog
Comparisons
3 min read
October 12, 2024

Biome vs ESLint + Prettier: Code Quality Tooling Comparison

Biome replaces ESLint and Prettier with a single, faster tool written in Rust. Compare speed, compatibility, and migration effort.

Ryel Banfield

Founder & Lead Developer

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:

ToolTimeSpeedup vs ESLint+Prettier
ESLint + Prettier45 secondsBaseline
Biome0.8 seconds~56x faster

On a single file save (lint + format):

ToolTime
ESLint + Prettier200-500ms
Biome5-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

FeatureESLint + PrettierBiome
Linting300+ built-in rules200+ rules (growing)
FormattingOpinionated + configurablePrettier-compatible
Language supportJS, TS, JSX, TSX + pluginsJS, TS, JSX, TSX, JSON, CSS
Framework pluginsReact, Vue, Angular, etc.Growing (limited vs ESLint)
Custom rulesYes (ESLint plugin API)No (planned)
Configuration.eslintrc + .prettierrcbiome.json (single file)
Editor supportAll major editorsVS Code, IntelliJ, Neovim
Import sortingeslint-plugin-importBuilt-in
Auto-fixYes (many rules)Yes (many rules)
CSS lintingSeparate 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 FeatureImpact
Custom rule APICannot write project-specific rules
Some framework-specific rulesReact a11y rules partially covered
eslint-plugin-import full feature setImport organization rules partial
Angular/Vue template lintingNot supported
Ecosystem of 2,000+ community rulesGrowing but much smaller
Shareable configsBasic 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 SizeMigration Time
< 50 files30 minutes
50-500 files1-2 hours
500+ files2-4 hours

Most time is spent on formatting differences (Biome's formatting is Prettier-compatible but not identical).

When to Choose Biome

  1. New projects (no migration cost, modern defaults)
  2. Speed-sensitive CI (minutes saved per pipeline run)
  3. Simpler tooling preference (one tool vs three)
  4. Standard linting needs (Biome's rules cover 90% of projects)
  5. Large codebases where lint/format time is noticeable

When to Stay with ESLint + Prettier

  1. Specialized ESLint plugins your project depends on
  2. Custom ESLint rules written for your codebase
  3. Angular or Vue template linting requirements
  4. Team familiarity (migration has a learning curve)
  5. 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.

BiomeESLintPrettierlintingformattingcomparison

Ready to Start Your Project?

RCB Software builds world-class websites and applications for businesses worldwide.

Get in Touch

Related Articles