{"slug":"shared-tooling-biome","title":"shared-tooling-biome","summary":"Biome v2 unified linter, formatter, and import organizer — single Rust-powered tool replacing ESLint + Prettier with 97% Prettier compatibility and 20x faster performance","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-29T15:28:17.832954Z","repo":{"url":"https://github.com/agents-inc/skills","stars":24,"forks":8,"license":"MIT","updatedAt":"2026-09-07T17:50:55Z"},"bodyHtml":"<hr>\n<h2>name: shared-tooling-biome\ndescription: Biome v2 unified linter, formatter, and import organizer — single Rust-powered tool replacing ESLint + Prettier with 97% Prettier compatibility and 20x faster performance</h2>\n<h1>Biome</h1>\n<blockquote>\n<p><strong>Quick Guide:</strong> Biome is a unified linter, formatter, and import organizer for JavaScript, TypeScript, JSX, TSX, JSON, CSS, and GraphQL. Single Rust binary replaces ESLint + Prettier with 97% Prettier compatibility. Use <code>biome.json</code> for all configuration. Run <code>biome check --write</code> to lint, format, and organize imports in one pass. Use <code>biome ci</code> in pipelines.</p>\n<p><strong>Current stable version:</strong> Biome v2.4.x (March 2026). Biome v2 introduced type-aware linting, nested configs, and a revamped import organizer.</p>\n</blockquote>\n<hr>\n<p>&lt;critical_requirements&gt;</p>\n<h2>CRITICAL: Before Using This Skill</h2>\n<blockquote>\n<p><strong>All code must follow project conventions in CLAUDE.md</strong> (kebab-case, named exports, import ordering, <code>import type</code>, named constants)</p>\n</blockquote>\n<p><strong>(You MUST use <code>biome.json</code> or <code>biome.jsonc</code> for ALL configuration — Biome does not use JavaScript config files)</strong></p>\n<p><strong>(You MUST pin Biome to an exact version with <code>--save-exact</code> — Biome formatting can change between versions)</strong></p>\n<p><strong>(You MUST use <code>biome ci</code> in CI pipelines, NOT <code>biome check</code> — <code>ci</code> is read-only with no <code>--write</code> flag)</strong></p>\n<p><strong>(You MUST use <code>biome check --write</code> for local development — runs linter, formatter, and import organizer in one pass)</strong></p>\n<p><strong>(You MUST include <code>$schema</code> in biome.json for editor autocompletion and validation)</strong></p>\n<p>&lt;/critical_requirements&gt;</p>\n<hr>\n<p><strong>Auto-detection:</strong> Biome, biome.json, biome.jsonc, @biomejs/biome, biome check, biome lint, biome format, biome ci, biome-ignore, organizeImports, biome migrate</p>\n<p><strong>When to use:</strong></p>\n<ul>\n<li>Setting up a unified linter + formatter for JavaScript/TypeScript projects</li>\n<li>Replacing ESLint + Prettier with a single, faster tool</li>\n<li>Greenfield projects wanting zero-config or minimal-config setup</li>\n<li>Large codebases where linting/formatting speed matters</li>\n<li>Configuring import organizing with custom group ordering</li>\n<li>Migrating from ESLint and/or Prettier to Biome</li>\n<li>Setting up CI pipelines with <code>biome ci</code></li>\n<li>Configuring pre-commit hooks with Biome's <code>--staged</code> flag</li>\n</ul>\n<p><strong>When NOT to use:</strong></p>\n<ul>\n<li>Projects requiring ESLint plugins with no Biome equivalent (e.g., custom framework-specific plugins)</li>\n<li>Projects heavily invested in custom ESLint rules that cannot be replicated</li>\n<li>Projects needing Markdown, YAML, or TOML formatting (Biome does not support these yet)</li>\n<li>Runtime code (this is build-time tooling only)</li>\n<li>Git hooks framework setup (Husky/Lefthook configuration is a separate concern)</li>\n<li>TypeScript compiler configuration (<code>tsconfig.json</code> is a separate concern)</li>\n</ul>\n<p><strong>Key patterns covered:</strong></p>\n<ul>\n<li>biome.json configuration with formatter, linter, and assist settings</li>\n<li>Linter rule groups (recommended, all, nursery) and severity levels</li>\n<li>Formatter configuration (indent style, line width, quotes, semicolons)</li>\n<li>Import organizer with custom group ordering</li>\n<li>CLI commands: check, format, lint, ci, migrate</li>\n<li>Migration from ESLint + Prettier</li>\n<li>Git hooks integration (Husky, Lefthook, <code>--staged</code> flag)</li>\n<li>CI integration with GitHub Actions and GitLab CI</li>\n<li>Editor integration (VS Code, JetBrains)</li>\n<li>Suppression comments (<code>biome-ignore</code>, <code>biome-ignore-all</code>, range suppressions)</li>\n<li>Nested configuration for monorepos</li>\n<li>Overrides for file-specific settings</li>\n</ul>\n<hr>\n<h2>Examples</h2>\n<ul>\n<li><a href=\"examples/core.md\">Setup &amp; Configuration</a> — Installation, biome.json, VS Code, monorepos, framework configs</li>\n<li><a href=\"examples/linting.md\">Linting Rules</a> — Rule groups, domains, suppressions, overrides, import ordering</li>\n<li><a href=\"examples/formatting.md\">Formatting</a> — Formatter options, Prettier compatibility, option mapping</li>\n<li><a href=\"examples/ci.md\">CI &amp; Git Hooks</a> — GitHub Actions, GitLab CI, Husky, Lefthook, staged files</li>\n<li><a href=\"examples/migration.md\">Migrating from ESLint/Prettier</a> — Automated migration, rule mapping, package cleanup</li>\n</ul>\n<p><strong>Other resources:</strong></p>\n<ul>\n<li><a href=\"reference.md\">CLI Quick Reference</a> — All CLI commands, flags, and configuration option tables</li>\n</ul>\n<hr>\n\n<hr>\n\n<hr>\n\n<hr>\n<p>&lt;decision_framework&gt;</p>\n<h2>Decision Framework</h2>\n<h3>Biome vs ESLint + Prettier</h3>\n<pre><code>Need linting and formatting?\n|-- Greenfield project?\n|   |-- Want simplest possible setup? -&gt; Biome (one tool, one config)\n|   |-- Need niche ESLint plugins? -&gt; ESLint + Prettier\n|   +-- Speed is important? -&gt; Biome (20x faster)\n|-- Existing ESLint + Prettier project?\n|   |-- Happy with current setup? -&gt; Stay with ESLint + Prettier\n|   |-- Config complexity is a pain? -&gt; Migrate to Biome\n|   |-- Need ESLint plugins without Biome equivalents? -&gt; Stay\n|   +-- Want faster CI/pre-commit hooks? -&gt; Biome (or hybrid)\n+-- Monorepo?\n    |-- Need per-package lint configs? -&gt; Biome v2 nested configs or ESLint 10\n    +-- Speed bottleneck in CI? -&gt; Biome\n</code></pre>\n<h3>Configuration Complexity</h3>\n<pre><code>How to configure Biome?\n|-- Just starting out? -&gt; Run `biome init`, use defaults with recommended: true\n|-- Migrating from ESLint? -&gt; Run `biome migrate eslint --write`\n|-- Migrating from Prettier? -&gt; Run `biome migrate prettier --write`\n|-- Need per-file rules?\n|   |-- Different rules for test files? -&gt; Use `overrides` in biome.json\n|   +-- Different rules per package? -&gt; Use nested biome.json with \"root\": false\n+-- Need custom import ordering? -&gt; Configure organizeImports.options.groups\n</code></pre>\n<blockquote>\n<p><strong>Full migration decision tree:</strong> See <a href=\"examples/migration.md#full-migration-vs-hybrid-approach\">examples/migration.md</a>.</p>\n</blockquote>\n<p>&lt;/decision_framework&gt;</p>\n<hr>\n\n<hr>\n<p>&lt;red_flags&gt;</p>\n<h2>RED FLAGS</h2>\n<p><strong>High Priority Issues:</strong></p>\n<ul>\n<li>Using <code>biome check</code> in CI instead of <code>biome ci</code> (<code>check</code> allows <code>--write</code> which is dangerous in pipelines; <code>ci</code> is read-only)</li>\n<li>Not pinning Biome version with <code>--save-exact</code> (formatting can change between minor versions, causing diff noise)</li>\n<li>Missing <code>$schema</code> in biome.json (loses editor autocompletion, validation, and discoverability)</li>\n<li>Using JavaScript config files instead of biome.json (Biome only supports JSON/JSONC configuration)</li>\n<li>Running <code>biome format</code> and <code>biome lint</code> separately when <code>biome check</code> does both (wastes time, parses files twice)</li>\n</ul>\n<p><strong>Medium Priority Issues:</strong></p>\n<ul>\n<li>Forgetting to set <code>indentStyle: \"space\"</code> when migrating from Prettier (Biome defaults to tabs)</li>\n<li>Not enabling VCS integration (without it, Biome may process node_modules and dist)</li>\n<li>Using <code>--unsafe</code> without reviewing changes (unsafe fixes can alter program behavior)</li>\n<li>Not including <code>--no-errors-on-unmatched</code> in git hooks (causes failures when no matching files are staged)</li>\n<li>Enabling all nursery rules (they are experimental and may have bugs or performance issues)</li>\n</ul>\n<p><strong>Common Mistakes:</strong></p>\n<ul>\n<li>Using <code>\"root\": true</code> in a nested config (this is the default; use <code>\"root\": false</code> for child configs)</li>\n<li>Expecting Markdown/YAML formatting support (Biome does not support these languages yet)</li>\n<li>Not running <code>biome migrate --write</code> when upgrading major versions (config schema changes between v1 and v2)</li>\n<li>Suppression comments without explanations (<code>biome-ignore lint:</code> requires text after the colon)</li>\n</ul>\n<p><strong>Gotchas &amp; Edge Cases:</strong></p>\n<ul>\n<li>Biome defaults to tabs, not spaces — always set <code>indentStyle</code> explicitly when migrating from Prettier</li>\n<li>CSS and GraphQL formatting is disabled by default — must opt in with <code>\"formatter\": { \"enabled\": true }</code></li>\n<li><code>biome-ignore-all</code> must be at the top of the file — placing it mid-file triggers an unused suppression warning</li>\n<li>Import organizer is part of <code>assist</code>, not <code>linter</code> — configure under <code>assist.actions.source.organizeImports</code></li>\n<li>The <code>--staged</code> flag makes lint-staged unnecessary for Biome-only setups (since Biome v1.7.0+)</li>\n<li>Type-aware linting (project/types domains) triggers file scanning which can slow down first runs on large projects</li>\n<li><code>biome migrate eslint --write</code> does not migrate inspired rules by default — use <code>--include-inspired</code> to include them</li>\n<li>Range suppressions (<code>biome-ignore-start</code>/<code>biome-ignore-end</code>) must have matching rule specifiers</li>\n<li>Biome treats all JS/TS/JSX/TSX under the <code>javascript</code> config key — there is no separate <code>typescript</code> section</li>\n<li>Configuration files named <code>.biome.json</code> (with leading dot) are also discovered (v2.4+)</li>\n</ul>\n<p>&lt;/red_flags&gt;</p>\n<hr>\n<p>&lt;critical_reminders&gt;</p>\n<h2>CRITICAL REMINDERS</h2>\n<blockquote>\n<p><strong>All code must follow project conventions in CLAUDE.md</strong> (kebab-case, named exports, import ordering, <code>import type</code>, named constants)</p>\n</blockquote>\n<p><strong>(You MUST use <code>biome.json</code> or <code>biome.jsonc</code> for ALL configuration — Biome does not use JavaScript config files)</strong></p>\n<p><strong>(You MUST pin Biome to an exact version with <code>--save-exact</code> — Biome formatting can change between versions)</strong></p>\n<p><strong>(You MUST use <code>biome ci</code> in CI pipelines, NOT <code>biome check</code> — <code>ci</code> is read-only with no <code>--write</code> flag)</strong></p>\n<p><strong>(You MUST use <code>biome check --write</code> for local development — runs linter, formatter, and import organizer in one pass)</strong></p>\n<p><strong>(You MUST include <code>$schema</code> in biome.json for editor autocompletion and validation)</strong></p>\n<p><strong>Failure to follow these rules will cause inconsistent formatting, broken CI pipelines, and missed lint errors.</strong></p>\n<p>&lt;/critical_reminders&gt;</p>\n","files":[{"path":"examples/biome.md","sizeBytes":16286,"isText":true},{"path":"examples/ci.md","sizeBytes":5346,"isText":true},{"path":"examples/core.md","sizeBytes":7851,"isText":true},{"path":"examples/formatting.md","sizeBytes":2719,"isText":true},{"path":"examples/linting.md","sizeBytes":7056,"isText":true},{"path":"examples/migration.md","sizeBytes":4273,"isText":true},{"path":"examples/setup.md","sizeBytes":50,"isText":true},{"path":"reference.md","sizeBytes":13135,"isText":true},{"path":"SKILL.md","sizeBytes":20022,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-29T15:31:31.187432Z","sha256":"C7B2CBF9F18B33241DB0AACFC35D19BCC0134350E16DE56930A455E79AAD87EF","sizeBytes":25311},"review":null,"source":{"repositoryUrl":"https://github.com/agents-inc/skills","path":"dist/plugins/shared-tooling-biome/skills/shared-tooling-biome","license":"MIT","commit":"3a51ef571e996b18294bf776d53dbdad26de0617","subtreeSha":"2A1A217B3113B47EA86182FB5A2055CC75901FA21C7DAEE7C51CE0A5C00DEA86","lastSyncedAt":"2026-09-29T15:27:48.914434Z"},"reviewedAt":"2026-09-29T15:38:26.893131Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/agents-inc/skills/tree/main/dist/plugins/shared-tooling-biome/skills/shared-tooling-biome"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install agents-inc-skills@llmmart"},{"target":"git","command":"git clone https://github.com/agents-inc/skills.git"}]}