biome-tooling

v2026.09.24

Biome all-in-one JS/TS formatter and linter, 15-20x faster than ESLint/Prettier. Use when setting up formatting/linting or migrating from ESLint+Prettier.

GitHub
Install command
npx skhub add laurigates/biome-tooling
Markdown
SKILL.md

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.

Keep ESLint alongside when the project needs plugin-only rules (React hooks, a11y), framework-specific rules (Next.js, Nuxt), or carries heavy custom ESLint configuration.

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 init

Essential 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 noUnusedVariables

Configuration (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

CategoryPurposeExample Rules
recommendedEssential rules everyone should enableMost rules marked "recommended"
correctnessPrevent bugs and logic errorsnoUnusedVariables, noUnreachable
suspiciousDetect code that might be wrongnoExplicitAny, noDoubleEquals
styleEnforce consistent styleuseConst, noVar
complexityReduce code complexitynoForEach, useFlatMap
performanceOptimize performancenoAccumulatingSpread
a11yAccessibility best practicesnoSvgWithoutTitle, useAltText
securitySecurity vulnerabilitiesnoDangerouslySetInnerHtml

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
  }
}

Scope a run to changed files

Both scopes need VCS integration ("vcs": { "enabled": true, "clientKind": "git" }).

ScopeCommandNotes
Staged files only (pre-commit)bunx biome check --staged --reporter=githubNot available on biome ci
Committed changes vs a basebunx biome check --changed --since=main --reporter=github--since overrides vcs.defaultBranch; without it, set defaultBranch

--changed compares committed changes only (staged and unstaged edits are excluded), and it does not follow imports: a changed exported type can break a file that is not in the diff. Run a full biome check before merging when exports change.

For an agent reading the output, combine a scope with --reporter=github (one file:line:col line per diagnostic), --diagnostic-level=error, and --max-diagnostics=N.

Performance Comparison

ToolTime (1000 files)Notes
Biome0.5sRust, parallel processing
ESLint8-10sNode.js, single-threaded
Prettier3-5sNode.js, formatting only
ESLint + Prettier11-15sSequential execution

Agentic Optimizations

ContextCommand
Quick checkbunx biome check src/
Fix allbunx biome check --write src/
Format onlybunx biome format --write src/
Lint onlybunx biome lint --write src/
CI modebunx biome ci src/
Errors onlybunx biome check --diagnostic-level=error src/
Limited outputbunx biome check --max-diagnostics=10 src/
GitHub reporterbunx biome check --reporter=github src/
Staged files onlybunx biome check --staged --reporter=github
Changed vs mainbunx biome check --changed --since=main --reporter=github
JSON outputbunx biome check --reporter=json src/
Migrate ESLintbunx biome migrate eslint --write
Migrate Prettierbunx biome migrate prettier --write

Quick Reference

FlagDescription
--writeApply fixes/formatting
--reporter=githubGitHub annotations format
--reporter=jsonJSON output
--diagnostic-level=errorErrors only
--max-diagnostics=NLimit output count
--verboseShow detailed diagnostics
--no-errors-on-unmatchedIgnore unmatched files
ciCI mode (check + exit code)

For detailed examples, advanced patterns, and best practices, see REFERENCE.md.

References

Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

typescript-plugin/skills/biome-tooling

Default branch

main

Latest commit

1668324

Tree SHA

b2d4cc3