Integrate Markdown streaming into Nuxt with SSR safety
Integrates Markstream's streaming markdown renderer into Nuxt 3/4, keeping browser-only peers and hydration on the correct SSR side.
Why it matters
Safely integrate markstream-vue into Nuxt 3 or 4 applications while correctly handling SSR boundaries, hydration, browser-only dependencies, and streaming behavior to render AI-generated markdown content without client-server mismatches.
Outcomes
What it gets done
Place browser-only peers behind ClientOnly boundaries or client plugins to prevent SSR errors
Configure streaming modes (chat, docs, minimal) with appropriate typewriter and smooth-streaming settings
Import CSS and initialize components in client-safe contexts to avoid hydration failures
Validate build, typecheck, and hydration behavior across server and incremental client updates
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-markstream-nuxt | bash Overview
Markstream Nuxt
Integrates Markstream's streaming markdown renderer into Nuxt 3/4, correctly splitting browser-only dependencies and streaming behavior across SSR/client boundaries. Use for Nuxt 3/4 pages, components, or plugins adding Markstream streaming markdown; use markstream-vue directly for non-Nuxt Vue apps.
What it does
This skill integrates markstream-vue into Nuxt while keeping hydration, browser-only peers, workers, and streaming behavior on the correct side of SSR boundaries. Its workflow: before changing dependencies or source files, inspect the existing package manager and project conventions, preview the intended edits, and obtain explicit user approval; confirm Nuxt 3 or 4 and install only the specifically requested peers; put browser-only peers behind ClientOnly, .client plugins, dynamic imports, or guarded initialization; import markstream-vue/index.css explicitly from a client-safe shell or plugin; start with the content prop using mode="chat" for AI streams, "docs" for rich documents, and "minimal" for lightweight non-chat surfaces; keep smooth streaming in auto mode for SSR, never forcing it to true on first-screen server content; when a chat row completes, keep its mode stable, set final, disable pacing/cursor, and enable fade only if desired; keep HTML safe and Mermaid strict, putting optional code, diagram, and worker runtimes behind client boundaries; and validate with a build/typecheck pass, hydration check, and one incremental client update.
Documented limitations: browser-only peers cannot run during SSR, hydration depends on correct host plugin/component boundaries, and the skill does not configure deployment adapters. A security note: do not expose trusted HTML or loose Mermaid settings to untrusted model output, and review dependency and runtime-boundary changes.
When to use - and when NOT to
Use for Nuxt 3 or 4 pages, components, or plugins. Use markstream-vue directly for non-Nuxt Vue applications, and markstream-install when the framework is not yet known.
Inputs and outputs
Input is an existing Nuxt 3 or 4 application. Output is a working MarkdownRender integration correctly split across SSR/client boundaries, with browser-only peers guarded, streaming mode selected per surface, and HTML/Mermaid trust kept at safe defaults.
<script setup lang="ts">
import MarkdownRender from 'markstream-vue'
import 'markstream-vue/index.css'
defineProps<{ markdown: string; done: boolean }>()
</script>
<template>
<MarkdownRender
mode="chat"
:content="markdown"
:final="done"
:fade="done"
:typewriter="!done"
:smooth-streaming="done ? false : 'auto'"
html-policy="safe"
/>
</template>
Who it's for
Nuxt 3/4 developers integrating Markstream's streaming markdown renderer who need to keep hydration and browser-only dependencies correctly scoped to the client side.
Source README
Markstream Nuxt
Overview
Integrate markstream-vue into Nuxt while keeping hydration, browser-only peers, workers, and streaming behavior on the correct side of SSR boundaries.
When to Use
Use for Nuxt 3 or 4 pages, components, or plugins. Use markstream-vue for non-Nuxt Vue applications and markstream-install when the framework is not yet known.
Workflow
Before changing dependencies or source files, inspect the existing package manager and project conventions, preview the intended edits, and obtain explicit user approval.
- Confirm Nuxt 3 or 4 and install only requested peers.
- Put browser-only peers behind
<ClientOnly>,.clientplugins, dynamic imports, or guarded initialization. - Import
markstream-vue/index.cssexplicitly from a client-safe shell or plugin. - Start with
content:mode="chat"for AI streams,docsfor rich documents, andminimalfor lightweight non-chat surfaces. - Keep smooth streaming in
automode for SSR; do not forcetrueon first-screen server content. - When a chat row completes, keep its mode stable, set
final, disable pacing/cursor, and enable fade only if desired. - Keep HTML safe and Mermaid strict. Put optional code, diagram, and worker runtimes behind client boundaries.
- Validate build/typecheck, hydration, and one incremental client update.
Example
<script setup lang="ts">
import MarkdownRender from 'markstream-vue'
import 'markstream-vue/index.css'
defineProps<{ markdown: string; done: boolean }>()
</script>
<template>
<MarkdownRender
mode="chat"
:content="markdown"
:final="done"
:fade="done"
:typewriter="!done"
:smooth-streaming="done ? false : 'auto'"
html-policy="safe"
/>
</template>
Limitations
- Browser-only peers cannot run during SSR.
- Hydration depends on correct host plugin/component boundaries.
- This skill does not configure deployment adapters.
Security & Safety Notes
Do not expose trusted HTML or loose Mermaid settings to untrusted model output. Review dependency and runtime-boundary changes.
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.