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 and code-block modes, decide between `content`, `nodes`, and Vue 3 virtual-scroll coordination, or add a minimal working renderer example.
61
71%
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 or stream-markdown with code-renderer="shiki" for lightweight highlighting. The public code-renderer="monaco" name is retained for compatibility but loads stream-diffs.@antv/infographic plus setInfographicLoader(...) only when infographic fences are needed.preloadCodeBlockRuntime from markstream-vue. Existing getUseMonaco() calls remain compatible despite the historical name.@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, <pre> code rendering by default, fade=false, max-live-nodes=0, and smooth-streaming="auto".mode="docs": rich document surfaces; default mode, larger batches, tooltips, fade, and enhanced stream-diffs code blocks when the peer is installed.mode="minimal": lightweight non-chat surfaces.code-renderer="monaco" | "shiki" | "pre"; render-code-blocks-as-pre is the legacy boolean override and takes precedence when true.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.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.code-renderer="monaco" as a reason to install stream-monaco; install stream-diffs for the current enhanced surface.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.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.