unstale

npm / streamdown

streamdown

What changed in streamdown 1 to 2, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.

8 breaking4 security46 new APIs and options6 performance20 behavior and defaults64 fixes and other

streamdown 2114 changes

Breaking changes 6

  • The code package now requires Node 20 or newer because it moves to Shiki v4.

    2.7.0release notes

  • The codeDownload prop is removed; use the unified controls API instead.

    2.6.0release notes

  • The distributed typings no longer require mermaid as a hard runtime or type dependency.

    2.6.0release notes

  • Streamed incomplete links now remain pending instead of being sanitized into [blocked].

    2.6.0release notes

  • Removes CommonJS builds from the package distribution.

    2.2.0release notes

  • Streamdown switches to a plugin architecture, changing how developers structure or extend integrations.

    2.1.0release notes

Security 4

  • Custom HTML tags can treat children as plain text so user-supplied labels cannot interpret markdown metacharacters as formatting.

    2.4.0release notes

  • Escapes HTML correctly when rehype-raw is not included.

    2.2.0release notes

  • Streamdown adds rehype sanitization for rendered content.

    2.0.0release notes

  • rehype-harden is updated to fix relative URL handling.

    2.0.0release notes

New APIs and options 37

  • Adds a Streamdown prop to disable GFM autolinking for selected URL protocols while leaving explicit markdown links unchanged.

    2.7.0release notes

  • Adds a fallback renderer for standard HTML and allowed custom tags missing from the components map.

    2.7.0release notes

  • Adds a top-level prop for configuring the container used by Mermaid fullscreen, table fullscreen, and the link safety modal.

    2.7.0release notes

  • BundledLanguage, BundledTheme, and ThemeRegistrationAny are locally defined so consumers can type-check without installing shiki.

    2.6.0release notes

  • Adds a maximum height option for code blocks with streaming auto-scroll.

    2.6.0release notes

  • Code, table, and Mermaid downloads can use custom filenames while retaining boolean visibility controls and automatic extensions.

    2.6.0release notes

  • Image controls can disable the hover overlay and download button, independently or together.

    2.6.0release notes

  • Adds configurable CSV separators for table copy and download, including locale-aware auto mode and improved Excel escaping.

    2.6.0release notes

  • Mermaid fullscreen overlays gain a stable selector and dialog semantics with aria-modal for screen-reader correctness.

    2.6.0release notes

  • Adds a maximum height option for tables with streaming auto-scroll.

    2.6.0release notes

  • Adds a prop to disable line numbers in code blocks.

    2.5.0release notes

  • Custom renderers receive the raw metastring from code fences through an optional prop.

    2.5.0release notes

  • Configures animation delay between streaming words or characters; the default is 40ms and zero restores prior behavior.

    2.5.0release notes

  • The components prop now supports an inlineCode renderer for styling inline code independently from fenced code blocks.

    2.4.0release notes

  • Tables can open in a fullscreen overlay with Escape or backdrop-click closing, scroll locking, and retained copy/download controls.

    2.4.0release notes

  • Controls can be globally enabled or disabled, or configured per feature for code, table, and Mermaid interactions.

    2.4.0release notes

  • Text direction can be set to ltr, rtl, or auto, with auto detecting direction from the first strong Unicode character in each block.

    2.4.0release notes

  • The Streamdown component accepts partial custom icon overrides while unspecified icons retain their defaults.

    2.4.0release notes

  • A callback fires when streaming animation completes, allowing UI state to coordinate with the animation lifecycle.

    2.4.0release notes

  • A callback fires when streaming animation begins, allowing UI state to coordinate with the animation lifecycle.

    2.4.0release notes

  • Specific fenced-code languages can be rendered by custom components through plugins.renderers instead of the default CodeBlock.

    2.4.0release notes

  • Generated Tailwind utility classes can receive a namespace prefix to avoid class name collisions with Tailwind v4 prefix().

    2.4.0release notes

  • Code blocks can specify a custom starting line number through fenced-code metadata instead of always starting at 1.

    2.4.0release notes

  • Table controls and data utilities are exported so custom table overrides can preserve copy and download interactivity.

    2.4.0release notes

  • createCodePlugin accepts custom Shiki light and dark themes as bundled names or full theme registration objects.

    2.4.0release notes

  • All user-facing UI strings can be overridden, enabling full internationalization support.

    2.4.0release notes

  • Adds a prop preventing indented HTML tags from being interpreted as code blocks.

    2.3.0release notes

  • Adds a Markdown copy option to TableCopyDropdown, allowing table data to be copied in valid Markdown format.

    2.3.0release notes

  • Adds a hook for detecting incomplete streamed code fences so custom components can defer expensive rendering until code blocks are complete.

    2.3.0release notes

  • Adds built-in animation support through the animated prop.

    2.2.0release notes

  • Adds support for defining custom tags in components.

    2.2.0release notes

  • Extends the ReactMarkdown props accepted by streamdown.

    2.2.0release notes

  • Streamdown adds support for carets in rendered content.

    2.0.0release notes

  • remend can now be configured by developers integrating Streamdown.

    2.0.0release notes

  • Streamdown adds support for using a self-hosted CDN.

    2.0.0release notes

  • A Streamdown CDN is created, with the bundle size reduced by 98%.

    2.0.0release notes

  • A hook enables lazy loading components when they enter the viewport.

    2.0.0release notes

