Source releases · language packages · release history

Releases

Download official Apache source releases, find the corresponding Rust, Java, and Python packages, or follow the release-manager and release-candidate verification guides.

ASF source releasesSigned and checksummedRust / Java / PythonSemVer

Distribution channels

The source archive is the Apache releaseRegistry packages and native wheels are convenience binaries. The signed source archive approved by the community vote is the authoritative release.
ComponentLocationCoordinates
SourceApache mirrorsapache-paimon-vector-index-VERSION-src.tgz
Rustcrates.iopaimon-vindex-core
JavaMaven Centralorg.apache.paimon:paimon-vector-index-java
PythonPyPIpaimon-vindex
C and C++Official source archiveBuild paimon-vindex-ffi and use include/

Release signatures are checked against the Paimon KEYS file. Superseded source releases remain available from the Apache archive.

Upcoming: 0.5.0

The repository is currently developing the 0.5.0 line. Until an ASF vote passes and the signed source archive appears under Apache downloads, code and packages from this line are development artifacts rather than an Apache release.

IVF-SQ now pools residual training bounds, fuses residual encoding, transposes output in bounded parallel batches, and reuses query heaps with conservative L2 block pruning. Unified readers and language bindings also cache decoded partitions within the existing reader memory budget. The SIFT1M/GIST1M/GloVe benchmarks record build, native query, and recall results with reproducible commands.

IVSQ v1 files remain compatible. Existing indexes receive reader optimizations without a rebuild; retrain and rebuild to use the new quantization bounds. Set the reader memory budget to zero to disable the SQ cache; direct Rust IVFSQIndexReader::open remains uncached. See reader options and upgrade details.

Rust IVF API migrationVersion 0.5.0 makes quantizer_centroids private on IVFFlatIndex, IVFPQIndex, IVFSQIndex, and IVFRQIndex. Replace direct reads with quantizer_centroids() and direct assignments with set_quantizer_centroids(...). The setter validates the centroid shape, rejects replacement after vectors are added, and refreshes cached derived state. IVF variants of VectorIndexConfig also require use_approximate_coarse_assignment; set it to true for the automatic 0.5.0 behavior or false for exact nearest-centroid assignment. VectorIndexConfig::IvfPq additionally requires canonical_pq_encoding; use false for the default automatic encoder. Option-map callers can select these policies with ivf.coarse-assignment=auto|exact and ivf.pq-encoding=auto|canonical. The policies are fixed when the writer is created; direct IVF indexes do not expose post-training policy switches. ProductQuantizer::centroids and its derived norm cache are also private in 0.5.0; replace direct codebook reads with centroids() and replacements with set_centroids(...). The setter validates the codebook shape and refreshes the norm and transposed-codebook caches. The PQ layout fields d, m, nbits, dsub, ksub, and chunk_offsets are private; use the same-named read-only methods. To change the layout, construct a new ProductQuantizer so derived caches cannot outlive their layout. These are source-level changes; the stored index format is unchanged.
Rust training configuration migrationDirect VectorIndexConfig enum literals must now include ivf_train_max_points_per_centroid: 256 for IvfFlat, IvfSq, IvfRq, and IvfPq, and pq_train_max_points_per_centroid: 256 for IvfPq and DiskAnn. These values preserve the existing training defaults; constructors and train methods retain those defaults. Option-map callers can set ivf.train.max-points-per-centroid and pq.train.max-points-per-centroid without a fields.<field-name>. prefix. Paimon integrations must allow these keys through their option filter. The index file format is unchanged. See training options and sampling limits.
IVF-PQ build encoding changes by defaultFor 8-bit PQ (ksub=256) where every subvector has at least four dimensions, the default automatic encoder uses transposed direct-L2 on x86 with AVX2+FMA and on AArch64. Other CPUs use blocked SGEMM expanded-form encoding for finite codebooks. Unsupported shapes, and non-finite codebooks on the SGEMM fallback, use canonical encoding. Codes can differ across these backends at near ties; NaN centroids and high-dynamic-range finite inputs can also behave differently because the expanded form can cancel. Set ivf.pq-encoding=canonical to reproduce ProductQuantizer::encode_batch on the same CPU and runtime backend. Canonical mode does not promise byte-identical codes across CPU feature sets and is substantially slower; the index format and query path are unchanged.

0.4.0

Released 21 August 2026. This release improved filtered and batched IVF scans, stabilized IVF-PQ training, added extensible search parameters across language bindings, bridged native diagnostics to Java logging, and tightened serialization allocation bounds.

Source release · Release notes · Rust crate · Java artifacts · Python package

0.3.0

Released 30 July 2026. This release added native DiskANN and adaptive IVF indexes, IVF-RQ query-width controls and search optimizations, batched positional reads across C and Python, expanded architecture and API documentation, and reproducible source and multi-platform convenience-artifact release verification.

Stored-index upgrade noteVersion 0.3.0 intentionally does not read the experimental IVF-HNSW-FLAT (IHFL) and IVF-HNSW-SQ (IHSQ) files written by 0.2.x. Rebuild those indexes with a 0.3.0-supported index type during upgrade. Index files written by 0.3.0 are likewise not a safe rollback boundary for 0.2.x; retain source vectors or a 0.2-compatible index copy until the upgrade is accepted.

Source release · Release notes · Rust crate · Java artifacts · Python package

0.2.0

Released 7 July 2026. This release added batched vector-index training and hardened the multi-language release pipeline, Java staging, source JAR contents, and native wheel builds.

Source release · Release notes · Rust crate · Java artifacts · Python package

0.1.0

Released 22 June 2026. The first release established the Rust vector-index core, seek-based persisted readers, C/C++, Java/JNI, and Python APIs, bitmap filtering, batch search, storage-format validation, and the initial ANN benchmark suite.

Source release · Release notes · Rust crate · Java artifacts · Python package

Release guides

Creating a release

Prepare versions and dependency manifests, build and stage an RC, call the vote, and promote an approved release.

Release Manager guide →

Verifying a release candidate

Check provenance, signatures, checksums, archive contents, builds, tests, and staged language artifacts before voting.

Verification guide →