Skip to content

comarkdown/comark

Repository files navigation

Comark banner

comark

npm version npm downloads CI Documentation license

The Markdown engine for the modern web. One parser, every renderer: Vue, React, Svelte, Angular, HTML and ANSI, with components, plugins and streaming.

Comark (Components in Markdown) extends standard Markdown with component syntax that stays plain text. No build step: parse at runtime or build time, on the server or in the browser, and render the same content anywhere.

# Regular Markdown

With a custom component:

::alert{type="warning"}
This is **Markdown** inside your own component.
::

Why Comark

  • Runtime parsing: parse(markdown) is a pure function returning a compact AST. Content from a database, CMS, or LLM is live the moment it is saved. No rebuild, no redeploy. (Comark vs MDX)
  • Streaming built in: auto-close completes unterminated syntax (**bold, open code fences, half-open components) so AI output renders correctly at every frame.
  • One parser, every renderer: the same source renders to Vue, React, Svelte, Angular, Nuxt, HTML strings, and ANSI terminal output. Your content outlasts your framework.
  • Still just Markdown: full CommonMark + GFM, frontmatter, and {.class} attributes on native elements. Components are opt-in syntax, not a new language.
  • Plugin ecosystem: Shiki highlighting, KaTeX math, Mermaid diagrams, TOC, alerts, footnotes and more, plus compatibility with existing markdown-it plugins.
  • Decoupled parse & render: parse once on the server, send the serializable AST (['tag', props, ...children]) to the client, render without re-parsing.
  • Fast: built on markdown-exit, a TypeScript rewrite of markdown-it, with full TypeScript support.

Built on five years of MDC, the parser behind Nuxt Content. Read Why Comark for the full story.

Quick Start

npm install comark
import { parse } from 'comark'

const tree = await parse('# Hello **World**')
// { nodes: [['h1', { id: 'hello' }, 'Hello ', ['strong', {}, 'World']]], frontmatter: {}, meta: {} }

Then pick a renderer:

Vue

npm install @comark/vue katex
<script setup lang="ts">
import { Comark } from '@comark/vue'
import math, { Math } from '@comark/vue/plugins/math'

const chatMessage = ...
</script>

<template>
  <Comark :components="{ Math }" :plugins="[math()]">{{ chatMessage }}</Comark>
</template>

React

npm install @comark/react katex
import { Comark } from '@comark/react'
import math, { Math } from '@comark/react/plugins/math'

function App() {
  const chatMessage = ...
  return <Comark components={{ Math }} plugins={[math()]}>{chatMessage}</Comark>
}

Svelte

npm install @comark/svelte katex
<script lang="ts">
  import { Comark } from '@comark/svelte'
  import math, { Math } from '@comark/svelte/plugins/math'

  const chatMessage = ...
</script>

<Comark markdown={chatMessage} components={{ math: Math }} plugins={[math()]} />

Angular

npm install @comark/angular katex
import { Component } from '@angular/core'
import { ComarkComponent } from '@comark/angular'
import math, { Math } from '@comark/angular/plugins/math'

@Component({
  selector: 'app-chat',
  standalone: true,
  imports: [ComarkComponent],
  template: `<comark [markdown]="chatMessage" [components]="{ Math }" [plugins]="[math()]" />`,
})
export class ChatComponent {
  chatMessage = ...
}

HTML (No Framework)

npm install @comark/html
import { render } from '@comark/html'

const chatMessage = ...

const html = await render(chatMessage)

Packages

Package Description
comark Core parser, AST utilities, plugins
@comark/vue Vue 3 renderer
@comark/react React renderer (Next.js, Server Components)
@comark/svelte Svelte 5 renderer
@comark/angular Angular renderer
@comark/nuxt Nuxt module with auto-imports
@comark/html HTML string renderer
@comark/ansi ANSI terminal renderer

Agent skill

Coding agents can install the Comark skill from the docs site:

npx skills add https://comark.dev

See Installation on comark.dev for details.

License

Made with ❤️

Published under MIT License.

About

A high-performance Markdown parser and renderer for Angular, React, Svelte, Vue, HTML and ANSI.

Topics

Resources

License

Security policy

Stars

817 stars

Watchers

3 watching

Forks

Contributors