← Back to all spotlights

Biome: The Blazing Fast Rust Linter and Formatter

Replace ESLint and Prettier with Biome, a blistering Rust toolchain that formats and lints JavaScript, TypeScript, and CSS in milliseconds.

P24
By Pickwise24 Editorial Team
Verified Open-Source Review

What Is Biome?

Biome (formerly Rome) is an open-source, Rust-built developer toolchain that unifies source code formatting, linting, and syntax analysis for JavaScript, TypeScript, JSX, JSON, and CSS into a single zero-dependency binary. Maintained under the biomejs/biome repository on GitHub, it provides sub-millisecond execution times and drop-in compatibility with standard Prettier formatting rules.


       ┌────────────────────────────────────────────────────────┐
       │                      Biome Core                        │
       │  (Single Rust Binary • Multi-Threaded • Resilient CST)  │
       └───────────────────────────┬────────────────────────────┘
                                   │
         ┌─────────────────────────┼─────────────────────────┐
         ▼                         ▼                         ▼
   ┌───────────┐             ┌───────────┐             ┌───────────┐
   │ Formatter │             │  Linter   │             │ Analyzer  │
   │ (Prettier │             │ (ESLint-  │             │ (Imports, │
   │  par)     │             │  style)   │             │  Syntax)  │
   └───────────┘             └───────────┘             └───────────┘

Maintaining a modern JavaScript toolchain often feels like babysitting a stack of cards in a hurricane. To achieve standard code quality, a typical project requires:

1. Prettier for code formatting.

2. ESLint for semantic linting.

3. Half a dozen bridge packages (eslint-config-prettier, eslint-plugin-prettier, @typescript-eslint/parser) just to stop the first two from bickering over trailing commas.

By the time the configuration files settle, your CI pipeline takes four minutes merely to verify indentation across a modest monorepo.

Biome eliminates that architectural sprawl. Born out of the ashes of the Rome project, the community-led fork emerged as a tour de force, winning the Prettier Challenge by proving 97% compatibility while running over twenty times faster.


Architectural Design: Why It Flies

Most legacy web toolchains parse your source code into an Abstract Syntax Tree (AST), run a series of plugins sequentially, mutate the tree, and output text. When you run both ESLint and Prettier, that file is read, tokenised, parsed, and traversed multiple times.

Biome takes a completely different path:

  • Resilient CST (Concrete Syntax Tree): Biome constructs a lossless Concrete Syntax Tree. It preserves every space, comment, and newline. If your code contains a syntax error midway through editing, the parser does not panic; it isolates the broken branch and analyses the rest.
  • Unified Pipeline: Formatting and linting happen on the exact same syntax tree in a single pass. Biome reads the file off the disk once, parses it once, checks lint rules against memory nodes, and formats the output buffer in Rust.
  • Multi-Threaded Workpool: Node.js CLI tools are naturally constrained by single-threaded event loops unless you orchestrate complex worker threads. Biome spreads file processing across all available CPU cores using native Rust concurrency primitives.

Biome vs. The Legacy JavaScript Toolchain

FeatureBiomeESLint + Prettier
Language EngineRust (Native binary)JavaScript / Node.js runtime
Dependency Footprint1 package (~25–40MB binary)30–80 packages (often >150MB node_modules)
ConfigurationSingle biome.json.eslintrc.*, .prettierrc, ignore files
Execution SpeedSub-second across thousands of filesMulti-second to minutes on large repos
CSS / GraphQL SupportBuilt-in CSS; GraphQL previewRequires community plugins
Plugin EcosystemCurated native rules (no arbitrary JS plugins)Massive (thousands of custom plugins)

Setting Up Biome in Seconds

You can trial Biome without committing your entire architecture or ripping out existing scripts immediately.

1. Installation

Install the binary as an exact development dependency:


npm install --save-dev --save-exact @biomejs/biome
# or via pnpm
pnpm add --save-dev --save-exact @biomejs/biome

2. Initialise Configuration

Generate a clean, structured biome.json at the root of your repository:


npx @biomejs/biome init

This generates an initial configuration schema with sane defaults. Here is a battle-tested example tailored for modern TypeScript projects:


{
  "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
  "vcs": {
    "enabled": true,
    "clientKind": "git",
    "useIgnoreFile": true
  },
  "files": {
    "ignoreUnknown": false
  },
  "formatter": {
    "enabled": true,
    "indentStyle": "space",
    "indentWidth": 2,
    "lineWidth": 100
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "correctness": {
        "noUnusedVariables": "error"
      },
      "suspicious": {
        "noExplicitAny": "warn"
      }
    }
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single",
      "semicolons": "always"
    }
  }
}

3. CLI Commands for Everyday Work

Check formatting, run lint rules, and organise imports across your code in one command:


# Check everything without writing changes
npx @biomejs/biome check ./src

# Automatically apply fixes, organise imports, and format
npx @biomejs/biome check --write ./src

# Use in CI pipelines with strict checks
npx @biomejs/biome ci ./src

If you are migrating an existing codebase from Prettier, Biome can ingest your existing settings directly:


npx @biomejs/biome migrate prettier --write

The Community Verdict: Speed vs. Plugin Extensibility

Across developer discussions and YouTube benchmarks, the consensus on Biome is largely uniform: the performance gains in CI pipelines and developer loops are staggering. Teams running massive Next.js or monorepo setups report CI lint stages plummeting from three minutes down to four seconds.

However, engineers frequently note one crucial trade-off: the plugin ecosystem.

ESLint has a decade-long backlog of highly specialised plugins (for example, framework-specific edge rules for Tailwind class sorting, TanStack Query, or proprietary internal checks). Biome intentionally avoids running arbitrary JavaScript plugins inside its Rust core to protect its performance guarantees.

If your workflow relies strictly on foundational safety rules, clean import sorting, modern framework practices, and blistering format checks, Biome is ready for production. If your codebase relies on twenty bespoke ESLint plugins that dictate bespoke domain logic, you may need a hybrid bridge while Biome's native plugin architecture matures.

Key Takeaways

  • Consolidation: Replaces Prettier, ESLint, and import sorters with one cohesive utility.
  • Deterministic Output: Near-identical formatting output to Prettier, avoiding team formatting wars.
  • Extreme Velocity: Written in Rust with parallel parsing, reducing CI bottlenecks dramatically.
  • Minimal Footprint: Eradicates dozens of bloated linting packages from package.json.

🛡️ Editorial Standards & Methodology

Every repository featured on Pickwise24 undergoes testing on local workstation hardware before publication. We verify CLI installation steps, review open-source repository licensing, benchmark computational footprint, and evaluate architectural trade-offs to provide genuine, high-utility developer intelligence.