-
Notifications
You must be signed in to change notification settings - Fork 43
Description
Summary
We currently use ESLint 9.39.2 and Prettier 3.8.1 for linting and formatting. Biome is a Rust-based alternative that combines both tools into one. This issue documents an initial investigation into whether migrating makes sense.
Current Setup
Dependencies:
eslint9.39.2eslint-config-prettier10.1.8 (disables ESLint rules that conflict with Prettier)prettier3.8.1
Configuration files:
eslint.config.js- uses flat config format with@eslint/jsrecommended rules.prettierrc.json- no semicolons, single quotes, 120 char width, no trailing commas.prettierignore- excludes workflow files, schemas, and test fixtures
npm scripts:
lint → tsc && eslint && prettier:check
lint:fix → eslint:fix && prettier:write
The ESLint config is minimal: just the recommended ruleset with no-console disabled. The Prettier config uses opinionated settings (no semicolons, single quotes). There are ~18 inline suppression comments across the codebase, mostly for abstract method parameters.
Biome Overview
Biome is a fork of Rome (which shut down in 2023). It's written in Rust and runs linting and formatting in a single pass. Key claims:
- ~35x faster than Prettier for formatting
- ~15x faster than ESLint for linting
- 97% compatibility with Prettier output
- 426 lint rules, many ported from ESLint and typescript-eslint
- Single binary, no npm install required for CI
Language support: JavaScript, TypeScript, JSX, TSX, JSON, CSS, GraphQL. HTML formatter is coming in Biome v2.
Not supported: Markdown, YAML, SCSS, embedded languages in template literals (e.g., GraphQL in tagged templates).
Migration Considerations
What we'd gain:
- Faster lint/format (though our current setup isn't slow)
- One fewer config file (biome.json replaces eslint.config.js + .prettierrc.json)
- Fewer devDependencies (3 packages → 1)
- No more eslint-config-prettier compatibility concerns
What we'd lose or risk:
- Prettier's wider formatting options - Biome aims for 97% compatibility but some edge cases differ
- Potential VSCode extension instability based on user reports
- Biome is younger software with a smaller contributor base
- If we need an ESLint plugin later, we'd have to run both tools anyway
Migration path:
- Run
biome migrate eslintandbiome migrate prettierto generate initial config - Run
biome checkand compare output to current linting - Fix any formatting differences (may require bulk reformatting)
- Update npm scripts and CI
Recommendation
This is a low-priority change. The current setup works fine and isn't causing problems. The main benefit would be slightly simpler tooling.
If we do want to try it:
- Start by adding Biome alongside existing tools
- Compare lint output on a branch
- Test the VSCode extension for a week before committing
If anyone has strong feelings either way, comment below.