md2rich

tweet.md vs md2rich: Markdown X Round-Trip 2026

tweet.md converts X posts to clean Markdown; md2rich renders Markdown as rich text for X Articles. The Markdown-to-X round-trip writers need in 2026.

In July 2026 the social-writing toolbox has two anchors: tweet.md for converting X posts into clean Markdown, and md2rich for converting Markdown into rich text that X Articles, LinkedIn, Medium, Substack, and Notion all accept. They are not competitors — they are two halves of the same round-trip. The mental model is simple. Markdown is the canonical source. tweet.md gets Markdown out of X. md2rich puts Markdown into X (and everywhere else).

Yesterday's piece covered the inbound leg: archiving public X content as Markdown for AI ingestion and durable storage. Today's piece covers the outbound leg: writing in Markdown and publishing as formatted X Articles, without losing headings, lists, code blocks, or inline emphasis in the paste. Together they form the loop most Markdown-first writers have been assembling by hand since Typora's paid pivot in 2024.

Why the round-trip exists at all

X's own editor renders Markdown-like syntax (asterisks for bold, underscores for italic) but it does not respect headings, code blocks, ordered/unordered lists, or blockquotes the way a real Markdown parser does. X Articles handles longer posts but its own composer is a stripped-down WYSIWYG, not a Markdown editor. If you draft a 2,000-word piece in Obsidian with `#` headings, `>` blockquotes, and triple-backtick code fences, the raw text pasted into X Articles collapses into a wall of plain prose. The formatting that took you 20 minutes to set up disappears in the paste.

tweet.md solves the reverse problem. If you want to take an X thread and put it into a Markdown file (for a knowledge base, for an LLM context window, for a Substack repost), tweet.md's hosted converter parses the X content into proper Markdown with code fences preserved, author metadata optional, and the thread structure flattened into a single document. The piece I wrote on the LLM-archive stack on July 20 walks through the inbound workflow in detail.

md2rich solves the outbound problem. You already have the Markdown (from Obsidian, from a draft in VS Code, from a tweet.md export of your own old thread). You want it on X Articles, on LinkedIn long-form, on Medium, on Substack — with the headings preserved as headings, the lists preserved as lists, the code blocks preserved as monospace blocks. md2rich runs entirely in your browser, converts the Markdown to the rich-text clipboard format those editors accept, and gives you a Copy button. Paste, and the formatting is there.

The round-trip, step by step

Here is the workflow in 5 steps, the way an LLM-archive-curious writer would actually run it in July 2026.

Step 1 — Identify a thread worth archiving or republishing

Open the X post in your browser. Note the URL. Replace x.com with tweet.md in the address bar. Hit enter. tweet.md returns the post (or thread, or X Article, or profile) as clean Markdown. Free for the demo corpus; paid credits for your own posts.

Step 2 — Edit the Markdown locally

Save the result as my-thread.md in your notes folder. Open it in Obsidian, VS Code, or whatever you draft in. Add an intro paragraph, fix a typo, expand a section that needed more context, drop a footnote. This is the step the platform editors never let you do — and it is the step where the round-trip becomes more valuable than the original post.

Step 3 — Push through md2rich for the destination

Open md2rich. Paste the edited Markdown into the left panel. The right panel shows the rendered preview. Click Copy as Rich Text. The clipboard now holds rich text — not Markdown, not plain text — so the destination editor sees actual headings, lists, and code blocks rather than literal # characters.

Step 4 — Paste into the destination platform

Open LinkedIn, Medium, Substack, Notion, or X Articles. Paste. The formatting survives. For X Articles specifically, this is the only reliable way to get a properly-formatted long-form post without composing entirely inside X's stripped-down editor.

Step 5 — Archive the canonical Markdown

Keep the my-thread.md file. That is the source of truth. The LinkedIn post, the Medium cross-post, the X Article republish — all of those are renders. If a platform changes its editor, deprecates its API, or shuts down entirely, the .md file is still readable, still diff-able, still usable as LLM input. Markdown is the durable layer; the platforms are the ephemeral render targets.

A worked example: code block that survives the round-trip

Consider this Markdown source:

## Why md2rich + tweet.md

- **Inbound**: tweet.md parses X posts into clean Markdown
- **Outbound**: md2rich renders Markdown into rich text for X Articles

```python
# A round-trip in 4 lines
md = tweet_md.fetch(url)
edits = local_editor.open(md).edit()
md2rich.copy_rich(edits).paste_to("X Articles")
```

Pasted raw into X Articles, this collapses to a wall of text with literal backticks and asterisks. Pushed through md2rich first, the heading becomes a heading, the bullet list becomes a bullet list, and the code block becomes a monospace block. The reader sees structured content. The writer did not have to retype anything in X's editor.

What changes when you stop using the platform editor for drafting

Three things, in order of how much they matter to me.

