Skip to content

Investigate replacing ESLint + Prettier with Biome #1428

@JamieMagee

Description

@JamieMagee

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:

  • eslint 9.39.2
  • eslint-config-prettier 10.1.8 (disables ESLint rules that conflict with Prettier)
  • prettier 3.8.1

Configuration files:

  • eslint.config.js - uses flat config format with @eslint/js recommended 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:

  1. Run biome migrate eslint and biome migrate prettier to generate initial config
  2. Run biome check and compare output to current linting
  3. Fix any formatting differences (may require bulk reformatting)
  4. 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.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions