All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Xberg is the next iteration of Kreuzberg.
The changelog starts fresh at 1.0.0-rc.1. For the Kreuzberg v1–v4 history, see the
Kreuzberg v4 LTS changelog.
OcrExtractionResultnow derivesDefault. Downstream bindings and callers can construct and extend it without spelling out every field.
- PDF/OCR worker-stack overflow. The deep per-page OCR extraction futures are now
boxed (
Box::pin) so their large state lives on the heap instead of inflating the worker-thread stack frame. Together with the stack the binding runtimes provision for the async path, this stops scanned / image-only PDFs from aborting the process with a stack overflow (SIGBUS) during OCR. - Tesseract image OCR no longer fails on an empty language list.
OcrConfig { language: [] }joined to an empty Tesseract language string, which the native backend tried to load as a language pack named""— surfacing as the confusingFailed to download language pack ''. An empty language now defaults to English consistently across every OCR backend, matching the documentedOcrConfigdefault. PaddleOCR results also report English in their metadata instead of an empty language when none is configured. - WASM Tesseract backend builds again. It still treated the OCR
languageconfig as a single string after it became a list, so the WebAssembly build stopped compiling. It now uses the primary language (the in-memory WASI Tesseract handles one language at a time, like the PaddleOCR and VLM backends) and warns when more than one is requested.
1.0.0-rc.1 - 2026-06-26
Initial Xberg release candidate. Xberg continues the Kreuzberg document-intelligence
engine under a new name with a reset v1 version line. This is a full rebrand with no
back-compat aliases; the published kreuzberg packages remain frozen on the v4 LTS line.
- Rebranded Kreuzberg → Xberg.
- Rust: crate
kreuzberg→xberg(and everykreuzberg-*workspace crate →xberg-*); thekreuzberg::namespace →xberg::;KreuzbergError→XbergError. - CLI: binary
kreuzberg→xberg; config discoverykreuzberg.{toml,yaml,json}→xberg.{toml,yaml,json}; allKREUZBERG_*environment variables →XBERG_*; cache directory.kreuzberg/→.xberg/. - FFI: symbol prefix
kreuzberg_*→xberg_*; headerkreuzberg.h→xberg.h; libkreuzberg_ffi→xberg_ffi. - Package coordinates: PyPI
xberg, npm@xberg-io/*, RubyGems/Hex/pub.devxberg, Mavenio.xberg, NuGetXberg, Packagistxberg-io/xberg, Homebrewxberg. - Go: module
github.com/xberg-io/xbergwith no/vNsuffix (v1); the binding lives atpackages/go/. - Docs: documentation now at
docs.xberg.io.
- Rust: crate
- ner-onnx: vendored the stripped span-mode GLiNER runtime as
xberg-gliner, replaced the ORP pipeline wrapper with directortsession management, and moved runtime model downloads to thexberg-io/gliner-modelsartifact repository. The publicner-onnxfeature and NER config shape are unchanged.