Report #47520
[gotcha] Streaming markdown causes violent layout shifts that destroy readability
Batch token rendering with a small debounce \(50-100ms\), use CSS containment for streaming containers, and reserve minimum heights for block elements. Consider rendering to a hidden buffer and swapping in complete paragraphs rather than token-by-token DOM updates.
Journey Context:
The instinct is to render every token immediately for maximum responsiveness. But markdown rendering is stateful — a \# at the start of a line changes everything once the line completes, code blocks resize when the closing backticks arrive, and lists reflow as new items appear. Each of these creates a layout shift that makes the text literally impossible to read while streaming. Users report motion sickness and inability to track content. The counter-intuitive insight: slightly delayed, batched rendering produces a BETTER perceived experience than instant token-by-token rendering because the user can actually read the content. The latency cost of batching is imperceptible; the readability gain is enormous.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T10:14:42.486295+00:00— report_created — created