Performance 4

  • Streaming documents reuse parsed blocks and lex only block tokens, improving parsing speed during updates.

    2.7.0release notes

  • Streaming code blocks and tables pin to the bottom once per frame instead of on every update.

    2.7.0release notes

  • Finished code highlighting uses a size-bounded least-recently-used cache, keeping memory bounded during long sessions.

    2.7.0release notes

  • Mermaid rendering uses viewport-based lazy loading so only visible or nearly visible charts render, preventing freezes with many diagrams.

    2.0.0release notes

Behavior and default changes 15

  • Streaming code blocks highlight only newly added lines instead of re-highlighting the whole block on every update.

    2.7.0release notes

  • Streaming Mermaid diagrams render incrementally one at a time so growing diagrams no longer hold up the stream.

    2.7.0release notes

  • Rest props on fenced code elements are now forwarded to the DOM and update when their values change.

    2.6.0release notes

  • Copy and download controls now expose labels and announce copy success to screen readers.

    2.6.0release notes

  • Inline backtick code now receives per-word streaming fade-in while fenced code blocks remain unsplit.

    2.6.0release notes

  • Markdown inside multiline custom tags is parsed and rendered while streaming keeps the entire custom tag as one block.

    2.6.0release notes

  • Code blocks support horizontal scrolling so long lines remain accessible instead of being clipped.

    2.5.0release notes

  • CSV string downloads now prepend a UTF-8 BOM so Excel on Windows detects UTF-8 encoding.

    2.5.0release notes

  • New streaming content animates sequentially with staggered delays instead of all content animating simultaneously.

    2.5.0release notes

  • Code block header action buttons are sticky, keeping copy controls accessible while viewing long code blocks.

    2.3.0release notes

  • Code block shells render immediately with plain text before syntax highlighting resolves, removing the standard spinner fallback and improving visual stability.

    2.3.0release notes

  • Default code blocks expose a data-incomplete attribute while a streamed code fence remains incomplete, enabling CSS loading states.

    2.3.0release notes

  • Redesigns Mermaid diagram rendering.

    2.3.0release notes

  • Redesigns table rendering.

    2.3.0release notes

  • KaTeX CSS is loaded from a CDN.

    2.0.0release notes

