Part of Ferramenta, a family of Rust tools.
Markdown, ready for the work ahead.
Ferromark turns Markdown into HTML for documentation sites, publishing tools, and applications. A fast Rust engine with an arena-allocated document tree, CommonMark correctness, and practical publishing features. Use the Rust crate or its native Node.js bindings.
Documentation · Rust API · Node.js package
V2 is a breaking upgrade from v1. Read the changelog and the migration guide before upgrading.
A Markdown engine earns its place when the documents get complicated. Nested lists. Reference links. Tables with real content. The page that looked fine until an author added one more footnote.
- Keep the core focused. Parse Markdown and render HTML. Your application chooses translation, site assembly, and the highlighter connected through rendering hooks.
- Build correctness in. The explicit CommonMark profile agrees with all 652 specification examples. Differential checks against cmark and cmark-gfm expose edge cases and keep fixes reproducible.
- Cover everyday publishing needs. Front matter, heading IDs, footnotes, callouts, and inline tables of contents support real documents. Table classes, captions, merged cells, and named columns give CSS control over layout.
- Keep rendering fast. Arena allocation, reusable buffers, specialized byte scans, and SIMD reduce parser and renderer work. You can inspect or transform the document tree before rendering it.
Syntax and features, correctness and limits, and measured comparisons explain the details and trade-offs.
cargo add ferromarklet html = ferromark::to_html("Hello, **world**!").unwrap();
assert_eq!(html, "<p>Hello, <strong>world</strong>!</p>\n");Rust requires 1.95 or newer. The helpers return Result. Rust defaults
preserve raw HTML; set HtmlRendererOptions::sanitize to true for untrusted
input. The Rust guide
covers configuration, ownership, and AST access through ferromark.
npm install ferromarkimport { toHtml } from 'ferromark'
const html = toHtml('Hello, **world**!')Requires Node.js 22.12 or newer. Node defaults escape raw HTML and filter unsafe URL schemes. The Node.js guide covers metadata, Buffers, reusable renderers, and highlighters.
- Configuration — syntax and output policies.
- Content pipelines — document metadata, navigation, and presentation.
- Rendering and trust — defaults and input boundaries.
- Architecture — arena AST, modules, and integration points.
- MDX boundaries — syntax capture and static output.
See CONTRIBUTING.md for setup and required checks. The code is MIT licensed; source provenance preserves upstream attribution. Specification fixtures and benchmark corpora retain their separate licenses.
Ferramenta — A family of Rust tools.
The content pipeline
| Tool | Job |
|---|---|
| ferroni | Oniguruma-compatible regex engine |
| ferriki | Shiki-compatible syntax highlighting |
The language workshop
| Tool | Job |
|---|---|
| ferrolex | Spell checking for text and code |
| ferrocat | Translation catalog engine |
| palamedes | Internationalization for TypeScript applications |
On the workbench
| Tool | Job |
|---|---|
| ferrovia | SVGO-compatible SVG optimizer |
| ferralk | Glob matching and parallel filesystem walking |
| ferrugo | PDF previews for untrusted files |
TypeScript, React & Rust consulting
Experts in Agentic Software Development
Work with us · More open source
Copyright © 2026 Sebastian Software GmbH