Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Biome Processor

Purpose

Lints CSS, JavaScript, TypeScript and JSON files using biome. It is the Rust alternative to the Stylelint processor, and a second alternative, next to oxlint, to ESLint: a single static binary that needs no node runtime and no node_modules/.

biome does not parse SCSS, Sass or Less. A repo with those stays on stylelint for them.

How It Works

Discovers .css, .js, .jsx, .ts, .tsx, .mjs, .cjs, .json and .jsonc files in the project (excluding common build tool directories), runs biome lint on each file, and records success in the cache. A non-zero exit code from biome fails the product.

This processor supports batch mode, allowing multiple files to be checked in a single biome invocation for better performance.

If a biome config file exists (biome.json, biome.jsonc, .biome.json or .biome.jsonc), it is automatically added as an extra input so that configuration changes trigger rebuilds.

Choosing what biome lints

biome has one linter switch per language in its config (javascript.linter.enabled, json.linter.enabled, …). A repo that lints JavaScript with oxlint turns biome’s JavaScript linter off in .biome.jsonc and narrows this processor to stylesheets:

[processor.checker.biome]
src_dirs = ["src"]
src_extensions = [".css"]

Keep the two in step: biome exits non-zero when every file it was handed belongs to a language whose linter is off (“No files were processed”).

Migrating from stylelint

Rule names differ but the coverage is close. Of stylelint’s standard correctness rules, three need no biome rule because biome’s CSS parser rejects the construct outright (color-no-invalid-hex, no-invalid-double-slash-comments, string-no-newline), one has no equivalent (function-calc-no-unspaced-operator), and no-empty-source differs in that biome’s noEmptySource flags a comment-only stylesheet where stylelint does not. no-duplicate-selectors maps to noDuplicateSelectors, still a nursery rule that has to be enabled explicitly. biome explain <rule> shows any rule’s group and options.

Source Files

  • Input: **/*.css, **/*.js, **/*.jsx, **/*.ts, **/*.tsx, **/*.mjs, **/*.cjs, **/*.json, **/*.jsonc
  • Output: none (checker)

Configuration

[processor.checker.biome]
command = "biome"
args = []
dep_inputs = []
KeyTypeDefaultDescription
commandstring"biome"The biome executable to run
argsstring[][]Extra arguments passed after lint and before the file paths
dep_inputsstring[][]Extra files whose changes trigger rebuilds
dep_autostring[]biome.json, biome.jsonc, .biome.json, .biome.jsoncConfig files auto-detected as inputs

Installation

rsconstruct tool install downloads the static Linux binary from the latest biome GitHub release. The npm package is the fallback.

Batch support

The tool accepts multiple files on the command line. When batching is enabled (default), rsconstruct passes all files in a single invocation for better performance.

Clean behavior

This processor is a Checker — rsconstruct clean outputs is a no-op for it (checkers produce no outputs). See Clean behavior and rsconstruct clean.