Docling Troubleshooting

A curated set of the problems Docling users actually hit, with the exact error text, a quick fix, a recommended fix and an official source. Filter by category or search for an error message.

bash — first response
$pip install -U docling
$docling --help
Search the exact error text in the cards below — symptoms are quoted verbatim.
Fix install + model errors first. Nothing else works until Docling installs and loads its models.
Still stuck? Report with versions, command and traceback.

Installation fails on Windows

Installation

error: Microsoft Visual C++ 14.0 or greater is required / Failed building wheel for docling-parse

Why it happens: Some optional dependencies compile native C++ or Rust extensions and need a compiler that is not present by default.

Quick fix: Install with Astral uv instead of pip to use pre-built wheels: uv add docling.

Recommended fix: If you must use pip, install the Microsoft Visual C++ Build Tools (14.0+) and a 64-bit Python, then retry. On an unsupported OS or Python, use a supported combination (Python 3.10-3.12) or a container.

uv add docling

When this does not apply: If no wheel exists for your OS and Python, the compiler route may still be required.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Installation guide →

Microsoft Visual C++ 14.0 is required

Installation

Microsoft Visual C++ 14.0 is required. Get it with Microsoft C++ Build Tools

Why it happens: pip is building a native extension from source and cannot find the MSVC toolchain.

Quick fix: Prefer uv, which resolves pre-compiled wheels and avoids the compiler entirely.

Recommended fix: Otherwise install the Build Tools and select the Desktop development with C++ workload: winget install Microsoft.VisualStudio.2022.BuildTools.

winget install Microsoft.VisualStudio.2022.BuildTools

When this does not apply: Applies mainly to optional extras such as tesserocr or fasttext; the core package usually ships wheels.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Installation guide →

Python version not supported

Installation

No matching distribution found for docling / Requires-Python >=3.10

Why it happens: Docling requires Python 3.10 or newer; Python 3.9 and older are not supported.

Quick fix: Create an environment with Python 3.10+ and reinstall.

Recommended fix: Use a virtual environment or uv: uv venv --python 3.12 then uv add docling.

uv venv --python 3.12

When this does not apply: Very new Python releases may lag until wheels are published; see the official support matrix.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Installation guide →

Failed to build wheel for docling-parse

Installation

Failed building wheel for docling-parse / ERROR: Failed to build installable wheels for some pyproject.toml based projects

Why it happens: No pre-built wheel is available for your platform or Python (for example macOS older than 13, Alpine/Termux, exotic architectures, or a very new Python), so pip tries to compile from source.

Quick fix: Use a supported platform and Python 3.10-3.12, and install with uv to fetch wheels.

Recommended fix: On macOS use macOS 13+ (Apple Silicon); on Linux prefer a mainstream x86_64/arm64 distro or the official container. Pin a docling version whose wheels match your platform, or build with a full C++ toolchain.

uv venv --python 3.12 && uv add docling

When this does not apply: 32-bit, musl/Alpine without build dependencies and some ARM systems are not officially supported.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Installation guide →

ImportError: libGL.so.1 / cv2 missing

Installation

ImportError: libGL.so.1: cannot open shared object file: No such file or directory / ModuleNotFoundError: No module named 'cv2'

Why it happens: opencv-python (with the OpenGL UI) is installed in a headless environment such as Docker or a remote VM, or OpenCV is missing entirely in a fresh environment.

Quick fix: Force the headless OpenCV build.

Recommended fix: pip uninstall -y opencv-python opencv-python-headless && pip install --no-cache-dir opencv-python-headless. Alternatively install the system library: apt-get install libgl1 (Debian) or dnf install mesa-libGL (RHEL).

pip uninstall -y opencv-python opencv-python-headless && pip install --no-cache-dir opencv-python-headless

When this does not apply: If you rely on OpenCV GUI windows, install the system libGL instead of switching to headless.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Official FAQ →

Dependency conflict with numpy (Python 3.13)

Installation

version solving failed ... depends on numpy (>=2.0.2,<3.0.0) and docling requires numpy (>=1.26.4,<2.0.0)

Why it happens: On Python 3.13 Docling needs numpy 2.x, but older LangChain or other pins force numpy 1.x; a resolver cannot satisfy both.

Quick fix: Exclude Python 3.13 from your project's Python range.

