All notable changes to this project are documented here. Format follows Keep a Changelog; this project adheres to Semantic Versioning.
- Breaking change: Saved indexes now use a durable snapshot format that
0.7.0 and earlier cannot read. Callers must upgrade to 0.8.0 and recreate or
re-save indexes before sharing them with older deployments; existing legacy
directories remain readable.
- Interrupted or concurrent saves no longer destroy the last complete snapshot
or combine files from different snapshots.
- Loading now rejects metadata without an
:index-sha256 checksum instead of
accepting an unverified index/metadata pair. - Sparse vectors with different numbers of indices and values now fail with
:vector-search/error :invalid-vector instead of being silently truncated.
- Added nearest-neighbor lookup by an existing item ID with
find-neighbors. - Added
items for enumerating indexed items without exposing hnswlib objects. - Added
as-exact-index for an exhaustive snapshot of an HNSW index. - Added native sparse-vector inner-product indexes with
:sparse-dot.
- Added custom Clojure distance functions with explicit higher-is-better or
lower-is-better score direction.
- Custom-distance indexes fail early when saved because arbitrary functions
cannot be reliably reconstructed during deserialization.
- Added Manhattan, correlation, Canberra, and Bray-Curtis distance metrics.
- Sort order and hybrid dense/sparse fusion now whitelist
:cosine and
:dot as similarity metrics (higher is better) instead of hard-coding
:euclidean as the only "lower is better" metric, so the new distance
metrics sort correctly.
- Index snapshots are written atomically: both files are staged to temporary
files and atomically renamed, and a SHA-256 of
index.bin is recorded in the
sidecar and verified on load, so a load can no longer pair mismatched files. search honors :ef for HNSW indexes instead of silently ignoring it.
- BM25 sparse retrieval.
- Hybrid dense+sparse search with RRF and weighted fusion.
- Indexed metadata filter DSL with
eq, in, range, and, or, and not operators.
- POM now includes the project description, homepage URL, and full SCM connection metadata, so Clojars shows a description/homepage and cljdoc has complete source-link data.