Home Blog Developer Experience and Pl Biome: fast formatter and linter replacing ESLint guide
Developer Experience and Pl May 19, 2026 9 min read

Biome: fast formatter and linter replacing ESLint guide

Developer Experience and Pl Enterprise Guide 2026 SCALE D2C D2C Technology Developer Experience and Pl Enterprise Guide 2026 SCALE D2C D2C Technology

Biome is redefining JavaScript and TypeScript tooling by replacing ESLint and Prettier with a single, dramatically faster tool written in Rust. Launched in 2024 as a fork of Rome, Biome provides formatting, linting, and import organisation in a unified toolchain that runs 10–100× faster than the JavaScript-based tools it replaces. For engineering teams spending significant CI time on lint and format checks, and dealing with configuration complexity across multiple tools, Biome offers a compelling consolidation path.

What Is Biome and What Problem Does It Solve?

Modern JavaScript/TypeScript projects typically chain multiple tools for code quality: ESLint for linting with 10–50 plugins, Prettier for formatting, and often separate import ordering plugins. Each tool has its own configuration, runs separately in CI, and can produce conflicting rules that require careful configuration to reconcile. The combined configuration surface is substantial — a typical .eslintrc.json, .prettierrc, and associated plugin configurations may span hundreds of lines with non-obvious interactions.

Biome replaces this stack with a single Rust binary and a single biome.json configuration file. It performs formatting (Prettier-compatible output by default), linting (290+ rules across JavaScript, TypeScript, JSX, CSS, and JSON), and import organisation. Its Rust implementation and single-pass architecture produce execution times measured in milliseconds for entire large codebases — formatting 97,000 JavaScript files in 0.8 seconds in official benchmarks.

97%
Prettier compatibility — Biome's formatter produces output matching Prettier for 97% of JavaScript and TypeScript code, enabling drop-in replacement for most codebases
25×
Faster formatting than Prettier on typical codebases — the performance difference is most impactful on large monorepos with hundreds of thousands of files
290+
Lint rules available in Biome, covering correctness, style, complexity, security, and accessibility — comparable coverage to ESLint with recommended plugin sets

Migration from ESLint + Prettier to Biome

Biome's migration tooling makes the transition manageable even for large codebases. The biome migrate command analyses existing ESLint and Prettier configurations and generates an equivalent biome.json, flagging rules without Biome equivalents for manual review. The migration process is typically completed in a day for medium-size projects.

Step 1 — Run biome migrate: Execute npx @biomejs/biome migrate eslint --write and npx @biomejs/biome migrate prettier --write to generate initial biome.json from existing configurations. Review the migration report for rules that couldn't be mapped.

Step 2 — Run initial check: Execute biome check --write ./src to apply formatting and auto-fix linting issues. The first run typically produces a large diff — commit it as a dedicated "adopt Biome" commit to keep it separate from functional changes for easier code review history.

Step 3 — Address unmapped rules: Review ESLint rules without Biome equivalents. Most are covered by Biome's rule set under different names; genuinely missing rules may require keeping a minimal ESLint configuration for those specific checks or accepting the gap if the rules are low-priority.

Step 4 — Update CI pipeline: Replace ESLint and Prettier CI steps with biome ci (the CI-specific command that errors on any formatting or linting issues without making changes). A single biome ci command replaces multiple separate tool invocations.

CapabilityBiomeESLint + PrettierNotes
Formatting✅ Built-inPrettier (separate)97% Prettier-compatible output
Linting✅ 290+ rulesESLint + pluginsMost common rules covered
Import organisation✅ Built-inVia eslint-plugin-importConfigurable sort order
TypeScript support✅ NativeVia @typescript-eslintNo separate parser needed
Performance25–100× fasterBaselineMost impactful on large repos
Plugin ecosystemGrowing (limited)Very largeMain trade-off vs ESLint
Config complexitySingle biome.jsonMultiple config filesBiome significantly simpler

Limitations and When to Keep ESLint