Recommended fix: Set python = ">=3.10,<3.13" in pyproject.toml, or upgrade docling-ibm-models>=2.0.7 and deepsearch-glm>=0.26.2. For mixed needs, use numpy markers per Python version.

python = ">=3.10,<3.13"

When this does not apply: Some third-party packages still have no Python 3.13 wheels.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Official FAQ →

No PyTorch wheel on macOS Intel

Installation

Could not find a version that satisfies the requirement torch / no matching distribution found for torch

Why it happens: PyTorch dropped macOS x86_64 (Intel) wheels after 2.2.2, and 2.2.2 requires numpy 1.x and Python 3.12 or lower.

Quick fix: Install the mac_intel extra, which pins compatible versions.

Recommended fix: pip install "docling[mac_intel]" (or uv add torch==2.2.2 torchvision==0.17.2 docling). Keep numpy<2 and Python 3.12 or lower.

pip install "docling[mac_intel]"

When this does not apply: Apple Silicon is the supported default; Intel Macs need the pinned stack.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install on macOS →

SSL certificate error downloading models

Installation

URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate>

Why it happens: The Python environment's list of trusted certificates is outdated when fetching model weights from Hugging Face.

Quick fix: Update certifi.

Recommended fix: pip install --upgrade certifi. If it persists, point SSL_CERT_FILE and REQUESTS_CA_BUNDLE at `python -m certifi`, or install pip-system-certs.

pip install --upgrade certifi

When this does not apply: Behind a corporate proxy, also configure HTTPS_PROXY and your internal root CA.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Official FAQ →

docling command not found after upgrade

Installation

docling: command not found / Docling version: unknown

Why it happens: Upgrading an older install can leave the `docling` console script unregistered because the project split into docling and docling-slim.

Quick fix: Reinstall the package that owns the command.

Recommended fix: pip install --force-reinstall docling (or pip install -U docling docling-slim), then run docling --version. In a virtual environment, make sure its bin/Scripts folder is on PATH.

pip install --force-reinstall docling

When this does not apply: uv tool install docling can fail for the same reason; install docling-slim[standard] instead.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Installation guide →

pip or docling not recognized on Windows

Installation

'pip' is not recognized as an internal or external command

Why it happens: Embedded Python or a default Windows install does not add Python and Scripts to PATH.

Quick fix: Use a normal Python install and a virtual environment instead of embedded Python.

Recommended fix: Install Python 3.12 from python.org with 'Add python.exe to PATH' checked, create a venv (py -m venv .venv), activate it, then pip install docling. If pip is missing: py -m ensurepip --upgrade.

py -m venv .venv && .venv\Scripts\activate

When this does not apply: Embedded Python is not designed for installed console scripts and is not recommended for Docling.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install on Windows →

Model download or cache problem

Models & cache

OSError / ConnectionError while downloading ds4sd/docling-models / a partial cache blocks later runs

Why it happens: The first PDF run downloads layout, table and OCR models; a failed or partial download leaves a broken cache.

Quick fix: Re-run once with a working connection, or pre-download the models explicitly.

Recommended fix: Download all models ahead of time with docling-tools models download --all, and point DOCLING_CACHE_DIR at a writable location.

docling-tools models download --all

When this does not apply: Air-gapped machines need the cache copied from a connected host first.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · RAG / offline docs →

Offline models are ignored (still contacts Hugging Face)

Models & cache

Still tries to reach huggingface.co / FileNotFoundError: Missing .../model.safetensors

Why it happens: The artifacts path points at the wrong directory, or the folder structure does not match what Docling expects.

Quick fix: Point Docling at the parent folder that contains the model subfolders.

Recommended fix: Run docling-tools models download -o ./models, then set artifacts_path="./models" (absolute path in containers). The folder must contain subfolders like ds4sd--docling-models with model.safetensors, config.json and preprocessor_config.json directly inside.

docling-tools models download -o ./models

When this does not apply: Environment variables alone are not enough for the Python API; pass artifacts_path explicitly.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Offline / air-gapped →

Models downloaded to two locations

Models & cache

Models appear in both ./models and ~/.cache/huggingface

Why it happens: Hugging Face libraries keep their own global cache in addition to the directory you pass to Docling.

Quick fix: Set HF_HOME so downloads land in one directory.

Recommended fix: export HF_HOME=/your/cache (or HF_HUB_CACHE) before running, and pass the same folder as artifacts_path so Docling and Hugging Face agree.

