Markdown Preflight

Markdown compatibility across five publishing destinations

The same Markdown file behaves differently in every destination, and the differences are not small. On 2026-08-24 one fixture was pasted into five real editors. Beehiiv and WordPress parsed ordinary Markdown into native blocks. Substack ignored Markdown entirely and needed rich HTML instead. X and LinkedIn rendered no formatting at all and treat the draft as plain text with a hard character limit. That is why a single universal export is the wrong shape for this problem.

What each destination wants

Best tested handoff per destination. Fixture markdown-portability-test-v1.
DestinationTested surfaceBest handoffMain constraintLast tested
WordPressWordPress.com desktop Block EditorGutenberg pasteNo character limit; formatting variesTested 2026-08-24.
SubstackSubstack web post editorRich HTML clipboardNo character limit; formatting variesTested 2026-08-24.
BeehiivBeehiiv web Visual EditorClean Markdown pasteNo character limit; formatting variesTested 2026-08-24.
XX web post and thread composerPlain textWeighted characters per post: 280Tested 2026-08-24.
LinkedInLinkedIn desktop web Create post composerPlain textUTF-16 code units per post: 3,000Tested 2026-08-24.

The construct-level matrix

This is the dated matrix as written. Every cell marked verified links to a record and a screenshot. Verified means the behavior was observed, not that the construct passed unchanged.

Compatibility Matrix v1

Legend: V verified, P partially verified, D primary documentation only, C current community/competitor report, U unknown, N/A not applicable.

Every V cell must link to a dated test record and screenshot before publication. V means the behavior was verified, not that the construct passed unchanged.

Case Construct Substack Beehiiv X LinkedIn WordPress Kit Ghost Current note
T01 Inline formatting and links V V V V V U D WordPress converted ordinary inline Markdown to native Gutenberg markup; relative and anchor links still require validation
T02 H1–H6 hierarchy V V V P V U D WordPress preserved H1–H6, but the document H1 did not populate the separate post title
T03 Nested lists and tasks V V V P V U D WordPress preserved nested lists but lost task state in Gutenberg paste; Markdown block displayed literal task markers
T04 Quote and divider V V V P V U D WordPress converted quote and divider syntax into native blocks
T05 Fenced and long-line code V V V P V U D WordPress created code blocks and detected JavaScript; tested long lines could overflow narrow themes
T06 Small GFM table V V V V V U U WordPress Gutenberg and Markdown-block modes both rendered the tested GFM table
T07 Wide table and mobile/email V V V U P U U WordPress created the wide table, but reliable visual mobile evidence remains theme-sensitive and incomplete
T08 Remote and local images V V V P V U D WordPress hotlinked the remote image with alt/title; the local relative image was broken and needs upload
T09 Markdown footnotes V V V U V U D Gutenberg paste left footnotes literal; WordPress.com Markdown block rendered references, notes and backlinks
T10 Inline/block math V V V U V U U Both tested WordPress modes left dollar-delimited math literal; native Math conversion remains untested
T11 Mermaid fence V V V U V U U WordPress preserved Mermaid source as code but did not render a diagram
T12 Obsidian wiki links/callouts/transclusions V V V U V U U WordPress left Obsidian links, transclusion and callout markers literal
T13 Raw HTML/details/mark V V V U V U U Gutenberg flattened Details structure; Markdown block escaped raw HTML
T14 Hard breaks and paragraphs V V V V V U U WordPress preserved the tested hard break and paragraph separation
T15 Escaping and literal characters V V V V V U U WordPress displayed escaped markers literally and encoded unsafe literal symbols in serialized output
T16 Heading anchor link V V V U V U U WordPress retained the anchor href but created no matching heading ID; the link was broken

Documented platform-level facts

