
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
markitai
Advanced tools
Opinionated Markdown converter with native LLM enhancement support.
.doc/.ppt via the legacy extra--resume for interrupted jobs--ocr --llm to have the vision model read the page images directly (VLM-OCR)--record-historyDocs: https://markitai.dev
Guided installer (recommended). Installs Python and uv if needed, lets you pick extras and the Playwright browser, and offers a mirror when the default index is unreachable. Bilingual (EN/中文).
# Linux/macOS
curl -fsSL https://markitai.dev/setup.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://markitai.dev/setup.ps1 | iex"
Already have Python 3.11–3.13? Install the package alone, then run the two setup steps yourself:
uv tool install markitai # or: pipx install markitai
markitai doctor # check core and optional capabilities
markitai init # config and LLM provider
Browser rendering needs the browser extra, then Chromium:
uv tool install "markitai[browser]" --force
markitai doctor --fix
Both routes install markitai and the shorter mkai alias.
| Extra | Enables |
|---|---|
browser | Playwright rendering for JS-heavy pages |
claude-agent | Claude Agent SDK as an LLM provider |
copilot | GitHub Copilot SDK as an LLM provider |
extra-fetch | curl-cffi HTTP client (better anti-bot compatibility) |
heif | HEIC/HEIF/AVIF image input |
legacy | Legacy Office conversion (.doc/.ppt) via the anydoc Rust backend |
mcp | Bundled markitai-mcp server for AI agents (Model Context Protocol) |
ocr | Local OCR for scanned PDFs and images (--ocr) |
serve | Local web workspace and REST API |
svg | SVG rasterization via cairosvg |
all | Everything above |
ocr is opt-in because it adds ~160MB of models. The guided installer asks
about it, and markitai doctor prints the command when it is missing:
uv tool install "markitai[ocr]" --force
Launch the local web workspace with:
uv tool install "markitai[serve]" --force
markitai serve
markitai document.pdf -o out/ # convert a file
markitai https://example.com -o out/ # convert a URL
markitai ./docs -o out/ # batch convert a directory
markitai ./docs -o out/ --json # machine-readable results for automation
markitai https://example.com --no-remote-fetch -o out/ # local URL extraction only
markitai doctor # check dependencies and configuration
For LLM enhancement, export any supported provider key — markitai picks the model up from the environment, no config file needed:
export GEMINI_API_KEY=... # or OPENAI_/ANTHROPIC_/DEEPSEEK_/OPENROUTER_API_KEY
markitai document.pdf -o out/ --llm # clean formatting + generated frontmatter
markitai document.pdf --preset rich # LLM + alt text + descriptions + screenshots
markitai init # or configure it interactively, once
See the Getting Started guide for LLM configuration, presets, caching, and batch options.
markitai-mcp exposes conversion to AI agents over the Model Context Protocol with four tools: convert_document, convert_url, batch_convert, job_status. Nothing to install, uvx runs it on demand, and large outputs land on disk instead of in the model context. For Claude Code, claude mcp add markitai -- uvx --from "markitai[mcp]" markitai-mcp; for other clients:
{
"mcpServers": {
"markitai": { "command": "uvx", "args": ["--from", "markitai[mcp]", "markitai-mcp"] }
}
}
markitai mcp starts the same server through the CLI itself (uvx --from "markitai[mcp]" markitai mcp), which is how the MCP Registry lists it. See the MCP guide for LLM enhancement and batch jobs.
How markitai compares to three tools people mention in the same breath. No star or download counts — those go stale immediately.
| markitai | markitdown | docling | anydoc | |
|---|---|---|---|---|
| Engine | Python; rule-based conversion + optional LLM pipeline | Python; lightweight rule-based converters + plugins | Python; ML layout/table/VLM document-structure models | Rust; zero-ML parsers |
| LLM enhancement | Built-in: format cleaning, frontmatter, vision analysis, per-run JSON cost/usage reports | Optional: image captions, transcription, an OCR plugin | VLM for structure (DocTags), not prose cleanup | None |
| Web pages | 5-strategy fetch cascade, local-first; static runs a from-scratch port of defuddle's readability algorithm before falling back to a browser or 3 remote APIs | Whole-DOM HTML→Markdown, no main-content pass | Downloads a document URL into the same file pipeline | No URL input — local files/bytes only |
| Scanned docs | Optional local OCR (markitai[ocr], RapidOCR), or --ocr --llm to have the vision model read the pages | Optional plugin (LLM-vision or Azure OCR) | Built-in OCR for scanned PDFs/images | None in the OSS library |
| Positioning | Independent project; CLI + local bilingual (EN/中文) web workspace | Microsoft (AutoGen team); widest ecosystem/plugin adoption | IBM Research origin, now governed by the LF AI & Data Foundation; enterprise RAG building block | Firecrawl open-source; dependency-free, millisecond-scale, 14 formats, Node/Python/WASM bindings |
Each optimizes for a different job: anydoc for dependency-free speed, docling for ML-driven document structure in RAG pipelines, markitdown for ecosystem reach — markitai trades those for a built-in LLM pipeline, live web fetching, and a local UI. Two of them are also dependencies rather than only alternatives: markitdown converts the Office formats, and anydoc handles legacy .doc/.ppt behind markitai[legacy].
markitai's own source code is MIT.
The default installation is not uniformly MIT, because the PDF engine is not.
The PyMuPDF packages pymupdf, pymupdf-layout, and pymupdf4llm come from
Artifex Software and are
dual-licensed under AGPL-3.0 or a commercial licence from Artifex. They are
core dependencies — PDF conversion does not work without them.
For local use — running the CLI on your own machine, or a markitai serve
instance only you talk to — this changes nothing. AGPL obligations attach when
you redistribute the combined work or offer it to other people over a network:
in that case AGPL-3.0 asks you to make the corresponding source available on the
same terms, or to buy a commercial licence from Artifex
instead.
Everything else in the default install is MIT, Apache-2.0, BSD, or MIT-CMU. CI
enforces this: scripts/check_licenses.py fails the build on any
non-commercial or proprietary dependency, and on any AGPL/GPL package outside an
explicit allowlist.
Full details, plus attribution for the code markitai ports from defuddle (MIT) and marker (Apache-2.0), are in NOTICE.
FAQs
Opinionated Markdown converter with native LLM enhancement support
The pypi package markitai receives a total of 239 weekly downloads. As such, markitai popularity was classified as not popular.
We found that markitai demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.