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 lint,yarn 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.









