pdf-inspector vs xberg
Firecrawl's Rust PDF triage: classifies text-based vs scanned in ~10-50ms, extracts positioned text and clean Markdown without OCR — routing the ~54% of PDFs that never needed a model. — versus — Rust-core document-intelligence engine with 15 language bindings: turns 96 formats — PDF, Office, images, audio, code — into clean text, tables and RAG-ready chunks. Library, CLI, REST or MCP.
Both are deterministic Rust document engines with multi-language bindings. xberg goes wide — 96 formats into RAG-ready chunks; pdf-inspector goes deep on one format with classification, confidence scores and OCR routing.
| pdf-inspector | xberg | |
|---|---|---|
| Stars | 1.6k | 8.7k |
| Forks | 149 | 525 |
| Language | Rust | Rust |
| License | MIT | MIT |
| Last activity | 6 days ago | today |
| Topics | ocr, rag | ocr, rag, local |
| Curated connections | 3 | 6 |
pdf-inspector — the curator's take
The router your document pipeline is missing: most stacks OCR everything, but ~54% of PDFs are text-based — this classifies in tens of milliseconds (with confidence and per-page routing), extracts locally in under 200ms, and only the genuinely scanned pages go to an expensive OCR model. Pure Rust, one dependency, bindings for Python, Node and browser WASM. NOT an OCR engine and NOT a layout-analysis heavyweight: scanned documents still need a model downstream, and complex-layout fidelity trails ML parsers — its job is knowing when you don't need them.
xberg — the curator's take
The polyglot pick: reach for Xberg when your stack spans Rust, Python, Node, Go, the JVM or WASM and you want ONE extraction engine instead of a per-language pipeline. Handles 96 formats — PDFs, Office, images, audio/video (Whisper), even source code (306 languages, syntax-aware chunking) — with pluggable OCR (Tesseract/PaddleOCR/VLM), no GPU, and library/CLI/REST/MCP entry points. It's the v1 successor to Kreuzberg. Don't reach for it if you only need max-fidelity parsing of messy scanned PDFs (a dedicated VLM like MinerU or olmocr wins there), or if you're Python-only and already committed to LlamaIndex's own readers.