Why We Migrated from ESLint + Prettier to Biome — 40% Faster CI, Zero Config Drift

Biome's Rust-based lint+format in one tool cut our CI lint time from 82s to 48s and eliminated Prettier/ESLint config sync issues — but the rule parity gap means some custom ESLint plugins have no Biome equivalent yet.

Published 2026-06-17

Why We Migrated from ESLint + Prettier to Biome — 40% Faster CI, Zero Config Drift

TL;DR: Biome 1.9 replaced ESLint + Prettier + eslint-config-prettier in our monorepo — CI lint stage dropped from 82s to 48s, config files went from 12 to 1, and zero format-on-save disagreements. But eslint-plugin-import and eslint-plugin-jsx-a11y rules have no Biome equivalents; we keep a minimal ESLint pass for those. Full comparison →

The Context

Three-dev team, TypeScript/React/Next.js monorepo (4 apps, 6 shared packages). ESLint 8 + Prettier 3 + 12 config files (.eslintrc.js, .prettierrc, per-package overrides). CI runners: GitHub Actions ubuntu-latest, 2 vCPUs, 7GB RAM. Pain points: CI lint stage 82s avg, Prettier/ESLint format conflicts on PRs, eslint-config-prettier version drift, 3 devs with different editor format-on-save behavior.

What We Tested

ToolUse CaseVerdictWhy
Biome 1.9 (Rust)Full repo lint + format (CI + local)Single tool, single config, 48s CI (40% faster), zero format conflicts
ESLint 9 + Prettier 3 (flat config)Same repo, migrated config⚠️78s CI, still 2 tools, flat config migration effort high
Biome + Minimal ESLintProduction: Biome for 95%, ESLint for a11y/importsBest of both: Biome speed + ESLint plugin coverage for gaps
Oxlint + PrettierSpeed-only alternative⚠️Oxlint 12s but no formatter; still need Prettier + config sync

The Pivot Point

May 2026: PR #347 — Prettier formatted a ternary one way, ESLint prefer-arrow-callback wanted another. Three devs, three different editor outcomes. Merge blocked. Tried Biome 1.8 locally: biome check --apply fixed both lint + format in one pass, consistent across all editors. Migrated monorepo June 3–5: deleted 12 config files, added biome.json at root with extends: ["recommended"], per-package overrides for test files. CI: biome check --files-ignore-unknown=true replaced eslint . && prettier --check .. Result: 48s avg (was 82s), zero format conflicts since.

What We Use Now

Biome 1.9 as primary lint + format:

  • Config: biome.json at monorepo root, formatter: {enabled: true, indentStyle: "space", lineWidth: 100}, linter: {enabled: true, rules: {recommended: true, suspicious: {noExplicitAny: "warn"}}}
  • Editor: Zed formatter: "biome", VS Code biome extension, editor.formatOnSave: true
  • CI: pnpm biome ci (fail on warning), pnpm biome format --write (auto-fix in dependabot PRs)

ESLint 9 (flat config, minimal) for plugin gaps only:

  • Config: eslint.config.mjs with plugin:@typescript-eslint/recommended, plugin:jsx-a11y/recommended, plugin:import/recommended
  • Runs: pnpm eslint:plugins in CI (separate job, 12s) — only jsx-a11y and import rules
  • Rules disabled in Biome: no-restricted-imports, jsx-a11y/*, import/*

When You’d Choose Differently

  • ESLint + Prettier if you rely heavily on eslint-plugin-import (alias resolution, cycle detection), eslint-plugin-jsx-a11y (comprehensive a11y), or custom internal plugins — Biome’s rule set covers ~70% of eslint:recommended but plugin ecosystem is young.
  • Oxlint + Prettier if raw lint speed is the only metric — Oxlint is 4× faster than Biome lint but has no formatter, no autofix, no LSP.
  • Rome (Biome’s predecessor) — deprecated, don’t use.

Tool Crucible Rating

DimensionRating (1–5)Notes
Overall4Single-tool DX win; plugin gaps prevent full migration for some teams
Ease of Use5One config, one CLI, one LSP, VS Code/Zed/Neovim support — drop-in for most
Value5Free, open-source, MIT, no telemetry, replaces 2 paid-tool-equivalents
Support4Active Discord, weekly releases, Biome 2.0 (2026 H2) promises plugin API

This is part of our Toolchain Migration series. See full comparison: Biome vs ESLint + Prettier: Migration Guide for TypeScript Monorepos

Last reviewed 2026-06-17. See our methodology and affiliate policy.