olmocr vs xberg
Open toolkit that linearizes messy PDFs — scans, tables, equations, handwriting — into clean ordered Markdown with a self-hosted vision-language model. Built for LLM training data and RAG ingestion. — 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.
Same end goal — clean, ordered Markdown from PDFs for RAG/training ingestion. olmocr is a dedicated self-hosted vision-language model that excels on scans, tables and handwriting; Xberg is a general extraction framework where OCR is one pluggable backend. Use olmocr when OCR quality is the bottleneck, Xberg when you need many formats and language bindings.
| olmocr | xberg | |
|---|---|---|
| Stars | 19k | 8.7k |
| Forks | 1.6k | 520 |
| Language | Python | Rust |
| License | Apache-2.0 | MIT |
| Last activity | 3 months ago | 2 days ago |
| Topics | rag, ocr | ocr, rag, local |
| Curated connections | 8 | 5 |
olmocr — the curator's take
Reach for olmocr when you have lots of messy PDFs to convert into high-quality text for a training corpus or RAG index and you have GPU to run the VLM. It is the parsing FRONT-END of a pipeline, not a RAG system itself — pair it with an indexer/retriever (LlamaIndex) and a vector store (Chroma). NOT worth it for clean, digital-native PDFs where a cheap text extractor does the job — running a vision-language model for those is overkill.
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.