github xberg-io/xberg v1.0.0

latest releases: packages/go/v1.0.0, packages/go/v1/v1.0.0
7 hours ago

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_oxide is 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-Rust tract path, enabling in-browser (WASM) and mobile inference.
  • Structured LLM extraction. extract_structured and split_and_extract drive 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 kreuzbergxberg across every ecosystem; the error type is XbergError;
    environment variables use the XBERG_ prefix; config is discovered as xberg.{toml,yaml,yml,json}.
  • Breaking API changes: extracted URIs are ExtractedUri (formerly Uri), and document metadata uses
    typed fields plus a custom residual map instead of the untyped additional bag.
  • 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

Don't miss a new xberg release

NewReleases is sending notifications on new releases.