md2rich
· Markdown Tooling

Markdown to X Articles: The Complete 2026 Workflow

X Articles is X (formerly Twitter)'s long-form publishing feature for X Premium subscribers. The Import entry point added in December 2024 lets external rich text enter the editor more reliably, but the platform still does not accept Markdown paste directly. Copy a .md file in and you get literal # characters, literal **bold** asterisks, and a code block squashed into one line. The behavior is nearly identical to LinkedIn's.

This guide tests three workarounds that work in 2026: pure client-side, the official WYSIWYG, and a command-line path. The first one gets the most attention because it has not failed once in 3 months of daily use, including two 5,000+ word engineering writeups with 8 code blocks each.

1. Why direct paste fails in X Articles

Start with a typical Markdown long-form snippet:

## Why we migrated the API gateway from Go to Rust

After 4 years on Go, our gateway's latest load test surfaced issues:

- Above 5k QPS, goroutine scheduling overhead became the main bottleneck
- Memory usage was 4x higher than an equivalent Rust implementation
- No native async/await ecosystem, relied on third-party libraries

See the [Cloudflare Pingora](https://github.com/cloudflare/pingora) case:
their Rust rewrite doubled single-host QPS.

Here is the key performance comparison code:

```rust
// simplified gateway entry point
async fn handle(req: Request) -> Result<Response> {
    let route = router.match_path(&req.path)?;
    let upstream = pool.get(route.upstream).await?;
    let resp = upstream.call(req).await?;
    metrics.record(route, resp.status());
    Ok(resp)
}
```

Post-migration p99 latency dropped from 12ms to 4ms.

Paste this Markdown directly into the X Articles editor and you get:

This is a long-standing X Articles limitation. It was broken in 2023, it is still broken in 2026, and the workaround recommended by X staff is to use the Import entry point or the WYSIWYG editor.

2. Option A: md2rich (100% client-side, zero upload)

md2rich (md2rich.com) is a pure-frontend Markdown-to-rich-text converter. All rendering happens inside your browser, and the .md content never leaves your machine. The full flow:

  1. Open md2rich.com
  2. Type or paste Markdown in the left editor
  3. Right pane renders rich text in real time
  4. Click "Copy as Rich Text" (this writes the rendered HTML to the system clipboard)
  5. Switch to X Articles, click ⋯ in the top-left of the editor → Import → Paste
  6. Hit Cmd+V or Ctrl+V to drop the rich text in

Test result on the sample above: the ## becomes a proper X Articles H2 heading, the **bold** is actually bold, the list keeps its indentation, and the rust code block renders with a gray background and monospace font. The output is visually identical to what you'd get from hand-formatting in Word.

Why the client-side route matters

People who post long-form to X Articles often share unreleased product names, internal data, or acquisition-related drafts. Each extra third-party server that touches your draft is one more leak vector. md2rich's pitch is simple: my .md never left the browser. Close the tab and everything is gone, refresh and the page is empty.

Import vs direct paste

X Articles shipped the Import entry point in December 2024, designed specifically to accept external rich text. Content copied from md2rich is more stable when going through Import than when pasted into the main editor body:

Best for

3. Option B: X Articles built-in WYSIWYG (the official way)

X Articles' official editor is a full WYSIWYG with toolbar buttons for B / I / H2 / lists / blockquote / link / image / video / code / poll. If you only write plain text with a few images, the official editor is enough.

Flow: log into X → click Articles in the sidebar → Create in the top right → write directly in the editor.

Real-world issues I hit during testing:

  1. No Markdown mode. You write rich text. To change formatting you click the toolbar, no keyboard shortcuts for batch style changes.
  2. No version control. Drafts live on X's servers, not locally. Switch computers, browsers, or clear cache and you start over. (X does autosave to the cloud, but you cannot pull a draft back down.)
  3. Weak draft export. X Articles added "Export to .md" in October 2025, but the output is hit-or-miss: bold markers sometimes survive, sometimes disappear; list bullets become - but indentation is lost; inner backticks in code blocks occasionally get over-escaped.
  4. No table support. No table button in the toolbar. The Import endpoint does not accept HTML tables either. Long writeups that need data comparison ("X tool vs Y tool vs Z tool") have to be screenshot-and-insert.
  5. Code block size limit. Each X Article caps code-block content at 4,000 characters total; once exceeded, the rest of the code is auto-downgraded to plain paragraphs.

If you are used to WYSIWYG, write non-sensitive content (republished public blog posts), and stay under 2,000 words, the official editor works. For technical long-form or data-comparison content, it falls short.

4. Option C: Pandoc plus system clipboard (CLI)

Pandoc is the Swiss army knife of document conversion. In theory it can turn Markdown into anything. Combined with macOS pbcopy or Linux xclip, you can build a one-liner:

# macOS — convert to HTML fragment and copy to clipboard
pandoc -s post.md --no-highlight | pbcopy

# Linux (needs xclip)
pandoc -s post.md --no-highlight | xclip -selection clipboard

# Windows (needs clip)
pandoc -s post.md --no-highlight | clip

Then go to X Articles editor ⋯ → Import → Paste, hit Cmd+V. Sounds elegant, but there are real pitfalls:

The Pandoc route fits engineers with CI/CD habits who already automate publishing pipelines. It is overkill for casual content creators who post a few times a week.

5. Test: same Markdown across all three

Take a real engineering long-form snippet:

### How we cut production incident response from 25 to 3 minutes

Over the past 6 months we rewrote the entire on-call workflow. Three key changes:

1. Alert classification went from 2 tiers to 4 tiers
2. Runbooks moved from Confluence into the code repository
3. Auto-rollback compressed from 5 minutes to 30 seconds

**Core gains**: average P0 response time dropped from 25 to 3 minutes,
MTTR (Mean Time To Recovery) from 47 to 11 minutes.

Below is the old vs new flow comparison chart (omitted).

Rendered output after paste to X Articles:

Format element md2rich X Articles WYSIWYG Pandoc + Import
### heading ✅ real H3 heading ✅ real H3 (manual click) ✅ real H3 heading
List indentation ✅ all 3 tiers kept ⚠️ 3 tiers flatten to 2 ✅ all 3 tiers kept
Inline code ✅ monospace ✅ monospace ✅ monospace
Multi-line code block ✅ gray-bg mono, <30 lines stable ✅ gray-bg mono, <4000 chars ⚠️ occasionally split
External link [text](url) ✅ real link ✅ real link ✅ real link
Local images ⚠️ upload to X manually ✅ toolbar upload ❌ host first
Tables ❌ need screenshot ❌ unsupported ❌ Import ignores
Time to publish 15 sec 5 min (hand-format) 25 sec
Content uploaded? ❌ no ⚠️ stored in X drafts ❌ no

6. Side-by-side comparison

Quick-decision matrix:

Dimension md2rich X Articles built-in Pandoc + clipboard
Price Free X Premium $8-16/mo Free / open source
Login required No Yes (X Premium) No
Network dependency Offline-capable Online only Offline-capable
Content uploaded? No Stored in X drafts No
Learning curve 0 (open and use) Low (WYSIWYG) High (CLI)
Platform Any browser Web / iOS / Android macOS / Linux / Win
Code block support ✅ <30 lines stable ✅ <4000 chars ⚠️ needs --no-highlight
Images manual upload to X toolbar upload must host first
Tables screenshot needed unsupported Import ignores
Cross-post to Bluesky ✅ same .md source rewrite required ✅ same .md source

7. Which one to pick

If you want to send a Markdown snippet to X Articles in under 5 minutes, with no extra account creation (X Premium is the only required subscription) and no third-party server touching your content, md2rich is the fastest path. It does not try to be a full editor, just renders Markdown to rich text and copies it to your clipboard for the Import endpoint. Technical posts, code walkthroughs, and long tutorials all work.

If you only write sub-1,000-word text-heavy posts with no code blocks and no complex lists, X Articles' built-in WYSIWYG editor is enough. It saves you a tool switch. Caveat: the moment you hit Publish, the source is locked to X's servers, no local copy.

If you are on an engineering team that automates publishing from CI pipelines (e.g. build summaries to a company X Articles feed), the Pandoc + clipboard route is the most flexible. For occasional personal posts, it is too heavy.

After Bluesky launched long-form in May 2026, cross-platform long-form distribution became the new baseline. Write the Markdown source once, post it directly to Bluesky (its blue-post format accepts Markdown), then use md2rich to render-and-paste into X Articles via the Import endpoint. Both sides keep their formatting intact. This combo is the current lowest-friction Markdown → long-form workflow.

Try md2rich: open it, write Markdown on the left, click one button, switch to X Articles, hit ⋯ → Import → Paste, Cmd+V. The whole flow takes under 15 seconds.


Related: Markdown to LinkedIn: The Honest Guide (2026) · How to Publish a Markdown Post to Medium · Files.md: An Open-Source Obsidian Alternative · Why You Should Use a Client-Side Markdown Converter