What's Changed
Behavior and Compatibility Changes
Preserve extended Markdown syntax byte for byte
Flowmark now recognizes syntax that CommonMark and GFM parsers cannot safely round-trip,
formats the surrounding prose normally, and restores the authored bytes exactly.
This protection covers LaTeX math, inline code, Pandoc grid and multiline tables,
definition lists and line blocks, Obsidian callouts and wikilinks, MyST roles, GitLab
multiline blockquotes and references, fenced divs and colon containers, TOML
frontmatter, attribute groups, and raw HTML blocks.
No dialect flags are required.
Keep structure stable at syntax boundaries
Fenced-code info suffixes, numbered fence content, nested container fences, code spans
next to setext headings, protected blocks inside lists, and narrow wrapping around
escaped preservation sentinels now retain their intended structure.
Adjacent blockquotes remain separate, and inline links remain inline even when a
reference definition uses the same destination.
Stay synchronized with the Rust port
This release is paired with flowmark-rs==0.4.0. The two implementations share the same
cross-port compatibility corpus and generated installation guidance, including
synchronized version pins.
Bug Fixes
Make repeated formatting safer and more stable
Whole-document formatting is idempotent across the newly protected syntax families, and
malformed constructs are handled with bounded scans.
Invalid UTF-8 file input now reports the source path and still fails without modifying
the file.
Restore edge-case compatibility
Preservation enums work on Python 3.10, direct single-file output works correctly, angle
comparisons are no longer mistaken for HTML, GitLab references stay atomic in tables,
and ellipsis cleanup works after closing curly quotes.