Overview
Master Biome configuration including biome.json setup, schema versions, VCS integration, and project organization for optimal JavaScript/TypeScript tooling.
Overview
Biome is a fast, modern toolchain for JavaScript and TypeScript projects that combines linting and formatting in a single tool. It's designed as a performant alternative to ESLint and Prettier, written in Rust for maximum speed.
Installation and Setup
Basic Installation
Install Biome in your project:
npm install --save-dev @biomejs/biome
# or
pnpm add -D @biomejs/biome
# or
yarn add -D @biomejs/biome
Initialize Configuration
Create a basic biome.json configuration:
npx biome init
This creates a biome.json file in your project root.
Configuration File Structure
Basic biome.json
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false,
"ignore": []
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 80
},
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"trailingCommas": "es5"
}
}
}
Schema Versioning
Always use the correct schema version matching your Biome installation:
# Check Biome version
npx biome --version
# Migrate configuration to current version
npx biome migrate --write
The $schema field enables IDE autocomplete and validation:
{
"$schema": "https://biomejs.dev/schemas/2.3.6/schema.json"
}
VCS Integration
Configure version control integration to respect .gitignore:
{
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true,
"defaultBranch": "main"
}
}
Options:
enabled: Enable VCS integrationclientKind: "git" for Git repositoriesuseIgnoreFile: Respect .gitignore patternsdefaultBranch: Default branch name for operations
File Management
File Patterns
Control which files Biome processes:
{
"files": {
"ignoreUnknown": false,
"ignore": [
"**/node_modules/**",
"**/dist/**",
"**/.next/**",
"**/build/**",
"**/.cache/**"
],
"include": ["src/**/*.ts", "src/**/*.tsx"]
}
}
Common Ignore Patterns
{
"files": {
"ignore": [
"**/node_modules/",
"**/dist/",
"**/build/",
"**/.next/",
"**/.cache/",
"**/coverage/",
"**/*.min.js",
"**/*.log"
]
}
}
Formatter Configuration
Basic Formatter Settings
{
"formatter": {
"enabled": true,
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 80
}
}
Options:
enabled: Enable/disable formatterformatWithErrors: Format even with syntax errorsindentStyle: "space" or "tab"indentWidth: Number of spaces (2 or 4 recommended)lineEnding: "lf", "crlf", or "cr"lineWidth: Maximum line length
Language-Specific Formatting
JavaScript/TypeScript
{
"javascript": {
"formatter": {
"quoteStyle": "single",
"quoteProperties": "asNeeded",
"trailingCommas": "all",
"semicolons": "always",
"arrowParentheses": "always",
"bracketSpacing": true,
"bracketSameLine": false
}
}
}
JSON
{
"json": {
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 80,
"trailingCommas": "none"
}
}
}
Linter Configuration
Enable Recommended Rules
{
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
}
}
Rule Categories
Configure specific rule groups:
{
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"a11y": {
"recommended": true
},
"complexity": {
"recommended": true
},
"correctness": {
"recommended": true
},
"performance": {
"recommended": true
},
"security": {
"recommended": true
},
"style": {
"recommended": true
},
"suspicious": {
"recommended": true
}
}
}
}
Fine-Grained Rule Control
Enable or disable specific rules:
{
"linter": {
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "error",
"noConsoleLog": "warn"
},
"style": {
"useConst": "error",
"noVar": "error"
}
}
}
}
Rule levels:
"off": Disable rule"warn": Show warning"error": Fail check
Monorepo Configuration
Root Configuration
{
"$schema": "https://biomejs.dev/schemas/2.3.6/schema.json",
"extends": [],
"files": {
"ignore": ["**/node_modules/", "**/dist/"]
},
"formatter": {
"enabled": true,
"indentWidth": 2
},
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
}
}
Package-Specific Overrides
Each package can have its own biome.json:
{
"$schema": "https://biomejs.dev/schemas/2.3.6/schema.json",
"extends": ["../../biome.json"],
"linter": {
"rules": {
"suspicious": {
"noConsoleLog": "off"
}
}
}
}
Best Practices
- Use Schema URLs - Always include
$schemafor IDE support - Version Management - Run
biome migrateafter updates - VCS Integration - Enable VCS to respect .gitignore
- Consistent Formatting - Set clear formatter rules across team
- Rule Documentation - Document why specific rules are disabled
- Monorepo Strategy - Use extends for shared configuration
- CI Integration - Run
biome ciin continuous integration - Pre-commit Hooks - Validate code before commits
- Editor Integration - Install Biome VSCode/IDE extensions
- Regular Updates - Keep Biome updated for new features
Common Pitfalls
- Schema Mismatch - Using outdated schema version
- Missing Migration - Not running migrate after updates
- Overly Strict - Enabling all rules without team agreement
- No VCS Integration - Not respecting gitignore patterns
- Inconsistent Config - Different settings across packages
- Ignored Warnings - Dismissing warnings that indicate issues
- No Editor Setup - Missing IDE integration for real-time feedback
- Large Line Width - Setting lineWidth too high reduces readability
- Mixed Quotes - Not enforcing consistent quote style
- No CI Enforcement - Not running checks in CI pipeline
Advanced Topics
Overrides Per Path
{
"overrides": [
{
"include": ["scripts/**/*.js"],
"linter": {
"rules": {
"suspicious": {
"noConsoleLog": "off"
}
}
}
},
{
"include": ["**/*.test.ts"],
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "off"
}
}
}
}
]
}
Custom Scripts
Add to package.json:
{
"scripts": {
"lint": "biome check .",
"lint:fix": "biome check --write .",
"format": "biome format --write .",
"ci": "biome ci ."
}
}
CI/CD Integration
# CI mode (fails on warnings)
biome ci .
# Check without fixing
biome check .
# Fix automatically
biome check --write .
# Format only
biome format --write .
When to Use This Skill
- Setting up Biome in new projects
- Migrating from ESLint/Prettier to Biome
- Configuring Biome for monorepos
- Customizing linting and formatting rules
- Troubleshooting Biome configuration issues
- Integrating Biome with CI/CD pipelines
- Establishing team code standards
- Optimizing Biome performance
Troubleshooting
Schema Version Mismatch
# Error: Schema version doesn't match CLI version
npx biome migrate --write
Files Not Being Checked
Check:
- VCS integration and .gitignore
files.ignorepatternsfiles.includeif specified- File extensions supported by Biome
Rules Not Applying
Verify:
linter.enabledis true- Rule category is enabled
- Rule name is correct
- No overrides disabling the rule
Performance Issues
Optimize:
- Use
files.ignorefor large directories - Enable VCS integration
- Exclude generated files
- Update to latest Biome version