
Biome Tooling
- 40 installs
- 49 repo stars
- Updated August 4, 2026
- laurigates/claude-plugins
Helps with ai & agent building tasks.
About
biome-tooling is a Claude Code skill for ai & agent building. It helps you ship faster with AI-assisted development.
- biome-tooling
- AI & Agent Building
- AI-coding skill
Biome Tooling by the numbers
- 40 all-time installs (skills.sh)
- Ranked #8,266 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/laurigates/claude-plugins --skill biome-toolingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 40 |
|---|---|
| repo stars | ★ 49 |
| Last updated | August 4, 2026 |
| Repository | laurigates/claude-plugins ↗ |
What it does
Helps with ai & agent building tasks.
Files
Biome Tooling
Biome is a modern, performant toolchain for JavaScript, TypeScript, and related web languages. It combines formatting, linting, and import organization into a single tool that's 15-20x faster than ESLint/Prettier.
When to Use This Skill
| Use this skill when... | Use another approach when... |
|---|---|
| Starting a new JS/TS project | Need specific ESLint plugins (React hooks, a11y) |
| Want zero-config formatting/linting | Have complex custom ESLint rules |
| Need fast CI/CD pipelines | Need framework-specific rules (Next.js, Nuxt) |
| Migrating from ESLint+Prettier | Legacy codebase with heavy ESLint customization |
Hybrid approach: Use Biome for formatting, ESLint for specialized linting.
Core Expertise
What is Biome?
- All-in-one toolchain: Linter + formatter + import sorter
- Zero-config: Works out of the box with sensible defaults
- Fast: Written in Rust, processes files in parallel
- Compatible: Matches Prettier formatting 97%+
- Supports: JavaScript, TypeScript, JSX, TSX, JSON, CSS
Installation
# Project-local (recommended)
bun add --dev @biomejs/biome
# Verify installation
bunx biome --version
# Initialize configuration
bunx biome initEssential Commands
# Format files
bunx biome format --write src/
# Lint with fixes
bunx biome lint --write src/
# Check everything (format + lint + organize imports)
bunx biome check --write src/
# Check without changes (CI mode)
bunx biome check src/
# CI mode (exits with error on issues)
bunx biome ci src/
# Migrate from ESLint/Prettier
bunx biome migrate eslint --write
bunx biome migrate prettier --write
# Explain a rule
bunx biome explain noUnusedVariablesConfiguration (biome.json)
Minimal Setup (Zero Config)
Biome works without configuration. For basic customization:
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false,
"ignore": ["dist", "build", "node_modules", ".next", "coverage"]
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100
},
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
},
"organizeImports": {
"enabled": true
}
}Rule Categories
| Category | Purpose | Example Rules |
|---|---|---|
recommended | Essential rules everyone should enable | Most rules marked "recommended" |
correctness | Prevent bugs and logic errors | noUnusedVariables, noUnreachable |
suspicious | Detect code that might be wrong | noExplicitAny, noDoubleEquals |
style | Enforce consistent style | useConst, noVar |
complexity | Reduce code complexity | noForEach, useFlatMap |
performance | Optimize performance | noAccumulatingSpread |
a11y | Accessibility best practices | noSvgWithoutTitle, useAltText |
security | Security vulnerabilities | noDangerouslySetInnerHtml |
Common Patterns
Ignore Files and Directories
Via biome.json:
{
"files": {
"ignore": [
"dist",
"build",
"node_modules",
"**/*.config.js",
"scripts/legacy/**"
]
}
}Via .gitignore (automatic):
{
"vcs": {
"enabled": true,
"useIgnoreFile": true
}
}Performance Comparison
| Tool | Time (1000 files) | Notes |
|---|---|---|
| Biome | 0.5s | Rust, parallel processing |
| ESLint | 8-10s | Node.js, single-threaded |
| Prettier | 3-5s | Node.js, formatting only |
| ESLint + Prettier | 11-15s | Sequential execution |
Agentic Optimizations
| Context | Command |
|---|---|
| Quick check | bunx biome check src/ |
| Fix all | bunx biome check --write src/ |
| Format only | bunx biome format --write src/ |
| Lint only | bunx biome lint --write src/ |
| CI mode | bunx biome ci src/ |
| Errors only | bunx biome check --diagnostic-level=error src/ |
| Limited output | bunx biome check --max-diagnostics=10 src/ |
| GitHub reporter | bunx biome check --reporter=github src/ |
| JSON output | bunx biome check --reporter=json src/ |
| Migrate ESLint | bunx biome migrate eslint --write |
| Migrate Prettier | bunx biome migrate prettier --write |
Quick Reference
| Flag | Description |
|---|---|
--write | Apply fixes/formatting |
--reporter=github | GitHub annotations format |
--reporter=json | JSON output |
--diagnostic-level=error | Errors only |
--max-diagnostics=N | Limit output count |
--verbose | Show detailed diagnostics |
--no-errors-on-unmatched | Ignore unmatched files |
ci | CI mode (check + exit code) |
For detailed examples, advanced patterns, and best practices, see REFERENCE.md.
References
- Official docs: https://biomejs.dev
- Configuration: https://biomejs.dev/reference/configuration/
- Rules: https://biomejs.dev/linter/
- Migration guide: https://biomejs.dev/guides/migrate-eslint-prettier/
- Editor integration: https://biomejs.dev/
Biome Tooling - Reference
Detailed reference material for Biome formatter and linter.
Recommended Production Setup
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false,
"ignore": ["dist", "build", "node_modules", ".next", ".nuxt", "coverage"]
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100,
"lineEnding": "lf"
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "error",
"noConsoleLog": "warn"
},
"style": {
"noNonNullAssertion": "warn",
"useConst": "error"
},
"correctness": {
"noUnusedVariables": "error",
"noUnusedImports": "error"
},
"complexity": {
"noForEach": "off"
}
}
},
"organizeImports": {
"enabled": true
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"trailingCommas": "all",
"semicolons": "asNeeded",
"arrowParentheses": "asNeeded"
}
},
"overrides": [
{
"include": ["*.test.ts", "*.spec.ts"],
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "off"
}
}
}
}
]
}Editor Integration
VS Code
Install extension:
code --install-extension biomejs.biomeSettings (.vscode/settings.json):
{
"[javascript]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
},
"[typescript]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
},
"[json]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
}
}Neovim (with nvim-lspconfig)
-- Using mason and lspconfig
require('lspconfig').biome.setup({
cmd = { 'biome', 'lsp-proxy' },
filetypes = {
'javascript',
'typescript',
'javascriptreact',
'typescriptreact',
'json',
'jsonc',
},
root_dir = require('lspconfig.util').root_pattern(
'biome.json',
'biome.jsonc'
),
single_file_support = false,
on_attach = function(client, bufnr)
-- Format on save
vim.api.nvim_create_autocmd('BufWritePre', {
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ async = false })
end,
})
end,
})JetBrains IDEs
- Settings > Plugins > Search "Biome" > Install
- Settings > Languages & Frameworks > Biome
- Enable "Run Biome on save"
- Set Biome executable path
Pre-commit Hook Setup
Using Husky + lint-staged:
# Install dependencies
bun add --dev husky lint-staged
# Initialize husky
bunx husky initpackage.json:
{
"scripts": {
"prepare": "husky"
},
"lint-staged": {
"*.{js,ts,jsx,tsx,json}": [
"biome check --write --no-errors-on-unmatched"
]
}
}.husky/pre-commit:
#!/usr/bin/env sh
bunx lint-stagedUsing pre-commit (Python):
# .pre-commit-config.yaml
repos:
- repo: https://github.com/biomejs/pre-commit
rev: v0.1.0
hooks:
- id: biome-check
additional_dependencies: ["@biomejs/biome@1.9.4"]CI/CD Integration
GitHub Actions
name: Biome Check
on:
push:
branches: [main]
pull_request:
jobs:
biome:
name: Format & Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run Biome
run: bunx biome ci src/GitLab CI
biome:
image: oven/bun:latest
stage: test
script:
- bun install --frozen-lockfile
- bunx biome ci src/
only:
- merge_requests
- mainMigration Strategies
From ESLint + Prettier
# 1. Remove old tools
bun remove eslint prettier eslint-config-prettier
# 2. Delete config files
rm .eslintrc.json .prettierrc .prettierignore
# 3. Install Biome
bun add --dev @biomejs/biome
# 4. Initialize configuration
bunx biome init
# 5. Migrate rules (optional)
bunx biome migrate eslint --write
bunx biome migrate prettier --write
# 6. Format entire codebase
bunx biome check --write src/
# 7. Update scripts in package.json
{
"scripts": {
"format": "biome format --write src/",
"lint": "biome lint --write src/",
"check": "biome check --write src/",
"ci": "biome ci src/"
}
}Gradual Migration (Keep Both)
{
"scripts": {
"format": "biome format --write src/ && prettier --write 'docs/**/*.md'",
"lint": "biome lint --write src/ && eslint --fix 'legacy/**/*.js'"
}
}Use Biome for new code, keep old tools for legacy directories.
Rule-Specific Overrides
{
"overrides": [
{
"include": ["*.test.ts", "*.spec.ts"],
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "off"
}
}
}
},
{
"include": ["scripts/**/*.ts"],
"linter": {
"rules": {
"suspicious": {
"noConsoleLog": "off"
}
}
}
}
]
}Custom Rule Severity
{
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "error", // CI fails
"noConsoleLog": "warn", // CI warning
"noDebugger": "info" // CI info only
}
}
}
}Troubleshooting
Biome Not Detecting Files
# Check what Biome sees
bunx biome check --verbose src/
# Ensure files aren't ignored
bunx biome explain --verbose noUnusedVariablesConflicts with Prettier Formatting
# Migrate Prettier config
bunx biome migrate prettier --write
# Verify compatibility
bunx biome format --write test.js
prettier --write test.js
diff test.js test.js.bakEditor Not Formatting
VS Code:
- Check extension is installed and enabled
- Verify
biome.jsonexists in workspace root - Restart TypeScript server: Cmd+Shift+P > "Restart TS Server"
Neovim:
- Check LSP is attached:
:LspInfo - Verify
biomebinary in PATH::!which biome - Check
biome.jsonlocation matchesroot_dir
Performance Issues
# Use --max-diagnostics to limit output
bunx biome check --max-diagnostics=50 src/
# Check specific files instead of entire directory
bunx biome check src/problematic-file.ts
# Use --reporter=json for CI
bunx biome check --reporter=json src/