1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
[]
= "docling"
= "DocumentConverter and format backends for docling.rs (a Rust port of docling)."
= true
= true
= true
= true
= true
= true
= true
= true
= true
# The 25 MB output-regression corpus under tests/ is dev-only — keep it out of
# the published crate (and under crates.io's size limit). benches/ reference that
# corpus by path, so they're dev-only too.
= ["tests", "benches"]
[]
# HEIC/HEIF image input (#211): forwards to docling-pdf's libheif decode.
= ["pdf", "docling-pdf/heif"]
# The default build is the full converter. The ML pipelines and the HTTP
# client are feature-sliced so `--no-default-features` leaves the pure-Rust
# declarative converters (DOCX/HTML/MD/XLSX/PPTX/… → md/json) — a set that
# compiles for wasm32-unknown-unknown (issue #79, see crates/docling-wasm).
= ["pdf", "asr", "fetch-images", "vlm"]
# PDF/image/METS-GBS ML pipeline (the pure-Rust renderer + ONNX Runtime via
# docling-pdf). resvg rides along so SVG input (#212) can rasterize into the
# same image pipeline; the non-ML SVG path (direct <text> extraction) needs
# no deps.
= ["dep:docling-pdf", "docling-pdf/ml", "dep:resvg"]
# pdfium as an opt-in renderer (`DOCLING_RS_RENDERER=pdfium`, docling's
# pypdfium2 chain) and the last resort for a file lopdf cannot read — off by
# default; forwards to docling-pdf's `pdfium` feature.
= ["pdf", "docling-pdf/pdfium"]
# Text-layer-only PDF conversion (docling-pdf's pure-Rust parser, no ONNX) —
# the wasm32 PDF path. Subsumed by `pdf`, which converts everything.
= ["dep:docling-pdf"]
# Audio → Whisper ASR (symphonia + ONNX Runtime via docling-asr).
= ["dep:docling-asr"]
# Blocking HTTP fetch of remote <img src> images (DocumentConverter::fetch_images).
= ["dep:ureq", "dep:url"]
# Remote VLM pipeline (#77): render PDF pages (the Rust renderer) and convert them
# through an OpenAI-compatible vision endpoint (LM Studio / Ollama / vLLM /
# hosted), parsing the returned DocLang with the existing reader. Rides on the
# crate's existing blocking HTTP client; no model code compiled in.
= ["pdf", "dep:ureq"]
# Optional headless-browser HTML pre-render (the `--use-web-browser` flag /
# `DocumentConverter::use_web_browser`). Off by default so the standard build
# stays pure-Rust with no browser/runtime dependency; enable with
# `--features web-browser`. Drives the system Chromium over the DevTools
# protocol purely from Rust (no Node/Playwright) via `headless_chrome`.
= ["dep:headless_chrome", "dep:tempfile"]
# Tokenization-aware chunking (docling-core's HybridChunker + HF tokenizer).
= ["docling-core/chunking"]
# GPU execution providers for the ML pipelines (#74 PDF; #288 ASR) —
# pass-through to docling-pdf and docling-asr; select at runtime with
# DOCLING_RS_EP (default: cpu).
= ["pdf", "docling-pdf/cuda", "docling-asr?/cuda"]
= ["pdf", "docling-pdf/tensorrt", "docling-asr?/tensorrt"]
= ["pdf", "docling-pdf/directml", "docling-asr?/directml"]
= ["pdf", "docling-pdf/coreml", "docling-asr?/coreml"]
= ["pdf", "docling-pdf/xnnpack", "docling-asr?/xnnpack"]
# ONNX Runtime loaded at run time (`dlopen`) instead of linked from pyke's
# prebuilt binaries (#504): the build for targets they do not cover — IBM Z
# `s390x-unknown-linux-gnu` — and for deployments bringing their own
# `libonnxruntime.so`. Without the library the ML stages degrade like a
# missing model; every declarative format and the PDF text layer are
# unaffected. See `docling_onnx::runtime_library` for the lookup.
= ["pdf", "docling-pdf/ort-load-dynamic", "docling-asr?/ort-load-dynamic"]
[]
= { = "0.36", = ["dates"] }
= "1.4.0"
# DjVu input (#434): pure-Rust decoder — hidden text layer + JB2/IW44 raster —
# MIT, no GPL deps (written from the public spec), so no DjVuLibre binary or
# subprocess; compiles for wasm too. Default features = `std` only.
= "0.33"
= { = "1.0", = true }
# O_EXCL temp file with an unpredictable name for the browser pre-render page
# (avoids a predictable /tmp path a local attacker could pre-plant a symlink at).
= { = "3", = true }
= { = "../docling-asr", = "2.2.3", = true }
= { = "../docling-core", = "2.2.3" }
= { = "../docling-pdf", = "2.2.3", = true, = false }
= { = "0.25", = false, = ["png", "jpeg", "gif", "bmp", "tiff", "webp"] }
= "0.11"
= { = "0.13.4", = false }
= "0.41"
# Data-parallel fan-out over independent OOXML parts (XLSX sheets, PPTX
# slides) — see the profile in the module docs of `backend/xlsx.rs`.
= "1.10"
= "1.11"
# SVG → PNG rasterization for the image ML pipeline (#212). Pure Rust
# (usvg + tiny-skia); gated behind `pdf` since without ML the raster has
# no consumer — the wasm/pdf-text SVG path extracts <text> directly.
# 0.48 brought the harfrust/skrifa font stack (font-types 0.12.2+, rustc
# 1.89+), which the 1.88 MSRV once pinned out; the floor is 1.92 since #598.
= { = "0.48", = true }
= "0.20"
= "0.27.0"
# scraper's DOM arena, for naming its node references in the HTML item-tree
# port (`html_tree.rs`); the version scraper 0.27 itself pins.
= "0.11"
# WHATWG charset decoding for non-UTF-8 HTML (#371): BOM / declared
# `<meta charset>` / windows-1252 fallback, the way BeautifulSoup's
# UnicodeDammit reads bytes for docling. Already in the tree via calamine.
= "0.8"
# EBCDIC copybook layouts (#252) deserialize with derive.
= { = "1", = ["derive"] }
= "1"
# Blocking HTTP client for fetching remote <img src> images when image fetching
# is enabled (DocumentConverter::fetch_images). 3.x matches the version `ort`
# already pulls in (so the graph keeps a single ureq); it needs Rust 1.85, which
# this crate already requires transitively via docling-pdf → ort.
= { = "3", = true }
# Resolve relative / protocol-relative <img src> against the page's base URL
# when the HTML was fetched from the web (fetch_images). Gated with ureq.
= { = "2", = true }
= { = "8.6", = false, = ["deflate-flate2"] }
# AbiWord .zabw / gzip-compressed .abw (#216); already in the tree via zip.
= "1"
# Raw-block Snappy decode for Apple iWork's IWA members (#213); pure Rust, so
# the backend rides along in every build including wasm.
= "1"
[[]]
= "convert"
= "examples/convert.rs"
[[]]
= "stream"
= "examples/stream.rs"
[]
= "0.5"
[[]]
= "parse"
= false