biome-config-shaunburdick
v1.0.1
Published
Shaun Burdick's Biome configuration - companion to eslint-config-shaunburdick
Readme
biome-config-shaunburdick
Shaun Burdick's Biome configuration — the fast, Rust-based companion to
eslint-config-shaunburdick.
One biome.json provides linting, formatting, and import organization tuned to the same house
style: 4-space indent, 120-char lines, single quotes, semicolons.
Package: biome-config-shaunburdick
Requirements
- Node.js >= 22
@biomejs/biome>= 2.5 < 3 (peer dependency)
Usage
Install the config and Biome:
npm install --save-dev @biomejs/biome biome-config-shaunburdickExtend it from your project's biome.json:
{
"extends": ["biome-config-shaunburdick"]
}Then run:
npx biome check . # lint + format + organize imports
npx biome check --write . # autofix everything fixablePackage Setup
To setup linting automatically, we recommend adding these script entries to your package.json:
"lint": "biome check .",
"lint:fix": "npm run lint -- --write",Then you can add npm run lint to your test script command to run it before any tests
Recommended pairing
This config enables 164 unique rules, ~91 of which correspond to a rule in eslint-config-shaunburdick
(measured against biome.jsonc; the rest are Biome-native correctness/security checks with no
ESLint counterpart). The rules that do have ESLint counterparts but are not ported
(JSDoc, security plugin, promise discipline, llm-core guardrails, the custom
shaunburdick/max-inline-disables rule) have no Biome equivalent and require keeping ESLint
alongside. The
agent skill carries a layer-by-layer
breakdown of the port with each rule's resolved threshold.
What's inside
| Layer | Glob | Highlights |
| --- | --- | --- |
| Base JS | all files | eqeqeq, no-var, prefer-const, complexity budgets (max 5 params, cognitive 15), no magic numbers, no console/alert/eval, import cycle detection |
| TypeScript | **/*.{ts,tsx} | strict TS rules ported from typescript-eslint strict: no-floating-promises, no-misused-promises, no-unnecessary-conditions, exhaustive switches, explicit member accessibility, interface definitions |
| React | **/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx} | full a11y suite, hooks deps (warn), button types, iframe sandbox, array index keys, plus the 15 service-worker globals Biome lacks natively |
Formatting is delegated to Biome's formatter (indentStyle: space, indentWidth: 4,
lineWidth: 120, single quotes); import ordering runs via the organizeImports assist action.
Known divergences from the ESLint config
- Magic numbers are stricter — Biome's
noMagicNumbershas no ignore-list option; it flags 3–5, 12, 15, 120 (which our llm-core config ignored) and exempts 24/60 (which we flagged). - Promise discipline is thinner — only nested promises are checked;
always-return,catch-or-return, andparam-namesstay ESLint-only. - No JSDoc, security-plugin, or llm-core coverage — keep ESLint for those.
max-inline-disablesis impossible in Biome — its GritQL plugin system cannot see comments.- 13 rules come from Biome's nursery (unstable API):
noImpliedEval,useArraySome,useIncludes,useStringStartsEndsWith,noFloatingPromises,noMisusedPromises,useAwaitThenable,useExhaustiveSwitchCases,useNullishCoalescing,noJsxLeakedDollar,noJsxNamespace,useIframeSandbox, anduseReactAsyncServerFunctionmay move or change options in minor releases. Pin@biomejs/biomeaccordingly — the>=2.5.0 <3peer range will not protect you.
Development
npm install
npm test # validates biome.json + runs smoke tests against fixturesSmoke tests live in test/ and assert that representative violations actually fire the
expected Biome rules, while a compliant fixture passes clean.
Versioning Policy
- Major (new linting errors)
- A new rule is added
- An existing rule is made more strict
- A new plugin is added to an existing config
- An existing plugin is updated to be more strict
- Minor (same or fewer linting errors)
- A rule is removed
- An existing rule is made less strict
- Adding a new configuration
- An existing plugin is updated to be less strict
- Patch (non-user-facing changes)
- Changes to documentation
- Fixes for build or publication
- Modifying tests
See CHANGELOG.md for the version history.
Agent Skill
biome-config-shaunburdick is an
agent skill covering install, setup, the three layers, the nursery-rule stability risk, and the
biome migrate pinning step — so an agent hitting an unfamiliar Biome diagnostic knows what it
protects against. It opens with a "when to use which" table pointing at the
ESLint skill, since the two configs are
alternatives rather than companions.
Publish steps
Publishing is automated: once a version bump lands on main, CI compares package.json against
npm and publishes with provenance if the version is new, then creates a biome-vX.Y.Z GitHub
release.
- Checkout main (
git checkout main) - Pull main (
git pull) - Examine
CHANGELOG.mdto determine next version (X.Y.Z) - Bump
versioninpackage.jsonand merge tomain - CI publishes the new version and cuts the release