export HF_HOME=./models-cache

When this does not apply: Docling passes your path through, but the underlying Hugging Face libraries still create their own cache.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Offline / air-gapped →

403 or rate limit downloading models

Models & cache

403 Client Error / rate limit exceeded / HTTPError while downloading model weights

Why it happens: Gated repositories, rate limits or a corporate proxy block anonymous Hugging Face downloads.

Quick fix: Authenticate with a Hugging Face token.

Recommended fix: export HF_TOKEN=your_token (or run huggingface-cli login) and raise the timeouts with HF_HUB_ETAG_TIMEOUT and HF_HUB_DOWNLOAD_TIMEOUT. Behind a proxy, set HTTPS_PROXY.

export HF_TOKEN=your_token

When this does not apply: Some models require accepting a license on Hugging Face before the download succeeds.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Offline / air-gapped →

Read-only file system error on model cache

Models & cache

OSError: [Errno 30] Read-only file system: '/models/models--ds4sd--docling-models/snapshots/...'

Why it happens: Hugging Face tries to create cache entries or symlinks in a mount that is read-only while loading local models.

Quick fix: Point the cache at a writable path.

Recommended fix: Set HF_HOME and HF_HUB_CACHE to a writable directory and HF_HUB_OFFLINE=1 once all models are present; mount the model directory as data, not as the Hugging Face cache.

export HF_HUB_CACHE=/tmp/hf-cache

When this does not apply: HF_HUB_OFFLINE=1 disables all network access, so ensure every required model is present first.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Offline / air-gapped →

OCR package installation error

OCR

ModuleNotFoundError: No module named 'tesserocr' / OCR engine import fails

Why it happens: Some OCR engines need system-level binaries (for example Tesseract) that pip cannot install.

Quick fix: Use RapidOCR or EasyOCR, which are Python-only and easier to install.

Recommended fix: pip install "docling[rapidocr]" or "docling[easyocr]". For Tesseract, install the system binary first (brew/apt/dnf), then install the extra.

pip install "docling[rapidocr]"

When this does not apply: Tesseract also needs language data; set TESSDATA_PREFIX if languages are missing.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

RapidOCR is not installed

OCR

RapidOCR is not installed. Please install it via 'pip install rapidocr_onnxruntime' to use this OCR engine

Why it happens: RapidOCR is an optional engine and is not part of the base install.

Quick fix: Install the rapidocr extra.

Recommended fix: pip install "docling[rapidocr]" (or pip install rapidocr onnxruntime).

pip install "docling[rapidocr]"

When this does not apply: GPU acceleration for RapidOCR is limited; it runs on CPU by default.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

Tesseract cannot load a language

OCR

Error: Failed loading language 'deu' / TESSDATA_PREFIX is not set

Why it happens: Tesseract needs the language .traineddata files and a correct TESSDATA_PREFIX pointing at the tessdata folder.

Quick fix: Install the language packs and set TESSDATA_PREFIX (it must end with a slash).

Recommended fix: apt-get install tesseract-ocr-eng tesseract-ocr-deu (Debian), then export TESSDATA_PREFIX=/usr/share/tesseract-ocr/5/tessdata/. Set ocr_options.lang to the languages you installed.

export TESSDATA_PREFIX=/usr/share/tesseract-ocr/5/tessdata/

When this does not apply: Containers often bundle only English; build a custom image to add more languages.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

Tesseract fails: invalid resolution 0 dpi

OCR

Invalid resolution 0 dpi. Using 70 instead. / tesseract OCR failed

Why it happens: Page images rendered without DPI metadata can trip Tesseract, especially for images generated inside containers.

Quick fix: Try a different OCR engine, or render pages to images with an explicit DPI first.

Recommended fix: Switch to RapidOCR or EasyOCR, or pre-render with a fixed density (ImageMagick: convert -density 216 input.pdf page.png) and OCR the image.

convert -density 216 input.pdf page.png

When this does not apply: This is a Tesseract-specific quirk; other engines are unaffected.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

Text in other languages is not recognized

OCR

Non-English text comes out garbled or empty / wrong characters

Why it happens: The OCR engine defaults to a limited language set.

Quick fix: Set the OCR languages in the pipeline options.

Recommended fix: pipeline_options.ocr_options.lang = ["fr", "de", "en"] — the selected engine must support those languages and, for Tesseract, the language data must be installed.

