# Extension points — biomejs/biome

> Canonical page: https://codevetter.com/unpack/biome/extension-points

# Extension points — biomejs/biome

Scanned commit 82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443 (2026-09-21). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

New behavior is expected to plug in through language crates, declare_lint_rule and declare_assist macros, the analyzer registry, file handlers, configuration partials, CLI command enums, and Grit plugins. Codegen must be re-run when names or grammar change. The JS API is a consumer of the workspace, not the place to add languages.
- Lint rules are added with declare_lint_rule! in the language analyze crate, then listed in the group module (a11y, style, nursery, and so on) so the registry macro exports them. — [crates/biome_analyze/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_analyze/src/lib.rs) [crates/biome_js_analyze/src/lint.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_js_analyze/src/lint.rs) [crates/biome_analyze_macros/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_analyze_macros/src/lib.rs)
- Assists use declare_assist_rule! and a parallel registry. Renaming a rule or assist requires just gen-rules and just gen-configuration. — [AGENTS.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/AGENTS.md) [crates/biome_analyze_macros/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_analyze_macros/src/lib.rs)
- New syntax starts in an .ungram grammar, then just gen-grammar <lang> and just gen-formatter. Parser rules and formatter IR must be updated together. — [AGENTS.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/AGENTS.md) [.claude/skills/parser-development/SKILL.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/.claude/skills/parser-development/SKILL.md) [.claude/skills/formatter-development/SKILL.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/.claude/skills/formatter-development/SKILL.md)
- A new language frontend needs a parser crate, a formatter, an analyzer, a file handler arm in biome_service, and a DocumentFileSource variant. Registration is centralized, not discovered by directory scan. — [crates/biome_service/src/file_handlers/mod.rs#L1-L100](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_service/src/file_handlers/mod.rs#L1-L100) [crates/biome_service/src/workspace.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_service/src/workspace.rs)
- Rule options flow from JSON configuration through generated partial structs in biome_configuration into the rule's options type. New options require the configuration macros and schema codegen. — [crates/biome_configuration_macros/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_configuration_macros/src/lib.rs) [crates/biome_configuration/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_configuration/src/lib.rs)
- ESLint option migration is an extension table: each supported rule has a source-option model and a converter. Unsupported rules are reported rather than guessed. — [.claude/skills/eslint-migrate-options/SKILL.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/.claude/skills/eslint-migrate-options/SKILL.md) [crates/biome_cli/src/commands/migrate.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_cli/src/commands/migrate.rs)
- Diagnostics are an extension surface. Categories, severity, markup, and advices are built with biome_diagnostics and biome_console, not ad-hoc strings. — [crates/biome_diagnostics/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_diagnostics/src/lib.rs) [crates/biome_console/src/lib.rs](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/crates/biome_console/src/lib.rs) [.claude/skills/diagnostics-development/SKILL.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/.claude/skills/diagnostics-development/SKILL.md)
- npm distribution adds a platform package under packages/@biomejs rather than changing the Rust entry. WASM exports are generated with wasm-bindgen. — [packages/@biomejs/biome/package.json](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/packages/%40biomejs/biome/package.json) [CONTRIBUTING.md](https://github.com/biomejs/biome/blob/82f9b0e6ff4bdc4a99aa81b1b861934aa9cb9443/CONTRIBUTING.md)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
