Skip to content

Markstream framework packages

Streaming Markdown renderers for AI apps across Vue, React, Svelte, Angular, Nuxt, and Next.js.

Choose by framework

FrameworkPackageStatusInstallBest first pageNotes
Vue 3 / Nuxt / VitePressmarkstream-vuestablepnpm add markstream-vueVue / NuxtMost mature renderer
React / Next.js / Remixmarkstream-reactbetapnpm add markstream-reactReact / Next.jsSSR entries for Next.js
Svelte 5markstream-sveltebetapnpm add markstream-svelte svelte@^5SvelteSvelte 5 only
Angular standalonemarkstream-angularalphapnpm add markstream-angularAngularAngular 20+ standalone
Vue 2.6 / 2.7markstream-vue2compatibilitypnpm add markstream-vue2Vue 2 Quick StartFor legacy Vue 2 apps
Parser onlystream-markdown-parserstablepnpm add stream-markdown-parserParser APINo UI renderer

Choose by use case

Use caseBest packageWhy
Vue AI chatmarkstream-vueMost mature renderer and the deepest Vue/Nuxt docs
React AI chatmarkstream-reactReact renderer for streaming chat and migration from react-markdown
Next.js SSR-first Markdownmarkstream-react/nextServer HTML first, then client enhancement
Svelte 5 AI chatmarkstream-svelteSvelte 5 renderer with the shared Markstream parser behavior
Angular standalone appmarkstream-angularAngular 20+ standalone component package
Parser-only pipelinestream-markdown-parserStructured nodes without a UI runtime

Package maturity

PackageMaturityNotes
markstream-vuestableMain renderer, most documented path
stream-markdown-parserstableParser-only package shared by renderers
markstream-reactbetaReact and Next.js entries are documented separately
markstream-sveltebeta / experimentalSvelte 5 only
markstream-angularalphaAngular standalone component
markstream-vue2compatibilityVue 2.6 / 2.7 legacy support

Quick examples

vue
<script setup>
import MarkdownRender from 'markstream-vue'
import 'markstream-vue/index.css'
</script>

<template>
  <MarkdownRender mode="chat" :content="content" :final="isDone" />
</template>
tsx
import MarkdownRender from 'markstream-react'
import 'markstream-react/index.css'

export function Message({ content, isDone }: { content: string, isDone: boolean }) {
  return <MarkdownRender content={content} final={isDone} fade={false} />
}
svelte
<script lang="ts">
  import MarkdownRender from 'markstream-svelte'
  import 'markstream-svelte/index.css'
</script>

<MarkdownRender {content} final={isDone} />
ts
import { Component, signal } from '@angular/core'
import { MarkstreamAngularComponent } from 'markstream-angular'
import 'markstream-angular/index.css'

@Component({
  selector: 'app-message',
  imports: [MarkstreamAngularComponent],
  template: '<markstream-angular [content]="content()" [final]="true" />',
})
export class MessageComponent {
  content = signal('# Hello from Markstream')
}

Common questions

Is Markstream only for Vue?

No. markstream-vue is the most mature package, but Markstream also has React, Svelte, Angular, Vue 2, Next.js, and parser-only entries.

Should I use Markstream or marked / markdown-it?

Use marked or markdown-it when you only need markdown -> HTML. Use Markstream when Markdown is rendered as framework components, changes during streaming, or needs stable AI-chat mid-states.

Should I use markstream-react or react-markdown?

Use react-markdown for short static React Markdown and mature remark/rehype plugin chains. Use markstream-react for streaming AI output, incomplete Markdown states, long responses, progressive Mermaid, or shared behavior with Vue/Svelte/Angular.

Which packages are stable?

markstream-vue and stream-markdown-parser are stable. markstream-react is beta, markstream-svelte is beta / experimental, markstream-angular is alpha, and markstream-vue2 is a compatibility port.

Common next steps