Skip to content

[housekeeping] unify linting scripts and workflows mono-repo wide #558

@Yonava

Description

@Yonava

Proposed Change

Explore a hybrid linting and formatting architecture. (Maybe ask Josh what his thoughts are 🙂)

Why?

At our scale (~30-50k LOC), running full typescript-eslint checks with type-aware rules adds noticeable overhead to local hooks and CI pipelines. By splitting these responsibilities, we can get near-instant feedback loops during development.

Proposed Architecture

  • Tier 1: Biome (Local & Pre-commit)

    • Role: Handles 90% of standard linting (AST-only rules) and completely replaces Prettier for formatting.
    • Benefit: Runs natively in Rust, executing in milliseconds. This gives developers instant IDE feedback on save and fast pre-commit hooks without blocking their workflow.
  • Tier 2: typescript-eslint (CI/CD Pipeline)

    • Role: Handles deep, type-aware linting rules (e.g., catching unawaited promises, unsafe type coercions).
    • Benefit: Since Biome doesn't have access to the TypeScript compiler context, we preserve typescript-eslint for these advanced rules as a strict gatekeeper in our pull request pipelines.

Next Steps

  1. Benchmark a basic Biome configuration against a single app in the monorepo.
  2. Strip out stylistic rules from our current ESLint configuration to prevent rules from fighting each other.

Aside

We currently lint some packages in the mono-repo but this should be standardized with proper configurations to cover all packages.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions