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

Reading by destination is one way in. If you already know which construct you are worried about, the same evidence indexed by construct answers it in one page per construct instead of five records.

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