Biome
One tool for formatting, linting, and import sorting. It replaces the ESLint + Prettier combination with a single config file.
- Last reviewed
- Applies to
- Biome 2.5
- Website
- biomejs.dev
Good for
- New projects: one dependency and one config file give you complete code standards
- Having the AI fix formatting and simple mistakes automatically after every change
- Anyone burned by ESLint plugins fighting Prettier config
Not for
- Projects that depend heavily on ESLint plugin rules Biome does not have yet
Code standards matter even more for AI-written code: the AI may write in a different style each time, formatting makes it consistent, and static checks catch unused variables, misused hooks, and accessibility issues before anything runs.
Why it is our top pick
- One tool, two jobs. Instead of ESLint, Prettier, a pile of plugins, and config to stop them fighting, Biome needs one dependency and one
biome.json. - Fast. Written in Rust, it usually checks a whole project in under a second, so running it after every AI change costs nothing.
- Useful rules out of the box. The recommended set covers common mistakes, with rule domains for React, Next.js, and test code.
- It fixes things.
biome check --writeformats, sorts imports, and applies safe fixes.
Getting started
pnpm add -D -E @biomejs/biome
pnpm exec biome init
Then add two scripts to package.json: "lint": "biome check ." and "format": "biome check --write .".
Migrating from ESLint + Prettier
Biome provides biome migrate eslint and biome migrate prettier to convert existing config. After migrating, run biome format once, confirm the formatting diff is small, and commit it in one go. This site migrated exactly that way, with a single formatting difference across the whole repository.
Rules for the AI
- After a change, run
pnpm format, thenpnpm lint. - Do not bypass rules with ignore comments; when an exception is truly needed, explain why in the comment.
Take it home to your AI
Drop this biome.json into your project, or paste it straight to your AI coding assistant.
{
"$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"trailingCommas": "all"
}
},
"linter": {
"enabled": true,
"rules": {
"preset": "recommended"
},
"domains": {
"react": "recommended",
"test": "recommended"
}
},
"assist": {
"actions": {
"source": {
"organizeImports": "on"
}
}
}
}
Related
- Article
The structure of a frontend project
Start from the folders. A scaffold creates the skeleton, the framework decides how pages are organized, and tests and code standards guard every AI change.
- EntryTop pick
Vitest + Playwright
Vitest runs unit tests, and Playwright runs user flows in a real browser. The more the AI changes, the more you need both layers.