pipeline_options.ocr_options.lang = ["fr", "de", "en"]

When this does not apply: Each engine ships a different set of supported languages.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

GPU is not used (runs on CPU)

GPU

torch.cuda.is_available() is False / processing stays on the CPU

Why it happens: PyTorch was installed without CUDA support, or no compatible GPU and driver are available.

Quick fix: Check that torch.cuda.is_available() returns True in your environment.

Recommended fix: Uninstall the CPU wheels and install CUDA-enabled PyTorch for your CUDA version, then select the device with --device cuda. Verify with nvidia-smi.

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128

When this does not apply: Apple Silicon uses MPS (--device mps), not CUDA. Some OCR engines are CPU-only.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Config generator →

CUDA out of memory

GPU

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate ...

Why it happens: Batch sizes exceed available VRAM, or another process is holding GPU memory.

Quick fix: Reduce the batch sizes and clear the cache.

Recommended fix: Lower layout_batch_size, ocr_batch_size and table_batch_size, set queue_max_size, call torch.cuda.empty_cache() between documents, and process fewer files in parallel.

import torch
torch.cuda.empty_cache()
pipeline_options.ocr_batch_size = 2

When this does not apply: Very large pages may still exceed VRAM; fall back to CPU for those files.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Technical reference →

CUDA error: no kernel image is available

GPU

CUDA error: no kernel image is available for execution on the device

Why it happens: The CUDA build of PyTorch does not include kernels for your GPU's compute capability, which is common on very new GPUs or with an old driver.

Quick fix: Use a PyTorch or container build that matches your GPU and driver.

Recommended fix: Check driver/CUDA compatibility, upgrade the NVIDIA driver, and use the matching CUDA wheel (cu128/cu130) or the matching docling-serve CUDA image. In Docker, expose the GPU with the NVIDIA container toolkit.

nvidia-smi

When this does not apply: Brand-new GPUs may need a newer CUDA build than your current image provides.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install with Docker →

Flash Attention 2 fails to install or import

GPU

flash-attn fails to build / ImportError: cannot import name 'flash_attn'

Why it happens: Flash Attention 2 requires an Ampere or newer GPU, CUDA 11.8+ and PyTorch 2.0+, and can be difficult to build from source.

Quick fix: Disable it if you do not need it.

Recommended fix: Set accelerator_options = AcceleratorOptions(cuda_use_flash_attention2=False), or install with FLASH_ATTENTION_SKIP_CUDA_BUILD=TRUE pip install flash-attn.

FLASH_ATTENTION_SKIP_CUDA_BUILD=TRUE pip install flash-attn

When this does not apply: Not supported on pre-Ampere GPUs or on Apple Silicon.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Official FAQ →

Apple Silicon MPS is not available

GPU

torch.backends.mps.is_available() is False / inference falls back to CPU

Why it happens: MPS requires macOS 12.3+ on an M-series chip and a PyTorch build with MPS support; some operations still fall back to CPU.

Quick fix: Use device auto so Docling selects the best available device.

Recommended fix: Run with --device mps on Apple Silicon and upgrade macOS and PyTorch; use auto to fall back automatically when an op is unsupported.

docling convert report.pdf --device mps

When this does not apply: Some models may still execute parts of the pipeline on the CPU.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install on macOS →

Conversion is slow

Performance & memory

A single document takes minutes / high CPU usage

Why it happens: OCR and enrichment models are expensive, especially on CPU.

Quick fix: Disable OCR for digital PDFs and turn off enrichment you do not need.

Recommended fix: Use --no-ocr for text PDFs, --table-mode fast if accuracy allows, generate_page_images=False, and run on a GPU where possible. Tune --num-threads to your CPU cores.

docling convert report.pdf --no-ocr --to md

When this does not apply: Scanned documents genuinely require OCR and cannot skip it.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Config generator →

Out of memory during conversion

Performance & memory

Killed / std::bad_alloc / the process is OOM-killed

Why it happens: Large, image-heavy or math-heavy PDFs can exhaust RAM, and the docling-parse backend can accumulate memory across pages.

Quick fix: Process the PDF in page ranges or split it into smaller files.

Recommended fix: converter.convert("large.pdf", page_range=[1, 100]); switch to the PyPdfium backends for very large files; disable enrichment; keep generate_parsed_pages=False; run in a subprocess and restart between files.

