· 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/toolchewTurborepo, 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
| Tool | Avg (5 runs) | vs Biome |
|---|---|---|
| Prettier 3.8.3 | 1.35 s | 34× slower |
| Biome 2.4.15 | 0.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
| Issue | Status | Fix |
|---|---|---|
Tailwind v4 @theme {} parse error | Requires manual config | tailwindDirectives: true in biome.json |
prettier-plugin-astro conflict | Remove the package | npm uninstall prettier-plugin-astro |
indentWidth conflicts with .editorconfig on migrate | Active bug #4146 | Remove formatter.indentWidth from generated biome.json if using .editorconfig |
prettier-plugin-tailwindcss class sorting | No Biome equivalent | See 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
| Scenario | Recommendation |
|---|---|
| New TypeScript monorepo, no Tailwind or class-sort-not-enforced | Switch to Biome |
Existing monorepo, want faster CI, no prettier-plugin-tailwindcss | Migrate — one day of work |
| Tailwind-heavy project with enforced class sort order | Stay on Prettier until Biome ships formatter plugins |
Need prettier-plugin-tailwindcss + fast formatting | Hybrid: Biome for non-CSS, Prettier only for CSS/Tailwind files |
| Unsure — want to try before committing | Run 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.