Biome
Research Date: 2026-02-23
Source URL: https://biomejs.dev
GitHub Repository: https://github.com/biomejs/biome
Version at Research: v2.4.3
License: MIT OR Apache 2.0
Overview
Biome is a high-performance, all-in-one toolchain for web projects built in Rust that combines formatting (97% Prettier compatibility), linting (450+ rules from ESLint/typescript-eslint), and import organization into a single binary. It runs ~35× faster than Prettier, requires zero configuration to get started, provides first-class LSP support for editor integration, and in v2 introduced type-aware linting without requiring the TypeScript compiler — making it a drop-in replacement for the ESLint + Prettier toolchain.
Problem Addressed
| Problem |
Solution |
| Maintaining separate ESLint and Prettier configs with frequent version conflicts |
Single biome check command runs formatting, linting, and import organization together with a unified biome.json config |
| Slow CI times from running ESLint and Prettier over large codebases |
Rust-based parallel processing runs ~35× faster than Prettier and significantly faster than ESLint |
| Type-aware linting requires slow TypeScript compiler invocation |
v2 type inference engine works independently of the TypeScript compiler, providing type-aware rules without tsc overhead |
| ESLint + Prettier produce obscure, hard-to-act-on errors |
Biome outputs detailed, contextualized diagnostics with exact source locations and safe-fix suggestions |
| Different tooling for different JS/TS languages (JSX, TSX, CSS, GraphQL) |
First-class support for JS, TS, JSX, TSX, JSON, HTML, CSS, GraphQL in a single tool |
| Configuring and maintaining lint rules across a monorepo |
Nested biome.json configuration files are fully supported with per-package overrides in v2 |
Key Statistics
| Metric |
Value |
Date Gathered |
| GitHub Stars |
~23.8K |
2026-02-23 |
| Contributors |
18 core + active community |
2026-02-23 |
| Latest Release |
v2.4.3 |
2026-02-23 |
| Formatting Speed |
~35× faster than Prettier (171K LOC, 2104 files) |
2026-02-23 |
| Prettier Compatibility |
97% |
2026-02-23 |
| Lint Rules |
450+ (from ESLint, typescript-eslint, and others) |
2026-02-23 |
| Supported Languages |
JS, TS, JSX, TSX, JSON, HTML, CSS, GraphQL |
2026-02-23 |
Key Features
Formatting
- 97% compatibility with Prettier for JS, TS, JSX, TSX, JSON, CSS, GraphQL, HTML
- Formats malformed code during editing via LSP
- ~35× faster than Prettier on large codebases
- Configurable indent style (space/tab), indent width, line width, quote style, trailing commas, semicolons
Linting
- 450+ rules sourced from ESLint, typescript-eslint, and additional sources
- Rule categories: correctness, complexity, style, suspicious, performance, accessibility, security, nursery
- Safe and unsafe fix suggestions with one-command auto-apply
- Detailed diagnostic output showing exact problem location and remediation
Type-Aware Linting (v2)
- New type inference engine independent of the TypeScript compiler
- Multi-file analysis: scans project and
node_modules to build type graph
- ~75% detection coverage vs
typescript-eslint for rules like noFloatingPromises with no tsc overhead
- Opt-in via
project domain rules; does not affect performance for non-type-aware linting
- Full monorepo support: uses the correct
package.json per package
Import Organization
- Automatic import sorting and deduplication via
assist.actions.source.organizeImports
- Controlled via
biome check --write or as part of CI via biome ci
Editor Integration
- First-party extensions for VS Code, IntelliJ, and Zed
- Community extensions for Vim, Neovim, Sublime Text
- LSP server with full error recovery and format-on-save support
- Formats and lints malformed code as you type
Zero-Config & Standalone
- Works out of the box with
npx @biomejs/biome check --write ./src
- Optional
biome.json for project-level configuration (npx @biomejs/biome init)
- Standalone binary available without Node.js
- Git VCS integration: respects
.gitignore patterns via vcs.useIgnoreFile
CI Integration
biome ci command enforces code quality in CI pipelines (equivalent to biome check without writes)
- GitHub Actions and GitLab CI recipes provided in official documentation
- Exits with non-zero status on any violation for gate enforcement
Technical Architecture
Core Design
Biome is built in Rust with an architecture inspired by rust-analyzer, providing:
- Shared parser: A single parser produces a full-fidelity syntax tree (including trivia like whitespace and comments) used by both the formatter and linter — no double-parsing overhead
- Error recovery: Parser continues after syntax errors, enabling formatting and linting of malformed code
- Parallel execution: Files are processed in parallel using Rayon-based work-stealing
- Single binary: All tools ship in one executable, eliminating version coordination between tools
v2 File Scanner
biome check --write ./src
↓
File Scanner (opt-in for project domain rules)
↓ discovers all .js/.ts/.jsx/.tsx files
Parallel parser farm (one thread per CPU core)
↓ produces full-fidelity CSTs
Formatter pass → emit formatted text
↓
Linter pass (per-file rules) → collect diagnostics
↓
Type Inference Engine (project domain rules only)
↓ queries multi-file type graph
Type-aware lint rules → additional diagnostics
↓
Write fixes + report summary
Configuration Hierarchy
biome.json (project root)
↓ overridden by
packages/pkg-a/biome.json (nested config, v2+)
↓ overridden by
CLI flags
↓ overridden by
BIOME_* environment variables
Installation & Usage
Installation
# As a dev dependency (recommended)
npm i -D -E @biomejs/biome
# pnpm
pnpm add -D -E @biomejs/biome
# Standalone binary (no Node.js required)
# See: https://biomejs.dev/guides/manual-installation/
Quick Start
# Initialize biome.json
npx @biomejs/biome init
# Format all files
npx @biomejs/biome format --write ./src
# Lint with safe auto-fixes
npx @biomejs/biome lint --write ./src
# Format + lint + organize imports (recommended)
npx @biomejs/biome check --write ./src
# CI enforcement (no writes, exits non-zero on violations)
npx @biomejs/biome ci ./src
Example biome.json
{
"$schema": "https://biomejs.dev/schemas/2.4.3/schema.json",
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100
},
"linter": {
"enabled": true,
"rules": { "recommended": true }
},
"javascript": {
"formatter": { "quoteStyle": "single", "semicolons": "always" }
},
"assist": {
"enabled": true,
"actions": { "source": { "organizeImports": "on" } }
}
}
Migrate from ESLint + Prettier
# Automated migration command
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
Relevance to Claude Code Development
Applications
This repository already uses Biome (biome.json at repo root) for JS/TS linting and formatting via CI (.github/workflows/code-quality.yml) and pre-commit hooks (.pre-commit-config.yaml). The current config uses v2.3.13 schema with recommended rules and single-quote JS formatting.
Enforcing Code Quality in Hook Scripts:
- Claude Code hooks (
.claude/hooks/*.cjs, plugins/*/hooks/*.cjs) are CommonJS Node.js files that benefit from Biome's linting and formatting
biome check --write can be added to the pre-commit hook pipeline for hook script quality
CI Quality Gate Integration:
npx @biomejs/biome ci already runs in CI and can be extended with project-domain type-aware rules
- Exit-code-based gate pattern directly supports Claude Code's pre-push quality enforcement
Patterns Worth Adopting
Single-Tool Simplicity over Toolchain Composition:
- Biome's single-binary approach (formatter + linter + import organizer) eliminates the "N tools, N config files, N version conflicts" problem
- Skills and plugins can document "use
biome check --write for JS/TS" as the single authoritative command
Zero-Config First, Config When Needed:
- Biome works with zero configuration — a pattern worth applying to Claude Code plugin defaults
- Optional
biome.json only when project-level overrides are necessary
Opt-In Performance Cost:
- v2 type inference is opt-in, not default — isolating expensive multi-file scans to rules that need them
- Pattern: define expensive analysis as opt-in with explicit user consent (analogous to
--all-files vs targeted pre-commit runs)
Unified CLI Verbs:
format, lint, check (all), ci (CI-only no-write) provide clear semantic separation
- Pattern for skill CLI design: discrete verbs for distinct phases of a workflow
Integration Opportunities
Upgrade biome.json to v2.4.3 Schema:
- Current repo config references schema
2.3.13; upgrading to 2.4.3 enables access to new v2 rules and HTML support
- Run
npx @biomejs/biome migrate --write to auto-apply breaking config changes
Enable Type-Aware Rules:
- Add
project domain rules to biome.json to detect floating promises, undefined type access, and other type errors in hook scripts
- Provides ESLint
@typescript-eslint/no-floating-promises equivalent without TypeScript compiler dependency
Claude Code Plugin for Biome Diagnostics:
- A skill that runs
biome check --json ./src and parses the structured JSON output to present lint findings in a structured agent-readable format
- Integration point:
plugins/holistic-linting/skills/biome-diagnostics/
Pre-commit Hook for Hook Scripts:
- Add
npx @biomejs/biome check --write as a pre-commit stage specifically for .cjs hook files
- Ensures all Claude Code hooks maintain consistent style without separate ESLint config
References
Freshness Tracking
| Field |
Value |
| Last Verified |
2026-02-23 |
| Version at Verification |
v2.4.3 |
| Next Review Recommended |
2026-05-23 |
1---2name: 419-biome-7c46c8b23description: Biome4---5# Biome67**Research Date**: 2026-02-238**Source URL**: <https://biomejs.dev>9**GitHub Repository**: <https://github.com/biomejs/biome>10**Version at Research**: v2.4.311**License**: MIT OR Apache 2.01213---1415## Overview1617Biome is a high-performance, all-in-one toolchain for web projects built in Rust that combines formatting (97% Prettier compatibility), linting (450+ rules from ESLint/typescript-eslint), and import organization into a single binary. It runs ~35× faster than Prettier, requires zero configuration to get started, provides first-class LSP support for editor integration, and in v2 introduced type-aware linting without requiring the TypeScript compiler — making it a drop-in replacement for the ESLint + Prettier toolchain.1819---2021## Problem Addressed2223| Problem | Solution |24|---------|----------|25| Maintaining separate ESLint and Prettier configs with frequent version conflicts | Single `biome check` command runs formatting, linting, and import organization together with a unified `biome.json` config |26| Slow CI times from running ESLint and Prettier over large codebases | Rust-based parallel processing runs ~35× faster than Prettier and significantly faster than ESLint |27| Type-aware linting requires slow TypeScript compiler invocation | v2 type inference engine works independently of the TypeScript compiler, providing type-aware rules without `tsc` overhead |28| ESLint + Prettier produce obscure, hard-to-act-on errors | Biome outputs detailed, contextualized diagnostics with exact source locations and safe-fix suggestions |29| Different tooling for different JS/TS languages (JSX, TSX, CSS, GraphQL) | First-class support for JS, TS, JSX, TSX, JSON, HTML, CSS, GraphQL in a single tool |30| Configuring and maintaining lint rules across a monorepo | Nested `biome.json` configuration files are fully supported with per-package overrides in v2 |3132---3334## Key Statistics3536| Metric | Value | Date Gathered |37|--------|-------|---------------|38| GitHub Stars | ~23.8K | 2026-02-23 |39| Contributors | 18 core + active community | 2026-02-23 |40| Latest Release | v2.4.3 | 2026-02-23 |41| Formatting Speed | ~35× faster than Prettier (171K LOC, 2104 files) | 2026-02-23 |42| Prettier Compatibility | 97% | 2026-02-23 |43| Lint Rules | 450+ (from ESLint, typescript-eslint, and others) | 2026-02-23 |44| Supported Languages | JS, TS, JSX, TSX, JSON, HTML, CSS, GraphQL | 2026-02-23 |4546---4748## Key Features4950### Formatting5152- 97% compatibility with Prettier for JS, TS, JSX, TSX, JSON, CSS, GraphQL, HTML53- Formats malformed code during editing via LSP54- ~35× faster than Prettier on large codebases55- Configurable indent style (space/tab), indent width, line width, quote style, trailing commas, semicolons5657### Linting5859- 450+ rules sourced from ESLint, typescript-eslint, and additional sources60- Rule categories: correctness, complexity, style, suspicious, performance, accessibility, security, nursery61- Safe and unsafe fix suggestions with one-command auto-apply62- Detailed diagnostic output showing exact problem location and remediation6364### Type-Aware Linting (v2)6566- New type inference engine independent of the TypeScript compiler67- Multi-file analysis: scans project and `node_modules` to build type graph68- ~75% detection coverage vs `typescript-eslint` for rules like `noFloatingPromises` with no `tsc` overhead69- Opt-in via `project` domain rules; does not affect performance for non-type-aware linting70- Full monorepo support: uses the correct `package.json` per package7172### Import Organization7374- Automatic import sorting and deduplication via `assist.actions.source.organizeImports`75- Controlled via `biome check --write` or as part of CI via `biome ci`7677### Editor Integration7879- First-party extensions for VS Code, IntelliJ, and Zed80- Community extensions for Vim, Neovim, Sublime Text81- LSP server with full error recovery and format-on-save support82- Formats and lints malformed code as you type8384### Zero-Config & Standalone8586- Works out of the box with `npx @biomejs/biome check --write ./src`87- Optional `biome.json` for project-level configuration (`npx @biomejs/biome init`)88- Standalone binary available without Node.js89- Git VCS integration: respects `.gitignore` patterns via `vcs.useIgnoreFile`9091### CI Integration9293- `biome ci` command enforces code quality in CI pipelines (equivalent to `biome check` without writes)94- GitHub Actions and GitLab CI recipes provided in official documentation95- Exits with non-zero status on any violation for gate enforcement9697---9899## Technical Architecture100101### Core Design102103Biome is built in Rust with an architecture inspired by `rust-analyzer`, providing:104105- **Shared parser**: A single parser produces a full-fidelity syntax tree (including trivia like whitespace and comments) used by both the formatter and linter — no double-parsing overhead106- **Error recovery**: Parser continues after syntax errors, enabling formatting and linting of malformed code107- **Parallel execution**: Files are processed in parallel using Rayon-based work-stealing108- **Single binary**: All tools ship in one executable, eliminating version coordination between tools109110### v2 File Scanner111112```text113biome check --write ./src114 ↓115File Scanner (opt-in for project domain rules)116 ↓ discovers all .js/.ts/.jsx/.tsx files117Parallel parser farm (one thread per CPU core)118 ↓ produces full-fidelity CSTs119Formatter pass → emit formatted text120 ↓121Linter pass (per-file rules) → collect diagnostics122 ↓123Type Inference Engine (project domain rules only)124 ↓ queries multi-file type graph125Type-aware lint rules → additional diagnostics126 ↓127Write fixes + report summary128```129130### Configuration Hierarchy131132```text133biome.json (project root)134 ↓ overridden by135packages/pkg-a/biome.json (nested config, v2+)136 ↓ overridden by137CLI flags138 ↓ overridden by139BIOME_* environment variables140```141142---143144## Installation & Usage145146### Installation147148```bash149# As a dev dependency (recommended)150npm i -D -E @biomejs/biome151152# pnpm153pnpm add -D -E @biomejs/biome154155# Standalone binary (no Node.js required)156# See: https://biomejs.dev/guides/manual-installation/157```158159### Quick Start160161```bash162# Initialize biome.json163npx @biomejs/biome init164165# Format all files166npx @biomejs/biome format --write ./src167168# Lint with safe auto-fixes169npx @biomejs/biome lint --write ./src170171# Format + lint + organize imports (recommended)172npx @biomejs/biome check --write ./src173174# CI enforcement (no writes, exits non-zero on violations)175npx @biomejs/biome ci ./src176```177178### Example biome.json179180```json181{182 "$schema": "https://biomejs.dev/schemas/2.4.3/schema.json",183 "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },184 "formatter": {185 "enabled": true,186 "indentStyle": "space",187 "indentWidth": 2,188 "lineWidth": 100189 },190 "linter": {191 "enabled": true,192 "rules": { "recommended": true }193 },194 "javascript": {195 "formatter": { "quoteStyle": "single", "semicolons": "always" }196 },197 "assist": {198 "enabled": true,199 "actions": { "source": { "organizeImports": "on" } }200 }201}202```203204### Migrate from ESLint + Prettier205206```bash207# Automated migration command208npx @biomejs/biome migrate eslint --write209npx @biomejs/biome migrate prettier --write210```211212---213214## Relevance to Claude Code Development215216### Applications217218**This repository already uses Biome** (`biome.json` at repo root) for JS/TS linting and formatting via CI (`.github/workflows/code-quality.yml`) and pre-commit hooks (`.pre-commit-config.yaml`). The current config uses v2.3.13 schema with recommended rules and single-quote JS formatting.219220**Enforcing Code Quality in Hook Scripts**:221- Claude Code hooks (`.claude/hooks/*.cjs`, `plugins/*/hooks/*.cjs`) are CommonJS Node.js files that benefit from Biome's linting and formatting222- `biome check --write` can be added to the pre-commit hook pipeline for hook script quality223224**CI Quality Gate Integration**:225- `npx @biomejs/biome ci` already runs in CI and can be extended with project-domain type-aware rules226- Exit-code-based gate pattern directly supports Claude Code's pre-push quality enforcement227228### Patterns Worth Adopting229230**Single-Tool Simplicity over Toolchain Composition**:231- Biome's single-binary approach (formatter + linter + import organizer) eliminates the "N tools, N config files, N version conflicts" problem232- Skills and plugins can document "use `biome check --write` for JS/TS" as the single authoritative command233234**Zero-Config First, Config When Needed**:235- Biome works with zero configuration — a pattern worth applying to Claude Code plugin defaults236- Optional `biome.json` only when project-level overrides are necessary237238**Opt-In Performance Cost**:239- v2 type inference is opt-in, not default — isolating expensive multi-file scans to rules that need them240- Pattern: define expensive analysis as opt-in with explicit user consent (analogous to `--all-files` vs targeted pre-commit runs)241242**Unified CLI Verbs**:243- `format`, `lint`, `check` (all), `ci` (CI-only no-write) provide clear semantic separation244- Pattern for skill CLI design: discrete verbs for distinct phases of a workflow245246### Integration Opportunities247248**Upgrade biome.json to v2.4.3 Schema**:249- Current repo config references schema `2.3.13`; upgrading to `2.4.3` enables access to new v2 rules and HTML support250- Run `npx @biomejs/biome migrate --write` to auto-apply breaking config changes251252**Enable Type-Aware Rules**:253- Add `project` domain rules to `biome.json` to detect floating promises, undefined type access, and other type errors in hook scripts254- Provides ESLint `@typescript-eslint/no-floating-promises` equivalent without TypeScript compiler dependency255256**Claude Code Plugin for Biome Diagnostics**:257- A skill that runs `biome check --json ./src` and parses the structured JSON output to present lint findings in a structured agent-readable format258- Integration point: `plugins/holistic-linting/skills/biome-diagnostics/`259260**Pre-commit Hook for Hook Scripts**:261- Add `npx @biomejs/biome check --write` as a pre-commit stage specifically for `.cjs` hook files262- Ensures all Claude Code hooks maintain consistent style without separate ESLint config263264---265266## References267268- [Biome Official Website](https://biomejs.dev) (accessed 2026-02-23)269- [biomejs/biome GitHub Repository](https://github.com/biomejs/biome) (accessed 2026-02-23)270- [Biome Getting Started Guide](https://biomejs.dev/guides/getting-started/) (accessed 2026-02-23)271- [Biome v2 Release Announcement](https://biomejs.dev/blog/biome-v2/) (accessed 2026-02-23)272- [Biome v2.3 Release - Vue/Svelte/Astro Support](https://biomejs.dev/blog/biome-v2-3/) (accessed 2026-02-23)273- [Biome Roadmap 2025](https://biomejs.dev/blog/roadmap-2025/) (accessed 2026-02-23)274- [Biome Linter Rules Reference](https://biomejs.dev/linter/) (accessed 2026-02-23)275- [Biome Configuration Reference](https://biomejs.dev/reference/configuration) (accessed 2026-02-23)276277---278279## Freshness Tracking280281| Field | Value |282|-------|-------|283| Last Verified | 2026-02-23 |284| Version at Verification | v2.4.3 |285| Next Review Recommended | 2026-05-23 |