Integrate the beta markstream-react package into a React 18+ or Next app. Use when Codex needs to add the React renderer, choose the root, `next`, or `server` entrypoint, import CSS correctly, choose between `content` and `nodes`, keep client boundaries safe, add renderer-local `streamingComponents` or `htmlComponents`, use parser transforms, or prepare a repo for `react-markdown` migration.
71
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill when the host app is React or Next and the task is to wire Markstream safely.
markstream-react plus only the requested optional peers.markstream-react/index.css from the app shell or client entry.markstream-react for the normal client renderer.markstream-react/next for the Next-specific component surface.markstream-react/server for server rendering without client hooks.content.
content and use built-in smooth streaming first.
smoothStreaming="auto" is the default and activates when typewriter={true} or maxLiveNodes <= 0.typewriter only controls the blinking cursor and defaults to false.fade controls node enter and streamed-text fade animations and defaults to true.final={true}.
smoothStreaming="auto", fade={false}, typewriter={true}. Smooth pacing handles gradual appearance; fade would flicker.smoothStreaming={false}, fade={true}, typewriter={false}. Content is already complete — pacing would slow it down, but fade gives a polished entry animation.smoothStreaming={isStreaming ? 'auto' : false}, fade={!isStreaming}.nodes + final only for worker-preparsed content, shared AST stores, or custom AST control.htmlPolicy now defaults to safe, and Mermaid strict mode is on by default through mermaidProps.use client, dynamic imports with ssr: false, or other client-only boundaries when browser-only peers are involved.streamingComponents receives parser-backed NodeComponentProps, supports incomplete custom tags, and automatically contributes its keys to the effective customHtmlTags list.htmlComponents receives sanitized HTML attributes plus children; it does not receive the parser node/loading contract.defineStreamingComponents(...) and defineHtmlComponents(...) for typed maps.setCustomComponents for built-in node overrides or shared compatibility registration.parseOptions transforms only when migration requires token or AST changes.react-markdown, pair this skill with markstream-migration.content with built-in smooth streaming for most AI chat / token streaming surfaces.final becomes true), switch props dynamically — smoothStreaming="auto", fade={false} for streaming; smoothStreaming={false}, fade={true} for history. See docs/guide/ai-chat-streaming.md for full examples.nodes only when another layer owns parsing or AST transforms.smoothStreaming={true} for first-screen SSR content unless intentionally starting from blank; auto mode uses the mounted gate.htmlPolicy="safe" and Mermaid strict mode unless the request is preserving trusted legacy rendering.htmlPolicy="trusted" and mermaidProps={{ isStrict: false }} only on that surface and explain why.docs/guide/react-quick-start.mddocs/guide/react-installation.mddocs/guide/react-components.mddocs/guide/react-next-ssr.mddocs/guide/react-markdown-migration.mddocs/guide/component-overrides.mdf25ebd5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.