typescript-plugin/skills/biome-tooling/SKILL.md
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.
npx skillsauth add laurigates/claude-plugins biome-toolingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
| 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.
What is Biome?
# Project-local (recommended)
bun add --dev @biomejs/biome
# Verify installation
bunx biome --version
# Initialize configuration
bunx biome init
# 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
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
}
}
| 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 |
Via biome.json:
{
"files": {
"ignore": [
"dist",
"build",
"node_modules",
"**/*.config.js",
"scripts/legacy/**"
]
}
}
Via .gitignore (automatic):
{
"vcs": {
"enabled": true,
"useIgnoreFile": true
}
}
| 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 |
| 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 |
| 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.
tools
Scaffold a new ComfyUI custom-node repo (pyproject, CI, release-please, vitest+pytest, JS extension skeleton) in the picker/gesture vein. Use when bootstrapping or init-ing a comfyui node pack.
tools
Orchestrate a ComfyUI node pack from idea to registry: scaffold, create + seed the repo, open the gitops adoption PR. Use when releasing or spinning up a new comfyui node pack.
testing
macOS EndpointSecurity/EDR high CPU & battery drain. Use when Kandji ESF / XProtect pegs a core; trace the exec storm via powermetrics + eslogger.
development
odiff pixel-by-pixel image diffing. Use when comparing screenshots, detecting visual regressions, diffing before/after PNGs, asserting golden images.