Skip to content

Troubleshooting

Start with the symptom below, then follow the linked framework or policy guide. Keep the complete source, package versions and configuration together when reducing a reproduction.

Check the stylesheet for your adapter. React uses its typography CSS; Vue uses styles.css; Mantine requires its own stylesheet after the Mantine styles. KaTeX CSS is separate. The quick starts include exact imports and peers. Importing React’s CSS does not configure Vue or Mantine presentation.

Text is still appearing after the response finished

Section titled “Text is still appearing after the response finished”

The transport may have finished while smooth reveal still has queued text. Input streaming represents the producer; the smooth hook/composable’s returned state remains active while the visible text drains. See Streaming input, React smooth rendering, or Vue streaming.

For cancellation, abort the transport as well as clearing producer state. Clearing streaming alone does not cancel network requests or discard received content.

A reference stays literal or a footnote is missing

Section titled “A reference stays literal or a footnote is missing”

First try one renderer with the complete logical document. If the layout requires multiple sections, check the matching framework’s AIMarkdownDocuments, a shared explicit document ID, stable component keys and intended ordering. React additionally requires blockMemo to stay enabled. The registry cannot join a fence or other syntax construct split between components.

Server output uses local references; mounted contributions resolve cross-section definitions later. Unreferenced definitions also follow the configured orphan policy. See Documents and references.

The sanitizer may reject the protocol before urlTransform runs, or the final transform may reject it afterward. Broadening one stage does not automatically broaden the other. Use URL policy and apply policy to URLs emitted by custom components too.

The measured cursor hides for unsupported tails such as code, math and images, or an invisible definition whose rendered text is elsewhere. It does not attach to an earlier paragraph to create the appearance of progress. React requires an explicit cursor component; Vue enables its cursor by default. Check React cursor or Vue cursor behavior.

Compare the initial source, identity and configuration on both sides. Keep browser-only measurements out of render. Cross-section references cannot be assumed resolved in server HTML. Follow React SSR or Vue SSR; a specific host framework may need additional integration work.

Measure the stage that is growing: full-string preprocessors, an unfinished parse tail, framework conversion, highlighting, diagram rendering or layout. Incremental parsing does not make every update proportional only to new characters. See Rendering and performance and Mantine’s code lifecycle.

An engine EngineRawHtmlDepthError triggers a specific plain-text fallback for that frame; the next frame attempts normal parsing. Arbitrary plugin or handler errors are not covered by this exception and can still propagate. See Core error contracts.

Pass a live getter to the composable and read current .value values inside it. Do not capture a one-time object containing the original source. Returned fields are computed refs; read .value in render functions or expose top-level refs for template unwrapping. The Vue wrapper example shows the complete pattern.