Skip to content

API overview

import { createMarkdown, parseMarkdown, documentToIR } from '@markvia/core'
const runtime = createMarkdown({
plugins: [],
highlighter,
})
const document = runtime.parse(source)
const ir = runtime.toIR(document)
const stream = runtime.createStream()

The main capabilities are:

  • parse(source): produce a Semantic AST
  • toIR(document) / toIRAsync(document): produce Render IR
  • render(source, renderer): render synchronously
  • renderAsync(source, renderer): render asynchronously
  • createStream(): create an incremental Markdown stream
  • use(plugin): register a plugin on an existing runtime

The standalone parseMarkdown and documentToIR functions are also exported for lower-level usage.

Math and Mermaid are not dependencies of @markvia/core. Install and register only the packages your application needs:

Terminal window
pnpm add @markvia/math
pnpm add @markvia/mermaid
import { createMathPlugin } from '@markvia/math'
import { createMermaidPlugin } from '@markvia/mermaid'
const runtime = createMarkdown({
plugins: [
createMathPlugin({ provider: mathProvider }),
createMermaidPlugin({ provider: mermaidProvider }),
],
})

If math is not used, omit @markvia/math so its parser dependencies are not installed. Neither optional package installs a rendering engine. Providers return structured Render fragments, support sync and async rendering, and fall back to safe source code when unavailable.

import { createShikiHighlighter } from '@markvia/shiki'
const highlighter = await createShikiHighlighter({ theme: 'vitesse-dark' })
const runtime = createMarkdown({ highlighter })
const html = await runtime.renderAsync(source, htmlRenderer)

The adapter dynamically loads and caches built-in languages. Missing or unknown languages use plain text fallback.

import { htmlRenderer, createHTMLRenderer } from '@markvia/html'
const html = runtime.render(source, htmlRenderer)
const compatibleHtml = runtime.render(source, createHTMLRenderer({ allowRawHtml: true }))

htmlRenderer escapes raw HTML by default. allowRawHtml is an HTML-renderer compatibility option; React and Vue always output raw HTML as safe text.

import { Markdown, createReactRenderer, renderReact } from '@markvia/react'
const reactNode = renderReact(ir)
const renderer = createReactRenderer({ components })
function Article() {
return <Markdown content={source} />
}
<script setup lang="ts">
import { Markdown } from '@markvia/vue'
</script>
<template>
<Markdown :content="source" />
</template>