all2md vs md2rich: Markdown Converter Compared (2026)
A reader asked, reasonably, "I see all2md trending on Hacker News — is it a better md2rich?" The honest answer is no, because they point at opposite ends of the same Markdown pipeline. all2md turns existing documents (PDF, DOCX, PPTX, HTML, email, EPUB, and 40+ more) into clean Markdown for AI / RAG pipelines, with a CLI, a Python API, and a built-in MCP server. md2rich goes the other way — it takes Markdown you have already written and converts it into the rich-text HTML that LinkedIn, X Articles, Medium, Notion, and Substack accept on paste, in the browser, with zero install. This guide compares the two side by side, shows where each one shines, and explains why the natural workflow uses both together rather than picking one.
What all2md actually does
all2md is a Python package by Thomas Villani (repo first published 2025-10-10, MIT-licensed, 19 stars and 4 forks on GitHub as of July 17 2026 — early days for a tool with this much surface area). The value proposition is concrete: read any of 40+ input formats through a single AST-based pipeline, write clean Markdown for downstream consumption by an LLM, RAG chunker, or human editor. The CLI is the primary entry point:
# Install with PDF support
pip install "all2md[pdf]"
# Convert a single file
all2md document.pdf
# Save to a specific output path
all2md report.docx -o report.md
# Use it from Python
python -c "from all2md import to_markdown; print(to_markdown('document.pdf'))"
Beyond conversion, all2md ships a surprising set of adjacent commands that make it useful as a document-workflow hub rather than just a converter. all2md view report.docx opens an in-browser HTML preview; all2md edit notes.md opens any document in a markdown/WYSIWYG editor and saves back to the original format with a .bak backup. all2md grep "term" *.pdf greps PDFs and Word docs the way you would grep text files. all2md chunk report.pdf --strategy semantic --max-tokens 512 --overlap 64 produces JSONL chunks with page and section provenance — built for RAG pipelines out of the box. all2md roundtrip notes.md --via docx measures how much survives a Markdown → DOCX → Markdown round trip and scores it, which is the right way to spot a converter regression before it ships.
The MCP integration is the headline feature for AI workflows. all2md exposes document conversion, corpus search, document diff, and heading outline as MCP tools that any MCP-aware client can call — Claude Desktop, Claude Code, Cursor, and Windsurf are the primary targets. all2md install-skills drops pre-built agent-skill files into those editors so the assistant knows when to invoke all2md rather than a generic converter. For an authoring assistant that lives next to a folder of PDFs, this is the right shape: one CLI, one protocol, many input formats.
What md2rich actually does
md2rich is a single-page web app at md2rich.com. Paste or type Markdown on the left, see a live preview on the right, click Copy as Rich Text, and paste into LinkedIn, X Articles, Medium, Notion, or Substack. The conversion targets the exact HTML dialect each platform accepts on paste, including platform-specific quirks (LinkedIn's URN wrapping, X Articles' article-shell, Medium's image caption handling). The page runs entirely in your browser via the ClipboardItem API — zero upload, zero server storage, zero account. There is no CLI, no Python API, no MCP server, no install step.
## What you type in md2rich
This is a **bold** claim about [links](https://example.com).
- Bullet one
- Bullet two with `inline code`
```js
function hello() { return "world"; }
```
## What LinkedIn sees after you paste
This is a bold claim about links.
• Bullet one
• Bullet two with inline code
function hello() { return "world"; }
The point of md2rich is to remove the friction between writing Markdown and publishing rich text. The platforms do not accept Markdown on paste — they expect HTML — and vanilla HTML does not survive the platform sanitizers cleanly. md2rich handles the platform-specific shimming so the writer never sees it. If the only thing you are doing is writing Markdown for one of the five supported platforms, md2rich is the entire pipeline.
Direction: the biggest difference between the two
Put the two side by side and the difference becomes obvious:
| Dimension | all2md | md2rich |
|---|---|---|
| Direction | Documents → Markdown (40+ formats in) | Markdown → Rich text (5 platforms out) |
| Runtime | Python CLI + library, runs locally | Browser page, runs in a tab |
| Install | pip install "all2md[pdf]" | None — open the URL |
| Network | Fully local; optional stdin/stdout piping | Zero data egress (files stay in browser) |
| AI integration | Built-in MCP server + agent-skills install | None (not applicable — no server) |
| Output target | Markdown for LLMs / RAG / human editors | Rich-text HTML for social publishing |
| First commit | 2025-10-10 | 2026-04 (Markdown publishing niche) |
| License | MIT | Free web tool |
The "direction" row is the one to internalize. all2md converts into Markdown; md2rich converts out of Markdown. Choosing between them because they sound similar is a category error — like choosing between a scanner and a printer.
Where all2md is the right tool
Pick all2md when you already have a corpus of non-Markdown files and you want them as clean Markdown. Concrete cases the project docs call out:
- RAG ingestion — turn a folder of PDFs, DOCX, and EML files into JSONL chunks with section provenance, then load them into a vector store.
all2md chunk corpus/ --strategy semantic --max-tokens 512 --overlap 64writes the chunks, the rest is up to your embedding pipeline. - PDF table extraction — multi-column layouts and header/footer detection live in the
pdfextra.pip install "all2md[pdf]"pulls PyMuPDF for text and table parsing, plus an optional GNN-based semantic layout classifier (pdf_layoutextra) for academic PDFs. - Scanned PDFs (OCR) — opt into Tesseract OCR for scanned documents. Without OCR, a scanned page is empty text; with it, the page becomes a normal Markdown source.
- Editorial round-trip checks —
all2md roundtrip notes.md --via docxmeasures Markdown → DOCX → Markdown fidelity. Useful before promising a client that a Markdown draft will survive a Word review cycle. - Agent-driven file conversion — the MCP server makes all2md callable from Claude Code or Cursor. The assistant can read a folder of mixed-format files, convert the ones it needs, and chunk them inline.
Where md2rich is the right tool
Pick md2rich when you already have Markdown (in any editor — Obsidian, VS Code, Vim, Sublime Text, even nano) and the destination is one of the supported publishing platforms:
- LinkedIn long-form posts — the platform accepts HTML on paste but re-wraps paragraphs and strips inline styles. md2rich emits the exact subset LinkedIn preserves, so bold/italic/code/links/blockquotes survive.
- X Articles — needs X-specific rich-block JSON. md2rich produces it; vanilla HTML converters do not.
- Medium import — Medium accepts HTML or Markdown import but loses inline formatting on partial matches. md2rich outputs Medium's preferred HTML dialect.
- Notion paste — Notion accepts HTML and converts to its block schema. md2rich's output maps cleanly to Notion's callout, code, and quote blocks.
- Substack post — Substack accepts Markdown directly but treats inline images and footnotes inconsistently. md2rich compensates.
- Private drafts — client work, unpublished material, anything you cannot risk on a server. md2rich runs in the browser tab; nothing leaves the device.
The natural pairing: research → publish
The two tools solve adjacent problems and the pipeline that uses both is shorter than either one alone:
- Convert the source corpus to Markdown with all2md. From a folder of PDFs, Word docs, and meeting notes:
all2md sources/ -o markdown/ --recursive. Each output file is a clean Markdown source the rest of the workflow can consume. - Edit and synthesize in your favorite Markdown editor. Combine the converted sources into a draft, drop in your analysis and links, save as
draft.md. All Markdown, no platform-specific markup. - Paste the draft through md2rich. Open md2rich, paste the Markdown in, choose the target platform (LinkedIn / X Articles / Medium / Notion / Substack), click Copy as Rich Text.
- Paste into the platform. The receiving CMS sees the rich-text HTML and renders it as the platform's own blocks. No upload step, no third-party converter, no API key.
# Step 1: source files → markdown
all2md sources/ -o markdown/ --recursive
# Step 2 (manual): edit markdown/draft.md in your editor
# Step 3 + 4: human in the loop, browser tab, one click
Steps 1 and 3 are both fully local — the corpus conversion runs on your machine via Python, the rich-text conversion runs in your browser tab. The published post never touches a third-party server other than the destination platform itself.
When to reach for Pandoc instead
all2md's own README makes the honest comparison: choose Pandoc when you need maximum format support (100+ formats the all2md project does not cover), scholarly features (citations, bibliographies, LaTeX math), a standalone binary with no Python runtime, or 15+ years of stability from a battle-tested C/Haskell codebase. Choose all2md when you want a Python API, an MCP integration, AST-based programmatic transforms, or RAG-specific chunking built in. The two can coexist — all2md for LLM preprocessing, then a Pandoc call for the bibliography step if you are writing an academic piece.
md2rich is not in this comparison at all because it does not do document-to-Markdown. Pandoc can be coerced into Markdown-to-rich-text via custom writers, but the platform-specific shimming is the whole point of md2rich — a Pandoc custom writer for LinkedIn dialect is a substantial project on its own.
Caveats worth knowing
Three honest caveats apply to each tool.
all2md is young. The repository is nine months old as of July 2026, with 19 stars on GitHub. The README is thorough and the test surface is wide, but you should expect format-edge-case bugs in 2026 — particularly in EML parsing, scanned PDFs without OCR, and complex multi-column academic layouts. The all2md roundtrip command is the right way to spot a bug before it ruins your output. File issues on GitHub; the maintainer is responsive.
md2rich cannot read your files. It only sees what is on the clipboard or what you type. If a PDF is the source, convert it with all2md (or another tool) first. If a Word document is the source, convert it with Pandoc, all2md, or save-as-Markdown from Word, then paste the result into md2rich. Trying to drag a file into the browser tab does not work — that is the privacy guarantee working as designed.
Platform sanitizers change. Both tools depend on the receiving platform accepting the rich-text HTML or Markdown output. LinkedIn in particular has been tightening its paste sanitizer over the past year. md2rich is updated as those changes land, but every few months a particular code-block edge case or footnote pattern needs to be re-shimmed. If you publish regularly, sign up for the project's release notes.
Who each tool is for
Pick all2md if you are a Python developer building an LLM, RAG, or document-automation pipeline that needs to ingest non-Markdown files. The MCP integration makes it especially attractive for editor-driven AI workflows where the assistant needs to read a corpus on demand.
Pick md2rich if you write in Markdown and want to publish to LinkedIn, X Articles, Medium, Notion, or Substack without reformatting by hand. The whole point is removing the friction between writing in plain text and shipping as rich text.
Use both if your workflow starts from PDFs or Word documents and ends on a social platform. all2md gets the corpus into Markdown, your editor trims it, md2rich publishes the result.
Try md2rich — client-side Markdown to rich text
Open the md2rich editor in any browser, paste Markdown, click Copy as Rich Text, and paste into LinkedIn, X Articles, Medium, Notion, or Substack. No upload, no account, no API key.