You can draft offline. X's editor requires a network connection. md2rich does not. Your Obsidian vault works on a plane. Your VS Code works in a coffee shop with bad wifi. The Markdown draft is the artifact; the platform is the renderer.

You get version control for free. git diff my-thread.md shows you what changed between drafts. X's draft history shows you what you pasted, but not what you intended. A pre-paste Markdown diff is the kind of artifact platforms will never ship, because they would rather you start a fresh draft in their editor.

You can repurpose the same draft across platforms without rewriting. The piece you publish as an X Article on Monday can become a LinkedIn long-form post on Tuesday, a Medium cross-post on Wednesday, and a Substack newsletter on Friday. Each platform gets a render; you wrote the source once.

FAQ

What is the Markdown-to-X round-trip?

It is two directions of the same workflow. Outbound: you draft a long-form post in Markdown in any editor (Obsidian, VS Code, Typora, a plain .md file) and need it published to X Articles with the formatting intact. Inbound: you want to capture an X thread, an X Article, or a Bluesky long-form post as clean Markdown for archiving, for LLM ingestion, or for reposting on a different surface. The outbound leg is what md2rich solves. The inbound leg is what tweet.md solves. Treating them as a round-trip is a cleaner mental model than treating them as two separate tools.

Is tweet.md free in 2026?

Partially. tweet.md ships a no-charge demo corpus (one post, one thread, one X Article, one profile) that you can fetch as Markdown for free. Converting your own posts and threads costs credits: $5 for 250 credits, $19 for 1,100, and $49 for 3,200. One post costs 1 credit; adding author metadata costs 2 more credits per unique author. For a writer who just wants to round-trip a few of their own threads into Markdown for archival, the $5 tier is enough. For LLM-training data pipelines that need to ingest thousands of posts, the $49 tier is the practical entry point.

Does md2rich preserve Markdown formatting when pasting into X Articles?

Yes, in the parts X Articles actually supports. md2rich converts Markdown to the rich-text clipboard format that X Articles, LinkedIn, Medium, Substack, and Notion all accept. Headings, bold, italic, ordered and unordered lists, inline code, and code blocks (with monospace) survive the paste. Things X Articles does not natively render (images embedded in code blocks, raw HTML, LaTeX math) get cleaned or dropped. The published result looks like normal X Article formatting rather than a Markdown dump, which is what you want for readers on the platform.

Can I use tweet.md and md2rich together in one workflow?

That is the natural composition. Take an X thread you wrote last year, fetch it as Markdown via tweet.md (replace x.com with tweet.md in the URL, or use the npx skill), edit the result in your preferred Markdown editor (Obsidian, VS Code, whatever), add a section that did not exist on the original thread, and then push the cleaned-up Markdown through md2rich to republish it on a different platform (LinkedIn long-form, Medium, Substack, your own blog). One direction uses tweet.md, the other uses md2rich, and the Markdown file is the shared canonical source. You stop treating each social platform as a walled garden and start treating the .md as the truth.

Why does the round-trip matter if X has its own editor?

X's editor is fine for casual posting, but it has three structural limits. First, you cannot write in it offline. Second, you cannot version your drafts (no git diff, no draft history beyond the platform's own). Third, you cannot reuse the same draft across platforms without rewriting. By treating Markdown as the canonical source and converting at the edges (md2rich on the way out, tweet.md on the way in), you get offline drafting, version control, and platform portability for free. The X editor becomes a thin renderer for a draft that already exists in a .md file somewhere you control.

Is md2rich client-side? Does my Markdown get uploaded?

Yes to client-side, no to uploading. md2rich runs entirely in your browser. When you paste Markdown into the left panel and click Copy as Rich Text, the conversion happens in JavaScript on your device. The Markdown text never touches a server. This is the opposite of tweet.md, which is a hosted service (your requests go through tweet.md's infrastructure to fetch the X content). For drafts you do not want to leak to a third party (unpublished work, confidential sources, internal analysis), md2rich is the right tool for the outbound leg. For public posts you are trying to archive, tweet.md's hosted model is fine because the content is already public.

Conclusion: the round-trip is the point

tweet.md and md2rich are not competing tools. They are the input and output halves of the same workflow. tweet.md parses X content into Markdown. md2rich renders Markdown into the rich text every other platform accepts. Markdown is the canonical source; social platforms are render targets. Once you internalize that mental model, you stop thinking about which platform "wins" your long-form writing and start thinking about which surface gets which render this week.

The pieces are all in place in July 2026. tweet.md has paid tiers so you can ingest your own X content at scale. md2rich has a stable client-side conversion path so the outbound leg stays private. The only piece you have to assemble yourself is the workflow: choose your Markdown editor, choose your archive location, and commit to keeping the .md file as the truth.

Try md2rich — client-side Markdown to rich text

Paste your Markdown into the editor on the left; copy the rendered rich text from the right into X Articles, LinkedIn, Medium, Substack, Notion, or anywhere else that does not render Markdown natively. Your draft never leaves your browser.

Open md2rich →