docling convert large.pdf --page-range 1-100

When this does not apply: Splitting can break headings and multi-page tables that span the boundary.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Technical reference →

Memory keeps growing across many files

Performance & memory

RAM rises steadily when processing a batch / DoclingLoader leaks memory

Why it happens: The PDF backend retains caches and document references after each conversion.

Quick fix: Release the backend explicitly after each file.

Recommended fix: Call result.input._backend.unload() after conversion, recreate the DocumentConverter every few files, or run one subprocess per file. Keep docling, docling-core and docling-parse current.

result.input._backend.unload()

When this does not apply: Formula enrichment has its own known leak; isolate it in a separate process.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Technical reference →

PDF conversion fails

Conversion

ConversionError: Input document file.pdf is not valid / status FAILURE

Why it happens: The file may be encrypted, corrupted, password-protected or an unsupported variant.

Quick fix: Try a different sample file to confirm whether the issue is the document or the setup.

Recommended fix: Remove password protection or pass --pdf-password; repair or re-export the file; check the supported-formats list and open an issue with a sample.

docling convert report.pdf --to md

When this does not apply: Encrypted PDFs are not silently decrypted; provide an unprotected copy or the password.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

Password-protected PDF is rejected

Conversion

PdfiumError: Failed to load document (PDFium: Incorrect password error) / ConversionError with cause PdfiumError

Why it happens: The PDF is encrypted and no password was supplied.

Quick fix: Provide the document password.

Recommended fix: CLI: docling convert secret.pdf --pdf-password 'secret'. Python: pass PdfBackendOptions(password=SecretStr('secret')) through PdfFormatOption(backend_options=...).

docling convert secret.pdf --pdf-password 'secret'

When this does not apply: Password support requires the docling-parse v4 or PyPdfium2 backend.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

Output contains GLYPH markers or garbled text

Conversion

GLYPH<38> GLYPH<39> ... / /gid00020 / unreadable characters

Why it happens: PDFs with custom embedded fonts that lack a ToUnicode map cannot be mapped to real characters.

Quick fix: Force full-page OCR.

Recommended fix: Set pipeline_options.ocr_options.force_full_page_ocr = True (or --ocr-mode full_page). Alternatively switch to the PyPdfium2 backend, which sometimes decodes these fonts better.

docling convert broken.pdf --ocr-mode full_page

When this does not apply: OCR may still miss GLYPHs inside tables in some versions; upgrade Docling.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

Ligatures break words with spaces

Conversion

"fi" / "fl" / "ffi" appear with spaces, e.g. "e ffi cient"

Why it happens: Some PDF fonts map ligature glyphs to separate characters with spurious spaces.

Quick fix: Upgrade Docling, which normalizes common ligatures.

Recommended fix: Modern Docling sanitizes ligatures in the page-assemble stage. If your PDF still breaks, run OCR or pre-process the font.

pip install -U docling

When this does not apply: Glyph-name-based ligatures may still pass through if the backend cannot decode them.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Technical reference →

Embedded images missing from Office files

Conversion

Images are missing from DOCX or PPTX output on macOS or Linux

Why it happens: WMF/EMF image handling only works on Windows with the default image library.

Quick fix: Convert the images or run the conversion on Windows.

Recommended fix: Convert WMF/EMF assets to PNG/SVG before conversion (for example with LibreOffice headless), or run that step on Windows.

libreoffice --headless --convert-to png document.docx

When this does not apply: Only WMF/EMF images are affected; other image formats convert normally.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

Converting a URL fails (403 or timeout)

Conversion

HTTPError 403/404 or a timeout when converting an URL

Why it happens: The server blocks anonymous requests, the URL is a landing page, or the connection times out.

Quick fix: Download the file first and pass the local path.

Recommended fix: In Python pass custom headers: converter.convert(url, headers={"User-Agent": "..."}). Confirm the URL points to a PDF/DOCX and not an HTML page.

docling convert ./downloaded.pdf --to md

When this does not apply: Some sites require cookies or authentication that Docling does not handle.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

IndexError converting Markdown

Conversion

IndexError: list index out of range in md_backend.py

Why it happens: An empty list item (a bare '-' line) in the Markdown tripped older Markdown backends; this was fixed in v2.18.

Quick fix: Upgrade Docling.

Recommended fix: pip install -U docling. As a fallback, remove empty list markers from the Markdown source.

