Markdown Preflight

Research / Evidence

Substack test record

Tested surface
Substack web post editor
Test date
Tested 2026-08-24.
Fixture
markdown-portability-test-v1
Confidence
verified

This page reproduces the dated record exactly as it was written on 2026-08-24. A record is never edited to match later behavior. When a platform changes, a new dated record is added and this one is kept.

Substack Test Record — 2026-08-24

Verdict

Substack does not parse a pasted Markdown document. A browser-rendered rich paste is materially better and preserves ordinary article structure, but it is not publication-ready for tables, Markdown footnotes, math, Mermaid, local images, Obsidian syntax, or expandable HTML. Substack's native footnote and LaTeX controls work in an unpublished web/mobile preview, but rich paste does not map Markdown syntax to those native components.

The best first-version handoff is therefore rich HTML plus destination-specific warnings and repairs. Calling the output “one-click ready” would be inaccurate unless the product also converts fragile constructs into Substack-native blocks or safe replacements.

Environment and method

  • Publication: temporary test publication suke (sukejusu.substack.com).
  • Drafts: three new controlled, unpublished test drafts; no existing creator content was changed.
  • Fixture: docs/research/fixtures/markdown-portability-test-v1.md (3,876 characters at test time).
  • Raw mode: fixture dispatched to the editor as text/plain.
  • Rich mode: fixture rendered by Marked 16.2.1 (gfm: true, breaks: false) and dispatched with both text/html and text/plain clipboard payloads.
  • Native mode: Substack editor controls were used to insert one footnote and one LaTeX block.
  • Preview: unpublished mobile web preview only. No test email was sent and nothing was published.

Mode-level result

Mode Result Measured evidence
Raw Markdown paste Fail for formatting 3,915 text characters became 102 paragraphs; 0 headings, lists, blockquotes, code blocks, tables, images, links, or dividers
Rich HTML paste Partial 1 H1, 17 H2, H3–H6, 12 list items, 2 blockquotes, 4 code blocks, 1 remote image and 7 links survived; 0 tables survived
Native blocks Pass for tested footnote and block LaTeX Both rendered in saved mobile preview after autosave
Email preview Not tested Sending email was intentionally outside this controlled test

Raw Markdown paste

Raw paste retained readable source text but treated Markdown punctuation as literal content. This verifies the platform-level claim that full Markdown documents are not accepted by the editor.

Case Result Repair required Evidence
T01 inline formatting and links Fail Recreate all formatting and links top
T02 heading hierarchy Fail Recreate headings top
T03 lists and tasks Fail Recreate list structure and task state top
T04 quote and divider Fail Recreate native quote/divider top
T05 fenced code Fail Recreate code blocks footnotes/math/code region
T06–T07 tables Fail Replace or rebuild outside the Markdown paste tables
T08 images Fail Upload images manually tables/images
T09 footnotes Fail Recreate with Substack Footnote control footnotes
T10 math Fail Recreate with Substack LaTeX control footnotes/math
T11 Mermaid Fail Render to an image or preserve as code footnotes/math/code region
T12 Obsidian syntax Fail Resolve wiki links, transclusions and callouts before paste Obsidian
T13 raw HTML Fail Replace with supported native content Obsidian/HTML
T14 paragraphs and hard breaks Partial Paragraph separation remained, but Markdown hard-break intent was not reliably represented Obsidian/HTML
T15 escaping Partial Literal text remained but backslashes were visible raw tail
T16 heading anchor Fail Recreate link after headings exist raw tail

Rich HTML paste

The rich-paste result matched the saved mobile preview; it was not merely an editor-surface artifact.

Case Result Observed behavior Evidence
T01 inline formatting and links Pass with caveat Emphasis, strike, inline code, mailto and HTTPS links survived; relative links were rebound to the Substack publication path top
T02 H1–H6 Pass with caveat H1–H6 survived; YAML front matter was incorrectly rendered as an extra H2 and divider by the generic renderer top
T03 nested lists and tasks Partial Nested ordered/unordered lists survived; task checkboxes degraded to ordinary list items top
T04 quote and divider Pass Quote and divider structure survived top
T05 fenced and long-line code Pass with review Code blocks survived, but long-line mobile/email overflow still needs destination review top
T06–T07 tables Fail Both tables were flattened into unstructured paragraphs; all table elements were removed tables
T08 remote and local images Partial Remote image was imported and rewritten through Substack CDN; local relative image became IMAGE NOT FOUND tables/images
T09 Markdown footnotes Fail Reference syntax remained literal and an indented continuation became a code block; no native footnote nodes were created footnotes
T10 inline/block math Fail $...$ and $$...$$ remained literal; no native LaTeX node was created footnotes/math
T11 Mermaid Partial Source survived as a code block but did not render as a diagram footnotes/math
T12 Obsidian syntax Fail Wiki links and transclusions stayed literal; callout degraded to a quote containing [!NOTE] Obsidian
T13 raw HTML Partial <details> behavior was removed, summary/body became ordinary paragraphs, while <mark> highlighting survived Obsidian/HTML
T14 hard breaks and paragraphs Pass Hard break and paragraph separation survived Obsidian/HTML
T15 escaping and literal characters Pass Escaped Markdown and Unicode rendered as intended Obsidian/HTML
T16 heading anchor Partial Anchor link remained, but Substack rewrote it to the draft/preview URL and generated heading ID preview

Native controls

The current More menu visibly includes Code block, Divider, Footnote and LaTeX, but no table control.

Construct Available Verified result Evidence
Table No visible native control Not applicable More menu
Code block Yes Availability verified; creation not repeated because rich paste already produced code blocks More menu
Footnote Yes Native numbered anchor and footnote content rendered in mobile preview editor, preview
Block LaTeX Yes \\int_0^1 x^2 \\, dx = \\frac{1}{3} rendered through the native MathJax block in mobile preview editor, preview
HTML/embed No general HTML control in More Not tested More menu

Product implications

  1. A plain Markdown-to-rich-text converter handles common prose structure but leaves several high-friction constructs unresolved and is already commoditized.
  2. The differentiated checker must detect front matter, tables, Markdown footnotes, math, Mermaid, local images, relative links and Obsidian constructs before the user pastes.
  3. For Substack, safe automated repairs are: strip front matter, flatten or image-render tables with accessible fallback, upload/resolve images, convert Mermaid to image, and make relative links absolute.
  4. Native footnote and LaTeX conversion may require editor automation or an officially supported integration surface; until verified, the honest output is a repair checklist rather than a “one-click publish” promise.
  5. This single platform test already clears the strategic gate that destination behavior is meaningfully fragmented. Cross-platform demand still requires Beehiiv and preferably Ghost/Kit evidence before product code begins.

Cleanup

The three generated unpublished drafts (raw, rich and native-block tests) were permanently deleted after the screenshots and record were saved. Substack states this deletion cannot be undone. No content was published or emailed.

Screenshots from this test

What this record does not cover

A live result proves the tested surface on the tested date. It does not prove every account tier, editor version, theme, plugin, browser, email client, or API path. The limitations section inside the record above lists what was left untested.

Source record: docs/research/platform-tests/2026-08-24-substack-test-record.md. Back to the five-platform comparisonor the checker.