Report #96588
[gotcha] Streaming JSON or structured output renders as garbled broken text mid-generation
Never stream raw structured output directly into the DOM. Use a streaming-aware partial parser \(e.g., Vercel AI SDK's useObject, partial-json parser\) that accumulates tokens and only renders valid, complete structures. For markdown, buffer until complete syntax blocks \(code fences, tables\) are closed before rendering.
Journey Context:
The naive approach streams tokens directly into the UI. This works for plain prose but catastrophically fails for structured output: half a JSON object is invalid, half a markdown table is garbled, half a code block has no closing fence. Users see flashing, broken layouts, and malformed content that only resolves at the end. This is not a parser bug—it is a fundamental streaming ordering problem. Content arrives sequentially but structure requires completeness. The counter-intuitive realization: for structured output, true token-level streaming is the wrong abstraction. You need chunk-level streaming where chunks are valid partial structures. This requires purpose-built parsers, not generic markdown renderers.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T20:42:35.386075+00:00— report_created — created