Fixes and other changes 48

  • Bare URLs following fullwidth punctuation are linkified again for CJK text.

    2.7.0release notes

  • Incomplete images now show an animated loading placeholder during streaming instead of disappearing.

    2.7.0release notes

  • Mermaid diagrams now auto-fit their container and preserve readable text, while retaining user zoom and pan after initial fitting.

    2.7.0release notes

  • The onCopy callback now works with the default code and Mermaid copy controls.

    2.7.0release notes

  • The onError callback now works with the default code and Mermaid copy controls.

    2.7.0release notes

  • The scanner now follows CommonMark for fences and spans, avoids false emphasis, and makes healing idempotent.

    2.7.0release notes

  • Copied or downloaded table Markdown now preserves literal HTML tags and character entities.

    2.7.0release notes

  • dir="auto" now detects direction per semantic block, keeps code left-to-right, and uses majority direction for mixed-script prose.

    2.6.0release notes

  • Footnote identifiers no longer receive a doubled user-content- prefix, restoring footnote navigation.

    2.6.0release notes

  • Code lines remain separate block elements when line numbers are disabled, preventing visual line collapse.

    2.6.0release notes

  • The link safety modal is portaled to document.body, preventing invalid div-inside-p markup and React hydration errors.

    2.6.0release notes

  • Memoized markdown components now re-render when rendered output changes even if source positions remain identical.

    2.6.0release notes

  • Mermaid download and copy controls now remain reachable inside the fullscreen portal.

    2.6.0release notes

  • Mermaid SVGs are serialized as valid SVG markup so HTML-style tags render correctly in downloads.

    2.6.0release notes

  • Streaming word stagger now uses a shared wall-clock timeline so sibling sections do not overlap during animation.

    2.6.0release notes

  • Table copy preserves line breaks in cells containing br elements across Markdown, CSV, and TSV output.

    2.6.0release notes

  • Copy and download actions now work for fullscreen tables while inline table controls remain unchanged.

    2.6.0release notes

  • The fullscreen table portal now has a stable data attribute so copy and download dropdowns can locate the table.

    2.6.0release notes

  • Completed unchanged code blocks no longer unnecessarily re-render during streaming updates.

    2.5.0release notes

  • Replaces Tailwind v4-only variant syntax with an arbitrary variant compatible with Tailwind CSS v3 and v4.

    2.5.0release notes

  • Replaces Tailwind v4-only variant syntax with an arbitrary variant compatible with Tailwind CSS v3 and v4.

    2.5.0release notes

  • Dropdown menus receive a higher z-index to prevent clipping by surrounding elements.

    2.5.0release notes

  • Empty highlighted code lines preserve whitespace and remain available when copied instead of collapsing into nothing.

    2.4.0release notes

  • Streaming updates no longer retrigger entry animations for already-visible ordered or unordered list characters.

    2.4.0release notes

  • Broken images no longer show a download button and instead display a custom "Image not available" message.

    2.3.0release notes

  • Fixes code block highlight flicker while content is streaming.

    2.3.0release notes

  • Content after an opening custom tag containing double newlines is no longer prematurely split.

    2.3.0release notesrelease notes

  • Fixes parsing of nested same-tag HTML blocks.

    2.3.0release notes

  • Fixes syntax highlighting behavior for rendered code.

    2.3.0release notes

  • Fixes caret rendering with Tailwind v3.

    2.2.0release notes

  • Removes trailing newlines from rendered code blocks.

    2.2.0release notes

  • Fixes dark code block styling with Tailwind v3.

    2.2.0release notes

  • Restricts footnote matching to valid identifiers so regex character classes in code are not misdetected.

    2.2.0release notes

  • Correctly handles HTML void elements while parsing blocks.

    2.2.0release notes

  • Fixes parsing of single-line indented code blocks.

    2.2.0release notes

  • Fixes rendering of certain LaTeX syntaxes, including parenthesized forms.

    2.2.0release notes

  • Prevents $$ inside code blocks from being treated as math delimiters.

    2.2.0release notes

  • Prevents tables from trapping vertical scrolling.

    2.2.0release notes

  • Allows tel links by default instead of blocking them.

    2.2.0release notes

  • Fixed the Streamdown URL.

    2.0.1release notes

  • Autolink parsing now stops at CJK punctuation boundaries.

    2.0.0release notes

  • Line numbers over 100 no longer wrap onto a new line in code blocks.

    2.0.0release notes

  • Loading languages dynamically is fixed.

    2.0.0release notes

  • Dynamic module imports are fixed.

    2.0.0release notes

  • Pan and zoom controls no longer have layout issues in fullscreen and non-fullscreen modes.

    2.0.0release notes

  • Streamdown attempts to fall back to raw content to prevent cdn-loader from blocking.

    2.0.0release notes

  • Setext heading parsing issues are fixed.

    2.0.0release notes

  • The shouldParseIncompleteMarkdown setting no longer leaks into the DOM.

    2.0.0release notes

