Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
LiteParse
Rust library and CLI for fast, lightweight PDF and document parsing with spatial text extraction. Runs entirely locally with zero cloud dependencies.
LiteParse is also available for Node.js/TypeScript, Python, and the browser (WASM). See the project README for all options.
Installation
Add to your Cargo.toml:
[]
= "2"
Or install the CLI:
Quick Start
use ;
async
Configuration
use ;
let config = LiteParseConfig ;
let parser = new;
Markdown Output
LiteParse can render documents directly to Markdown, including headings, tables, lists,
images, and links reconstructed from the spatial layout. Set
output_format: OutputFormat::Markdown; the rendered Markdown is returned on
result.text. Two related knobs control Markdown rendering:
image_mode(ImageMode::Placeholderdefault |Off|Embed) — how raster images are surfaced in the output.extract_links(defaulttrue) — render hyperlink annotations as[text](url); setfalsefor plain anchor text.
use ;
let config = LiteParseConfig ;
let result = new.parse.await?;
println!; // rendered Markdown
Reconstruction quality varies with document complexity.
Parsing from Bytes
use PdfInput;
let pdf_bytes: = read?;
let result = parser.parse_input.await?;
println!;
Document Complexity
Before committing to a full parse, check whether a document needs OCR or heavier
processing. is_complex is a cheap, text-layer-only pass that returns a
PageComplexityStats per page with a needs_ocr verdict and the signals behind it —
useful for routing documents to different pipelines, rejecting ones you can't handle, or
estimating cost.
use PdfInput;
let parser = new;
let pages = parser.is_complex.await?;
if pages.iter.any
reasons is a Vec<ComplexityReason> (Scanned, NoText, SparseText,
EmbeddedImages, Garbled, VectorText); new variants may be added over time, so match
leniently.
Custom OCR Engine
Implement the OcrEngine trait to plug in your own OCR backend:
use OcrEngine;
use Arc;
let parser = new
.with_ocr_engine;
For a native ONNX backend, enable oar-ocr and supply a detection model,
recognition model, and matching character dictionary:
use OarOcrEngine;
use ;
use Path;
use Arc;
let models = new;
let engine = from_models?;
let parser = new
.with_ocr_engine;
# Ok::
For opt-in model downloads, enable oar-ocr-auto-download and use a preset. On
first use, oar-ocr downloads the detection model, recognition model, and
matching dictionary from ModelScope, verifies their SHA-256 digests, and caches
them under $OAR_HOME (default ~/.oar):
use OarOcrEngine;
// Smallest / fastest PP-OCRv6 configuration.
let engine = ppocr_v6_tiny?;
# Ok::
Presets cover the current and previous PP-OCR generations, from fastest to most
accurate: ppocr_v6_tiny, ppocr_v6_small, and ppocr_v6_medium. Each wires the correct
detector/recognizer/dictionary trio. For PP-OCRv4, a language-specific
recognizer, or a custom mix, use from_models with a matching dictionary.
To mix a detector, recognizer, and dictionary yourself, pass registered bare
file names to from_models. Pair the recognizer with its matching dictionary —
the tiny recognizer needs ppocrv6_tiny_dict.txt, while the larger models use
ppocrv6_dict.txt; a mismatched dictionary silently produces garbled text:
use OarOcrEngine;
let engine = from_models?;
# Ok::
All three artifacts also accept in-memory bytes, so the whole pipeline can be
embedded with include_bytes! rather than shipped as files. Use OAROCRBuilder
with OarOcrEngine::from_builder for model-specific settings or optional
orientation and rectification models. The fallible constructors return
liteparse::LiteParseError. All constructors use conservative batch sizes and
serialize page inference to avoid multiplying inference memory across
concurrently scheduled pages.
OcrOptions::language is not interpreted: the recognition model and character
dictionary define the supported languages, and a configured ocr_language
triggers a one-time warning to make that explicit.
Features
tesseract(default) — Built-in Tesseract OCR viatesseract-rs. Disable withdefault-features = falseif you don't need OCR or want to use an HTTP OCR server instead.oar-ocr— Optional native ONNX backend viaoar-ocr. Local or in-memory models; non-WASM Rust API only.oar-ocr-auto-download— Enables SHA-256-verified download and caching of registered model file names throughoar-ocr.oar-ocr-cuda,oar-ocr-tensorrt,oar-ocr-directml,oar-ocr-coreml,oar-ocr-webgpu,oar-ocr-openvino— Forward the selected ONNX Runtime execution provider tooar-ocr.
The Node.js, Python, and WASM bindings build LiteParse with default features disabled and do not expose these OAR features, so their published binaries do not inherit the OAR model or runtime dependency footprint.
Supported Formats
- PDF (
.pdf) - Microsoft Office (
.docx,.xlsx,.pptx, etc.) — requires LibreOffice - OpenDocument (
.odt,.ods,.odp) — requires LibreOffice - Images (
.png,.jpg,.tiff, etc.) — requires ImageMagick
CLI
The crate also builds the lit CLI binary:
See lit --help for all options.
License
Apache-2.0