One document model for many awkward formats
Docling addresses the failure-prone part of document AI: turning files into usable structure. A PDF may contain text in the wrong reading order, tables drawn from positioned lines, scanned pages, formulas, charts, and images. Office files, email, audio, video, and XML bring different problems. Docling converts them into a shared DoclingDocument, then exports Markdown, HTML, WebVTT, DocTags, DocLang, or lossless JSON.
The shared model is the reason to choose it over a folder of format-specific parsers. Downstream code can iterate through headings, tables, pictures, and other items without inventing a schema for each source. Inputs cover PDF, DOCX, PPTX, XLSX, HTML, EPUB, images, audio, video, email, LaTeX, plain text, OpenDocument files, XBRL, patents, and scientific-publishing XML.
Local execution is useful for sensitive documents that should not reach a hosted parser. The code uses the MIT license, though the README warns that individual models retain their own licenses. Integrations connect the output to LangChain, LlamaIndex, CrewAI, and Haystack, while a separate MCP server makes conversion available to compatible agents.
What happened when we ran it
We cloned commit e1cb2b2 into an unprivileged Python 3.12 Debian container with 3 CPUs and 8 GB of RAM. Installation succeeded in 122 seconds, bringing in 179 packages and consuming 6,524 MB. The build completed in 8 seconds. A Python dependency audit reported no known vulnerabilities.
The test command failed after 503 seconds. Pytest reported 1,384 passed, 66 failed, and 59 skipped. Many entries in the supplied log tail were RapidOCR tests that stopped on ImportError: libGL.so.1: cannot open shared object file. Another listed failure came from a git merge-tree subprocess. The log does not justify assigning every failure to one cause, so those are separate findings.
The checkout had 1,646 files, about 122,888 lines of source, and used 212.4 MB. The lab found 13 CI workflow files, a Dockerfile, and a tests directory. Passing more than a thousand tests shows substantial exercised code, while 66 failures mean the bare Debian environment was not green. The missing graphics library is also a concrete warning for OCR containers.
The easy command hides a heavy stack
The quick start is genuinely short: use Python 3.10 or newer, install docling, and run one CLI command against a local file or URL. Python code is similarly direct. Construct a DocumentConverter, convert a source, and export the document. The supported platforms include macOS, Linux, and Windows on x86_64 and Arm.
Disk and system requirements grow quickly. Our install reached 6.5 GB before processing a real corpus. Docling's models depend on PyTorch, and the installation guide offers a separate CPU-only index for Linux. Intel Macs need a compatible PyTorch release and Python 3.12 or older. Optional extras cover speech recognition, visual models, HTML rendering, EasyOCR, RapidOCR, Tesseract bindings, and a narrowly supported NVIDIA OCR setup.
OCR is especially platform-sensitive. Tesseract needs system packages and a correctly terminated TESSDATA_PREFIX. Nemotron OCR currently requires Linux x86_64, Python 3.12, and CUDA 13.x. Our RapidOCR failures show that Python resolution alone does not guarantee a working runtime when a native graphics library is missing. Build the production image from the documented engine choice, then test that exact image.
Structure is valuable and fallible
Docling's PDF work covers layout, reading order, tables, code, formulas, image classification, OCR, and chart understanding. That can preserve far more meaning than basic text extraction. It also creates more ways for output to be subtly wrong. A pipeline can return Markdown without throwing an exception while still changing the information a reader sees.
Current reports make the risk concrete. Issue #4053 shows invisible PDF text reaching the assembled document and Markdown export, including tracking text from government bills. Issue #4043 describes a line-wrapped command flag losing its hyphen, which silently changes technical instructions. Issue #4049 reports tables inside arXiv LaTeXML HTML being absent from the resulting document. Each problem affects downstream search or retrieval without looking like a crash.
Build a corpus that reflects your real intake: rotated pages, scans, multiple columns, dense tables, unusual fonts, formulas, charts, and the languages you receive. Check reading order, table cells, headings, page references, and character accuracy. Keep the original file, conversion settings, Docling version, and page-level provenance. Lossless JSON is the safer canonical output when Markdown cannot represent all structure.
MCP and serving change the operating model
The MCP server can run conversion locally through uvx, or delegate to Docling Serve using a service URL and optional API key. That is convenient when several agents need the same document capability. It also creates a network service handling potentially sensitive uploads, large model state, and expensive jobs. Authentication, request size, retention, concurrency, timeouts, and logs become part of the design.
GPU availability does not remove configuration risk. Open issue #2528 describes a Windows Docker setup where Docling Serve saw CUDA providers yet kept work on the CPU. Treat accelerator selection as something to verify with your chosen engine and image rather than infer from nvidia-smi. Air-gapped deployments must also prefetch every model and dependency they intend to use.
Health and the buying decision
The repository was pushed on August 24, 2026, and issues and pull requests were updated the same day. Release v2.121.0 arrived on August 20 with Pages support, PDF rotation fixes, OCR input improvements, and service-version negotiation. GitHub showed 992 open issues and pull requests combined. The queue is large, but release and issue activity are current.
Docling deserves the first evaluation when format breadth, local processing, and structured output matter. It is less attractive for tiny deployments or workflows that can use a simple text extractor. Pin the version, choose only the OCR and model extras you need, add missing system libraries, and compare output against a representative gold set. The product is powerful; trust comes from your validation layer.