pip install -U docling

When this does not apply: Only affects the Markdown backend on older versions.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

Batch conversion stops at the first bad file

Conversion

convert_all raises at the first invalid document

Why it happens: By default raises_on_error=True aborts the batch on the first failure.

Quick fix: Set raises_on_error=False and inspect each result.

Recommended fix: for res in converter.convert_all(files, raises_on_error=False): check res.status and res.errors, then decide per file.

converter.convert_all(files, raises_on_error=False)

When this does not apply: You must handle PARTIAL_SUCCESS and FAILURE results yourself.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Technical reference →

Table extraction is wrong

Tables & layout

Wrong table structure / cells merged or columns shifted

Why it happens: Complex merged cells and borderless tables are hard, and fast mode trades accuracy for speed.

Quick fix: Use the accurate table mode.

Recommended fix: Run with --table-mode accurate. For TableFormer V2 merged-cell issues, try do_cell_matching=False or fall back to V1, and keep Docling updated.

docling convert report.pdf --table-mode accurate

When this does not apply: No parser is perfect on every table; some manual review may be needed.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Config generator →

Table cells are empty (TableFormer V2)

Tables & layout

Table structure is detected but all cell text values are empty

Why it happens: A TableFormer V2 regression in 2.78.0 populated empty cells.

Quick fix: Upgrade Docling.

Recommended fix: pip install -U docling — the empty-cell regression was fixed in the releases after 2.78.0.

pip install -U docling

When this does not apply: Only affects TableFormer V2 on the impacted versions.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Config generator →

Borderless tables become body text

Tables & layout

A whitespace-aligned table is extracted as prose / the table is missed

Why it happens: The layout model can miss tables with no visible borders, treating aligned columns as normal text.

Quick fix: Try forced OCR or a different backend.

Recommended fix: Force OCR, which can reveal the grid, switch to the PyPdfium2 backend, or increase images_scale. For critical documents, review manually.

docling convert report.pdf --ocr-mode full_page

When this does not apply: If the layout model never flags the region, downstream code cannot recover it.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Compare OCR engines →

Tables at the page edge are missed

Tables & layout

Full-page or edge-to-edge tables are not detected

Why it happens: The layout model needs some margin between a table and the page boundary to distinguish them.

Quick fix: Add a small white margin around the page before conversion.

Recommended fix: Add roughly 40pt left/right padding to the PDF (for example with pypdf) before converting; a native page_padding option is under discussion upstream.

python add_padding.py input.pdf

When this does not apply: External padding can change the layout of some documents.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

docling-serve does not start

Serve, API & MCP

docling-serve does not start / connection refused on port 5001

Why it happens: A port conflict, a missing UI extra, or a container that needs a different entrypoint.

Quick fix: Run the server with the UI extra and confirm the port is free.

Recommended fix: pip install "docling-serve[ui]" && docling-serve run --enable-ui, or use the official container image. Change the bind address or port with UVICORN_HOST/UVICORN_PORT.

docling-serve run --enable-ui

When this does not apply: Advanced deployment (scaling, auth) is out of scope; see the official docs.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install with Docker →

docling-serve returns 503 or times out at startup

Serve, API & MCP

GET /ready returns 503 / requests time out while models load

Why it happens: The /ready endpoint stays 503 until models are loaded, and for the RQ engine until Redis is reachable.

Quick fix: Wait for readiness before sending traffic.

Recommended fix: Configure startupProbe and readinessProbe on /ready and a livenessProbe on /health, and pre-load models with DOCLING_SERVE_ARTIFACTS_PATH to shorten startup.

curl -i http://localhost:5001/ready

When this does not apply: With the RQ engine, /ready also requires Redis connectivity.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install with Docker →

GPU is not used inside the container

Serve, API & MCP

CUDA error: no kernel image is available / the container runs on CPU despite --gpus

Why it happens: The container has no GPU access, or the CUDA image tag and the host driver do not match.

Quick fix: Expose the GPU with the NVIDIA container toolkit.

Recommended fix: Install and update nvidia-container-toolkit, configure the nvidia runtime, and request the GPU (docker run --gpus all, or devices count: all in Compose). Use the CUDA image tag that matches your driver.

docker run --gpus all -p 5001:5001 quay.io/docling-project/docling-serve-cu128

