Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Section titled “[Unreleased]”Changed
Section titled “Changed”- The license is now Apache-2.0, previously MIT.
2.2.0 - 2026-08-06
Section titled “2.2.0 - 2026-08-06”Contentis public on every container, not only on the document.AddHtmlwrites a block of raw HTML.WriteTowrites an element to aStreamor aTextWriter.Texton a paragraph, a quote and a list item, andCodeon a code block, are settable.
Changed
Section titled “Changed”AddHeaderon a section adds a header instead of throwing.MarkdownStringBuilderbecomesMarkdownRenderer.
- An empty element no longer leaves blank lines behind.
2.1.0 - 2026-08-05
Section titled “2.1.0 - 2026-08-05”MarkdownText.Linktakes a header or a section and derives the address from its text, so a cross reference needs no hand-written anchor.MarkdownText.LinkandMarkdownText.Imagetake a title, which a renderer shows as a tooltip.MarkdownList.StartNumbersets the number the first item of an ordered list carries.
- A link no longer breaks when its address holds a space or a parenthesis.
2.0.0 - 2026-08-03
Section titled “2.0.0 - 2026-08-03”- Text is escaped by default, because every element takes a
MarkdownTextand astringconverts to it implicitly. Escaping stays minimal, soRoslyn-based C# parserand1_000_000pass through as written. MarkdownText.Rawkeeps content that is already Markdown, and+joins raw and escaped content.MarkdownSectionpairs a header with the content below it and takes its level from the nesting, so a document carries no hand-written numbers.MarkdownFormatreplaces the boolean ofToString(true)and holds the choices that depend on the renderer: plain text output, element types to leave out, the form of a header anchor and the spacing of a loose list.MarkdownDocument.FrontMatterwrites a YAML front matter block above the content, withTitleandDescriptionas properties and an indexer for every other entry.- A quote and a list item hold block elements, so a list, a table or a header goes inside one. A quote used to hold a single piece of text.
MarkdownTablewrites column alignment throughSetAlignmentsandWithHeader.MarkdownText.LineBreakends a line without ending the block, andAddThematicBreakwrites a horizontal rule.- The output is formatted: one blank line between blocks, table columns padded to an equal width and the content of a list item indented to its text column.
Changed
Section titled “Changed”- Many members are renamed to say what they do, so
Addadds and returns the new element,Withadds and returns the receiver, andSetreplaces a value. The sixWithoverloads that took a built element become oneWithElement. - A check box is a property of the item,
MarkdownListItem.IsChecked, and numbering a property of the list,MarkdownList.IsOrdered, soMarkdownCheckList,MarkdownCheckListItemandMarkdownOrderedListare gone. - The inline builders moved from
MarkdownSyntaxtoMarkdownTextand returnMarkdownTextinstead ofstring, so a fragment is never escaped twice. - Passing
nullas content produces an empty element instead ofArgumentNullException. MarkdownHeaderrejects a level outside the range one to six withArgumentOutOfRangeException.
Removed
Section titled “Removed”MarkdownSyntaxis removed, together with itsEscapeHtml, which text escaping makes unnecessary.MarkdownDocumentParseris removed. Markdig extracts a front matter block withUseYamlFrontMatter.
- A code block fence and a code span delimiter outlast their content, which used to close the block or the span early.
- A table cell escapes
|and writes a line break as a space, both of which used to break the row structure. - A nested list item renders as a list item. The child text used to be written with an indent but without the
-marker. - A quote prefixes every line with
>, so a multi-line quote no longer ends after its first line.
1.0.0 - 2024-05-29
Section titled “1.0.0 - 2024-05-29”First release. Document model with headers, paragraphs, code blocks, quotes, lists, ordered lists, checklists and tables. Inline syntax through MarkdownSyntax, plain text rendering through ToString(true) and front matter extraction through MarkdownDocumentParser.