Benchmarks / Editor engines

Architecture dashboard

✓ Verified runView methodology
Fastest typing
9.6 ms

Lexical at 100 blocks

76.7% faster than Tiptap
Smallest initial payload
65.2 KiB

Widget-first before activation

73% less than full Tiptap
Scroll stability
0 frames

Dropped across every engine

No scrolling winner
Live comparison

Performance by workload

100 blocks · warm cache · native CPU

Compare

Typing latency

20-character input · lower is better

milliseconds
Full Tiptap41.2 ms
Lexical9.6 ms
Widget-first45.1 ms
MetricFull TiptapLexicalWidget-first
Ready time53.9 ms44.6 ms44.3 ms
Idle heap3.18 MiB2.36 MiB2.05 MiB
Type 20 characters41.2 ms9.6 ms45.1 ms
Paste 2,000 characters1.8 ms0.9 ms1.3 ms
Scale curve

Typing cost as blocks grow

Native CPU · 20-character input

Widget fan-out
10
100
500
1k
2k
Full TiptapLexicalWidget-first
Production bundle

Initial JavaScript

Gzip · isolated builds

Widgets −73%
Full Tiptap241.9 KiB
Fully loaded on start
Lexical133.4 KiB
Fully loaded on start
Widget-first65.2 KiB
189.6 KiB after editor activation
Initial loadLazy rich-text chunk
Recommended architecture

Keep the widget document model

Widgets are the right abstraction for packageable, typed content. The benchmark exposed implementation work, not a reason to return to one full-document rich-text editor.

  1. 01
    Key subscriptions

    Notify the changed block or editing channel, not every mounted widget.

  2. 02
    Virtualize idle blocks

    Keep thousands of off-screen wrappers out of the DOM.

  3. 03
    Test Lexical inside one widget

    Compare editors after document bottlenecks are gone.

Methodology

Measured in the browser, not estimated from package names.

Each engine received a separate production build. Five cold and five warm samples ran at every document size and CPU profile.

300
validated samples
10–2k
paragraph blocks
1× / 4×
CPU profiles
0
invalid results
Tiptap used immediatelyRender for a comparable client-ready point. The Lexical build intentionally contains fewer product features.