Skip to main content

Feature support

This page lists which features the library implements, organized by component and by how each feature is enabled.

  • The React Native column is the react-native-enriched-markdown package on iOS and Android. macOS runs the same iOS code with a few documented gaps - see macOS support.
  • The iOS column is the standalone Swift package (0.4.0), and the Android column is the standalone Android library (0.3.0). Both parse through the same C++ core as the React Native package, but neither has a flavor switch or an md4cFlags prop - the per-section notes name their native switches. They ship EnrichedMarkdownText only, so they do not appear in the editor tables. See iOS and Android installation.
  • The Web column is the same package's web build, a plain React renderer that emits semantic HTML. In the editor tables it is the experimental web editor. See the Web support and Web editor guides.

Yes means the feature renders with no extra work beyond the switch named in the section heading. No means it does not render on that target; the per-feature notes say what you get instead.

For the syntax itself see Core concepts; for per-element detail and style properties see the Element structure reference for React Native, iOS or Android. For what is missing and what is being worked on, see the Roadmap.

EnrichedMarkdownText​

The display component - parses a Markdown string and renders it.

CommonMark​

Available by default, no configuration required.

FeatureReact NativeiOSAndroidWeb
HeadingsYesYesYesYes
ParagraphsYesYesYesYes
Bold / italicYesYesYesYes
Inline codeYesYesYesYes
LinksYesYesYesYes
Lists (ordered / unordered)YesYesYesYes
BlockquotesYesYesYesYes
Code blocksYesYesYesYes
Thematic breakYesYesYesYes
ImagesYesYesYesYes

GitHub Flavored Markdown​

In React Native, enabled with flavor="github" - see Markdown flavors. The standalone iOS and Android SDKs have no flavor switch: tables, task lists and strikethrough are always on there.

FeatureReact NativeiOSAndroidWeb
TablesYesYesYesYes
Task listsYesYesYesYes
StrikethroughYesYesYesYes
Admonitions (> [!NOTE])YesYesYesYes
Videos (<video src="url" />)YesNoNoYes

On iOS and Android, admonitions are a parsing switch, off by default: MarkdownParsingOptions(admonitions: true) on iOS and MarkdownOptions(admonitions = true) on Android - see iOS parser extensions and Android parser extensions. On Android, a table nested inside a list item or blockquote is not rendered.

warning

Neither standalone SDK renders videos. iOS drops the <video> block; on Android a <video> block currently prevents the whole document from rendering, so do not feed one to the Android EnrichedMarkdownText.

Two things commonly filed under GFM are not gated by the flavor:

  • Bare-URL autolinks are always parsed in React Native, in both flavors, and on web. On iOS and Android they are the permissiveAutolinks parsing switch, on by default.
  • Videos are promoted from <video> HTML regardless of flavor, so flavor="commonmark" parses them too. On web there is no flavor to set and no build flag to enable: the tag renders in the browser's own <video> player.
note

The web renderer has no flavor prop - tables, task lists, strikethrough and bare-URL autolinking are compiled into the WebAssembly build unconditionally and are always on. Admonitions are different: on web they are a runtime md4cFlags.admonitions flag, on by default and switchable like the inline extensions below.

Inline extensions​

Toggled independently, not by the flavor, and most of them off by default:

  • React Native and web - the md4cFlags prop.
  • iOS - MarkdownParsingOptions(...), passed as the view's options: argument. See Parser extensions.
  • Android - MarkdownOptions(...), passed as the options parameter. See Parser extensions.

Two rows are not parsing switches on any target: strikethrough color is a style property (markdownStyle.strikethrough.color in React Native, the Strikethrough() theme element on iOS, strikethrough { color } on Android), and spoilers are parsed unconditionally - what you configure is the separate spoiler overlay.

FeatureReact NativeiOSAndroidWeb
Underline (_text_)YesYesYesYes
Strikethrough colorYes (iOS only)YesYesYes
Superscript (^text^)YesYesYesYes
Subscript (~text~)YesYesYesYes
Highlight (==text==)YesYesYesYes
Spoilers (||text||)YesYesYesNo

In the React Native package on Android a strikethrough always uses the text color; markdownStyle.strikethrough.color is honored on iOS and on web. The standalone Android SDK does honor strikethrough { color }.

danger

Spoilers are not just unstyled on web - the node and the text inside it are dropped, so a ||secret|| b renders as a b. Do not put content behind a spoiler if the same Markdown is rendered on web. See Web support.

Advanced features​

Each has its own page - under Rich text formatting, or under the React Native Guides when the feature exists only in the React Native package.

FeatureReact NativeiOSAndroidWebLearn more
LaTeX mathYesYesYesYesLaTeX math
MentionsYesNoNoYesMentions
Code-block highlightingYesYesYesNoCode-block highlighting
Markdown streamingYesNoNoNoMarkdown streaming
Link pillsYesNoNoNoLink pills
Link menusYesNoNoNoLink menus

LaTeX math on web needs the optional katex peer dependency; without it the formula falls back to its raw $...$ source. Code-block highlighting on web renders a plain, uncolored <pre><code>. The two streaming props are stripped on web. Link pills are drawn by the native text stack, so on web those links render as ordinary links with the variant's colors; custom link menus are an iOS 17+ feature, and a long press on web is the contextmenu event delivered to onLinkLongPress.

On the standalone SDKs, the advanced features that render are optional add-ons:

  • LaTeX math - on iOS, add the optional EnrichedMarkdownLaTeX product and apply .markdownLaTeX() (see iOS LaTeX math); on Android, add the optional com.swmansion.enriched.markdown:math artifact and register LatexMathPlugin, which turns on parsing and rendering together (see Android LaTeX math).
  • Code-block highlighting - on iOS, add the optional EnrichedMarkdownSyntaxHighlighting product and apply .markdownSyntaxHighlighting() (see Syntax highlighting); on Android, add the optional com.swmansion.enriched.markdown:code-highlight artifact and register CodeHighlightPlugin (see Android code highlighting).
  • Mentions - there is no mention support in either SDK, but mention links written as ordinary Markdown links ([display](url)) still render and are tappable like any other link.

EnrichedMarkdownTextInput​

The editor - produces a Markdown string as the user types.

important

The editor runs on iOS, Android and macOS. Its web build is ExperimentalExperimental: this feature is still taking shape and may get breaking changes, including in nightly releases. and covers less: no Markdown shortcuts, link or mention commands, auto-link detection or markdownStyle.linkVariants. See Web editor.

The editor is a flat inline-formatting surface: it supports inline styles plus block-level headings and lists, but not the container blocks the renderer handles. Code blocks, tables, and blockquotes are intentionally unsupported in the input - for those, render with EnrichedMarkdownText.

CommonMark​

FeatureReact NativeWeb
HeadingsYesYes
Bold / italicYesYes
LinksYesPartial
Lists (ordered / unordered)YesYes
Inline codeNoNo
BlockquotesNoNo
Code blocksNoNo

On web, links that arrive in the Markdown are kept and rendered, but there are no link commands to create or edit one.

GitHub Flavored Markdown​

FeatureReact NativeWeb
StrikethroughYesYes
TablesNoNo
Task listsNoNo

Inline extensions​

Toggled through the editor's toggle* ref methods.

FeatureReact NativeWeb
UnderlineYesYes
Spoiler (||text||)YesYes
Superscript / subscriptNoNo
HighlightNoNo

Advanced features​

FeatureReact NativeWebLearn more
MentionsYesNoMentions

Mentions are inserted as ordinary Markdown links ([display](url)) and styled per URL pattern via linkVariants - there is no dedicated mention token.