When this does not apply: Some very new GPUs require a newer CUDA image than is currently published.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install with Docker →

MCP server setup problem

Serve, API & MCP

The MCP server is not listed in the client / no tools appear / the server exits immediately

Why it happens: The client config points at the wrong command, the package is not available, or the transport is wrong.

Quick fix: Launch the server once manually to confirm it works.

Recommended fix: uvx --from=docling-mcp docling-mcp-server and add the matching JSON to claude_desktop_config.json (or mcp.json). Restart the client and add --transport stdio if required.

uvx --from=docling-mcp docling-mcp-server

When this does not apply: Configuration file locations differ between clients; check the client's documentation.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Config generator →

MCP cannot access files or times out

Serve, API & MCP

[Errno 2] No such file or directory / the MCP client times out on a cold start

Why it happens: The MCP server cannot see the client's filesystem, or the first conversion is slow while models load.

Quick fix: Use a shared directory, or switch to remote mode through docling-serve.

Recommended fix: Set DOCLING_MCP_CONVERSION_MODE=remote with DOCLING_MCP_SERVICE_URL, or mount a shared folder both processes can read. Pre-warm the model cache to avoid cold-start timeouts.

export DOCLING_MCP_CONVERSION_MODE=remote

When this does not apply: Web clients do not share a filesystem with a local MCP server.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Install with Docker →

HybridChunker token-length warning

RAG & chunking

Token indices sequence length is longer than the specified maximum sequence length for this model (531 > 512)

Why it happens: Transformers warns while the chunker counts the tokens of an oversized sequence and then splits it, so it is a false alarm.

Quick fix: Ignore the warning.

Recommended fix: Confirm the real chunk sizes are within limits by serializing each chunk and counting tokens with the same tokenizer.

for c in chunker.chunk(doc):
    print(len(tokenizer.tokenize(chunker.serialize(chunk=c))))
pip install -U docling-core

When this does not apply: If a real chunk exceeds the model limit, align the chunker tokenizer with your embedding model.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · RAG guide →

Chunking dependencies are missing

RAG & chunking

ImportError: semchunk ... / the chunking extra is required

Why it happens: The tokenization-aware chunking dependencies are an optional extra of docling-core.

Quick fix: Install the chunking extra.

Recommended fix: pip install 'docling-core[chunking]' for Hugging Face tokenizers, or 'docling-core[chunking-openai]' for tiktoken.

pip install 'docling-core[chunking]'

When this does not apply: Choose the extra that matches the tokenizer used by your embedding model.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · RAG guide →

Audio conversion fails: ASR pipeline missing

Audio & video

Audio or video conversion fails / the ASR pipeline is not available

Why it happens: ASR is an optional extra and is not included in the base install.

Quick fix: Install the asr extra.

Recommended fix: pip install "docling[asr]" (or uv add "docling[asr]").

pip install "docling[asr]"

When this does not apply: The ASR pipeline transcribes audio; video also needs the video pipeline.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

FFmpeg not found for audio or video

Audio & video

[WinError 2] The system cannot find the file specified / FileNotFoundError: ffmpeg

Why it happens: Whisper decodes audio by calling the ffmpeg binary, which must be installed and on PATH.

Quick fix: Install ffmpeg and make sure it is on PATH.

Recommended fix: brew install ffmpeg (macOS), apt-get install ffmpeg (Debian), or winget install ffmpeg (Windows). Verify with ffmpeg -version.

ffmpeg -version

When this does not apply: All audio formats and all video inputs require ffmpeg.

Verified with Docling v2.129.0 · Last checked 2026-09-22

Official source → · Supported formats →

Verified with Docling v2.129.0 · Last checked 2026-09-22 · Official source

1
Triage

Start here: first response

Most Docling problems are caused by an out-of-date version, a missing optional extra, or a single difficult document. Work through these steps before anything else.

  1. Match the error text. Search the cards above; the exact message is usually listed as a symptom.
  2. Update first. Many issues are already fixed: pip install -U docling docling-core docling-parse.
  3. Reproduce on a simple file. If a small, plain PDF or DOCX works, the problem is usually the document, not the install.
  4. Change one thing. Try --pdf-backend pypdfium2, --ocr-mode full_page, or --table-mode fast.
  5. Reduce the scope. Use --page-range, disable enrichment, and convert a single file.
  6. Collect details before you report it (next card).
2
Diagnostics

