Why Markdown Breaks Everywhere You Paste It

4 min read
Raw Markdown with visible hashes and asterisks in the input box next to the same text rendered as a clean text card
Left: the characters a post composer would receive. Right: the same content rendered, where a heading is a heading because it is drawn larger.

What you see versus what you copy

In a chat window, ## What actually works is displayed as a heading. What sits on your clipboard, though, depends on how you copied it.

Copy the rendered text and you get the words without the structure — the heading becomes an ordinary line, the list markers disappear, and the nesting flattens. Copy the raw Markdown and you get the structure as literal punctuation: hashes, asterisks, dashes and backticks, all of it visible.

Either way the post composer you paste into is a plain-text field. It has no notion of a heading. So one of the two things is lost every time.

Why platforms do this

It is not an oversight. Rich text in a public feed is an abuse surface — it lets a post imitate system UI, impersonate a verified label, or hide text from moderation while showing something else to readers. Stripping formatting on paste is the cheap defence, and no major platform is going to reverse it.

Some platforms allow a narrow subset — a line break here, a bullet there — but none of them accept the structure that makes a long explanation readable.

The three ways around it

Unicode substitution. Replacing letters with mathematical bold or italic code points so they look bold. It survives the paste, but screen readers announce the code points one by one, and search inside the platform will not match the text. It makes your post inaccessible to gain a visual effect.

Rewriting for plain text. Turning headings into short standalone lines, lists into line-broken sentences, and dropping the rest. This works and costs nothing but time. It is the right answer for a short post.

Rendering to images. Keeping the structure by moving it out of the text field entirely. A heading is a heading because it is drawn larger, not because a hash mark survived. This is what TextCard does, and it is what carousel posts have always quietly been.

A note on accessibility

Images of text are not readable by screen readers. If you publish this way, put the substance of the content in the alt text and in the post caption. A carousel with an empty caption excludes people, and the platforms also rank it lower because there is nothing to index.

Frequently asked questions

Does Instagram support Markdown?

No. The Instagram caption field is plain text, so hashes and asterisks either show up as literal characters or the formatting is dropped entirely. The same is true of X, Threads and most LinkedIn fields.

Why do platforms strip formatting?

Rich text in a public feed is an abuse surface: a post can imitate system UI, fake a verified label, or hide text from moderation. Stripping formatting on paste is the cheap defence, and no major platform is likely to reverse it.

Are Unicode bold characters a good workaround?

No. Mathematical bold and italic code points survive the paste, but screen readers announce them character by character and in-platform search will not match them. You gain a visual effect and lose accessibility and discoverability.

Do text cards hurt reach?

Only if the caption is empty. The words inside an image cannot be indexed, so put the substance in the caption and the alt text — then the post is both readable and findable.

Keep the structure, post the image

Paste the Markdown that the composer would have flattened and download it as a set of readable cards.