Integrate markstream-vue into a Nuxt 3 or Nuxt 4 app. Use when Codex needs client-only boundaries, SSR-safe setup, browser-only peer gating, worker-aware initialization, renderer `mode` selection, or a safe `MarkdownRender` integration inside pages, components, or Nuxt plugins.
68
81%
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 Nuxt and SSR boundaries matter.
markstream-vue plus only the optional peers required by the requested features.<client-only> wrappers, .client plugins, or guarded setup paths.markstream-vue/index.css from a client-safe app shell or plugin.
markstream-vue/index.css or markstream-vue/index.px.css explicitly.content, choose the renderer mode by surface, and move to nodes plus final only when the UI needs custom AST control.
mode="chat" for AI chat or SSE output. It uses lightweight batches, fade=false, and max-live-nodes=0; smooth-streaming="auto" paces visible output.mode="docs" for rich document surfaces. It is the default and enables larger batches, tooltips, and fade.mode="minimal" for lightweight non-chat surfaces.stream-diffs when the optional peer is installed. Use render-code-blocks-as-pre for a forced plain path or setCustomComponents(customId, { code_block: ... }) for a scoped application-owned renderer.typewriter only controls the blinking cursor and defaults to false. Prefer typewriter="simple" for high-frequency chat.:fade="false" to avoid delta fade stacking with high-commit pacing.MarkdownRender starts streaming and later switches to history when final=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.smooth-streaming="true" on first-screen content; the mounted gate inside auto prevents hydration mismatch.html-policy now defaults to safe, and Mermaid strict mode is on by default through mermaid-props.mode only when the surface should use rich docs defaults.auto mode (the default) because it gates on mount. Do not use smooth-streaming="true" for first-screen SSR content — it bypasses the mounted gate and can cause hydration mismatch or blank flash.useStickToBottom from markstream-vue/utils and call scheduleScrollToBottom() after Vue commits new content. The composable attaches browser listeners after mount; use MarkstreamVirtualTimeline with stick-to-bottom="auto" for long mixed timelines.setStreamDiffsWorkerPool from markstream-vue, backed by an upstream @pierre/diffs WorkerPoolManager) is also client-only: inject it in a client-only plugin/component, never in server code paths.stream-diffs; do not install stream-monaco.code-block-options for supported built-in code-surface configuration. Keep theme, code/language, streaming lifecycle, header, mounting, reveal, and disposal under Markstream's control.html-policy="safe" and Mermaid strict mode unless the task is preserving trusted legacy rendering.html-policy="trusted" and :mermaid-props="{ isStrict: false }", and document why that surface is trusted.docs/nuxt-ssr.mddocs/guide/installation.mddocs/guide/usage.mddocs/guide/troubleshooting.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.