You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
eslint-plugin-compat (browser compat warnings) has no direct Biome equivalent. Options:
Drop it (recommended) — the rule is currently warn, not error, and compat coverage is loose anyway. Document supported browsers in README.
Keep ESLint installed only for that one rule (defeats most of the migration value).
Replace with a standalone browserslist-driven check in CI.
Markdown / YAML formatting: Biome does not format .md or .yml. Either keep Prettier solely for docs, drop docs formatting, or accept manual care.
Lint rule coverage: Biome's rule set is narrower than ESLint's full ecosystem. The currently used @eslint/js recommended + typescript-eslint recommended sets have near-equivalent Biome coverage, but verify against the 9 existing eslint-disable comments to confirm each rule has a Biome equivalent (or that the disable is no longer needed once Biome takes over).
Proposed approach
npm install --save-dev @biomejs/biome and npx @biomejs/biome init.
Migrate existing config: npx @biomejs/biome migrate eslint --write then npx @biomejs/biome migrate prettier --write. Review the generated biome.json.
Port project style preferences explicitly into biome.json:
printWidth: 240
singleQuote: true
trailingComma: 'all'
arrowParens: 'always'
bracketSameLine: false
Resolve the eslint-plugin-compat decision per the trade-off above.
Update the 9 existing eslint-disable comments in src/ to Biome's // biome-ignore lint/... syntax (or remove them if Biome doesn't flag the underlying issue).
Replace npm scripts:
lint → biome lint .
format → biome format --write .
format:check → biome format .
Optional new check → biome check . (lint + format combined)
Update .github/workflows/pr.yml to call the new scripts (or just one npm run check).
Verify npm run format produces a zero-diff against current source — i.e., style is preserved exactly. Tune biome.json until it is.
Decide on .md / .yml formatting (keep Prettier just for docs, or drop).
Remove ESLint (and possibly Prettier) from package.json, delete eslint.config.mjs (and .prettierrc if Prettier is fully gone).
Update CONTRIBUTING.md to document the new tool and commands.
Problem
The project uses two separate tools for code style:
eslint,@eslint/js,typescript-eslint,eslint-plugin-compat) with flat config ineslint.config.mjsprettier) with config in.prettierrcThat's 5 devDependencies, 2 configs, and 2 CI invocations for what Biome provides in a single Rust binary with one config.
Why it matters
biome.jsonreplaceseslint.config.mjs+.prettierrc;@biomejs/biomereplaces five packages.typescript-eslintplugin layer to maintain.Trade-offs to acknowledge
eslint-plugin-compat(browser compat warnings) has no direct Biome equivalent. Options:warn, noterror, and compat coverage is loose anyway. Document supported browsers in README.browserslist-driven check in CI..mdor.yml. Either keep Prettier solely for docs, drop docs formatting, or accept manual care.@eslint/jsrecommended +typescript-eslintrecommended sets have near-equivalent Biome coverage, but verify against the 9 existingeslint-disablecomments to confirm each rule has a Biome equivalent (or that the disable is no longer needed once Biome takes over).Proposed approach
npm install --save-dev @biomejs/biomeandnpx @biomejs/biome init.npx @biomejs/biome migrate eslint --writethennpx @biomejs/biome migrate prettier --write. Review the generatedbiome.json.biome.json:printWidth: 240singleQuote: truetrailingComma: 'all'arrowParens: 'always'bracketSameLine: falseeslint-plugin-compatdecision per the trade-off above.eslint-disablecomments insrc/to Biome's// biome-ignore lint/...syntax (or remove them if Biome doesn't flag the underlying issue).lint→biome lint .format→biome format --write .format:check→biome format .check→biome check .(lint + format combined).github/workflows/pr.ymlto call the new scripts (or just onenpm run check).npm run formatproduces a zero-diff against current source — i.e., style is preserved exactly. Tunebiome.jsonuntil it is..md/.ymlformatting (keep Prettier just for docs, or drop).package.json, deleteeslint.config.mjs(and.prettierrcif Prettier is fully gone).Coordination
lint-stagedconfig in Dev: Add Husky + lint-staged pre-commit hook #26 should usebiome check --writefor JS/TS/JSON instead ofeslint --fix+prettier --write. If Dev: Add Husky + lint-staged pre-commit hook #26 lands first, it'll need a follow-up to swap tools.tsc --noEmittype-check to PR workflow #10 (tsc --noEmit): unaffected — Biome doesn't replace the type checker.Acceptance criteria
eslint,@eslint/js,typescript-eslint,eslint-plugin-compatremoved frompackage.json.prettierremoved (or kept solely for.md/.yml, with that decision documented).eslint.config.mjsdeleted.biome.jsonpresent and committed.npm run lint,npm run format,npm run format:checkall delegate to Biome.npm run formatproduces zero diff against the existing source on first run.eslint-disablecomments migrated to Biome syntax or removed.