Integrate markstream-vue into Nuxt while keeping hydration, browser-only peers, workers, and streaming behavior on the correct side of SSR boundaries.
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.
Inspect the existing package manager, installed package version and project conventions. A requested scoped integration already authorizes routine source/dependency edits; seek approval only for a material scope expansion or unresolved beta/alpha adoption decision.
<ClientOnly>, .client plugins, dynamic imports, or guarded initialization.markstream-vue/index.css explicitly from a client-safe shell or plugin.content: mode="chat" for AI streams, docs for rich documents, and minimal for lightweight non-chat surfaces.auto mode for SSR; do not force true on first-screen server content.final, disable pacing/cursor, and enable fade only if desired.<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>
Do not expose trusted HTML or loose Mermaid settings to untrusted model output. Review dependency and runtime-boundary changes.
Verify props, export paths and peer ranges against the installed package, not a mutable upstream main. Test partial and completed streams, malformed/untrusted Markdown, links and image URLs, cancellation and reduced motion. Safe HTML and strict diagrams reduce exposure but do not alone enforce URL/network privacy or application component permissions.