xberg 1.0.0
The first stable release of xberg — the document-intelligence engine previously developed as
Kreuzberg. xberg 1.0.0 is the direct successor to Kreuzberg v4.9, carrying the same Rust core and
extraction-API lineage forward under a new name and an MIT license. The Kreuzberg v4 line continues as
LTS at kreuzberg-dev/kreuzberg-lts.
This is a large release. Beyond the rename, the PDF stack moved to a pure-Rust backend, OCR grew from a
single engine into a family of classical and vision-language models, and whole new capabilities landed:
audio/video transcription, named-entity recognition, structured LLM extraction, sparse and
late-interaction retrieval, and four new language bindings — 15 in total over one engine.
Highlights
- Pure-Rust PDF backend. pdfium is gone;
pdf_oxideis now the sole PDF backend, with a
layout-aware pipeline — ONNX layout detection (PP-DocLayoutV3 / RT-DETR), Docling-style reading-order
reconstruction, selective per-page OCR for scanned documents, and AcroForm/XFA form extraction. - A family of OCR backends. Alongside Tesseract: a native PaddleOCR backend (PP-OCRv6) and a
pure-Rust Candle OCR/VLM stack — TrOCR, GLM-OCR, GOT-OCR, DeepSeek-OCR, and PaddleOCR-VL — that
runs without ONNX Runtime or native Tesseract. - ONNX-Runtime-free inference (tract). CNN classifiers, layout detection, and auto-rotation run on
a pure-Rusttractpath, enabling in-browser (WASM) and mobile inference. - Structured LLM extraction.
extract_structuredandsplit_and_extractdrive a vision-LLM client
with rasterization, chunking, citations, caching, and configurable call/merge/fallback policies. - New modalities. Whisper-based audio/video transcription, GLiNER2 named-entity recognition
(including in-browser WASM), and text intelligence: reversible redaction, summarization, translation,
image captioning, QR detection, and document diffing. - Retrieval building blocks. SPLADE sparse embeddings, ColBERT late-interaction retrieval, and
cross-encoder reranking alongside dense embeddings, with self-hosted presets pinned by sha256. - Four new language bindings. Dart/Flutter, Swift, Kotlin/Android, and Zig, with Android/iOS
cross-compilation. - 98 document formats, including WordPerfect, HEIC/HEIF/AVIF, OpenDocument Presentation, and
Quarto/R Markdown; tree-sitter code intelligence spans 306 languages.
Fixes & hardening
The 1.0 cycle closed 239 issues — over 150 bug fixes and 60+ enhancements — across 175 merged pull
requests. The bulk of the work went into extraction quality and robustness:
- PDF fidelity: Marked-Content (MCID) text no longer dropped (#917), ligature glyphs no longer
become control characters (#1135), glyph-spaced text and spurious intra-word spaces fixed (#962,
#1291, #1222), JPEG 2000 pages no longer render blank (#1158), XML entities preserved (#1242). - Tables: reliable bordered / graphical-line detection (#964, #1097, #1213), rotated tables no
longer word-salad (#1220, #1221), no more duplicate or per-row-fragmented tables (#1288, #1290),
borderless/text-heavy grids keep their rows (#1316, #1319). - Reading order & structure: two-column order and heading classification fixes (#1170, #961, #966,
#1096, #1098), no panics on stale post-reorder page boundaries (#1270, #1272), correct form-field
placement (#1120). - OCR: explicit PaddleOCR no longer falls back to Tesseract (#801, #1071, #1088, #1102), consistent
scanned-page provenance (#1095, #1110, #1281), suppressed spurious auto-OCR on born-digital PDFs
(#1176), a SIGBUS/NaN-sort crash fixed (#1057, #1179), stabilized VLM backends (#1174, #1175,
#1208–#1214), resilient model downloads (#1146, #1249). - Chunking, bindings & packaging: correct chunk page/byte provenance (#1013, #1074, #1105, #1294);
fixes across Go, Java, C#, Node, PHP, Android, macOS, and musl (#871, #965, #998, #1055, #1131, #1257,
#1304, #1307), Homebrew, Docker signal handling, and multi-arch images (#1081, #1147, #1315). - Security: a 4 GB RTF allocation (#1058) and a redaction PII leak (#1223) closed; decompression
and buffer-length guards added (#1056, #1059); malformed-input panics turned into recoverable errors.
See the changelog for the full, categorized list.
Migrating from Kreuzberg v4
- Packages are renamed
kreuzberg→xbergacross every ecosystem; the error type isXbergError;
environment variables use theXBERG_prefix; config is discovered asxberg.{toml,yaml,yml,json}. - Breaking API changes: extracted URIs are
ExtractedUri(formerlyUri), and document metadata uses
typed fields plus acustomresidual map instead of the untypedadditionalbag. - The R binding, the EasyOCR backend, and the bundled pdfium fork are removed. Existing Kreuzberg v4
installs keep working under their original names.
See the migration guide for the full identifier
mapping, and the changelog for the complete list of changes.
Install
Published to crates.io, PyPI, npm, Maven Central, NuGet, RubyGems, Packagist, Hex, pub.dev, Go, Swift
Package Manager, Homebrew, Docker (ghcr.io/xberg-io/xberg), and a Helm chart.
Zig
Add to your build.zig.zon:
.dependencies = .{
.xberg-zig = .{\n .url = \"https://github.com/xberg-io/xberg/releases/download/v1.0.0/xberg-zig-v1.0.0.tar.gz\",\n .hash = \"xberg-1.0.0-iV1Grh3tfRVE_5s9AV2Mg-_XCSmrA1ou0hr_hXffDxzC\",\n },\n},\n```\n