Platform Claim Evidence Level
Substack Full Markdown documents are not supported in the post editor https://support.substack.com/hc/en-us/articles/360037463132-Do-you-support-Markdown D
Substack H1–H3, lists, quote, divider, emphasis and link typing shortcuts exist https://support.substack.com/hc/en-us/articles/5582336874132-Can-I-use-shortcuts-in-the-Substack-editor D
Substack Native LaTeX blocks and inline footnotes exist https://on.substack.com/p/product-news-jan-23 D
Beehiiv Visual Editor documents H1–H6, tables, footnotes, code blocks and HTML snippets https://www.beehiiv.com/support/article/31326914767639-options-on-the-compose-page-of-the-post-flow D
X Standard posts use a 280 weighted-character limit; URLs weigh 23 and emoji/CJK normally weigh 2 https://docs.x.com/fundamentals/counting-characters D
X Premium longer posts can contain up to 25,000 characters; web draft/scheduling limitations apply https://help.x.com/en/using-x/types-of-posts D
LinkedIn Standard posts allow up to 3,000 characters; longer material can use the separate article workflow https://www.linkedin.com/help/linkedin/answer/a528176 D
LinkedIn Pasting or typing a URL may generate a link preview https://www.linkedin.com/help/linkedin/answer/a525301 D
LinkedIn The Posts API supports text and several separate media/structured content types https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/posts-api?view=li-lms-2026-04 D
WordPress.com The Markdown block follows CommonMark, requires Markdown to be enabled and retains source Markdown for later editing https://wordpress.com/support/wordpress-editor/blocks/markdown-block/ D
WordPress The Posts REST endpoint creates drafts/published posts and accepts a content field https://developer.wordpress.org/rest-api/reference/posts/ D
WordPress Media uploads use a separate REST endpoint with alt-text, caption and description fields https://developer.wordpress.org/rest-api/reference/media/ D
WordPress Core native footnotes were introduced in WordPress 6.3 https://wordpress.org/documentation/article/footnotes-block/ D
Ghost Ghost parses Markdown and supports a Markdown card with footnotes https://ghost.org/help/using-markdown/ D

Verified Substack mode summary

Mode Outcome Test record
Raw Markdown paste Formatting failed across the fixture; syntax stayed literal 2026-08-24 record
Marked 16.2.1 rich paste Ordinary structure mostly survived; tables, footnotes, math, Mermaid, local images and Obsidian constructs required repair 2026-08-24 record
Native Footnote and LaTeX Both rendered in saved mobile preview 2026-08-24 record

Verified Beehiiv mode summary

Mode Outcome Test record
Raw Markdown paste Preferred: Beehiiv parsed ordinary Markdown and GFM tables into native blocks; fragile constructs still require repairs 2026-08-24 record
Marked 16.2.1 rich paste Ordinary structure survived, but front matter and task state regressed relative to raw paste 2026-08-24 record
Native Footnotes and HTML snippet Both rendered in unpublished email and web previews; no visible math control 2026-08-24 record

Verified X mode summary

Mode Outcome Test record
Raw Markdown Markdown syntax remained literal; line breaks survived and the URL substring was detected 2026-08-24 record
Cleaned plain text Preferred: readable paragraphs, bullets, visible URL and labels without Markdown residue 2026-08-24 record
Standard post count 280 ASCII accepted; 281 rejected; long URL weighted as 23; emoji weighted as 2 2026-08-24 record
Native thread composer Add post created a second editor and Post all action; nothing was submitted 2026-08-24 record

Verified LinkedIn mode summary

Mode Outcome Test record
Raw Markdown Markdown syntax remained literal; Markdown links did not generate a preview 2026-08-24 record
Cleaned plain text Preferred: paragraphs and bullets stayed readable; the bare URL generated LinkedIn's preview card 2026-08-24 record
Standard post count 3,000 ASCII accepted; 3,001 rejected; full URL length counted; tested emoji consumed two UTF-16 units 2026-08-24 record
Separate article workflow Visible from the feed and documented for longer content; its editor was not tested in this pass 2026-08-24 record

Verified WordPress mode summary

Mode Outcome Test record
Gutenberg raw Markdown paste Strong preferred clipboard mode: ordinary Markdown became editable native blocks; front matter, title, tasks, local media and specialized syntax need repairs 2026-08-24 record
Saved Gutenberg preview Confirmed semantic structure, remote-image hotlinking, broken local media, literal footnotes/math/Obsidian and missing heading IDs 2026-08-24 record
WordPress.com/Jetpack Markdown block Source-preserving optional mode: rendered tables and footnotes but not math, Mermaid diagrams, raw HTML or Obsidian syntax 2026-08-24 record
REST publisher Official Posts and Media endpoints support a future authenticated draft-first flow; not live-tested 2026-08-24 record

How to read these results

Next