Skip to main content

MarkItDown Plus

Batch conversion, asset extraction, RAG-ready Markdown, JSONL chunks, and cleaner AI document pipelines for Microsoft MarkItDown.

MarkItDown Plus is an enhancement toolkit built on top of Microsoft MarkItDown. It adds folder conversion, recursive processing, optional parallel workers, Markdown cleanup, multiple chunking strategies, lightweight asset extraction, conversion manifests, and JSONL output for RAG workflows.

This project is independent and is not affiliated with Microsoft. It is designed as a companion CLI for the Microsoft MarkItDown ecosystem.

Why MarkItDown Plus?

Microsoft MarkItDown is excellent for converting individual files to Markdown. MarkItDown Plus focuses on the next step: turning many documents into clean, AI-ready project output.

Key features:

  • Batch convert files and folders
  • Recursive directory conversion
  • Parallel conversion with --workers
  • Optional tqdm progress with --progress
  • RAG-ready JSONL chunk export
  • Chunk strategies: heading, fixed, semantic-lite
  • Markdown cleanup for common PDF/document artifacts
  • Basic asset extraction for DOCX / PPTX / XLSX / HTML
  • manifest.json, failed.json, and large-run JSONL manifest streaming
  • Unicode-safe output filenames
  • PayPal funding link included through GitHub Sponsors/Funding

Installation

pip install markitdown-plus

For progress bars:

pip install "markitdown-plus[progress]"

For development tests and coverage:

pip install -e ".[dev]"
pytest

Quick Start

Convert a folder:

markitdown-plus convert ./docs --output ./out

Convert recursively:

markitdown-plus convert ./docs --output ./out --recursive

Convert only specific file types:

markitdown-plus convert ./docs --output ./out --types pdf,docx,pptx,xlsx,html,csv

Clean Markdown and export RAG chunks:

markitdown-plus convert ./docs --output ./out --clean --rag

Use parallel workers:

markitdown-plus convert ./docs --output ./out --recursive --workers 4 --progress

Use auto worker count:

markitdown-plus convert ./docs --output ./out --workers 0

Extract assets when supported:

markitdown-plus convert ./docs --output ./out --extract-assets

Use a specific chunking strategy:

markitdown-plus convert ./docs --output ./out --rag --chunk-strategy semantic-lite

Output Structure

A normal batch run creates:

out/
  markdown/
    report.md
  metadata/
    report.json
  manifest.json

With RAG enabled:

out/
  markdown/
    report.md
  chunks/
    report.jsonl
  metadata/
    report.json
  manifest.json

With asset extraction enabled:

out/
  markdown/
    report.md
  assets/
    report_img_001.png
    report_img_002.jpg
  metadata/
    report.json
  manifest.json

For very large jobs, MarkItDown Plus avoids huge manifest.json files by streaming records:

out/
  manifest.json
  manifest-records.jsonl
  failed.jsonl

Chunk Strategies

heading

Default. Preserves Markdown heading paths and is best for most structured documents.

markitdown-plus convert ./docs -o ./out --rag --chunk-strategy heading

fixed

Creates stable chunk sizes and ignores heading boundaries. Useful for embedding pipelines that prefer consistent lengths.

markitdown-plus convert ./docs -o ./out --rag --chunk-strategy fixed

semantic-lite

Dependency-free rule-based topical splitting. It starts new chunks at obvious semantic cues such as headings, summary, conclusion, recommendations, and other section-like paragraphs.

markitdown-plus convert ./docs -o ./out --rag --chunk-strategy semantic-lite

Asset Extraction

--extract-assets currently supports lightweight extraction for:

  • .docx
  • .pptx
  • .xlsx
  • .html / .htm local image references

PDF image extraction is intentionally left for a later version because reliable PDF asset extraction requires heavier format-specific dependencies.

When assets are extracted, MarkItDown Plus appends an Extracted Assets section to the generated Markdown and records asset metadata in the file-level metadata JSON.

Single File Commands

Convert one file directly:

markitdown-plus single report.pdf -o report.md

Clean an existing Markdown file:

markitdown-plus clean dirty.md -o clean.md

Chunk an existing Markdown file:

markitdown-plus chunk clean.md -o chunks.jsonl --chunk-strategy fixed

Development

git clone https://github.com/lamguo/markitdown-plus.git
cd markitdown-plus
pip install -e ".[dev]"
pytest

The test configuration includes a coverage gate:

pytest --cov=markitdown_plus --cov-fail-under=85

Optional property and benchmark tests are included. They are skipped automatically if hypothesis or pytest-benchmark is not installed.

GitHub Topics

Suggested topics for the repository:

markitdown
microsoft-markitdown
markdown
rag
llm
document-conversion
pdf-to-markdown
docx-to-markdown
batch-conversion
jsonl
asset-extraction
ai-tools

Support This Project

If MarkItDown Plus helps you save time or build better AI document pipelines, you can support development here:

Thank you for supporting open-source development.

License

MIT License.

Metadata

Release files for markitdown-plus 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for markitdown-plus 0.2.0
File Size Uploaded Provenance
markitdown_plus-0.2.0.tar.gz 55.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for markitdown-plus 0.2.0
File Interpreter ABI Platform
markitdown_plus-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 80.7 kB

Release files / markitdown_plus-0.2.0.tar.gz

Download URL markitdown_plus-0.2.0.tar.gz
Size 55.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7e9d865242279d3c86f72caa54c866b29a81aac7a0fab5e2801ee0e071b98571
BLAKE2b-256 checksum
How to use checksums
24644c0216bb5c5d5c82bc6d84502f3c15b9fbb835c5abf85ecd8423e724a721
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / markitdown_plus-0.2.0-py3-none-any.whl

Download URL markitdown_plus-0.2.0-py3-none-any.whl
Size 24.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0b8d68091cc397e7c82ea6c73759d3d64d59d3bb80a784a2c8a4a9932ed6caa7
BLAKE2b-256 checksum
How to use checksums
9d9eab2abdd7ed995cd97a95b21b74ce970b6149e42ac8ac100b07777a37ced2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Security for markitdown-plus 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page