ADR 0014: Biome over ESLint + Prettier
ADR 0014: Biome over ESLint + Prettier
Section titled “ADR 0014: Biome over ESLint + Prettier”- Status: Accepted
- Date: 2026-04-14
- Deciders: Ideony team
Context
Section titled “Context”Ideony is a TypeScript monorepo. Lint and format tooling runs on every commit (Husky + lint-staged) and in CI. The classic ESLint + Prettier combination requires two config files, two dependency trees, plugin versioning conflicts, and noticeable slowness on large diffs. A simpler, faster alternative was evaluated.
Decision
Section titled “Decision”Use Biome as the single lint and format tool across the monorepo. Biome replaces both ESLint and Prettier: one binary, one config file (biome.json), sub-second lint+format on full repo. Husky pre-commit hook runs biome check --write via lint-staged. useImportType is disabled globally (NestJS DI needs runtime class references). unsafeParameterDecoratorsEnabled is set for NestJS parameter decorators.
Consequences
Section titled “Consequences”- Single tool replaces two; eliminates ESLint/Prettier version conflict surface.
- Biome written in Rust — lint+format on full monorepo in <1s vs 5–15s for ESLint+Prettier.
- Zero-warning policy enforced: Biome errors block commit via lint-staged.
biome.jsonchecked in — deterministic formatting across all contributors and CI.
- Biome rule coverage lags ESLint ecosystem (no
eslint-plugin-react-hooksequivalent at full parity — some rules absent). useImportTypeOFF means someimport typeopportunities are missed; acceptable tradeoff for NestJS DI compatibility.- Developers coming from ESLint must learn Biome rule names and override syntax.
Alternatives considered
Section titled “Alternatives considered”- ESLint + Prettier — rejected: slow, two-config maintenance overhead, frequent peer-dep conflicts, especially painful in monorepo with mixed NestJS + Expo packages.
- oxlint — rejected: format support immature at decision date; Biome more complete.
- dprint — rejected: formatter only, no lint; would still require ESLint.