Skip to content

v2.0.0

Choose a tag to compare

@swernerx swernerx released this 21 Sep 21:48
03c1e11

2.0.0 (2026-09-21)

⚠ BREAKING CHANGES

  • api: Renderer, RenderError, RenderResult, ast::Position, ParseErrorKind::{UnexpectedToken, InvalidSyntax, UnexpectedEof}, ParserOptions.gfm and HtmlRendererOptions.highlight are removed; ParseErrorKind is #[non_exhaustive]; HtmlRendererOptions::gfm() is now the convenience profile and the strict profile is gfm_spec(); HtmlRendererOptions.soft_break takes effect. See docs/migration-v2.md.

Features

  • homepage: put ferromark in the header lockup and quiet the family switcher (98f630a)
  • homepage: put ferromark in the header lockup and quiet the family switcher (779f72a)
  • homepage: serve the documentation from ferromark.dev (dc3c58f)
  • homepage: serve the documentation from ferromark.dev (0cb0bf1)
  • homepage: tell the story of what sets Ferromark apart and the guardrails behind it (eeef0e8)
  • homepage: tell the story of what sets Ferromark apart and the guardrails behind it (fc93726)

Bug Fixes

  • benchmarks: read the runtime-profile sources from the tree at the revision (9ec4e8c)
  • benchmarks: read the runtime-profile sources from the tree at the revision (d013b5d)
  • node: harden libc detection and verify registry dist-tags (#367) (7740a5d), closes #359 #361 #362
  • parser: bound emphasis nesting with max_nesting_depth (#372) (e8439fd), closes #371
  • parser: bound inline bracket nesting with max_nesting_depth (#369) (2887b2b), closes #349
  • parser: follow the spec for tabs after list markers, type-1 HTML closers and MDX flow lines (#382) (e532dcf)
  • parser: keep laziness to open paragraphs and bound container and inline costs (#383) (8d957e3)
  • parser: key the JSX closer memo without std::String (c84743c)
  • parser: key the JSX closer memo without std::String (85660dd)
  • release: hand npm publish local tarball paths (5aa4384)
  • release: hand npm publish local tarball paths (3a3fa03)
  • renderer: bound code annotation ranges and keep root-absolute links with an empty base (#380) (1037fb5)
  • renderer: normalize base URL for Markdown links (#376) (012b1e4)

Performance Improvements

  • allocator: lower the fresh arena floor to 2 KB (be8d611)
  • allocator: size a fresh arena from the input instead of a 16 KB floor (6befcd4)
  • parser: answer the closer probe from a forward window, not a hash table (2a46cf5)
  • parser: answer the closer question from a forward window (6505b93)
  • parser: count inline nesting in a plain cell on the parser (ac793b2)
  • parser: keep the inline nesting depth in a plain cell (39b1f0b)
  • parser: make math, MDX and definition-list scans linear (#384) (bffc89f)
  • parser: make nested link probing linear (#374) (ca82ec2), closes #350
  • parser: memoize missing MDX JSX closers (#377) (e1b3489)
  • parser: repair the release-head regression and state measured figures on the homepage and README (fe8987c)
  • parser: run the laziness tracker on demand and allocate memo tables on first use (60602a5)

Miscellaneous Chores

Code Refactoring