Biome's main limitation is ecosystem breadth. ESLint's plugin ecosystem is vast — dedicated plugins for React hooks rules, accessibility (jsx-a11y), security patterns, testing library conventions, and dozens of framework-specific rule sets exist because they were built over years by the community. Biome's plugin system is newer and fewer community rules exist outside the built-in set.

The practical implication: if your ESLint configuration relies heavily on specialised plugins (jsx-a11y for accessibility enforcement, eslint-plugin-security for security rules, framework-specific plugins), migrating to Biome means either accepting reduced rule coverage in those areas or maintaining a parallel minimal ESLint configuration for the specialised rules. This hybrid approach — Biome for formatting and general linting, ESLint only for specialised rules — is a viable migration path for teams that cannot immediately remove all ESLint dependencies.

The recommendation: evaluate Biome for new projects as the default toolchain. For existing projects, migrate opportunistically when the configuration complexity of the current ESLint + Prettier setup is causing pain, with a careful audit of which ESLint rules you actually rely on versus which are installed but rarely triggered.

Biome Configuration Best Practices

⚙️
Minimal biome.json to start
Start with the recommended rule set (linter.rules.recommended: true) rather than selectively enabling rules. Add overrides for project-specific requirements. A 20-line biome.json replacing a 200-line ESLint config is the expected migration outcome for most projects — resist the temptation to re-implement every previous ESLint rule individually.
🔧
IDE integration via VS Code extension
Install the official Biome VS Code extension and configure it as the default formatter for JavaScript, TypeScript, and JSON files. Setting editor.defaultFormatter to "biomejs.biome" in settings.json enables format-on-save with Biome — the most impactful developer experience change in the migration from separate tools.
🔄
Git pre-commit hooks
Configure husky + lint-staged to run biome check --write --staged on staged files before commits. This ensures all committed code meets formatting and linting standards without requiring developers to remember to run the tool manually. The speed advantage of Biome is most visible here — pre-commit checks that previously took 8–15 seconds complete in under a second.
🏗️
Monorepo configuration
Biome supports nested biome.json files for monorepo configurations — a root configuration with overrides per package for project-specific rules. Use the extends field to inherit from a root configuration while allowing per-package customisations. This is significantly simpler than managing per-package ESLint configurations with shared plugin versions across a large monorepo.

Frequently Asked Questions

For the majority of codebases using standard ESLint configurations (recommended rules plus common plugins like eslint-plugin-react and @typescript-eslint), Biome is a near-drop-in replacement with the biome migrate tooling handling most of the configuration conversion automatically. The Prettier-compatible formatter ensures minimal formatting diffs in initial migration. The caveats are: ESLint plugins with no Biome equivalent require separate handling, and some ESLint rules have slightly different default severity or behaviour in Biome. Expect a migration taking 1–4 hours for a medium-size project, not days — the tooling is designed for low-friction adoption.

Biome has a plugin system in active development as of 2026, but it is less mature and has fewer community plugins than ESLint's ecosystem. Custom rules for Biome are written in GritQL (a pattern language for code analysis) rather than JavaScript — a learning curve for teams accustomed to writing ESLint rules. The built-in 290+ rules cover the most common needs, but highly specialised rules (domain-specific patterns, proprietary coding conventions) may require staying with ESLint for those specific checks. The Biome team's stated roadmap is to expand the plugin ecosystem significantly — the limitation is improving with each release.

Biome supports CSS formatting and linting (with a growing CSS-specific rule set) and JSON formatting with optional JSON schema validation. The CSS support makes Biome viable as a comprehensive formatter for projects using CSS modules, plain CSS, or CSS-in-JS approaches that produce CSS files. JSON formatting with sort-keys option is useful for enforcing consistent ordering in package.json, tsconfig.json, and other configuration files. The consistent multi-language support from a single tool reduces the number of separate formatters needed in a typical frontend project.

Biome currently has limited support for Vue (`.vue`) and Svelte (`.svelte`) single-file component formats — it can process the JavaScript/TypeScript parts of these files but does not fully understand the template syntax. For Vue and Svelte projects, the typical approach is using Biome for TypeScript/JavaScript files (including `

Free Audit