Skip to content

Svelte

markstream-svelte provides the Svelte 5 renderer with the same component names, worker helpers, and playground fixtures as the Vue and React packages.

svelte
<script lang="ts">
  import MarkdownRender from 'markstream-svelte'
  import 'markstream-svelte/index.css'

  export let content = '# markstream-svelte'
</script>

<MarkdownRender
  {content}
  codeBlockDarkTheme="vitesse-dark"
  codeBlockLightTheme="vitesse-light"
/>

The default export and named MarkdownRender / NodeRenderer export point to the same Svelte component.

For KaTeX and Mermaid worker parity:

svelte
<script lang="ts">
  import { setKaTeXWorker, setMermaidWorker } from 'markstream-svelte'
  import KatexWorker from 'markstream-svelte/workers/katexRenderer.worker?worker&inline'
  import MermaidWorker from 'markstream-svelte/workers/mermaidParser.worker?worker&inline'

  setKaTeXWorker(new KatexWorker())
setMermaidWorker(new MermaidWorker())
</script>

Custom HTML tags use the same scoped component registry:

svelte
<script lang="ts">
  import MarkdownRender, { setCustomComponents } from 'markstream-svelte'
  import ThinkingNode from './ThinkingNode.svelte'

  const customId = 'demo'

  setCustomComponents(customId, {
    thinking: ThinkingNode,
  })
</script>

<MarkdownRender
  content="<thinking>nested **markdown**</thinking>"
  {customId}
  customHtmlTags={['thinking']}
/>

Local playground:

bash
pnpm play:svelte