Markdown Preflight

How these tests are run

Every compatibility claim on this site comes from pasting one versioned fixture into a real editor, on a stated date, with a screenshot saved. Nothing is inferred from platform marketing or documentation alone. If a construct was not tested, it is labeled unknown and stays that way until someone tests it.

Evidence levels

Verified
Reproduced in the live editor with a saved screenshot. Only this level supports wording like "we tested".
Documented, not tested
Stated by current primary platform documentation but not reproduced here. Always described as the platform's claim.
Unknown
No current evidence supports a reliable answer.

The protocol

Platform Test Protocol v1

Purpose

Produce reproducible evidence for every public compatibility claim. Use only controlled unpublished drafts and the fixture at docs/research/fixtures/markdown-portability-test-v1.md.

Evidence levels

  • V — Verified in the current platform editor with saved screenshot or exported evidence.
  • D — Documented by a primary platform source but not yet reproduced.
  • C — Supported only by a current community/competitor report.
  • U — Unknown or not tested.
  • N/A — The destination does not have the relevant rendering surface.

Only V can support wording such as “we tested” or “works.” D must be described as platform documentation, never as our own result.

Test modes

Run each fixture through all modes the destination allows:

  1. raw-paste — Copy Markdown source and paste it directly.
  2. rich-paste — Render Markdown in a trusted local renderer, then paste rich clipboard content.
  3. native-block — Recreate fragile elements with destination-native controls.
  4. web-preview — Inspect the unpublished web preview.
  5. email-preview — Send to a controlled test address and inspect desktop and narrow/mobile presentation.

Safety

  • Never publish the fixture publicly.
  • Never send it to real subscribers.
  • Never alter an existing creator draft.
  • Use a new draft titled Compatibility Test v1 — YYYY-MM-DD.
  • If a platform requires paid activation, record the blocker instead of purchasing without approval.
  • Delete the test draft after evidence is complete unless it is explicitly retained for the next controlled test.

Screenshot naming

<date>-<platform>-<mode>-<case-id>-<viewport>.png

Examples:

  • 2026-08-24-substack-raw-paste-t06-desktop.png
  • 2026-08-24-beehiiv-email-preview-t07-mobile.png

Per-platform test record

Record:

  • platform and visible editor generation/version;
  • account/workspace type;
  • browser and operating system;
  • test date and timezone;
  • fixture commit/version;
  • input mode;
  • result for every case;
  • manual repairs and elapsed time;
  • screenshot path;
  • web-versus-email differences;
  • uncertainty or inconsistent behavior.

Publication rule

Before a result is published, a second visual pass must confirm that the screenshot, matrix cell, page copy and workaround all describe the same behavior.

The fixture

One file, 3,876 characters, covering inline formatting, heading depth, nested and task lists, quotes, dividers, fenced and long-line code, small and wide GFM tables, remote and local images, footnotes, inline and block math, Mermaid, Obsidian syntax, raw HTML, hard breaks, escaping, and Unicode including CJK, Arabic, and emoji. It is versioned, and its length is checked by the test suite so it cannot drift away from the records that cite it.

Read the full fixture source
---
title: Markdown Portability Test v1
description: A reproducible fixture for testing Markdown publishing destinations.
author: Compatibility Lab
tags:
  - markdown
  - publishing
  - compatibility
date: 2026-08-24
---

# Markdown Portability Test v1

This fixture tests common Markdown, technical blocks, newsletter content, and editor-specific syntax. The sentence includes “smart quotes,” an em dash — and Unicode: café, naïve, 中文, العربية, 🚀.

## T01 — Inline formatting

This sentence contains **bold**, *italic*, ***bold italic***, ~~strikethrough~~, `inline code`, and a [public HTTPS link](https://example.com/?utm_source=compatibility-test&utm_medium=fixture).

This sentence contains a [mailto link](mailto:test@example.com), an [anchor link](#t03--lists-and-tasks), and a [relative link](../guides/example-page.md).

## T02 — Heading hierarchy

### Third-level heading

#### Fourth-level heading

##### Fifth-level heading

###### Sixth-level heading

## T03 — Lists and tasks

- First bullet
- Second bullet
  - Nested bullet
    - Third-level bullet
- Final bullet

1. First numbered item
2. Second numbered item
   1. Nested numbered item
   2. Another nested item
3. Final numbered item

- [x] Completed task
- [ ] Open task

## T04 — Quote and divider

> A blockquote with **bold text**, a [link](https://example.com/quote), and a second line.
>
> A second paragraph inside the same quote.

---

## T05 — Code

```js
export function publish(markdown, destination) {
  return { markdown, destination, ready: false };
}
```

```text
This_is_an_intentionally_long_unbroken_line_for_testing_mobile_email_overflow_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789_abcdefghijklmnopqrstuvwxyz
```

## T06 — Small table

| Platform | Markdown document | Native table | Footnotes |
| --- | :---: | :---: | ---: |
| Substack | No | Test | Yes |
| Beehiiv | Test | Yes | Yes |
| Ghost | Yes | Test | Yes |

## T07 — Wide table

| Platform | Headings | Links | Lists | Code | Tables | Math | Footnotes | Local images |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Example | Preserve | Preserve | Preserve | Review wrapping | Review width | Review syntax | Review anchors | Manual upload |

## T08 — Images

![Remote test image with descriptive alt text](https://placehold.co/1200x630/png?text=Remote+Markdown+Image "Remote image title")

![Local relative image that should trigger a warning](./images/local-test.png)

## T09 — Footnotes

This sentence has a short footnote.[^short]

This sentence has a longer footnote.[^long]

[^short]: A short footnote used by the compatibility fixture.

[^long]: A longer footnote with a second paragraph.

    The second paragraph includes `inline code` and a [link](https://example.com/footnote).

## T10 — Math

Inline math: $E = mc^2$.

Block math:

$$
\int_0^1 x^2\,dx = \frac{1}{3}
$$

## T11 — Mermaid

```mermaid
flowchart LR
  M[Markdown source] --> C{Compatibility check}
  C -->|Pass| P[Publish]
  C -->|Degrade| R[Review]
```

## T12 — Obsidian-specific syntax

Wiki link: [[Publishing Notes]]

Aliased wiki link: [[Publishing Notes|publishing workflow]]

Transclusion: ![[Reusable Introduction]]

Callout:

> [!NOTE]
> This is an Obsidian callout that is not part of CommonMark.

Block reference: ^compatibility-block

## T13 — Raw HTML

<details>
<summary>Expandable summary</summary>

Raw HTML content with <mark>highlighting</mark>.

</details>

## T14 — Line breaks and paragraphs

This line ends with two spaces.  
This line should remain in the same paragraph as a hard break.

This is a new paragraph after one blank line.


This paragraph follows two blank lines.

## T15 — Escaping and literal characters

Escaped Markdown: \*not italic\*, \# not a heading, and \[not a link\].

Literal symbols: < > & © ™ € $ | { } [ ] ( ).

## T16 — Final link check

[Return to the heading test](#t02--heading-hierarchy).

Retest policy

What this method cannot tell you

Back to the five-platform comparison