Expand description
docling.rs: a Rust port of docling.
The public surface mirrors the Python SDK, kept deliberately small:
use docling::{DocumentConverter, SourceDocument};
let converter = DocumentConverter::new();
let result = converter
.convert(SourceDocument::from_file("input.md").unwrap())
.unwrap();
println!("{}", result.document.export_to_markdown());For the PDF/image ML pipeline (pdfium + layout/TableFormer/OCR ONNX), reuse a
Pipeline across documents to amortize model loading, instead of the
per-call DocumentConverter. Deploying as a service: examples/Dockerfile
is a 3-stage build that bakes the binary, native libs, and exported models
(including the KV-cached TableFormer decoder) into a slim, Python-free runtime
image — see the “Deploy in a container” section of the README.
See docs/MIGRATION.md for the architecture, format-by-format parity
status, and how conformance against Python docling is measured.
Modules§
- backend
- Format backends.
- base64
- Minimal standard-alphabet Base64 codec (RFC 4648):
encodefor embedding image bytes asdata:URIs,decodefor reading them back out — avoids a dependency for the two things we need. - chunker
- Document chunking for RAG pipelines — the Rust port of docling-core’s
docling_core.transforms.chunker. - chunks
- Chunk-record JSON export shared by the CLI (
--to chunks) and the HTTP server (to=chunks): the hierarchical chunker’s records always, plus the hybrid chunker’s when a tokenizer is available —DOCLING_CHUNK_TOKENIZER, or.models/chunk/tokenizer.jsonas populated byscripts/install/download_dependencies.sh(requires thechunkingbuild feature;DOCLING_CHUNK_MAX_TOKENSoverrides the default budget of 256). - dclx
.dclxpackaging: the DocLang OPC archive (doclang.packcounterpart).- video
- Video frame sampling for
InputFormat::Video(#138 Phase 2). - vlm
- VLM pipeline (issue #77) — remote OpenAI-compatible vision endpoint.
Structs§
- Confidence
Report - The document-level report (docling’s
ConfidenceReport): the four scores aggregated across pages, plus the per-page breakdown. Page keys are the real 1-based page numbers — the same numbering as the JSON export’spagesmap (#171),--pageswindows included. (docling keys by its 0-based internal page index; ours is the more useful spelling and the difference is documented indocs/MIGRATION.md.) - Conversion
Result - The result of converting one
crate::SourceDocument. - Docling
Document - The unified, format-agnostic document produced by every backend.
- Document
Converter - Routes a
SourceDocumentto the backend for its format and returns aConversionResult. - Enrichment
Options - The opt-in enrichment passes, mirroring docling’s
PdfPipelineOptionsflags (do_picture_classification,do_code_enrichment,do_formula_enrichment). All off by default. - Heading
Hierarchy Options - Options for the heading-hierarchy stage (docling’s
HeadingHierarchyOptions, defaults included). - Markdown
Stream - An iterator over a document’s Markdown, yielded in document order as
conversion progresses. Each item is a chunk to write as-is; concatenating
every
Okchunk reproduces the buffered Markdown byte-for-byte. - Markdown
Streamer - Incremental Markdown serializer: feed finalized, in-document-order batches of
Nodes and receive Markdown chunks whose concatenation is byte-identical to [to_markdown_images] over the same nodes. This is the streaming counterpart of the buffered serializer — used to emit a document’s Markdown in chunks (e.g. page by page, as the parallel PDF pipeline finishes pages) instead of building the whole string up front. - Model
Entry - One resolved runtime asset — which file a stage would load right now, given the CWD, the env overrides and the int8/fp32 preference.
- Picture
Image - An extracted picture’s raw encoded bytes plus its mimetype and pixel size —
the docling.rs analogue of docling-core’s
ImageRef. - Pipeline
- A reusable PDF pipeline. The primary worker runs its models on every core, so a single-page / small / image / METS input is converted at full intra-op speed with no pool to load. A document with enough pages instead fans out across a pool of narrower workers processed concurrently. Both load lazily and are cached for reuse, so a one-shot conversion only pays for what it uses.
- Rendered
Page - One rasterized page from
render_pages(#243): the absolute 1-based page number in the source document, the pixel dimensions, and the PNG bytes. - Source
Document - A loaded input document: its name, detected format, and raw bytes.
- Table
- A simple row-major table. By default
rows[0]is the header row; aTableStructureoverlay overrides that and adds column spans.
Enums§
- Conversion
Error - Anything that can go wrong while loading or converting a source document.
- Conversion
Status - Outcome status of a conversion, mirroring
docling.datamodel.base_models.ConversionStatus. - DocItem
Label - Semantic role of a document item, mirroring docling-core’s
DocItemLabel. - Image
Mode - How pictures are rendered (mirrors docling-core’s
ImageRefMode). - Input
Format - A document format supported by docling.rs backends.
- Node
- A single piece of document content.
- OcrLang
- OCR recognition language: which PP-OCRv3 model + dictionary pair runs.
- OcrMode
- Which document regions feed the OCR — docling 2.116’s
OcrMode(#254, upstream docling#3710). Upstream restructured its pipeline so OCR runs after layout, on layout regions filtered by the PDF text layer — the architecture this port has always had — and named the strategies: - Quality
Grade - docling’s
QualityGrade: a score bucketed for human consumption.
Constants§
- DEFAULT_
VIDEO_ FRAMES - Default cap on sampled frames per video. Scene changes rarely exceed this in short clips, and uniform fallback at 8 keeps JSON/DCLX output (which embeds the PNGs) within sane bounds.
- PDF_
ML_ COMPILED - Which PDF conversion this build compiled in: the full ML pipeline (
pdffeature), the pure-Rust text-layer path (pdf-text, the wasm32 build), or neither. Compile-time facts, exported so downstream crates (whose own features can’t see this crate’s) can branch — e.g. docling-wasm’s host tests, where workspace feature unification may pullpdfin. - PDF_
TEXT_ COMPILED - True when the
pdf-texttext-layer-only PDF path is compiled in.
Functions§
- model_
inventory - Resolve the whole runtime model set without loading anything — the
exact selection each stage performs at load time (layout honors the
int8/fp32 preference, TableFormer its decoder ranking, OCR the language
pair), plus the pdfium library. docling-serve exposes this at
/v1/configand logs it at startup, so “the server picked up different models” is onecurlaway instead of a mystery of dissolved tables. Resolution is CWD-relative with an exe-dir fallback, so the answer can legitimately differ between two working directories. - parse_
page_ range - Parse a user-facing page-range string (issue #80’s
--pages):"A-B"for an inclusive 1-based window, or a single"N"for one page. Whitespace around the numbers is tolerated. Validation against the actual page count happens at convert time; this only checks the spelling (first >= 1,first <= last). - pdf_
page_ count - Number of pages in a PDF, without converting anything — what the CLI batch mode prints in its per-document start line.
- pdf_
text_ layer_ pages convert_text_layerrestricted to a 1-based inclusive page window (issue #80’s--pages);Noneconverts everything. The window is validated the same way asPipeline::pages:first <= last, 1-based, and it must select at least one existing page.- render_
pdf_ pages - Rasterize a PDF’s pages to PNG (#243) — the lean path behind serve’s
to=images: pdfium render only, no text extraction, no models, and only one page bitmap resident at a time (each is PNG-encoded and dropped before the next renders).scaleis pixels per PDF point — 2.0 matches the pipeline’sRENDER_SCALE(144 dpi). Unlike the pipeline’s render there is no 1.5× supersample + downsample pass: that dance exists only because TableFormer is pixel-pinned to docling’s bitmaps, and nothing downstream of this output is — a single render is nearly twice as fast.