English | 简体中文
SuperDoc (@desirecore/super-doc) is an independently maintained fork of Tencent/cherry-markdown.
This project originated from contributions we attempted to merge back into the upstream repository. However, our changes — particularly the addition of a full WYSIWYG editing mode based on Milkdown/ProseMirror, a streaming rendering engine, and numerous custom ProseMirror nodes — have diverged significantly from upstream in both scope and architecture. To avoid placing an unreasonable review and maintenance burden on the upstream maintainers, and to prevent introducing compatibility issues for existing cherry-markdown users, we chose to maintain and publish this as a separate package.
We want to be clear:
- The original cherry-markdown is an excellent Markdown editor created by the Cherry Oteam at Tencent. We have great respect for their work and all contributors.
- This project is licensed under Apache License 2.0, the same license as the original. The upstream LICENSE file (including all third-party component notices) is fully preserved and distributed with this package.
- We do not use the "Tencent" or "CherryMarkdown" names as brand endorsement. SuperDoc is an independent derivative work.
- We encourage anyone evaluating Markdown editors to also consider the original cherry-markdown, which remains actively maintained.
For the full changelog, see the wiki.
A complete What-You-See-Is-What-You-Get editor built on Milkdown / ProseMirror, with one-click switching between Markdown source editing and rich-text editing. Includes custom nodes for images (drag-resize & alignment), editable TOC, footnotes, draw.io, audio/video, panels, ruby annotations, and collapsible details.
A lightweight Engine + Previewer combination designed for AI chat scenarios. Ships as super-doc.stream.js — no editor UI or toolbar, optimized for character-by-character streaming with auto-closing of code blocks, inline formulas, and tables.
- Rich text marks: font color, background color, font size, highlight, underline, sub/superscript
- 11 new toolbar buttons (footnote, draw.io, audio, file, graph, color, size, ruby, panel, detail, PDF export)
- 30+ bug fixes (KaTeX rendering, table editing, hyperlinks, paste handling, formula rendering, etc.)
SuperDoc is a Javascript Markdown editor. It has the advantages such as out-of-the-box, lightweight and easy to extend. It can run in browser or server (with NodeJs).
- Getting Started
- Hello World
- Configuring Image & File Upload
- Adjusting the Toolbar
- Configuration Options
- Custom Syntax
- Configuring Themes
- Extending Code Block Syntax
- Events & Callbacks
- WYSIWYG Mode
- Stream Rendering
Developer can call and instantiate SuperDoc in a very simple way. The instantiated editor supports most commonly used markdown syntax (such as title, TOC, flowchart, formula, etc.) by default.
When the syntax that SuperDoc supports can not meet your needs, secondary development or function extension can be carried out quickly. SuperDoc is implemented in pure JavaScript, and does not rely on framework technology such as Angular, Vue or React. Framework only provides a container environment.
After enabling streaming rendering, SuperDoc will automatically complete the following syntax elements to avoid exposing Markdown source code, ensuring stable output during the streaming process:
- Headings
- Bold and italic text
- Hyperlinks
- Images and audio/video
- Inline code blocks
- Block code blocks
- Inline formulas
- Block formulas
- Unordered lists
- Tables
- Mermaid diagrams
- Footnotes
- Image zoom, alignment and reference
- Generate a chart based on table content
- Adjust font color and size
- Font background color, superscript and subscript
- Insert checklist
- Insert audio and video
- Mermaid diagrams and math formulas
- Info panels
- Paste from rich text as markdown
- Classic & regular line break modes
- Multi-cursor editing
- Image size editing
- Mermaid diagram size editing and alignment (drag to resize, support center/left/right/float alignment)
- Table editing
- Table -> Chart (generate chart from table content)
- Export as image or PDF
- Floating toolbar: appears at the beginning of a new line
- Bubble toolbar: appears when text is selected
- Set shortcut keys
- Floating table of contents
- Theme switching
- Input suggestion (autocomplete)
- AI Chat scenario: stream-mode output supported
- WYSIWYG mode: one-click switch between Markdown and rich-text editing (SuperDoc)
- Partial rendering
- Partial update
SuperDoc has a built-in security Hook, by filtering the whitelist and DomPurify to do scan filter.
SuperDoc has a variety of style themes to choose from.
Via yarn
yarn add @desirecore/super-docVia npm
npm install @desirecore/super-doc --saveIf you need to enable the functions of mermaid drawing and table-to-chart, you need to add mermaid and echarts packages at the same time.
<link href="super-doc.min.css" />
<div id="markdown-container"></div>
<script src="super-doc.js"></script>
<script>
new Cherry({
id: 'markdown-container',
value: '# welcome to SuperDoc!',
});
</script>import '@desirecore/super-doc/dist/super-doc.css';
import Cherry from '@desirecore/super-doc';
const cherryInstance = new Cherry({
id: 'markdown-container',
value: '# welcome to SuperDoc!',
});const { default: CherryEngine } = require('@desirecore/super-doc/dist/super-doc.engine.core.common');
const cherryEngineInstance = new CherryEngine();
const htmlContent = cherryEngineInstance.makeHtml('# welcome to SuperDoc!');Because the size of the mermaid library is very large, the build product contains a core build package without built-in Mermaid. The core build can be imported in the following ways.
import '@desirecore/super-doc/dist/super-doc.css';
import Cherry from '@desirecore/super-doc/dist/super-doc.core';
const cherryInstance = new Cherry({
id: 'markdown-container',
value: '# welcome to SuperDoc!',
});import CherryEngine from '@desirecore/super-doc/dist/super-doc.engine.core';
const cherryEngineInstance = new CherryEngine();
const htmlContent = cherryEngineInstance.makeHtml('# welcome to SuperDoc!');
// --> <h1>welcome to SuperDoc!</h1>The core build package does not contain mermaid dependency, should import related plug-ins manually.
import '@desirecore/super-doc/dist/super-doc.css';
import Cherry from '@desirecore/super-doc/dist/super-doc.core';
import CherryMermaidPlugin from '@desirecore/super-doc/dist/addons/cherry-code-block-mermaid-plugin';
import mermaid from 'mermaid';
// Plug-in registration must be done before Cherry is instantiated
Cherry.usePlugin(CherryMermaidPlugin, {
mermaid, // pass in mermaid object
});
const cherryInstance = new Cherry({
id: 'markdown-container',
value: '# welcome to SuperDoc!',
});SuperDoc provides a build package optimized for streaming output scenarios. This package does not include large dependencies like mermaid or CodeMirror, enabling on-demand lazy loading. It is ideal for AI Chat and similar scenarios.
import '@desirecore/super-doc/dist/super-doc.css';
import Cherry from '@desirecore/super-doc/dist/super-doc.stream';
const cherryInstance = new Cherry({
id: 'markdown-container',
});
cherryInstance.setMarkdown('# welcome to SuperDoc!');| Build | File | Mermaid | CodeMirror | Use Case |
|---|---|---|---|---|
| Full | super-doc.js |
✅ | ✅ | General purpose |
| Core | super-doc.core.js |
❌ | ✅ | Without Mermaid |
| Stream | super-doc.stream.js |
❌ | ❌ | AI Chat streaming |
Note: MathJax/KaTeX are external dependencies loaded dynamically via CDN and are not included in any build package.
Recommended: Using Dynamic import, the following is an example of webpack Dynamic import.
import '@desirecore/super-doc/dist/super-doc.css';
import Cherry from '@desirecore/super-doc/dist/super-doc.core';
const registerPlugin = async () => {
const [{ default: CherryMermaidPlugin }, mermaid] = await Promise.all([
import('@desirecore/super-doc/src/addons/cherry-code-block-mermaid-plugin'),
import('mermaid'),
]);
Cherry.usePlugin(CherryMermaidPlugin, {
mermaid,
});
};
registerPlugin().then(() => {
const cherryInstance = new Cherry({
id: 'markdown-container',
value: '# welcome to SuperDoc!',
});
});See /src/Cherry.config.js or check the Configuration Options wiki page.
Click here for more examples.
Under development, please see /packages/client/.
See the custom syntax documentation: Custom syntax docs
SuperDoc supports five toolbar positions, each position can be extended with custom toolbar buttons. See the toolbar configuration documentation for details: Customize toolbar buttons.
Vitest has been added as a basic configuration with test cases. Welcome to submit more test cases.
This project is a derivative work of cherry-markdown, originally developed by the Cherry Oteam at Tencent and licensed under the Apache License 2.0. We are grateful to the original authors and all contributors for creating such a solid foundation.
This product includes software developed by Tencent/cherry-markdown. Third-party component notices are provided in the LICENSE file.
