xberg-io/xberg
 Watch   
 Star   
 Fork   
4 hours ago
xberg

v1.0.0-rc.40

Release v1.0.0-rc.40

Zig

Add to your build.zig.zon:

.dependencies = .{
    .xberg-zig = .{\n        .url = \"https://github.com/xberg-io/xberg/releases/download/v1.0.0-rc.40/xberg-zig-v1.0.0-rc.40.tar.gz\",\n        .hash = \"xberg-1.0.0-rc.40-iV1GrrNETxW5YeJnaEoB_VEN4uQul0RjI3PQvs1jzsiq\",\n    },\n},\n```\n
23 hours ago
xberg

v1.0.0-rc.39

Release candidate 39.

Publish-pipeline fixes carried from rc.38:

  • NuGet: thin meta csproj (fixes HTTP 413 on publish)
  • Docker: gha cache-export ignore-error (image already pushed by digest)
  • Go module tag job runs after the Swift tag-move (fixes ref-mismatch race)
  • Dart: freezed lock refreshed to stable 3.2.5 for frb 2.12

Regenerated with alef 0.47.1.

1 days ago
xberg

v1.0.0-rc.38

Release candidate 38. Republishes rc.37's content on a rebuilt Go native-distribution model plus additional publish-pipeline and extraction fixes.

Go native distribution (download-at-consume)

  • The packages/go module no longer ships native binaries in the module zip. A cmd/setup tool downloads the platform FFI library from the release assets into the user cache and writes a machine-local cgo link shim. A per-version RequireNativeSetup_<version> sentinel turns a module/native version mismatch into a compile error.

Publish pipeline

  • Ship SHA-256 sidecars for the Go FFI release assets.
  • Forward the app token to the publish-zig action (fixes the 403 upload).
  • Slim the C# NuGet meta package (fixes the 413 on publish).
  • Pin Maven 3.9.16 in the release workflow.
  • Link libbz2 on macOS/iOS for the Swift package (resolves BZ2 symbols).

Library

  • Add a job cancellation endpoint (DELETE /jobs/{job_id}) (#1313).
  • Emit structured table elements for CSV.
  • Validate OpenDocument ZIP metadata during MIME detection.
  • PaddleOCR honors rec_batch_num and aligned CTC dictionaries; angle-rollback recognition is batched.

Tooling

  • Registry-mode smoke suite runs against pre-releases; PHP smoke installs the native extension first.
  • Python integration uv.lock files refreshed.
2 days ago
xberg

v1.0.0-rc.37

[1.0.0-rc.37] - 2026-07-24

Republish of rc.36 under a fresh version: rc.36 again partially published (the core PyPI linux wheels, the npm/PyPI/Maven integrations, the Homebrew sequoia bottle, and the -core Docker image all failed on release-pipeline bugs while the immutable registries had already shipped, burning the rc.36 number). The library code is unchanged from rc.36; this release fixes the pipeline so every channel publishes.

Fixed

  • Python linux wheels. The glibc-floor verifier matches auditwheel's hashed ONNX Runtime soname (libonnxruntime*.so*), so the linux wheels no longer fail verification after correctly bundling the runtime.
  • Go module resolution. The packages/go module tag is created on release again, so go get .../packages/go@v1.0.0-rc.37 resolves.
  • Swift C++ runtime linkage. The Swift package links the C++ standard library (libc++ on Apple platforms, libstdc++ on Linux), fixing undefined C++ ABI symbols at link time.
  • Zig package upload. The Zig package tarball is uploaded via gh release upload, fixing the silent upload failure that left releases without a Zig artifact.
  • WASM OCR. The WebAssembly Tesseract backend applies an explicit page-segmentation mode and a recognition deadline instead of PSM_AUTO, which could trap or hang under WASI.
  • npm integrations publish. The n8n / LangChain / LlamaIndex node packages install with npm install: the exact @xberg-io/xberg rc pin only exists once the core node package publishes in the same run, so a committed lockfile can never pre-match it.
  • PyPI integrations publish. Uploads skip files already on the index (uv publish --check-url), so a re-run over a partially-published set of integration packages no longer fails.
  • spring-ai Maven publish. The integration deploy waits for the core io.xberg:xberg artifact to become resolvable on Maven Central (indexing lag) before building.
  • Homebrew bottle upload. The bottle upload uses a token minted after the slow from-source build so it can't 401 on an expired App-token TTL, and a single failed platform no longer drops the bottle DSL for the others.
  • Docker -core image (#1299). The manifest-merge is decoupled from the full build matrix, so a timed-out sibling build leg no longer suppresses the -core image publish.

Added

  • Local integration packaging dry-run. task integrations:build builds the publishable Python distributions locally to catch packaging breaks before tagging a release.
2 days ago
xberg

v1.0.0-rc.36

Republish of rc.35 under a fresh version. rc.35 only partially published — the immutable registries (crates.io, Hex, Maven Central, RubyGems, WASM) shipped while the linux Node/Python, NuGet, and Docker channels failed on pre-existing packaging bugs, burning the rc.35 number.

rc.36 carries the same library code as rc.35 (#1296 chunk-to-node linkage, #1303 base64 embeddings) plus publish-infra fixes:

  • ONNX Runtime bundling for linux Node + Python artifacts (*.so* sonames + wheel vendor step)
  • NuGet meta-package size (413) — thin managed package + runtime.json RID graph to per-RID packages
  • Docker/GPU CI now pull the test_documents submodule's git-LFS objects

See CHANGELOG.md for details.

2 days ago
xberg

v1.0.0-rc.35

Added

  • Chunk-to-node linkage (#1296). ChunkMetadata.node_ids is now populated with the id values of the document.nodes[] whose text a chunk covers, so consumers can join a chunk back to the structural nodes it came from. Populated on the PDF/structure path via best-effort verbatim text containment (deduplicated, in node-traversal order); empty for structure-less documents.

Changed

  • Base64 embedding transport (#1303). Hosted embedding vectors are now requested in base64, which liter-llm decodes ~3× faster and bit-exact than a JSON float array. Providers that ignore the hint and still return a float array continue to work unchanged.
2 days ago
xberg

v1.0.0-rc.34

Release candidate 34.

Bindings

  • Regenerated all language bindings with alef 0.43.0. Node/PHP embedding plugins now return native number[][] shapes instead of a Rust debug string (#1304).

Publish pipeline

  • glibc native builds, Node NAPI Docker (manylinux+Alpine), Python wheels (Windows/Linux), and NuGet per-RID split all unblocked from the rc.33 failures.

Extraction (rc.29 legal-PDF audit wave)

  • Table double-emit / fragmentation, intra-word spacing, markdown escaping consistency, chunk page-ref coverage, list-vs-table classification, and MCP allowed_hosts fixes (#1288–#1294, #1298, #1301, #1302, #1306).
3 days ago
xberg

v1.0.0-rc.33

Added

  • Stable node ids on the document tree. DocumentNode.id is now populated with a deterministic, content-derived id (stable across extractions), and each chunk carries metadata.nodeIds linking it back to the nodes it was derived from. Both are exposed as plain strings across all language bindings. (#1296)
  • Per-page chunk coordinates (pageSpans). Each chunk now carries metadata.pageSpans, a list of {page, bbox} entries — one per page the chunk overlaps, in page order — for viewer highlighting. The bounding box is the union of that page's body-layer node boxes within the chunk (omitted when unavailable). Empty (and omitted from the wire format) when page provenance is unavailable. (#1295)
  • Stable table ids, headers, and opt-in anchors. Table gains tableId (a deterministic, reproducible id assigned in document order across the final emitted table set) and columns (the header row, so a fragment is interpretable on its own). A new table_anchors extraction option (default off) emits a [TABLE:{tableId}] marker before each rendered table so consumers can reconcile the markdown in content with the structured tables[] entries. (#1297)
  • Configurable multi-label chunk classification. New ChunkClassificationConfig (label definitions, an LlmConfig, batch_size, max_concurrency), set via ExtractionConfig.chunk_classification, classifies each chunk with zero, one, or many labels via bounded-concurrency LLM batches and writes them to metadata.classifications ([{label, confidence?}]). Opt-in — absent config performs no classification and makes no LLM calls. The chunk-level analogue of page classification; requires the classification feature. (#1255)
  • Automatic OCR of undecodable text layers. Pages whose embedded text decodes mostly into the Unicode Private Use Area, replacement, or control-character garbage (e.g. Identity-H fonts with no ToUnicode) are now routed to OCR like scanned pages, controlled by OcrQualityThresholds.min_undecodable_ratio (default 0.5) and gated by a 64-character floor so occasional symbols never trip it. (#1254)

Fixed

  • Concatenated-PDF extraction audit. A cluster of structure/reading-order defects surfaced by an audit of concatenated legal PDFs: duplicate tables[] entries and double-counted table counts are deduplicated (#1288); fragmented per-row tables are stitched back into one table with a propagated header (#1290); bullet lists are no longer flattened into paragraphs or shredded into word-per-cell tables (#1301); spurious intra-word spaces in native text ("T ower") are removed via geometry-aware span joining (#1291); markdown escaping is consistent with an escape_markdown opt-out (#1292); OCR'd pages no longer report contradictory isBlank (#1293); chunk firstPage/lastPage provenance is restored on long PDFs (#1294); and heading context no longer leaks across document boundaries (#1289).
  • Container users can enable page classification via a classification CLI feature carried into the all/container builds. (#1298)
  • CLI batch resource limits and benchmark isolation. extract and batch now support --no-config-discovery, and their Tokio runtime honors --max-threads. The benchmark harness uses both controls, records batch subprocess overhead from the reported batch total, and keeps user configuration and verbose PDF logs from contaminating measurements.
  • Linux glibc artifacts no longer require a newer glibc than they advertise. The prebuilt ONNX Runtime that was statically linked into the Python wheel and the Go/C FFI, Java, and Elixir artifacts is compiled against glibc ≥ 2.38 and pulled unversioned __isoc23_* and __libc_single_threaded symbols into the binary. Because the manylinux tag only reflects versioned glibc requirements, these installed everywhere but crashed at import/load on glibc 2.28–2.37 (undefined symbol: __isoc23_strtoll). They now link Microsoft's ONNX Runtime (glibc-clean, floors at 2.27) — the same runtime the C#, Node, and Docker builds already use — and ship it beside the binary, so the symbols are gone and the floor is honest. A CI check now fails any glibc artifact that references too-new symbols or omits the bundled runtime. musl, macOS, and Windows are unaffected.

Changed

  • Dependencies refreshed across all languages. Rust, Python, Node, Ruby, Java, and Dart dependency versions were bumped to their latest compatible releases.
3 days ago
xberg

Benchmark Results 2026-07-22 (0181189)

Comparative benchmark results from workflow run 29903353182.

Commit: 01811898d6311cfad1113be6f16ea1ad2ba440e9 Date: 2026-07-22

4 days ago
xberg

v1.0.0-rc.32

What's Changed

Full Changelog: https://github.com/xberg-io/xberg/compare/v1.0.0-rc.30...v1.0.0-rc.32