Report #44543
[gotcha] Streaming markdown token-by-token causes rendering flicker, layout shift, and DOM thrashing as partial syntax is reinterpreted
Buffer markdown until complete block elements are formed before rendering. Render the actively-streaming edge as plain text with a typing cursor, then promote completed blocks to formatted markdown. Add CSS min-height to containers to prevent layout shift. Use debounced re-rendering or streaming-aware markdown parsers.
Journey Context:
The naive approach of re-rendering markdown on every new token causes constant DOM restructuring. A double-asterisk token renders as literal asterisks, then snaps to bold when the closing pair arrives. A triple-backtick token flickers between inline code and code block. Lists re-number as items stream in. Tables collapse and reform. Users perceive this as broken or janky. The two-pass approach trades real-time formatting for visual stability. The key insight is that users read completed paragraphs, not the actively-streaming edge, so deferring formatting by a few tokens is imperceptible but eliminates flicker. Some teams use CSS content-visibility auto to skip off-screen re-renders during streaming.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T05:14:09.685581+00:00— report_created — created