DEV Community

Alex Spinov
Alex Spinov

Posted on

Biome Has a Free Toolchain: Replace ESLint + Prettier With a Single Tool That's 100x Faster

Your CI pipeline spends 45 seconds on linting and formatting. Your IDE freezes for 2 seconds every time you save because ESLint is parsing your entire project. You maintain .eslintrc, .prettierrc, .editorconfig, and somehow they still conflict.

What if one tool handled linting AND formatting, ran in milliseconds, and needed zero configuration?

That's Biome. Written in Rust, designed to replace ESLint and Prettier simultaneously.

Performance: Biome vs ESLint + Prettier

Operation ESLint + Prettier Biome Speedup
Lint 1,000 files 12.4s 0.12s 103x
Format 1,000 files 3.8s 0.05s 76x
IDE save hook 800ms 8ms 100x

These aren't synthetic benchmarks — this is a real-world React project with TypeScript.

Quick Start

npm install --save-dev --save-exact @biomejs/biome
npx @biomejs/biome init
Enter fullscreen mode Exit fullscreen mode

That creates a biome.json. You're done. No plugins, no presets, no extends chains.

One Command, Two Jobs

# Lint AND format — one command
npx biome check --write .

# Or separately:
npx biome lint .
npx biome format --write .
Enter fullscreen mode Exit fullscreen mode

Configuration (When You Need It)

{
  "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
  "organizeImports": { "enabled": true },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "complexity": {
        "noForEach": "warn"
      },
      "suspicious": {
        "noExplicitAny": "error"
      }
    }
  },
  "formatter": {
    "indentStyle": "space",
    "indentWidth": 2,
    "lineWidth": 100
  }
}
Enter fullscreen mode Exit fullscreen mode

One file. No plugin installation. No peer dependency hell.

Migration From ESLint + Prettier

npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
Enter fullscreen mode Exit fullscreen mode

Biome reads your existing ESLint and Prettier configs and converts them. Most rules have direct equivalents.

200+ Lint Rules — No Plugins Needed

Biome includes rules from:

  • ESLint coreno-unused-vars, no-console, eqeqeq
  • typescript-eslintno-explicit-any, prefer-optional-chain
  • eslint-plugin-reactno-array-index-key, jsx-no-target-blank
  • eslint-plugin-react-hooksrules-of-hooks, exhaustive-deps
  • eslint-plugin-import — organize imports, no duplicates
  • eslint-plugin-a11y — accessibility checks

All built in. No npm install eslint-plugin-*.

IDE Integration

// .vscode/settings.json
{
  "editor.defaultFormatter": "biomejs.biome",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "quickfix.biome": "explicit",
    "source.organizeImports.biome": "explicit"
  }
}
Enter fullscreen mode Exit fullscreen mode

CI Setup

# .github/workflows/ci.yml
- name: Lint & Format Check
  run: npx biome ci .
Enter fullscreen mode Exit fullscreen mode

biome ci runs both lint and format checks in CI mode — exits with non-zero if anything fails.

When to Choose Biome

Choose Biome when:

  • CI time matters — linting in <1s instead of 30s+
  • You want one config file instead of three
  • Plugin dependency management is draining your team
  • You're starting a new project and want minimal tooling setup

Skip Biome when:

  • You rely on highly specific ESLint plugins with no Biome equivalent
  • Your team has extensive custom ESLint rules
  • You need CSS/SCSS linting (Biome focuses on JS/TS/JSX/JSON)

The Bottom Line

Biome proves that "fast" and "correct" aren't tradeoffs. It's faster than ESLint, more consistent than Prettier, and simpler than both combined.

Start here: biomejs.dev


Need custom data extraction, scraping, or automation? I build tools that collect and process data at scale — 78 actors on Apify Store and 265+ open-source repos. Email me: Spinov001@gmail.com | My Apify Actors

Top comments (0)