EditorStack benchmarks
12 of 34 products have been measured by EditorStack: bundle size in run bundles-2026-09-17 and time to first editor in run tte-2026-08-20. These are measurements of cost, not rankings of quality.
What we measure, and what we do not
- Bundle size — the JavaScript your users download for the editor core: installed alone, imported through its documented entry point, bundled with esbuild 0.25.10 (bundle, minify, format=esm, platform=browser, target=es2020, NODE_ENV=production), gzipped with zlib level 9. CSS is excluded. Peer dependencies such as React are treated as external, because your app already ships them.
- Time to first editor — Time from navigation start until the editor’s own root element is present in the DOM, measured with performance.now() inside the page. Median of 5 runs in Chromium (Playwright build 1194), headless.
Limitations. Measured on a warm local HTTP server with no network latency and no CPU throttling. Treat these as relative costs between libraries, not as field performance. Bundle size says nothing about features: a small core that needs five plugins can end up larger than a big one that needs none. Neither number measures editing performance on large documents, accessibility or output quality. Hosted SDKs and platforms cannot be installed and bundled locally, so they are not benchmarked — that is a limit of the method, not a verdict on the product.
Every number is reproducible: the scripts are in the repository, and the build fails if a number on the site differs from the recorded run. The full method is on the methodology page.
Bundle size bundles-2026-09-17
| Library | Package | Version | min+gzip | Raw | React external |
|---|---|---|---|---|---|
| Craft.js | @craftjs/core | 0.2.12 | 29.2 kB | 89.3 kB | yes |
| Quill | quill | 2.0.3 | 58.7 kB | 200.6 kB | no |
| Editor.js | @editorjs/editorjs | 2.31.7 | 64.3 kB | 237.9 kB | no |
| Puck | @measured/puck | 0.20.2 | 90.4 kB | 282.3 kB | yes |
| Lexical | @lexical/react | 0.50.0 | 104.9 kB | 317.6 kB | yes |
| Tiptap | @tiptap/react | 3.31.3 | 123.3 kB | 389.9 kB | yes |
| Plate | @udecode/plate | 48.0.5 | 150.8 kB | 500.5 kB | yes |
| CKEditor 5 | ckeditor5 | 48.5.1 | 161.2 kB | 629.9 kB | no |
| GrapesJS | grapesjs | 0.23.6 | 294.6 kB | 1115.7 kB | no |
| React Page | @react-page/editor | 5.4.6 | 377.2 kB | 1279.3 kB | yes |
| BlockNote | @blocknote/react | 0.54.2 | 386.1 kB | 1428.2 kB | yes |
| TinyMCE | tinymce | 8.9.1 | 393.9 kB | 1130.2 kB | no |
Run bundles-2026-09-17, measured 2026-09-17 with esbuild 0.25.10 on v22.19.0. CSS excluded.
Time to first editor tte-2026-08-20
| Library | Lines of code | Direct packages | Time to editor (median) | Notes |
|---|---|---|---|---|
| GrapesJS | 14 | 1 | 309 ms | — |
| Editor.js | 5 | 1 | 70 ms | — |
| Puck | 16 | 3 | 852 ms | — |
| Craft.js | 21 | 3 | 94 ms | — |
| Plate | 13 | 8 | 209 ms | — |
| Tiptap | 11 | 4 | 171 ms | — |
| Lexical | 25 | 4 | 159 ms | — |
| React Page | 12 | 6 | 1004 ms | Requires a bundler alias for react/jsx-runtime.js (react-dnd + React 19). |
Run tte-2026-08-20, measured 2026-08-20. Chromium (Playwright build 1194), headless, 5 loads per app, median reported.
Coverage
Research reports
- Visual editor bundle size benchmark, 2026We measured the JavaScript weight of twelve visual and rich-text editor libraries under identical conditions. Craft.js is the lightest at 29.2 kB gzip; TinyMCE is the heaviest at 393.9 kB, a 13.5× spread across libraries that are routinely compared with each other.
- The visual editor library ecosystem in 2026: what our dataset tells usAn analysis of our own dataset: how these products are licensed, how they meter, what they all refuse to do, and the four structural patterns that explain most purchasing regret in this category.
- State of Visual Builders 2026: survey open, results not yet publishedWe are collecting data on how development teams choose and live with visual editor libraries. No results are published here yet, because we have not run the survey — this page is the invitation, not the report.
- Time to first editor: how long eight visual editors take to appearWe built the same minimal editor eight times and measured it: Editor.js reaches a rendered editor in 70 ms and 5 lines of code, React Page takes 1,004 ms and needs a bundler alias to build at all against React 19.