Markdown-first document engine

Turn any document into clean, AI-readable Markdown — and back.

DocMD orchestrates best-of-breed engines to ingest .docx, .pdf, .pptx and .xlsx into a git-native Markdown package you can edit in VS Code or the CLI — then render back to PDF and DOCX. Content over style: the text and images survive, the binary never gets to be the source of truth.

Open source · orchestrates pandoc, LibreOffice, docling & markitdown · Python only for PDF

Why DocMD

Ingestion good enough for LLMs — and a loop good enough for humans.

Ingestion libraries stop at extraction. DocMD borrows their extraction and owns the round trip: an editable package, a VS Code frontend, and a render path back out.

LLM-grade ingestion

Structured Markdown plus extracted images, with reading order and tables preserved — a viable alternative to markitdown and docling, because it uses them.

A two-way loop

Import into a package, edit the canonical Markdown, render back to PDF or DOCX. The editable truth is text and assets, not an opaque binary.

Best-of-breed, orchestrated

DocMD picks the right engine per format and direction — pandoc, LibreOffice, docling or markitdown — behind one consistent CLI and package contract.

The engine matrix

The idoneous tool for each format.

Python is scoped to PDF ingestion only. Everything else — all render, and docx/pptx/xlsx import — is native. Edit Markdown and export, and you need no Python at all.

FormatImport engineRuntime
.mdpassthrough (copy)native
.docxpandocnative
.pptx / .xlsxLibreOffice → pandocnative
.pdfdocling (default) · markitdown (fallback)python

Render (Markdown → X): docx, pptx via pandoc; pdf via pandoc → LibreOffice. PDF defaults to docling for its layout, table structure and OCR — markitdown stays the zero-friction fallback.

One CLI

Everything runs through the same local runtime.

The VS Code extension is a frontend over these commands, so automation and editor UX stay aligned.

docmd import report.pdf

Ingest docx / pdf / pptx / xlsx into a .docmd package with canonical Markdown and extracted assets.

docmd render report.docmd --pdf

Render the edited package back out to PDF (also DOCX and PPTX).

docmd doctor

Per-capability report of which import/render formats are available on this machine, with install hints.

docmd bench ./corpus --reference docling

Compare docmd vs docling vs markitdown on coverage and text recall — the measure of “viable alternative”.

docmd setup pdf --apply

Provision the toolchain — pandoc & LibreOffice via your package manager, docling & markitdown via uv. Terraform-style --plan by default, --apply to execute.

docmd tui

A summary of your packages and available workflows, straight in the terminal.

The canonical model

The editable truth is a package.

Every import produces a folder: a manifest, the canonical Markdown, the original file, and extracted assets. Review it in a diff, edit it with an agent, render it when you’re done — it behaves like a code artifact, not a binary blob.

report.docmd/
  manifest.yaml       # kind, source, import status
  content/document.md   # the canonical, editable truth
  assets/             # extracted images
    original/         # the untouched source file
  exports/            # rendered pdf / docx

Get started

Install the CLI, then let it provision the rest.

Grab the DocMD runtime, then run docmd setup to install the conversion engines it orchestrates.

Windows

PowerShell

irm https://docmd.ccisne.dev/install.ps1 | iex

Linux

Shell

curl -fsSL https://docmd.ccisne.dev/install.sh | bash

Engines

Provision the toolchain

docmd setup all --apply