The Markdown structure is rendered and placed in the rich-text handoff without an intentional format conversion.
20 Markdown cases, with the handoff made explicit.
This report documents what StackDraft preserves, converts to an asset, flags before publishing, or deliberately leaves for final Substack and email review.
The source remains editable in Markdown, while the publishing copy receives a static image asset.
StackDraft detects a pattern that is likely to reduce portability, accessibility, or email readability.
StackDraft prepares the content but does not claim universal behavior after destination sanitization.
This tests preparation behavior—not every inbox on the internet.
The unit of analysis is the publishing handoff: Markdown source enters StackDraft, passes through its current renderer, asset conversion, clipboard preparation, and compatibility-warning paths, then receives one of four result labels.
“Preserved” does not mean every destination will retain every pixel. Substack and email clients control final sanitization and presentation. Cases whose outcome cannot be asserted from StackDraft’s own behavior are labeled “Destination review” instead of being counted as successful.
Reproduce the report in four steps.
- 01
Load the fixture
Open the public Markdown suite in the current StackDraft production build.
- 02
Inspect preparation
Compare the source, preview, generated assets, and publishing-check output.
- 03
Exercise the handoff
Use the separate title and body copy actions and inspect the prepared destination draft.
- 04
Verify the destination
Send a Substack test email for every case marked Destination review.
Complete compatibility matrix
Every label describes current StackDraft behavior and a specific publishing handoff.
| Case | Markdown input | StackDraft result | Publishing handoff | Status |
|---|---|---|---|---|
| Single H1 titleClipboard title/body separation path | # A practical post title | Rendered as the document H1 and detected as the publication title. | Copy title writes plain text; Copy body removes the first H1 to avoid a duplicate title. | Preserved |
| H2 and H3 headingsMarkdown renderer and heading-level rule | ## Main section
### Supporting section | Rendered as structured H2 and H3 elements. | Copied as rich-text headings; skipped levels trigger a separate warning. | Preserved |
| Bold and italic emphasisMarkdown renderer output | Use **bold** for a label and *italic* for light emphasis. | Rendered as semantic strong and emphasis elements. | Placed on the clipboard as rich inline formatting with a plain-text fallback. | Preserved |
| Descriptive linksMarkdown renderer output | Read the [publishing guide](https://www.stackdraft.app/guides). | Rendered as an anchor with its destination intact. | Copied as a rich-text link; the final public destination still needs a click test. | Preserved |
| Bulleted and numbered listsMarkdown renderer output | 1. Draft
2. Prepare
3. Verify | Rendered as structured ordered or unordered list markup. | Copied as rich lists; deep nesting should be checked at phone width. | Preserved |
| BlockquotesMarkdown renderer output | > A concise quotation or callout. | Rendered as a semantic blockquote. | Copied as rich text rather than spacing-based indentation. | Preserved |
| Fenced code with a languageFenced-code renderer and syntax highlighting path | ```ts
const ready = true
``` | Rendered as a preformatted code block with syntax classes. | Copied as a grouped code block; final line wrapping remains a destination check. | Preserved |
| GFM strikethroughGitHub Flavored Markdown renderer | The ~~old step~~ revised step. | Rendered using GitHub Flavored Markdown strikethrough. | Copied as semantic deleted text in the rich body. | Preserved |
| Horizontal dividerMarkdown renderer output | --- | Rendered as a horizontal rule. | Copied as a structural divider rather than a row of literal hyphens. | Preserved |
| Compact GFM tableTable-to-canvas clipboard conversion path | | Plan | Price |
| --- | ---: |
| Free | $0 | | Rendered as a table in the preview. | Copy body turns the table into a high-resolution PNG for a predictable email layout. | Converted to asset |
| Mermaid diagramMermaid render and asset-generation path | ```mermaid
flowchart LR
Draft --> Review
``` | Detected and rendered locally as a generated diagram asset. | Prepared as PNG when browser rasterization succeeds, with an SVG fallback warning otherwise. | Converted to asset |
| Table wider than five columnswide-table publishing rule | A GFM table containing six or more columns. | Previewed normally and identified as likely to render poorly in email. | Converted to an image, but the writer is told to simplify or split it first. | Flagged |
| Local image pathlocal-image publishing rule |  | Rendered when locally resolvable and flagged as unavailable after paste. | Writer must upload the image or replace the path with an appropriate public URL. | Flagged |
| SVG imagesvg-image publishing rule |  | Rendered in preview and identified as an email-compatibility risk. | Writer is advised to use PNG or JPEG for a more predictable email asset. | Flagged |
| Image without alt textimage-alt publishing rule |  | Rendered and flagged for missing alternative text. | Writer is prompted to add a useful description before publishing. | Flagged |
| Raw HTMLHTML sanitizer and raw-html publishing rule | <div class="custom-layout">Content</div> | Sanitized through the allowed HTML schema and flagged as destination-sensitive. | Writer is advised to replace layout HTML with portable Markdown structures. | Flagged |
| Skipped heading levelheading-level publishing rule | ## Section
#### Detail | Rendered and flagged because the outline jumps from H2 to H4. | Writer is prompted to restore a logical heading hierarchy. | Flagged |
| Code block over 80 lineslong-code publishing rule | A fenced code block containing more than 80 lines. | Rendered and flagged as too long for comfortable email reading. | Writer is advised to trim the example or link to the complete source. | Flagged |
| KaTeX mathKaTeX render path; destination not asserted | $$\mathrm{CTR} = \frac{clicks}{impressions}$$ | Rendered into KaTeX markup in the preview. | Formula survival depends on destination sanitization and must be checked in the final draft and email. | Destination review |
| Remote PNG or JPEG with alt textImage renderer path; destination not asserted |  | Rendered with its URL and alternative text intact. | Availability, upload behavior, dimensions, and final alt text must be confirmed in Substack. | Destination review |
StackDraft’s advantage is not “supports everything.”
The useful advantage is that different content receives different treatment. Portable structures stay structured, fragile visual blocks become assets, known risks trigger explicit warnings, and uncertain destination behavior stays visible as a review task.
- Basic article structure remains editable rich text.
- Tables and Mermaid diagrams receive intentional asset conversion.
- Seven common publishing risks are surfaced before paste.
- Math and remote images are not given an unsupported universal-pass claim.
Platform facts remain linked to primary documentation.
Use the same fixture in the live app.
Evidence is more useful when readers can challenge it, rerun it, and report a correction.