Streaming performance benchmarks
Use reproducible harnesses, then validate in-browser behavior with live delta-by-delta comparisons against alternative renderers.
Live renderer comparison lab (sequential)
Renderers run one-by-one to minimize CPU contention. Each engine gets an unscored warmup pass before the scored pass. Metrics split into first-visible commit vs final-stable commit.
| Renderer | Samples | First paint p50 | First paint p95 | Final stable p50 | Final stable p95 | Run p50 | Throughput p50 |
|---|---|---|---|---|---|---|---|
| StreamMDX | 0 | - | - | - | - | - | - |
| Streamdown | 0 | - | - | - | - | - | - |
| react-markdown | 0 | - | - | - | - | - | - |
| Renderer | Emit→ingest p50 | Ingest→commit p50 | Emit→commit p50 | Append overhead p50 | Timer drift p50 / p95 |
|---|---|---|---|---|---|
| StreamMDX | - | - | - | - | - / - |
| Streamdown | - | - | - | - | - / - |
| react-markdown | - | - | - | - | - / - |
Method note: each engine runs warmup then scored pass in isolation. Commit timing capture is unified across engines via layout-effect commit hooks to avoid instrumentation bias. Use CI locked mode for claim-grade runs; use explore mode to diagnose bottlenecks. \"First paint\" measures earliest visible commit; \"final stable\" reflects how quickly each delta settles after downstream formatting/render passes.
Static render comparison (content types)
Measures one-shot static rendering across prose, tables, code, and mixed markdown fixtures. Times are captured per engine as first mutation and final settled mutation.
| Content type | Description | StreamMDX first/final p50 | Streamdown first/final p50 | react-markdown first/final p50 | Final p50 winner |
|---|---|---|---|---|---|
| Prose heavy | Long narrative text with headings, lists, and inline formatting. | - / -n=0 | - / -n=0 | - / -n=0 | - |
| Table heavy | Large table blocks with short explanatory text. | - / -n=0 | - / -n=0 | - / -n=0 | - |
| Code heavy | Multiple fenced code blocks with surrounding markdown. | - / -n=0 | - / -n=0 | - / -n=0 | - |
| Mixed rich markdown | Lists, quotes, links, tasks, and tables in one document. | - / -n=0 | - / -n=0 | - / -n=0 | - |
Reproduce
Run the harness locally with the same fixture and scenario.
Renderer model comparison
| Renderer | Update model | Best fit |
|---|---|---|
| StreamMDX | Incremental patch apply | Streaming UIs + deterministic replay |
| Streamdown | React re-render on content updates | Drop-in migration from react-markdown |
| react-markdown | React re-render on content updates | Simple static markdown content |