Markstream Install
SkillDev toolsLets your agent install and set up the Markstream markdown renderer in a Vue, React, Angular, or Svelte app.
Then ask your AI: use the Markstream Install skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.
About this skill
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
What this skill tells your AI
The instructions your AI receives, as published by simon-he95/markstream-vue in .agents/skills/markstream-install/SKILL.md and read by Ahel’s review.
Use 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.
Workflow
- Detect the target framework and CSS stack.
- Check
package.json, app entry files, Tailwind or UnoCSS config, and whether the repo is SSR or streaming-focused. - Choose the package that matches the host app:
markstream-vue,markstream-vue2,markstream-react,markstream-angular, ormarkstream-svelte. - Use
markstream-svelteonly for Svelte 5 apps.
- Check
- Install the smallest peer set that matches the requested features.
- Add peers only for features the user actually needs. Check the chosen package's
peerDependencies; peer availability differs by renderer. - Vue 3 fenced code uses the built-in renderer automatically. Add
stream-diffsfor the enhanced File/Diff surface, omit it for automatic<pre><code>fallback, or setrender-code-blocks-as-preto force the plain path. - Add
@antv/infographicplussetInfographicLoader(...)only when infographic fences are needed. - Do not install every optional peer by default.
- For Vue 3 enhanced code-block preloading, use
preloadCodeBlockRuntimefrommarkstream-vue. If the application intentionally owns a runtime controller, import that advanced API directly fromstream-diffs.
- Add peers only for features the user actually needs. Check the chosen package's
- Fix CSS order.
- Put reset styles before Markstream styles.
- In Tailwind or UnoCSS projects, use
@import 'markstream-*/index.css' layer(components);. - Do not rely on renderer imports to inject CSS; import the package CSS subpath explicitly.
- Import
katex/dist/katex.min.csswhen math is enabled.
- Add the smallest working render example.
- Use
contentfor static or low-frequency rendering. - In Vue 3 apps with long AI conversations, thread restore, or an existing message virtualizer such as
vue-virtual-scroller, do not stop at a trivial renderer. UseMarkstreamVirtualTimelineoruseMarkstreamVirtualAdapter()and followdocs/guide/performance.md. - For Vue 3, choose renderer
modeby surface before tuning lower-level props.mode="chat": AI chat or SSE output; lightweight batches,fade=false,max-live-nodes=0, andsmooth-streaming="auto".mode="docs": rich document surfaces; default mode, larger batches, tooltips, and fade.mode="minimal": lightweight non-chat surfaces.- In Vue 3 (including Nuxt),
smooth-streamingcontrols output pacing andfadecontrols opacity; they can be enabled together.mode="chat"keepsfade=falseas a lightweight default. Addfadewhen gradual text reveal is desired; keep it off when animation cost matters more. - Regular fenced code uses the built-in renderer, enhanced by
stream-diffswhen installed. Userender-code-blocks-as-prefor a forced plain path orsetCustomComponents(customId, { code_block: ... })for a scoped application-owned renderer.
- For streaming AI chat in other Markstream packages, start with
contentand built-in smooth streaming.- Auto mode is the default:
smoothStreaming="auto"/smooth-streaming="auto". - Auto pacing activates when
typewriter=trueormaxLiveNodes <= 0/max-live-nodes <= 0. typewriteronly controls the blinking cursor and defaults tofalse.fadecontrols node enter and streamed-text fade animations and defaults totrue.- For high-frequency smooth streams, consider
fade=false/:fade="false"/[fade]="false"to avoid fade stacking.
- Auto mode is the default:
- Streaming vs recovering history: in chat UIs the same renderer starts streaming and later switches to history when
finalbecomestrue.- Vue 3 streaming:
mode="chat",final, optionalfadefor gradual reveal, and optionaltypewriterfor a cursor. - Vue 3 recovering/completed chat history: keep
mode="chat"on the same chat row; use:smooth-streaming="false",typewriter=false, and choose fade independently; it may remain enabled during both streaming and history display. - Use
mode="minimal"for lightweight non-chat recovered content, and usemode="docs"only for rich document surfaces. - Other packages streaming:
smoothStreaming="auto"/smooth-streaming="auto",fade=false,typewriter=true. - Other packages recovering history:
smoothStreaming=false/smooth-streaming=false,fade=true,typewriter=false. - Optional policy for other packages:
smoothStreaming={isStreaming ? 'auto' : false},fade={!isStreaming}; this is not a required coupling.
- Vue 3 streaming:
- Use
nodes+finalonly for worker preparsing, shared AST stores, or custom AST control. - In Vue 3, use
typewriter="simple"for a lightweight cursor on high-frequency streams; use precise mode only when the cursor must follow complex inline layout. - For a non-virtual Vue 3 chat scroller, import
useStickToBottomfrommarkstream-vue/utils; callscheduleScrollToBottom()after the content update instead of starting a smoothscrollIntoView()animation for every token. UseMarkstreamVirtualTimelinewithstick-to-bottom="auto"for long mixed timelines. - For manual pacing with
nodes, useuseSmoothMarkdownStream:enqueue()chunks,finish()when done, render fromvisible, wait forcaughtUpbefore final parsing. - Preserve the default hardening: HTML policies now default to
safe, and Mermaid runs in strict mode by default.
- Use
- Keep customization scoped.
- If the task requires overrides, prefer
customId/custom-idplus scopedsetCustomComponents(...).
- If the task requires overrides, prefer
- Validate.
- Run the smallest relevant build, typecheck, test, or docs build command.
- Report which peers were installed, where CSS lives, and whether the repo should later adopt
nodes.
Default Decisions
- Prefer the minimal peer set over "install everything".
- For Vue 3, omit
modeonly when the surface should use rich docs defaults. - Prefer
contentfor most streaming chat now that built-in smooth streaming is available across Vue 3, Vue 2, React, Svelte, and Angular. - Move to
nodesonly when another layer owns parsing or AST transforms. - For Vue 3 apps that already virtualize messages, keep the outer virtualizer responsible for mounted rows; use Markstream virtual-scroll coordination so item height comes from
metrics.totalHeight, not the renderer DOM height. - When using
contentfor streaming, smooth streaming (smooth-streaming="auto") is on by default fortypewriterormax-live-nodes <= 0. Set:smooth-streaming="false"to preserve raw chunk cadence. - Streaming vs recovering history: keep the renderer mode stable. In Vue 3, fade is independent of pacing and can stay enabled throughout a stream. The conservative fade-off streaming examples for other packages are not an API restriction; those adapters have not adopted the Vue 3 bounded fade implementation. See
docs/guide/ai-chat-streaming.mdfor Vue 3 examples. - Treat CSS order as a first-class part of installation, not a later cleanup.
- When the request includes SSR, explicitly gate browser-only peers behind client-only boundaries.
- Do not widen HTML or Mermaid security defaults unless the user explicitly needs trusted legacy compatibility.
- Enhanced code blocks in every Markstream package use
stream-diffs; there is nostream-monacoor Shiki direct integration in current versions. - Direct
CodeBlockNodeand top-level renderer configuration use the samecodeBlockOptions/CodeBlockOptionscontract. Keep component chrome incodeBlockProps; do not nest runtime options there. - In Vue 3, large code blocks can be highlighted off the main thread by injecting an upstream
@pierre/diffsWorkerPoolManagerthroughsetStreamDiffsWorkerPool(...). The host builds the pool with its own bundler and adds@pierre/diffsas a direct dependency. This is a Vue 3-only enhancement; the other framework packages do not expose it. - If compatibility requires it, scope the opt-out to the trusted surface with
htmlPolicy/html-policy="trusted"andmermaidProps.isStrict = falseinstead of changing app-wide defaults blindly.
Useful Doc Targets
docs/guide/installation.mddocs/guide/usage.mddocs/guide/performance.mddocs/guide/troubleshooting.mddocs/guide/component-overrides.md
Signals
- GitHub stars
- 3k
- Forks
- 188
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
markstream-install-simon-he95- Source
- github.com/simon-he95/markstream-vue
github.com/simon-he95/markstream-vue
Related picks
Skill · cometchat
The pick for Angularintegration-angular
Skill · posthog
The pick for Angularmarkstream-nuxt
Skill · simon-he95
The pick for Nuxtnuxt
Skill · yamcodes
The pick for Nuxtreact-component-performance
Skill · davila7
The pick for Reactreact-doctor
Skill · millionco
The pick for React