streamdown 134 changes

Breaking changes 2

  • defaultUrlTransform was removed and is no longer available to developers.

    1.6.0release notes

  • urlTransform was removed and is no longer available to developers.

    1.6.0release notes

New APIs and options 9

  • Added a global boolean option to toggle Mermaid zoom controls, enabled by default.

    1.6.7release notes

  • Added a per-instance boolean or object option for Mermaid zoom controls.

    1.6.7release notes

  • Custom error components can now be provided for Mermaid diagrams.

    1.6.0release notes

  • Mermaid diagrams can now be exported to SVG and PNG alongside MMD.

    1.6.0release notes

  • A PanZoom component was added, enabling zoom and pan functionality.

    1.6.0release notes

  • Static mode was implemented, adding a new rendering mode developers can use.

    1.6.0release notes

  • Block-level customization hooks were added.

    1.5.0release notes

  • Mermaid diagrams now have a fullscreen view button.

    1.5.0release notes

  • Tables now support copying data as TSV.

    1.5.0release notes

Performance 2

  • Bundle optimization now uses lazy loading and code splitting.

    1.6.2release notes

  • Performance issues with large code streaming blocks were fixed.

    1.5.0release notes

Behavior and default changes 5

  • KaTeX CSS now loads conditionally based on content detection.

    1.6.2release notes

  • parseIncompleteMarkdown is now exported through the public API.

    1.5.0release notes

  • katex.min.css now loads dynamically only when rehypeKatex is included in rehypePlugins.

    1.5.0release notes

  • CJK support was improved through remark-cjk-friendly.

    1.5.0release notes

  • Streamdown contexts were stabilized.

    1.5.0release notes

Fixes and other changes 16

  • Remend was split out into a separate package and updated to remend@1.0.1.

    1.6.10release notes

  • Restores the pan-zoom component to normal size when the mermaid component is maximized.

    1.6.9release notes

  • Added validation for languages specified in code blocks.

    1.6.8release notes

  • Fixed excessive spacing above tables.

    1.6.8release notes

  • Added missing tooltip support to action buttons.

    1.6.7release notes

  • Fixed rendering of p tags inside list items.

    1.6.7release notes

  • Fixes data attributes on rendered code blocks.

    1.6.6release notes

  • Fixed code block rendering in dark mode.

    1.6.5release notes

  • Restores the original lucide imports.

    1.6.4release notes

  • Builds are now targeted for the browser only, fixing ts-router compatibility.

    1.6.3release notes

  • Fixes a bug in markdown parsing.

    1.6.1release notes

  • Incomplete link termination in code blocks was fixed.

    1.6.0release notes

  • List CSS was fixed, improving list rendering.

    1.6.0release notes

  • Base64 image handling was fixed.

    1.5.0release notes

  • Parsing of in-word asterisks was fixed.

    1.5.0release notes

  • CJK support was improved through remark-cjk-friendly-gfm-strikethrough.

    1.5.0release notes