Skip to content
Ferromark

Ferromark / Shared reference

Correctness and Compatibility

The second correction batch closes the seven cmark findings left after the first fixes. Strikethrough now uses the inline delimiter stack, Unicode URL bytes receive percent encoding, and one leading BOM is treated as an encoding marker with original spans preserved.

CheckResult
Explicit CommonMark 0.31.2 profile652/652 agree, without heading-ID exceptions
Current GFM extension examples28/28 agree
CRLF / CR variants1,304/1,304 agree with their LF controls
Original cmark / cmark-gfm corpus106/106 agree
Additional tilde/inline combinations254/256 agree with cmark-gfm; two pinned-oracle nested-link defects follow the specification instead
Workspace regression testsBoth oracle corpora, renderer-profile/span checks, table layout/column names, line comments, frontmatter, optional writing syntax, container references, and Rust convenience helpers

Agreement permits conservative HTML serialization equivalence; raw output and all mismatches remain in the report. The two reference exceptions have exact spec-correct HTML assertions, and the generic strict oracle still rejects them. The complete GFM website retains ten classified differences from global extension policies and older HTML-comment rules. MDX remains bounded syntax capture and static output. These finite suites do not prove correctness for arbitrary CommonMark, GFM, or MDX input.

The container-reference correction resolves the subsequent list-definition finding: reference definitions in list items and block quotes now apply document-wide, including forward references. Code and paragraph decoys remain literal, and the first definition wins across container boundaries. The line-comment oracle now requires semantic agreement for all cases and both baseline probes.

The repeatable spec audit and the 106-case live oracle pass their failure gates. The native comparison reruns the corrected core with explicit syntax and renderer settings across all six engines.

Library comparison scores

The library comparison also reports measured output agreement for all 20 displayed library variants and separate Ferromark native and Node references. CommonMark covers 652 examples from version 0.31.2. GFM extensions covers 28 extension examples from the frozen official website; it is not a full GFM conformance score.

These checks use each library's closest available public specification settings. They run separately from the reduced profiles used for performance measurements. A mismatch may come from parsing or from renderer policy, such as extra task-list classes. Unsupported suites have no percentage. Unmeasured suites retain the setup failure. Neither result changes which of the 57 documents contributes to the performance factor.

The retained report links every input and expected/actual HTML, including failures, exact versions, and configuration differences. The local runner rebuilds the pinned adapters and validates the generated homepage values.

Specification agreement · public spec settings
LibraryCommonMarkGFM ext.
Native
Ferromark Spec referenceCM 100.0%GFM 100.0%
Bun MDRustCM 100.0%GFM 78.6%
cmarkCCM 100.0%GFM Unsupported
cmark-gfmCCM 98.3%GFM 92.9%
ComrakRustCM 100.0%GFM 92.9%
GoldmarkGoCM 100.0%GFM 85.7%
markdown-rsRustCM 100.0%GFM 92.9%
md4cCCM 100.0%GFM 57.1%
OX-ContentRustCM 92.8%GFM 82.1%
pulldown-cmarkRustCM 100.0%GFM 42.9%
Node.js
Ferromark Spec referenceCM 100.0%GFM 100.0%
commonmark.jsJavaScriptCM 100.0%GFM Unsupported
markdown-itJavaScriptCM 100.0%GFM 60.7%
markedJavaScriptCM 98.2%GFM 96.4%
MD4XNative addonCM 99.5%GFM 60.7%
micromarkJavaScriptCM 100.0%GFM 89.3%
OX-ContentNative addonCM 91.4%GFM 50.0%
remark / unifiedJavaScriptCM 99.8%GFM 78.6%
RemarkableJavaScriptCM 81.4%GFM Unsupported
SätteriNative addonCM 100.0%GFM 78.6%
ShowdownJavaScriptCM 54.8%GFM 39.3%
TanStack MarkdownJavaScriptCM 58.0%GFM 46.4%
CM: 652 CommonMark 0.31.2 examples. GFM ext.: 28 extension examples, not full GFM. Spec settings and output agreement are separate from timing. Method and raw results.