Your project root is cluttered: .eslintrc.json, .eslintignore, .prettierrc, .prettierignore, lint-staged.config.js.
Change one rule, wait five seconds for ESLint and Prettier to finish before committing.
Biome is one tool, one config file, 35x faster.
What Is Biome
Biome is a Rust-based frontend toolchain that combines a formatter and linter into a single CLI. Its formatter achieves 97% compatibility with Prettier, and its linter has 455 rules covering what used to require ESLint + TypeScript ESLint + several plugins.
Supported languages: JavaScript, TypeScript, JSX, TSX, JSON, CSS, HTML, GraphQL.
AWS, Google, Microsoft, Discord, Vercel, and Cloudflare all use it.
Installation
| |
Initialize a config file:
| |
This generates biome.json:
| |
Three Core Commands
| |
For CI, use biome ci — it returns a non-zero exit code on issues, failing the pipeline:
| |
biome.json Configuration
| |
Language-Specific Settings
Different languages can have different rules. For example, to disable formatting for JSON:
| |
Lint Rule Categories
Biome organizes rules into eight groups:
- correctness: Guaranteed errors or dead code
- suspicious: Likely incorrect patterns
- style: Consistent, idiomatic code
- complexity: Overly complex constructs
- performance: Performance issues
- security: Security vulnerabilities
- a11y: Accessibility problems
- nursery: New experimental rules (opt-in)
Disable an entire group:
| |
Migrating from ESLint + Prettier
Biome provides automatic migration commands:
| |
migrate prettier converts .prettierrc settings into Biome’s formatter config.
migrate eslint reads your .eslintrc.json (or flat config), maps what it can to Biome rules, and adds comments explaining anything it couldn’t convert.
After migration, clean up:
| |
Then run a check to verify everything works:
| |
Update package.json Scripts
Before:
| |
After:
| |
Using with Lefthook
If you use Lefthook for Git hooks, replace Husky + lint-staged + ESLint + Prettier with:
| |
One command replaces three tools.
Performance
Official benchmark: formatting 171,127 lines across 2,104 files on an Intel Core i7 1270P — Biome is 35x faster than Prettier.
In practice: biome check on large projects usually completes in under a second. What took 10-15 seconds with ESLint + Prettier is now nearly instant.
Caveats
Not every ESLint plugin has a Biome equivalent. If you rely on specific plugins (some eslint-plugin-import rules, for example), verify Biome covers them before migrating. Most common TypeScript ESLint rules are supported.
Test on a small project first, then roll it out to your main codebase once you’re confident.
