What is this case study about?

This case study documents how the fireup.pro engineering team reduced pre-commit hook execution time from ~27 seconds to ~1.8 seconds in a large TypeScript monorepo by replacing most of the ESLint + Prettier pipeline with Biome a Rust-based formatter and linter. The result: 92.6% faster pre-commit hooks with no loss in code quality and no breaking changes to existing workflows.

The Problem: ESLint + Prettier Bottleneck

The starting setup was standard for a modern JavaScript/TypeScript project:

  • ESLint for linting
  • Prettier for formatting
  • lint-staged for pre-commit automation

In a large monorepo, this stack became a bottleneck. Pre-commit hooks were taking 24–30 seconds per commit, slowing down developer workflow, reducing commit frequency, and generating friction across the team. This is a common problem in scaling frontend and fullstack teams.

What is Biome?

Biome is an open-source toolchain for JavaScript and TypeScript that combines a formatter and a linter in a single binary written in Rust. It has zero npm dependencies, runs significantly faster than ESLint + Prettier, and uses a unified configuration file. Biome is designed as a drop-in replacement for the ESLint + Prettier combination in most projects, with coverage for TypeScript, React, JSX, JSON, and CSS.

The Solution: Biome + Minimal ESLint (Hybrid Approach)

Rather than doing a full replacement, the team adopted a hybrid architecture: Biome handles 90% of formatting and linting tasks, while a minimal ESLint configuration is retained for rules Biome does not yet support.

New pre-commit pipeline

1. Biome (primary engine)

  • Formatting: quotes, semicolons, indentation
  • Linting: TypeScript, React, accessibility, security
  • Import sorting
  • JSON formatting

2. Minimal ESLint (edge cases only)

  • JSDoc validation, critical for large codebases with over 1.1M JSDoc comments
  • Promise rules (param-names)
  • Custom rules not yet supported by Biome

3. Prettier (limited scope)

  • Tailwind CSS class sorting in selected apps only

Performance Results

Metric Before After Improvement
Pre-commit hooks 24–30s ~1.8–8s 75–92% faster
Formatting Prettier Biome ~25× faster
Linting ESLint Biome + minimal ESLint ~15× faster

The benchmark result for a representative commit: 27.2s → 1.8s, a 92.6% reduction in execution time.

Code Quality: 92% Rule Alignment

Maintaining code quality was a hard requirement. The hybrid setup preserved 92% of the previous ESLint ruleset, including:

  • TypeScript strict rules
  • React and Hooks best practices
  • Accessibility checks
  • Security linting
  • Unused variable detection
  • Import organization
  • JSDoc validation (1.1M+ comments in the codebase)
  • Promise handling rules

No critical regressions were introduced.

Zero breaking changes

The migration was fully backward compatible:

  • Existing commands still work (yarn lintyarn lint:fix)
  • No changes required from developers
  • ESLint still available where needed
  • CI/CD pipelines unchanged

Business impact

Faster pre-commit hooks directly affect engineering throughput. With ~24 seconds saved per commit, multiplied across dozens of commits per day and a multi-person team, the cumulative time saved is significant. The practical outcomes:

  • Smoother development flow from faster commit cycles
  • More frequent commits, leading to smaller and safer changes
  • Faster feedback loop, catching issues before they reach CI/CD
  • Reduced developer frustration from waiting on tooling

When to use biome

Biome is a strong fit when:

  • You have a large monorepo with slow lint-staged pipelines
  • Your ESLint configuration is complex and slow to initialize
  • You have 5+ developers committing frequently
  • Pre-commit or CI/CD performance is a bottleneck

When to stay with ESLint

ESLint remains the better choice when:

  • You rely heavily on custom or third-party ESLint plugins with no Biome equivalent
  • You have strict enterprise linting policies tied to specific ESLint rules
  • Your ruleset depends on features Biome does not yet support

Biome vs ESLint + Prettier: Summary

  ESLint + Prettier Biome
Language JavaScript Rust
Dependencies Many (plugins, parsers) Zero
Configuration Separate files per tool Single biome.json
Formatting + Linting Two separate tools Unified
Performance Baseline Up to 15× faster linting, 25× faster formatting
Plugin ecosystem Extensive Growing, not yet at parity
Custom rules Full support Limite

If your team is dealing with slow CI/CD pipelines, monorepo performance issues, or frontend scalability challenges, see how fireup.pro’s frontend development services can help.