Plate 94
Should You Leave Prettier? 1.59s vs 0.51s
dprint 0.60.1 vs Prettier 3.9.9 on 180 files (120 JS + 40 JSON + 20 MD, 38925 B pristine): write medians 514 ms vs 1586 ms; check 455 ms vs 1313 ms. Output 44805 vs 45285 B. All 120 JS files differed on arrow-param parentheses under these defaults.
Aditya Challa5 min read
On a 180-file mixed tree (120 JavaScript, 40 JSON, 20 Markdown; 38,925 bytes unformatted), Prettier 3.9.9 took a median 1,586 ms to write. dprint 0.60.1 took 514 ms. Same machine, interleaved warm runs, write mode after restoring a pristine copy each round.
Short answer: leave Prettier for dprint when CI format time is the pain and you can accept dprint's style defaults (or configure them). Keep Prettier when your team already locked Prettier options, editor plugins, or a shareable config that dprint does not match. No affiliate links in this post.
What I tested
- Machine: 8 vCPU Intel Xeon / 15 GB RAM Linux cloud box, Node 20.19.2, tested 5 Oct 2026 (about 22:55 to 23:10 IST). Shared box; tools interleaved each round.
- Fixture: 180 generated files under
src/(120 messy JS modules, 40 compact JSON docs, 20 short Markdown notes). Unformatted tree size 38,925 bytes. - Tools:
prettier3.9.9 (--writeon**/*.{js,json,md}, printWidth 80, tabWidth 2, semi true, double quotes);dprint0.60.1 with TypeScript/JSON/Markdown WASM plugins (lineWidth 80, indentWidth 2, semiColons always, preferDouble). - Timing: five interleaved warm write runs after one warmup each. Each run starts from a fresh copy of the pristine tree. Median wall-clock of the full CLI call.
- Check mode (already formatted trees): Prettier
--checkmedian 1,313 ms; dprintcheckmedian 455 ms. - Output bytes after write: Prettier 45,285 B; dprint 44,805 B. Style diff: all 120 JS files differed on arrow-parameter parentheses (Prettier
(n) =>, dprintn =>with these defaults). - One surprise: dprint was about 3.1x faster on write and about 2.9x faster on check, but a naive config swap rewrites every JS file's arrow style.
- Not tested: TypeScript/TSX/Vue/Svelte parsers, Prettier plugins (Tailwind, organize-imports), dprint incremental cache across commits, editor save-on-format UX, monorepo ignore globs at scale, Windows/macOS, format-on-stash hooks.
Is dprint faster than Prettier?
| Tool | Write median | Write runs (ms) | Check median | Output bytes |
|---|---|---|---|---|
| dprint 0.60.1 | 514 ms | 468 / 481 / 526 / 515 / 514 | 455 ms | 44,805 |
| Prettier 3.9.9 | 1,586 ms | 1,387 / 1,704 / 1,586 / 1,566 / 1,645 | 1,313 ms | 45,285 |
On this fixture dprint finished write about 3.1x faster and check about 2.9x faster. Byte totals were close. The leave-Prettier case is strongest when format or --check still costs well over a second in CI and you are willing to adopt dprint's style table.
If you already moved lint to oxlint or Biome, format is often the next slow JS step. The Biome vs ESLint + Prettier post and the oxfmt vs Prettier Markdown post are the related formatter/linter decisions on this site; this post is the multi-language dprint path.
What do you lose leaving Prettier?
Prettier's option surface and plugin ecosystem are larger. Teams that rely on Prettier plugins, a company-wide .prettierrc, or "Prettier as the style guide" will churn on the first PR if arrow parens, trailing commas, or JSX spacing differ. On this run every JS file changed arrow-parameter parentheses under default-ish configs, so a switch is a one-time mass diff unless you tune dprint to match.
Also match the tool to the languages you format. dprint's WASM plugins cover TypeScript, JSON, Markdown, and more, but a Prettier-only plugin for a niche syntax is a hard stop. Re-time your own tree with write and check before rewriting the CI job. The oxlint vs ESLint switch post is the lint-side sibling when CI still pays for both lint and format.
Should you leave Prettier for dprint?
| Situation | My pick |
|---|---|
CI --check or format still takes over a second on a mid-size tree | Try dprint; measure write and check on your repo |
| Already on Biome or oxfmt for the same files | Stay consistent; do not add a third formatter |
| Prettier plugins or a locked shareable config you cannot retune | Keep Prettier |
| You need one formatter across JS, JSON, Markdown, and other dprint plugins | dprint is the better fit to evaluate |
| First PR would rewrite thousands of arrow-paren lines | Tune dprint to match Prettier, or keep Prettier |
Bottom line: on 180 files, Prettier took 1.59 s to write and dprint took 0.51 s. Who should not switch yet: teams blocked on Prettier plugins or unwilling to take a style mass-diff. Everyone else still paying over a second for format should measure their own tree the same way.
How this was made: I generated the fixture, ran interleaved Prettier and dprint write and check on the ShopperCove test box, and kept the timing JSON; the write-up was drafted with AI help and checked against that output.
Sources
- https://dprint.dev/
- https://prettier.io/docs/en/cli.html
- https://github.com/dprint/dprint
- https://www.npmjs.com/package/dprint
- https://www.npmjs.com/package/prettier
- https://plugins.dprint.dev/
Related
- https://www.shoppercove.com/blog/biome-vs-eslint-prettier
- https://www.shoppercove.com/blog/oxfmt-0-72-native-markdown-formatter-prettier-parity-october-2026
- https://www.shoppercove.com/blog/oxlint-vs-eslint
- https://www.shoppercove.com/blog/oxlint-1-87-react-suggestions-a11y-fixes-october-2026
- https://www.shoppercove.com/blog/biome-2-5-15-type-inference-nursery-rules-october-2026
- https://www.shoppercove.com/blog/eslint-10-12-release-october-2026
- https://www.shoppercove.com/blog/vite-plus-1-0-unified-toolchain-october-2026
- https://www.shoppercove.com/blog/pnpm-vs-npm-vs-bun
Lab evidence
What I found running this
Hands-on on ShopperCove box 5 Oct 2026 ~22:55-23:10 IST (8 vCPU Intel Xeon / 15 GB shared Linux, Node 20.19.2). Fixture: 180 generated files (120 JS + 40 JSON + 20 MD), pristine 38925 bytes. Versions: prettier 3.9.9 (printWidth 80, tabWidth 2, semi true, singleQuote false); dprint 0.60.1 with typescript/json/markdown WASM plugins (lineWidth 80, indentWidth 2, semiColons always, preferDouble). Write wall medians (5 interleaved, restore pristine each run): prettier 1585.937 ms (1387.363/1703.603/1585.937/1565.573/1645.374); dprint 514.018 ms (467.675/480.512/526.194/514.788/514.018). Check medians on already-formatted trees: prettier 1312.532 ms; dprint 454.976 ms. Output bytes: prettier 45285; dprint 44805. Style: all 120 JS files differed on arrow-param parens (Prettier (n)=> vs dprint n=>). Raw: /workspace/bench-dprint/res-dprint.json, res-dprint-check.json. Not tested: TS/TSX/Vue plugins, Prettier plugins, dprint incremental cache, editors, Windows/macOS. No affiliate.
Related links
Plate 46
esbuild-register vs jiti: 343ms vs 540ms Cold
esbuild-register 3.6.0 vs jiti 2.7.0 on a 61-file TypeScript graph: cold wall medians 343 ms vs 540 ms (~1.57x); after jiti disk cache warm, 185 ms vs esbuild-register 350 ms. Same printed result 970.
5 Oct 2026
Plate 45
Should You Leave Depcruise? 679ms Test
Madge 8.0.0 vs dependency-cruiser 16.10.2 on 116 JS files: median wall 679 ms vs 1122 ms (~1.65x). Both found the same 2 circular dependency groups. Depcruise also reported 120 modules / 193 dependencies.
5 Oct 2026
Plate 63
Biome vs ESLint: Should You Switch? 0.41s vs 18.7s
Biome 2.5.15 check vs ESLint 9.39.4 + Prettier 3.8.4 on react-hook-form (317 files): 0.41 s vs 18.7 s sequential stack (ESLint 13.58 s, Prettier check 5.22 s). migrate eslint: 54/476 direct, ~50% covered. Biome 200 errors/427 warnings vs ESLint 0/562; 9 format diffs; 287 noExplicitAny from recommended.
5 Oct 2026