Skip to content

Benchmarks

Apple Silicon (M-series), July 2026. All parsers run with GFM tables, strikethrough, and task lists enabled; ferromark's non-GFM extras (heading IDs, callouts) are disabled. Output buffers are reused where APIs allow and binaries are non-PGO. ferromark keeps its secure default rendering in this published product lane, so it also performs URL and raw-HTML safety work that pulldown-cmark does not.

CommonMark 5 KB

ParserThroughputvs ferromark
ferromark259.6 MiB/sbaseline
pulldown-cmark254.5 MiB/s0.98x
md4c (C)243.1 MiB/s0.94x
comrak67.9 MiB/s0.26x

CommonMark 50 KB

ParserThroughputvs ferromark
ferromark280.5 MiB/sbaseline
pulldown-cmark275.2 MiB/s0.98x
md4c (C)253.3 MiB/s0.90x
comrak71.8 MiB/s0.26x

Summary: 2% faster than pulldown-cmark, 11% faster than md4c, and roughly 4x faster than comrak on this fixture set. Competitor versions: pulldown-cmark 0.13.4, comrak 0.53, md4c @ 65c6c9d.

Reproduce locally

The published four-parser lane requires the pinned md4c checkout:

cd benchmarks/md4c-comparison
MD4C_DIR=/path/to/md4c cargo bench --bench comparison

Feature-parity lanes

The focused two-parser harness separates three explicit shared surfaces:

LaneShared featuresRaw HTML
CommonMarkCommonMark onlytrusted/preserved
GFM overlapCommonMark, tables, strikethrough, task liststrusted/preserved
Extended overlapGFM overlap, footnotes, math, superscript, calloutstrusted/preserved

Run semantic guardrails before measuring:

cargo test --manifest-path benchmarks/pulldown-comparison/Cargo.toml
cargo bench --manifest-path benchmarks/pulldown-comparison/Cargo.toml

These lanes are designed for like-for-like parser comparison. ferromark's secure-default result stays separate because pulldown-cmark has no equivalent URL/raw-HTML trust boundary.

Option costs

cargo bench --bench options renders one shared corpus under the dialect presets (minimal, commonmark, gfm, default) and under individual extension flags. Because the document stays constant, differences between lanes show what each configuration costs on identical input — a mix of features the corpus actually uses (tables, task lists, strikethrough) and enabled-but-unused paths. It is not a comparison of different documents.