· biome / prettier / typescript

Biome vs Prettier 2026 — 34× faster, but one gap stops you

Biome formats your Turborepo in 40ms where Prettier takes 1.35s. Switch if you don't need prettier-plugin-tailwindcss class sorting. Don't if you do.

By Ethan

1,147 words · 6 min read

Your CI format step takes 1.35 seconds with Prettier. With Biome it takes 40ms. We measured it on this repo — 74 TypeScript and Astro files, macOS arm64, Node 24. That is a 34× difference, close to Biome’s official claim of ~35x.

Whether you should switch depends almost entirely on one question: do you rely on prettier-plugin-tailwindcss for automatic class sorting?

Who this is for

Mid-to-senior JS/TS developers considering replacing Prettier with Biome in a Turborepo or Nx monorepo. If you don’t have Tailwind in your stack, this decision is mostly already made — keep reading. If you do, read the plugin ecosystem section first and decide from there.

What we tested

  • Prettier 3.8.3 with prettier-plugin-astro — 5 cold runs, averaged
  • Biome 2.4.15 — 5 cold runs, averaged
  • Workload: harryct229/toolchew Turborepo, 74 files (TypeScript + Astro)
  • Machine: macOS arm64, Node 24
  • Measured: 2026-05-25

Both tools run as format-only passes (no linting). Each run executed from a clean shell with no file cache primed.

Speed

ToolAvg (5 runs)vs Biome
Prettier 3.8.31.35 s34× slower
Biome 2.4.150.04 s

34× is real, not cherry-picked. The speedup comes from three things working together: Biome ships as a single Rust binary, it parallelizes across all CPU cores, and it skips Node.js startup overhead entirely. Prettier has to boot Node, resolve plugins, and process files mostly single-threaded.

At 74 files this saves you ~1.3 seconds. At 500 files the same ratio holds — expect 8–10 seconds saved per run. In a CI pipeline running hundreds of times a week, that matters.

One caveat: Prettier 3.6+ ships an experimental OXC-based CLI (--experimental-cli). It’s faster than the default, but it’s still experimental, and we didn’t benchmark it here. If you’re anchored to Prettier, it’s worth testing.

Migration

Biome ships a migration command that handles the Prettier config automatically:

npx @biomejs/biome migrate prettier --write

This reads your prettier.config.js (or .prettierrc) and writes a biome.json with equivalent settings. For most configs it works on the first try.

For a complete walkthrough that covers moving both ESLint rules and Prettier config to Biome in one pass, see How to migrate from ESLint and Prettier to Biome.

On this specific Turborepo, two additional manual steps were needed:

1. Tailwind v4 @theme {} syntax

Biome doesn’t recognize Tailwind’s v4 @theme {} block by default and parses it as invalid CSS. Fix:

{
  "css": {
    "parser": {
      "cssModules": true,
      "tailwindDirectives": true
    }
  }
}

Without tailwindDirectives: true, Biome will error on any .css file using @theme.

2. Remove prettier-plugin-astro

Biome handles .astro files natively. If you leave prettier-plugin-astro in your package.json, it conflicts. Remove it:

npm uninstall prettier-plugin-astro

Known bug: indentWidth conflict with .editorconfig

biome migrate prettier --write may generate indentWidth: 2 in biome.json even when your .editorconfig already defines a different indent_size, causing the formatter to override it. The .editorconfig file itself is never modified. Review the generated biome.json’s formatter.indentWidth value and remove it if you want .editorconfig to control indentation. Tracked at biomejs/biome#4146.

Gotchas at a glance

IssueStatusFix
Tailwind v4 @theme {} parse errorRequires manual configtailwindDirectives: true in biome.json
prettier-plugin-astro conflictRemove the packagenpm uninstall prettier-plugin-astro
indentWidth conflicts with .editorconfig on migrateActive bug #4146Remove formatter.indentWidth from generated biome.json if using .editorconfig
prettier-plugin-tailwindcss class sortingNo Biome equivalentSee below — this is the hard blocker

Plugin ecosystem

This is where Biome’s story has a real hole.

Biome’s GritQL plugin system covers linting only. There is no formatter plugin API. That means prettier-plugin-tailwindcss — the plugin that auto-sorts Tailwind utility classes into a consistent order — has no equivalent in Biome today.

If your team relies on class sorting, migrating to Biome means you lose it. You can still sort manually or use a separate step, but there’s no drop-in replacement that runs inside Biome.

For projects that don’t use Tailwind, or that use Tailwind without caring about sort order, this gap doesn’t matter. For teams where class sort order is enforced in CI, it’s a hard blocker until Biome ships a formatter plugin API.

For a full comparison of Biome’s linting capabilities against ESLint, see Biome vs ESLint 2026.

Editor experience

The official VS Code extension (biomejs.biome) works well for both single-package repos and monorepos with per-package biome.json configs. A gap in per-package config resolution (biomejs/biome-vscode#655) was fixed in Biome 2.0.4 — it is not a concern at 2.4.15.

If you’re on an older version, the unofficial fronterior.biome-monorepo extension is a workaround, but upgrade to 2.0.4+ first.

Momentum

Biome is on a healthy trajectory. As of May 2026: 24.7k GitHub stars, 15M monthly npm downloads, monthly releases, and backing from Depot (Platinum sponsor) and Lokalise (Silver sponsor). The project has moved fast since forking from Rome — the v2.0 release added type-aware linting without the TypeScript compiler, which is non-trivial.

Prettier is stable and not going anywhere. It’s the safe default, with a massive ecosystem and years of production use. But it’s playing defense: most of the interesting movement in JS/TS formatting tooling is happening in the Biome-shaped area of the space.

If you’re starting a new project today, defaulting to Biome is a reasonable bet. If you’re migrating, the question is whether the plugin gap and editor roughness are worth the speed gain.

Verdict

ScenarioRecommendation
New TypeScript monorepo, no Tailwind or class-sort-not-enforcedSwitch to Biome
Existing monorepo, want faster CI, no prettier-plugin-tailwindcssMigrate — one day of work
Tailwind-heavy project with enforced class sort orderStay on Prettier until Biome ships formatter plugins
Need prettier-plugin-tailwindcss + fast formattingHybrid: Biome for non-CSS, Prettier only for CSS/Tailwind files
Unsure — want to try before committingRun Biome in CI as a check step, don’t remove Prettier yet

The 34× speedup is real. The prettier-plugin-tailwindcss gap is real. Those two facts cover 90% of the decision.

Caveats

We tested one Turborepo of 74 files. Larger repos will show similar ratios but larger absolute numbers — we haven’t tested at 1,000+ files. The OXC-based Prettier --experimental-cli was not benchmarked here; if that flag closes the gap, the calculus changes.

The VS Code monorepo per-package config gap (biomejs/biome-vscode#655) was resolved in 2.0.4 — not a blocker at 2.4.15.

No affiliate relationships with either tool. Both are free and open-source.

References