Skill

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.

Works with nuxtvue

79
Spark score
out of 100
Updated 3 days ago
Version 15.3.0

Add to Favorites

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

01

Place browser-only peers behind ClientOnly boundaries or client plugins to prevent SSR errors

02

Configure streaming modes (chat, docs, minimal) with appropriate typewriter and smooth-streaming settings

03

Import CSS and initialize components in client-safe contexts to avoid hydration failures

04

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.

  1. Confirm Nuxt 3 or 4 and install only requested peers.
  2. Put browser-only peers behind <ClientOnly>, .client plugins, dynamic imports, or guarded initialization.
  3. Import markstream-vue/index.css explicitly from a client-safe shell or plugin.
  4. Start with content: mode="chat" for AI streams, docs for rich documents, and minimal for lightweight non-chat surfaces.
  5. Keep smooth streaming in auto mode for SSR; do not force true on first-screen server content.
  6. When a chat row completes, keep its mode stable, set final, disable pacing/cursor, and enable fade only if desired.
  7. Keep HTML safe and Mermaid strict. Put optional code, diagram, and worker runtimes behind client boundaries.
  8. 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.