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.
5 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.
src/ (120 messy JS modules, 40 compact JSON docs, 20 short Markdown notes). Unformatted tree size 38,925 bytes.prettier 3.9.9 (--write on **/*.{js,json,md}, printWidth 80, tabWidth 2, semi true, double quotes); dprint 0.60.1 with TypeScript/JSON/Markdown WASM plugins (lineWidth 80, indentWidth 2, semiColons always, preferDouble).--check median 1,313 ms; dprint check median 455 ms.(n) =>, dprint n => with these defaults).| 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.
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.
| 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.
Lab evidence
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.