NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #993 most downloaded on pub.dev
Powerful Flutter Markdown & LaTeX Renderer: Rich Text, Math, Tables, Links, and Text Selection. Ideal for ChatGPT, Gemini, and more.
Last release today
08 Oct 2026
Release timing varies
gaps range from 9 days to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
62 releases · first in 2024
CommonMark syntax: _italic_ / __bold__, multi-backtick code spans, ~~~ and longer fences, backslash escapes, entity references (&, ©), link titles and
_italic_ / __bold__, multi-backtick code spans,
~~~ and longer fences, backslash escapes, entity references
(&, ©), link titles and <url> destinations, reference
links, setext headings, closing #s, and hidden <!-- comments -->.text[^1] with [^1]: note.[1]: url gives a [1] citation chip a URL (SourceTagBuildDetails.url);
tapping it calls onLinkTap when no onSourceTagTap is set.MarkdownDefinitions and Plusparse.parse(definitions:), for parsing a
document in pieces.* and _ followed by a space no longer open emphasis (2 * 3 * 4).$ maths follows Pandoc's rule, so $5 and $10 stays prose.--- is now a heading.MdNode has new subclasses: MdFootnoteReference, MdFootnoteDefinitions.`:wave:`
showed a placeholder).autolink: false, patterns inside bold were not applied._ was not autolinked.$ maths was applied inside code.[text](url "title") kept the title in the URL.One column per month.
onLatexTap: called when a formula is tapped, with a LatexTapDetails holding the formula (tex, source), whether it is inline, the TeX of the part under
onLatexTap: called when a formula is tapped, with a LatexTapDetails
holding the formula (tex, source), whether it is inline, the TeX of the
part under the finger (tappedTex) and any \href target. The default
formulas show a click cursor while a handler is set.inlineLatexBuilder builds an inline formula as an InlineSpan — return a
MathSpan with its own onTap, plain text, or anything else that belongs in
a line — and blockLatexBuilder builds a block formula as a Widget. Each
takes one details object (InlineLatexBuildDetails,
BlockLatexBuildDetails) with the formula after latexWorkaround and as
written, the resolved style, an onTap bound to onLatexTap, and the stock
formula to keep or wrap (defaultSpan(), defaultWidget(),
asWidgetSpan()). LatexStyle still pads, fills and scrolls a block
builder's result. Both pipelines honour them.latexBuilder and its LatexBuilder type, in favour of
inlineLatexBuilder and blockLatexBuilder. Nothing is removed: it keeps
working wherever the matching new builder is not set, and goes in 2.0.0.val_latex_flutter 0.1.2, which adds taps to MathSpan and stops
an inline MathSpan scaling twice under a text scaler. The default renderer
now asks for streaming parses explicitly, so val_latex_flutter's new
Math.tex default (not streaming) does not reach a formula still arriving.Alerts: a quote whose first line is [!NOTE], [!TIP], [!IMPORTANT], [!WARNING] or [!CAUTION] renders with an icon, a title and an accent colour on a fa
[!NOTE], [!TIP], [!IMPORTANT],
[!WARNING] or [!CAUTION] renders with an icon, a title and an accent
colour on a faint tint of it (#79). Style it with
GptMarkdownStyleSheet.alert (AlertStyle, with per-type overrides) or
replace it with alertBuilder. Apps that set blockQuoteBuilder and no
alertBuilder keep their quote look. The parsed MdBlockQuote gains an
optional alert; its children are unchanged.data: URL —  — render (#32).
They went to NetworkImage, which cannot load one outside a browser. The
decoded bytes are cached, so rebuilds do not decode again.GptMarkdownStyleSheet.blockSpacing sets the gap between blocks, in logical
pixels (#41). Unset, it is the existing one empty line; it scales with the
text either way, and extra blank lines in the source never widen it.TableStyle.overflow: TableOverflow.wrap fits a wide table to the screen
and wraps its cells instead of scrolling it sideways (#93). The default,
TableOverflow.scroll, is the existing behaviour.val_highlight_flutter
instead of highlight: 55 languages, its light and dark themes, and a
faster engine. A fence tag with no grammar still renders as plain text.val_highlight
requires.val_latex_flutter instead of
flutter_math_fork. Formulas are set in Latin Modern Math, a formula still
streaming in (\frac{a) renders what exists so far, and \tag, align,
\ce{…} and \SI{…} work. Size, colour, display style and the raw-TeX
fallback are unchanged. Selecting a formula copies the LaTeX of the selected
part. A latexBuilder written against flutter_math_fork keeps working if
your app still depends on it.\(, \[, or
$/$$ with useDollarSignsForLatex — renders as far as it has come and
grows with each chunk, instead of being held back and appearing whole when
its closing delimiter lands. A command name still being typed is held for a
chunk, so raw TeX never shows. Only text that grows while mounted is
affected; a finished reply renders as before.useDollarSignsForLatex, a $$ display formula that had not closed yet
was read as an empty $…$ pair: it rendered as nothing and its body showed
as prose until the closing $$ arrived.inlineComponents / components whose regex uses unicode: true
(for example \p{L}) now match. The flag was dropped when the patterns were
combined, so such components silently matched nothing (#114).GptMarkdown no longer throws inside IntrinsicWidth or IntrinsicHeight
— the usual way to shrink-wrap a chat bubble — when the message holds a
table or a horizontal rule (#107). Normal layout is unchanged. Still open on
the legacy pipeline (inlineComponents / components) in debug builds,
where Flutter asserts on the dry baseline of block placeholders.Nothing has been removed. Existing integrations continue to work, and deprecated APIs remain supported until 2.0.0.
Our biggest release yet.
gpt_markdown 1.3.0 introduces a new rendering pipeline for fast,
production-grade AI output. Parsing is 3–9× faster than the legacy parser,
whole-frame rendering is up to 2× faster, and streaming performance stays
flat as responses grow.
At 12 KB, per-chunk streaming is 31× faster with GptMarkdown and 74×
faster with SliverGptMarkdown compared with 1.2.1. See the
benchmarks.
Nothing has been removed. Existing integrations continue to work, and deprecated APIs remain supported until 2.0.0.
plusparse — a new single-pass parser, enabled by default.SliverGptMarkdown — lazy rendering for long documents and streaming
responses.maxLines now limits the complete document, and paragraph line breaks are
preserved.The legacy regex parser remains fully functional, with removal planned for 2.0.0.
The incremental argument is no longer needed. Replace components and
inlineComponents with blockComponents, inlinePatterns, or
inlineDirectives.
See MIGRATION.md for complete upgrade guidance.
Radio list markers use RadioGroup instead of Radio.groupValue and Radio.onChanged, which Flutter deprecated in 3.32. No visual or behavioural change —…
RadioGroup instead of Radio.groupValue and
Radio.onChanged, which Flutter deprecated in 3.32. No visual or behavioural
change — the marker looks and responds exactly as before.RadioGroup was added in.InlinePattern.delimited for tokens that open and close, such as :emoji:,
::spoiler:: or {{token}} — the counterpart to InlinePattern.prefixed,
which cannot express a closing delimiter. The token name is the named group
name. See docs/inline-syntax.md.Deprecated highlightBuilder. Use inlineCodeStyle for appearance, or inlineCodeBuilder for full control. It still works, is now aligned on the text bas…
Upgrading from 1.1.x? See MIGRATION.md.
highlightBuilder. Use inlineCodeStyle for appearance, or
inlineCodeBuilder for full control. It still works, is now aligned on the
text baseline, and will be removed in 2.0.0.inlineCodeStyle.autolink: false, and remove any
pre-processor that rewrites bare URLs.ImageMd, TableMd and ATagMd no longer render inside link labels. Custom
components opt out with scopes.^(?:pattern)$, so a pattern containing a
top-level | no longer claims matches it does not cover.find.byType(RichText) need
find.byWidgetPredicate((w) => w is RichText) — some paragraphs render as a
RichText subclass.GptMarkdown(text, animation: GptMarkdownAnimation.fade, isStreaming: true).
Only the part of the reply that can still change is rebuilt, so the cost per
token stays flat as the reply grows. The reveal keeps up with a fast model,
fast-forwards when isStreaming turns false, and honours reduced motion.
See docs/streaming.md.GptMarkdownStyleSheet with twelve per-component style classes, settable per
widget or app-wide on GptMarkdownThemeData. Unset fields keep the previous
defaults.blockQuoteBuilder, headingBuilder,
checkboxBuilder, radioOptionBuilder, hrBuilder.onCheckboxChanged, onCodeCopy, onImageTap, onSourceTagTap.InlinePattern for app-specific inline syntax such as @mention,
#channel and :emoji:, with InlinePattern.prefixed for the common case.MarkdownScope and MarkdownComponent.scopes — components declare which
nesting contexts they render in.autolinkSchemes for app schemes.GptMarkdownConfig and the builder typedefs are exported from the main
import.WidgetSpan reserved up to 39x
the space they needed at a 2x system font setting. Every component now scales
proportionally.GptMarkdownConfig.isSame ignored several fields, so runtime changes to
components, inline patterns and styles did nothing.GptMarkdownConfig.getRich returns Widget instead of Text.fixed consecutive links separated by single newlines not redering
fixed consecutive links separated by single newlines not redering
Resolved deprecated radio API usage by wrapping Radio with RadioGroup in custom radio rendering.
playground.dart as a dedicated playground entry and improved demo content for links, lists, blockquotes, tables, and LaTeX.1.1.7, set homepage to gptmarkdown.com, and added repository + issue_tracker.flutter_math_fork to ^0.7.4 for Flutter 3.35+ compatibility.dotAll in BoldMd.LinkSpanBuilder.imageBuilder to receive parsed size metadata from markdown image syntax (context, imageUrl, width, height).Radio<bool> with RadioGroup in custom radio rendering.Added hrLinePadding to GptMarkdownThemeData (default EdgeInsets.zero), wired through the public factory, copyWith, and lerp, for padding around horizo
hrLinePadding to GptMarkdownThemeData (default EdgeInsets.zero), wired through the public factory, copyWith, and lerp, for padding around horizontal rules and the optional line after # headings.autoAddDividerLineAfterH1 to GptMarkdownThemeData (default true), with the same factory / copyWith / lerp support, so the extra divider after a level-1 heading can be toggled from theme data.padding to CustomDivider (default EdgeInsets.zero); the render object lays out and paints the stroke inside those insets and uses the constrained width when drawing.GptMarkdownThemeData.isSame to compare every field on the theme data type.HTag and HrLine use hrLineColor, hrLinePadding, and autoAddDividerLineAfterH1 from GptMarkdownTheme.of(context) for the horizontal line widgets.Fixed block latex markdown syntax.
🔗 Fixed vertical alignment issue with link text rendering
trim() from CodeBlockMd to preserve necessary whitespace in code blocks (#99)Updated to align with Flutter 3.35 by resolving the deprecations of Radio.groupValue and Radio.onChanged.
RadioGroup widget for managing radio buttons.Radio.groupValue and Radio.onChanged.📊 Fixed table column alignment support
tableBuilder parameter to customize table rendering🖼️ Fixed issue where images wrapped in links (e.g. [](url)) were not rendering properly
[](url)) were not rendering properly (#72)[a](url)[b](url)) (#34)Changed onLinkTab to onLinkTap fixed issues of newLine issues.
onLinkTab to onLinkTap fixed issues of newLine issues.Fix: support balanced parentheses in image and link URLs. #68
* Performance improvements.
dollarSignForLatex is added and by default it is false.
Bloc components rendering inside table.
Baseline of bloc type component is fixed.
IndentMd and BlockQuote fixed.Table syntax improved.* Performance improvements.
Added orderedListBuilder and unOrderedListBuilder parameters to customize list rendering.
orderedListBuilder and unOrderedListBuilder parameters to customize list rendering.* Fixed issue #49.
* imageBuilder parameter added.
* dart format.
pubspec flutter version updated.
Fixed issues with flutter 3.29.0.
Extra lines inside block latex removed and $$..$$ syntax works with \(..\) syntax.
closed parameter added to codeBuilder.
closed parameter added to codeBuilder._italic_ and >Indentation syntax added.
_italic_ and >Indentation syntax added.linkBuilder and highlightBuilder added f45132b.Fixed the order of inline and block latex in markdown.
Fixing latex issue for block syntax.
Multiline latex syntax bug fix.
* Readme updated.
Documentation improved in readme and example.
ATag syntax fixedTexMarkdown is renamed to GptMarkdown.
TexMarkdown is renamed to GptMarkdown.h1 to h6 style added to GptMarkdownThemeData class.hrLineThickness value added to GptMarkdownThemeData class.hrLineColor Color added to GptMarkdownThemeData class.linkColor Color added to GptMarkdownThemeData class.linkHoverColor Color added to GptMarkdownThemeData class.SelectableAdapter Widget added to make any widget selectable.CodeBlock is moved out of gpt_markdown.dart library.
CodeBlock is moved out of gpt_markdown.dart library.Changed withOpacity to withAlpha in theme.dart for highlightColor.
withOpacity to withAlpha in theme.dart for highlightColor.GptMarkdownTheme and GptMarkdownThemeData class moved to gpt_markdown.dart library.
GptMarkdownTheme and GptMarkdownThemeData class moved to gpt_markdown.dart library.Fixed the indentation syntex of regex.
GptMarkdownTheme and GptMarkdownThemeData classes added.
GptMarkdownTheme and GptMarkdownThemeData classes added.* components are now selectable.
* source config added.
unordered list bullet color fixed.
* ordered list color fixed.
* overflow perameter added.
overflow perameter added.Some color changes and highlighted text style changed.
* [source] format added.
[source] format added.* maxLines Parameter added.
maxLines Parameter added.textStyle Parameter added to the latexBuilder function.
textStyle Parameter added to the latexBuilder function.* Fixed hitTest essue.
Inline Latex Builder added and Link are now Clickable and Latex Error Color changed to null for debug mode.
Inline Latex Builder added and Link are now Clickable and Latex Error Color changed to null for debug mode.
textScaleFector is removed and textScaler added
codeBuilder method added [#6], and maked the table scrollable.
New syntex added for codes and highlight.
* $$_$$ syntex fixes.
$$_$$ syntex fixes.$_$ syntex added for latex with a gard condition for \(_\).
$_$ syntex added for latex with a gard condition for \(_\).$_$ syntex added for latex with a gard condition for \(_\).
$_$ syntex added for latex with a gard condition for \(_\).Fixed textScaler problem by removeing that and added textScaleFector.
* Latex table workarround added.
Customizable latex and workarround added.
Your coding agent can read these notes before it upgrades. Set up the MCP server →