NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #3275 most downloaded on pub.dev
Markdown library written in Dart. It can parse and display Markdown.
Last release 2 months ago
05 Aug 2026
Ships unpredictably
gaps range from 8 days to 10 months
Nearly every release is documented
notes for 9 of 9 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
9 releases · first in 2025
One column per month.
Upgrading from 0.0.x? See the migration guide . 0.2.x is almost entirely backward compatible — the only required code change is a new alert branch for
Upgrading from 0.0.x? See the
migration guide. 0.2.x is almost entirely
backward compatible — the only required code change is a newalertbranch
for directMD$Block.map/switchcallers.
SyntaxHighlighter to theMarkdownThemeData.highlighter field; the default (unset) renders code aspackage:flutter_md/highlight.dart: SyntaxHighlighter, MarkdownHighlighter,CodeHighlightTheme, Grammar, GrammarToken, compileHighlightPatternSyntaxHighlighter / CodeHighlightTheme are also re-exported from the mainpackage:flutter_md/highlight/<lang>.dart, e.g. HighlightDart.grammar) withHighlightThemes.githubDark / githubLighthighlight/themes.dart) provide ready themes; allHighlightLanguageshighlight/all.dart) is a convenience registry of every grammar fortool/highlight_codegen (adapted from Prism, MIT).MarkdownSelectionController anchors the selection on the immutable model, soMarkdownWidgets and survives listMarkdownSelectionController,MarkdownSelectionScope, MarkdownSelectionGroup, MarkdownPosition,MarkdownSelection, MarkdownDocumentRef, MarkdownSelectedContentMarkdownSelectionFormatter /MarkdownPlainTextFormatter / MarkdownMarkupFormatter,MarkdownReconciliationPolicy, MarkdownSelectionSurface,markdownBlockRenderedText, andSelectableBlockPainter / SelectableTextBlock.StreamingMarkdownParser, an incremental parser for streamingO(N²) cost of re-parsing the wholeO(tail) (3–14× faster on a full messagebenchmark/streaming_benchmark.dart). parser.add(chunk) returnsMarkdown, always identical block-for-block toMarkdown.fromString(everythingSoFar), and a Stream<String>.toMarkdown()MarkdownDecoderinlineMath: true) to match Markdown.fromString. The batchMarkdownDecoder hot path is byte-for-byte unchanged.MarkdownMarkupFormatter, a built-in "Copy as Markdown" formatter.getText() (or set controller.formatter) to reconstruct Markdown#s, nested list markers with task checkboxes,> prefixes, fenced code and pipe tables — for blocks theMarkdownPlainTextFormatter).MarkdownWidget gains optional documentId and controllerdocumentId is inert.MultiPainterSelectable mixin (+ SelectableFragment) maps pointer positionsTextPainters of a list's items or a\n / \t separators of markdownBlockRenderedText.MarkdownSelectionScope,SelectableRegion/SelectableText. When focused: Ctrl/Cmd+CCtrl/Cmd+A selects all, Shift+arrows extend by character / word /Esc clears. Right-clickStatefulWidget with a public MarkdownSelectionScopeStatecopySelection / selectAll / clearSelection / showToolbar /hideToolbar / contextMenuButtonItems / contextMenuAnchors). NewfocusNode, enabled, selectionColor,contextMenuBuilder, magnifierConfiguration, selectionControls,onSelectionChanged. New controller ops: selectionColor,globalSelectionRects, moveSelectionEdgeToGlobal, and theextendSelectionBy* family; MarkdownPosition.copyWith.SelectionOverlay. Selection endpoints pushLeaderLayers from the render objects so the handles follow the content as itMarkdownWidgets); dragging a handle adjusts theselectionControls, magnifierConfiguration) and are absent onSelectableText. New surface geometry:localSelectionRects, setSelectionHandleLayers, repaintSelection, andMarkdownSelectionController.selectionHandleEndpoints /MarkdownHandleEndpoints.Shift-click extends it.TextPainter.getWordBoundary), so double-clickcan't). New controller ops:selectWordAtGlobal, selectBlockAtGlobal, wordSelectionAt,blockSelectionAt, extendSelectionGranular, and wordRangeIn; new surfaceMarkdownSelectionSurface.wordBoundaryForGlobal.MarkdownWidget shows the click (hand)MarkdownWidget's render object now draws the selectionPicture and becomes a repaint boundaryinline code, and ==marked== spans.> [!NOTE], > [!TIP], > [!IMPORTANT],> [!WARNING], > [!CAUTION]) via the new MD$Alert block and MD$AlertType.- [ ] / - [x]) via MD$ListItem.checkedMD$ListItem.isTask, rendered with a checkbox.:---, :--:, ---:) captured onMD$Table.alignments and applied when rendering.linkStyle on MarkdownThemeData to customize link text stylingMarkdownThemeData.alertColorsalertColorFor.$...$ inline LaTeX math conversion to Unicode, disabledMarkdownDecoder(inlineMath: true) orMarkdown.fromString(text, inlineMath: true). Supports LaTeX commands\alpha, \rightarrow, ...), superscripts/subscripts (x^2, H_2O,x^{10}), is code-span and code-block safe, and preserves currency ($5).mathReplacements (extend thekMarkdownMathCommands). Originally proposed in #21 by\$ is now a recognized backslash escape, producing a literal$...$ run out of math conversion).*** and ___ (and spaced variants- - -), and no longer greedily consume text after ---.~~~ fenced code blocks are now recognized in addition to ```.5 * 6 = 30, **bold never closed).snake_case, object_id are preserved).#; #hashtag and 7+ ## sequences are stripped.<url> and single-quoted titles.MarkdownThemeData.copyWith no longer drops builder and onLinkTap.MD$Block.map/maybeMap gained an alert branch for the newMD$Alert block type.RegExp allocation), lazy link-extraction gated on [, and a range-copytest/unit_test.dart so CI runs the fullparser.dart,nodes.dart, markdown.dart, theme.dart, and widget.dart are now atbenchmark/parser_benchmark.dart (a multi-scenariobenchmark_harness suite) and benchmark/compare.dart (a low-noiseInvalidate and relayout render object after system fonts changed by @mike-doctorina in #17
Full Changelog: 0.0.7...0.0.8
* feat: add divider color to MarkdownThemeData and update BlockPainter$Quote
V 0.0.7 (#13)
* feat: support theming
* feat: add divider color to MarkdownThemeData and update BlockPainter$Quote
* fix: Inline code incorrectly parses inner markdown syntax (#10)
* fix: No indentation after line breaks within list item (#4)
* chore: update version to 0.0.7 and enhance changelog with recent fixes and features
FIXED : Fixed escaping of special characters. [ #6 ]
FIXED : Fixed parsing url such as textbrackets) .
[text](https://domain.com/path(with)brackets).CHANGED : Improved link tap handling.
FIXED : Links inside lists now work correctly.
ADDED: All field in MarkdownThemeData() are now optional. ADDED: MarkdownThemeData{}.headingStyleFor method to customize heading styles. FIXED: Remove
ADDED: All field in MarkdownThemeData() are now optional.
ADDED: MarkdownThemeData{}.headingStyleFor method to customize heading styles.
FIXED: Remove clipping for canvas. Fixes one line text trim at browsers.
FIXED: Correctly apply styles to text in blocks.
ADDED: Initial release with basic functionality.
Your coding agent can read these notes before it upgrades. Set up the MCP server →