# What changed in @assistant-ui/react-streamdown

> 60 changes in @assistant-ui/react-streamdown 0.1 to 0.3 from its official release notes, upgrade guides and advisories: 4 breaking, 12 new APIs and options. Each one cited. Sources checked 2026-11-11. HTML: https://unstale.sh/npm/@assistant-ui/react-streamdown/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @assistant-ui/react-streamdown 0.3

### Breaking changes

- Every PluginConfig slot is typed with its streamdown plugin interface instead of unknown. (0.3.20) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.20)
- Requires remend 1.4. (0.3.19) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.19)
- Requires streamdown 2.7. (0.3.19) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.19)

### New APIs and options

- Preprocess helpers are available from this new subpath, and @assistant-ui/react-streamdown re-exports the same functions instead of carrying a copy. (0.3.20) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.20)
- The package re-exports remark-rehype's Options type as RemarkRehypeOptions. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Adds an option to turn off comparison-operator escapes reaching settled text without disabling incomplete-Markdown repair. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Adds an option to turn off single-tilde escapes reaching settled text without disabling incomplete-Markdown repair. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- The code-fence contract, including CodeHeader and SyntaxHighlighter prop types, the by-language override entry, and the language-class parser, now lives on this subpath; react-streamdown re-exports the types from there. (0.3.12) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.12)
- Exported a helper that escapes currency such as `$5` so single-dollar math does not consume it. (0.3.4) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.4)
- Exported a helper for normalizing math delimiters so it can be passed to the preprocess prop. (0.3.4) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.4)
- Exported a helper that rewrites custom math tags into the form remark-math parses. (0.3.4) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.4)
- Exported a helper that rewrites LaTeX bracket delimiters into the form remark-math parses. (0.3.4) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.4)
- Exported a helper to apply the same trailing-block windowing for incomplete-markdown repair. (0.3.4) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.4)
- Accepts an opt-in defer flag that uses useDeferredValue to lower the priority of re-parsing streamed text; intermediate states may be skipped under load, but final text renders. (0.3.3) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.3)
- Adds opt-in typewriter reveal via smooth, accepting boolean or SmoothOptions; status and animation state follow the reveal so the caret keeps blinking and copy/download controls remain disabled until it catches up. (0.3.3) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.3)

### Performance

- Nested raw pre markup no longer causes quadratic rerender comparisons. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Memoization avoids parsing the same accumulated text twice per token, including when callers pass an inline remarkPlugins array. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- The boundary scan is limited to each line, keeping the scan linear in the message rather than rescanning remaining text for every line. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- When defer is off, streamed tokens no longer trigger a second render pass. (0.3.13) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.13)

### Behavior and default changes

- The useSmooth API is now public for opt-in typewriter reveal. (0.3.3) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.3)

### Fixes and other changes

- Keeps the repair aligned with remend 1.4 code spans so a comparison after an escaped backtick still gets escaped. (0.3.19) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.19)
- Comparison escapes stay within each line without splitting settled prose or slowing down on blank lines. (0.3.18) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.18)
- Preprocessing now preserves currency and math delimiters inside HTML blocks. (0.3.18) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.18)
- Streaming repair now preserves raw HTML bodies inside list and blockquote containers. (0.3.18) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.18)
- Quoted code fences and $$ blocks now end at their own blockquote boundary, preventing deeper lines from closing them early and blank or shallower lines from leaving them open. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Changing the code header now updates already-rendered code blocks in place, without disturbing their DOM or state. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Changing the highlighter now updates already-rendered code blocks in place, without disturbing their DOM or state. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Changing a language-specific component entry now updates already-rendered code blocks in place, without disturbing their DOM or state. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Fences and $$ blocks opened on list marker lines are recognized, preventing escaped content and closing markers that disrupt subsequent streaming repair. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- A rewrite to already-revealed text no longer restarts smooth streaming. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Streaming escapes stay out of fences and $$ blocks, including blocks opened after paragraph lines or nested in list items; interrupted paragraphs settle correctly. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Streaming $$ math now ends where remark-math ends it, preventing leaked escapes and stray closing markers. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Streaming repair no longer escapes text inside raw HTML blocks. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Streaming tail repair no longer runs after a message finishes. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- An unmatched mid-line $$ no longer pairs with later display math. (0.3.17) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.17)
- Settled code blocks no longer rerun custom syntax highlighters on streamed tokens or when animated messages complete; changed fence metadata is passed to the highlighter. (0.3.16) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.16)
- Remend escapes are kept out of settled `~~~` fences and `$$` math blocks. (0.3.15) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.15)
- A backtick run is treated as a fence only when it starts a line, preventing an info string from closing a fenced block. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Rehype plugin markup is preserved in code blocks, and code headers receive the complete code text in both Markdown renderers. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Currency and math are preserved inside indented tilde fences. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Earlier blocks preserve text escapes and custom handler changes without completing or deleting unfinished Markdown; handlers receive earlier text and the final block separately. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Fenced display bodies stay inside their original list item or blockquote instead of rendering outside the container. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Memoized children update when their text or props change. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Sparse suggestions are compacted into a dense list before per-suggestion lookup, avoiding incorrect equality results from sparse-array holes. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- The currency walker reads tilde fences, and an unclosed fence ends with its blockquote instead of consuming the rest of the input. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- User pre and code components render through the code adapter without remounting code blocks on every render; raw pre elements without a code child retain their element. (0.3.14) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.14)
- Bracket-delimited math no longer swallows the rest of the message. (0.3.13) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.13)
- Code spans and fences remain inert when math delimiters are normalized. (0.3.13) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.13)
- Fenced code now updates when streamed content changes. (0.3.12) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.12)
- Moved to dependencies so published declarations reference hast by name instead of a broken store-relative path. (0.3.12) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.12)
- Preserves currency inside one- and two-backtick code spans that contain longer backtick runs. (0.3.11) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.11)
- User rehypePlugins are merged after the security hardening pipeline instead of being dropped. (0.3.9) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.9)
- Streamdown sanitization extensions are preserved when security is enabled. (0.3.9) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.9)
- Inline math that opens with a digit is kept out of currency escaping. (0.3.7) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.7)
- Streaming markdown repair now processes only the last top-level block rather than the entire accumulated message on every flush. (0.3.4) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.3.4)

## @assistant-ui/react-streamdown 0.1

### Breaking changes

- The aui-source export condition was removed from package.json exports. (0.1.9) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.1.9)

### Fixes and other changes

- Passes the memoized code component to streamdown instead of invoking it as a function. (0.1.11) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.1.11)
- Renders CodeHeader for a code block when no SyntaxHighlighter is configured. (0.1.11) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.1.11)
- Preserves data-block in PreOverride so block code can be detected. (0.1.7) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.1.7)
- useMessagePartText now provides status. (0.1.5) — [release notes](https://github.com/assistant-ui/assistant-ui/releases/tag/%40assistant-ui/react-streamdown%400.1.5)
