Use with Node.js
Everything but the interactive view runs without a browser.
Render a PNG
renderPNG needs @napi-rs/canvas:
npm install @markmap/parse @markmap/canvas @markmap/render @napi-rs/canvasimport { renderPNG } from '@markmap/canvas/node';
import { parse } from '@markmap/parse';
import { resolveRenderOptions } from '@markmap/render';
import { readFile, writeFile } from 'node:fs/promises';
async function renderMarkmap(file: string, outFile: string) {
const { root, frontmatter } = parse(await readFile(file, 'utf8'));
const { options } = resolveRenderOptions({}, frontmatter.markmap);
const png = await renderPNG(root, { ...options, baseDir: '.' });
await writeFile(outFile, png);
}
await renderMarkmap('notes.md', 'notes.png');Local images are read only from baseDir, and remote ones are fetched only if allow returns true, so Markdown from someone else cannot read this machine or reach the network unless you say so.
Render an SVG
npm install @markmap/parse @markmap/renderimport { parse } from '@markmap/parse';
import { approximateMeasurer, renderTreeAsync, toSVGString } from '@markmap/render';
const { root } = parse(markdown);
const result = await renderTreeAsync(root, { measurer: approximateMeasurer });
const svg = toSVGString(result);From a script
The CLI does all of this in one line, including math and local images:
markmap notes.md --png --no-open