Collect your environment

Copy these commands so you have the version numbers and device information ready when something fails.

docling --version
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
python -c "import docling, docling_core; print(docling.__version__, docling_core.__version__)"
  • Include the exact command you ran and the full traceback.
  • Attach or describe a minimal sample document when you can.
  • Note your OS, Python version and whether you use Docker.
  • Add -vv for verbose conversion logs.
3
Installation

Installation & platform

Install failures are almost always a missing compiler/wheel or an unsupported Python.

  • Prefer uv or the official container to avoid native build problems.
  • Use a supported, 64-bit Python (3.10-3.12).
  • Update certifi for SSL errors; use headless OpenCV in containers.
  • See the installation guides and the supported formats.
4
Models

Models & offline

PDF conversion needs model weights; a broken or blocked download is a very common failure.

  • Pre-fetch everything with docling-tools models download --all.
  • Point artifacts_path at the parent folder that holds the model subfolders.
  • Set HF_HOME for one cache location and HF_TOKEN behind a proxy or for gated repos.
  • For air-gapped hosts, copy the cache from a connected machine first.
5
OCR

OCR

OCR problems are usually a missing engine, missing language data, or the wrong mode.

  • Install an engine: pip install "docling[rapidocr]" or [easyocr].
  • For Tesseract, install the system binary, the language packs and set TESSDATA_PREFIX.
  • Force OCR for scans and glyph PDFs with --ocr-mode full_page.
  • Compare engines on the OCR engines page.
6
Performance

GPU, memory & speed

Slow or killed conversions are usually memory pressure or CPU-only execution.

  • Verify CUDA/MPS, then reduce batch sizes and call torch.cuda.empty_cache().
  • Process huge PDFs with --page-range or switch to the PyPdfium backend.
  • Release memory with result.input._backend.unload() between files.
  • Disable OCR and enrichment you do not need; tune --num-threads.
7
Conversion

Conversion, tables & formats

Output problems usually trace back to the source document, the backend or the table mode.

  • Password PDFs: pass --pdf-password.
  • GLYPH or garbled text: force full-page OCR or switch the backend.
  • Tables: use --table-mode accurate; for V2 merged cells try do_cell_matching=False or V1.
  • Batch jobs: set raises_on_error=False and inspect each result.
8
Serve

Serve, API & MCP

The service and agent integrations fail for three reasons: ports, readiness, or GPU access.

  • Start the API with docling-serve run --enable-ui (or the container image).
  • /ready stays 503 until models load; probe it for startup/readiness.
  • In Docker, expose the GPU (--gpus all) and install the NVIDIA container toolkit.
  • For MCP, run uvx --from=docling-mcp docling-mcp-server; use remote mode for web clients.
9
Media & RAG

RAG, audio & video

Chunking warnings are usually harmless; audio and video need extra dependencies.

  • The HybridChunker token-length warning is a false alarm; verify real chunk sizes instead.
  • Install docling-core[chunking] for the tokenization-aware chunker.
  • Audio and video need pip install "docling[asr]" and ffmpeg on PATH.
  • See the RAG guide for the full pipeline.
10
Reporting

Reporting a bug

A good report gets a fast fix. Include everything needed to reproduce the problem.

  • Search existing issues first to avoid duplicates.
  • State the Docling, docling-core and Python versions.
  • Paste the exact command and the full traceback.
  • Attach a minimal sample document if it is not confidential.
  • Ask usage questions in discussions, not the issue tracker.
11
FAQ

Frequently asked questions

Which error should I fix first?
Start with installation and model errors. Nothing else can work until Docling is installed and can load its models.
I upgraded and something broke. What should I do?
Pin the previous version with pip install docling==<version> to unblock yourself, then report the regression with a sample.
Is my document sent anywhere?
No. Docling runs locally and sends no document data. The only network access is downloading model weights.
Do I need to split large PDFs?
Only if you hit memory limits. Try --page-range first, then splitting, and expect some loss of cross-page structure.
Why are my tables extracted incorrectly?
Complex merged cells and borderless tables are hard. Use accurate mode, try do_cell_matching=False or TableFormer V1, and review critical tables.
The CLI works but Python does not. Why?
Use the same virtual environment for both, and pass options through PdfFormatOption so they actually reach the pipeline.
Where can I get more help?
Search the official GitHub issues and discussions, and include your versions, command and traceback.