Install and wire markstream-vue, markstream-react, markstream-vue2, markstream-angular, or markstream-svelte into an existing repository. Use when Codex needs to choose the right package, install the smallest framework-specific peer-dependency set, fix CSS/reset order, choose Vue 3 renderer mode and built-in, plain, or custom code-block paths, decide between `content`, `nodes`, and Vue 3 virtual-scroll coordination, or add a minimal working renderer example.
66
78%
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
Fix and improve this skill with Tessl
tessl review fix ./.agents/skills/markstream-install/SKILL.mdUse this skill when the task is "add markstream to an app" or "fix a broken markstream install".
Read references/scenarios.md before making dependency choices.
package.json, app entry files, Tailwind or UnoCSS config, and whether the repo is SSR or streaming-focused.markstream-vue, markstream-vue2, markstream-react, markstream-angular, or markstream-svelte.markstream-svelte only for Svelte 5 apps.peerDependencies; peer availability differs by renderer.stream-diffs for the enhanced File/Diff surface, omit it for automatic <pre><code> fallback, or set render-code-blocks-as-pre to force the plain path.@antv/infographic plus setInfographicLoader(...) only when infographic fences are needed.preloadCodeBlockRuntime from markstream-vue. If the application intentionally owns a runtime controller, import that advanced API directly from stream-diffs.@import 'markstream-*/index.css' layer(components);.katex/dist/katex.min.css when math is enabled.content for static or low-frequency rendering.vue-virtual-scroller, do not stop at a trivial renderer. Use MarkstreamVirtualTimeline or useMarkstreamVirtualAdapter() and follow docs/guide/performance.md.mode by surface before tuning lower-level props.
mode="chat": AI chat or SSE output; lightweight batches, fade=false, max-live-nodes=0, and smooth-streaming="auto".mode="docs": rich document surfaces; default mode, larger batches, tooltips, and fade.mode="minimal": lightweight non-chat surfaces.stream-diffs when installed. Use render-code-blocks-as-pre for a forced plain path or setCustomComponents(customId, { code_block: ... }) for a scoped application-owned renderer.content and built-in smooth streaming.
smoothStreaming="auto" / smooth-streaming="auto".typewriter=true or maxLiveNodes <= 0 / max-live-nodes <= 0.typewriter only controls the blinking cursor and defaults to false.fade controls node enter and streamed-text fade animations and defaults to true.fade=false / :fade="false" / [fade]="false" to avoid fade stacking.final becomes true.
mode="chat", smooth-streaming="auto", :fade="false", typewriter=true.mode="chat" on the same chat row; use :smooth-streaming="false", typewriter=false, and only set :fade="true" when the host explicitly wants a history-entry animation.mode="minimal" for lightweight non-chat recovered content, and use mode="docs" only for rich document surfaces.smoothStreaming="auto" / smooth-streaming="auto", fade=false, typewriter=true.smoothStreaming=false / smooth-streaming=false, fade=true, typewriter=false.smoothStreaming={isStreaming ? 'auto' : false}, fade={!isStreaming}.nodes + final only for worker preparsing, shared AST stores, or custom AST control.typewriter="simple" for a lightweight cursor on high-frequency streams; use precise mode only when the cursor must follow complex inline layout.useStickToBottom from markstream-vue/utils; call scheduleScrollToBottom() after the content update instead of starting a smooth scrollIntoView() animation for every token. Use MarkstreamVirtualTimeline with stick-to-bottom="auto" for long mixed timelines.nodes, use useSmoothMarkdownStream: enqueue() chunks, finish() when done, render from visible, wait for caughtUp before final parsing.safe, and Mermaid runs in strict mode by default.customId / custom-id plus scoped setCustomComponents(...).nodes.mode only when the surface should use rich docs defaults.content for most streaming chat now that built-in smooth streaming is available across Vue 3, Vue 2, React, Svelte, and Angular.nodes only when another layer owns parsing or AST transforms.metrics.totalHeight, not the renderer DOM height.content for streaming, smooth streaming (smooth-streaming="auto") is on by default for typewriter or max-live-nodes <= 0. Set :smooth-streaming="false" to preserve raw chunk cadence.smooth-streaming="auto", fade=false for streaming; smooth-streaming=false, optional fade=true for history. See docs/guide/ai-chat-streaming.md for full examples.stream-diffs; there is no stream-monaco or Shiki direct integration in current versions.CodeBlockNode and top-level renderer configuration use the same codeBlockOptions / CodeBlockOptions contract. Keep component chrome in codeBlockProps; do not nest runtime options there.@pierre/diffs WorkerPoolManager through setStreamDiffsWorkerPool(...). The host builds the pool with its own bundler and adds @pierre/diffs as a direct dependency. This is a Vue 3-only enhancement; the other framework packages do not expose it.htmlPolicy / html-policy="trusted" and mermaidProps.isStrict = false instead of changing app-wide defaults blindly.docs/guide/installation.mddocs/guide/usage.mddocs/guide/performance.mddocs/guide/troubleshooting.mddocs/guide/component-overrides.md3ffa399
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.