microsoft/DiskANN v0.53.0
microsoft/DiskANN
Captured source
source ↗DiskANN v0.53.0
Repository: microsoft/DiskANN
Tag: v0.53.0
Published: 2026-05-28T16:01:28Z
Prerelease: no
Release notes:
DiskANN v0.53.0 Release Notes
Breaking Changes
An AI generated, human reviewed list of changes is summarized below.
Paged search overhauled — channel-based API (#1078)
PagedSearchState and its 'static-bound pause/resume model have been replaced with an async, channel-based interface. The recommended way to drive paged search is now via a tokio::sync::mpsc channel, with the searcher embedded in an otherwise-'static future. See the rendered RFC for the new shape. Callers wired against PagedSearchState must migrate to the channel API.
Users of paged search via wrapped_async::DiskANNIndex that know their inner futures will never suspend can use the new wrapped_async::DiskANNIndex::paged_search_no_await; this will efficiently run paged searches with minimal synchronization overhead.
DiskANNIndex::flat_search removed (#1076)
DiskANNIndex::flat_search and the IdIterator trait have been removed from the diskann crate. Equivalent functionality lives on the new inherent method DiskIndexSearcher::flat_search in diskann-disk. This unblocks the experimental directions in #1067 and #983.
// Before diskann_index.flat_search(query, ...)?; // After disk_index_searcher.flat_search(query, ...).await?;
DiskIndexSearcher::flat_search now batched (#1097)
The new DiskIndexSearcher::flat_search uses the bulk pq_distances path instead of one-vector-at-a-time Accessor::build_query_computer + evaluate_similarity. Downstream behavior is equivalent but tighter resource bounds apply.
centroid removed from PQ interfaces (#1010)
The dataset-centroid argument has been removed from FixedChunkPQTable construction, populate, and most other PQ APIs. The shift only ever worked for L2 distance and was silently ignored for inner-product / cosine, so passing it was a footgun. When an L2 shift is required, fold it into the PQ pivots instead (the library now does this internally).
// Before let table = FixedChunkPQTable::new(.., centroid, ..); // After — drop the centroid argument let table = FixedChunkPQTable::new(.., ..);
Flat search interface (#983)
A new flat module in diskann adds a provider-agnostic brute-force search surface, mirroring the shape of graph search. Backends implement a single trait, DistancesUnordered (in flat/strategy.rs), which fuses iteration and distance computation, allowing any backend (in-memory, quantized, disk, remote) to plug into a shared algorithm. See the rendered RFC. This is additive but is the new canonical surface — direct ad-hoc flat-search call sites should migrate.
bf_tree extracted into diskann-bftree crate (#1020)
The bf_tree provider has been moved out of diskann-providers (previously at diskann-providers/src/model/graph/provider/async_/bf_tree/) into a new standalone diskann-bftree crate. Along with the move:
- Switched from PQ to spherical quantization.
- Dropped dependencies on
DeletionCheck,AsDeletionCheck, andRemoveDeletedIdsAndCopy. - Simplified generics.
Consumers must update their Cargo.toml to depend on diskann-bftree and update import paths.
direct_distance_impl and inner_product_raw re-exposed (#1081)
direct_distance_impl (free function) and FixedChunkPQTable::inner_product_raw are pub again after being privatized in #1044. Restored to unblock a downstream user. Not breaking in the typical direction — this restores previously available API surface.
MinMax recompress takes a grid-scale parameter (#1109)
The MinMax recompress API now accepts a grid-scale parameter.
New Features
- SIMD-optimized L2-squared norm (#1107)
- Significantly faster bitmap computation (#1099)
- Large speedup on the bitmap construction path used by filtered search.
- LLVM IR bloat regression check in CI (#1083)
- CI now flags regressions in generated LLVM IR size, helping catch unintended monomorphization blow-ups.
- Recall computation fix for under-k groundtruth (#1069)
Full List of Changes
- [CI] Try to fix publishing step by @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1057
- Revise README for DiskANN3 by @harsha-simhadri in https://github.com/microsoft/DiskANN/pull/1046
- [benchmark] Remove
DispatchRuleby @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1064 - [benchmark] Automatic Input Registration by @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1066
- Remove centroid from most PQ interfaces. by @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1010
- [diskann/disk] Remove
flat_searchfromDiskANNIndexby @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1076 - macos build and miri check to nightly by @harsha-simhadri in https://github.com/microsoft/DiskANN/pull/1058
- [API] Make some methods public again. by @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1081
- [benchmark] Simply
Inputsmore. by @hildebrandmw in https://github.com/microsoft/DiskANN/pull/1077 - Turn on stack protection for the diskann-garnet NuGet build by @metajack in https://github.com/microsoft/DiskANN/pull/1082
- Fix options for diskann-garnet nuget pipeline by @metajack in https://github.com/microsoft/DiskANN/pull/1091
- [CI] add LLVM IR bloat regression check by @arrayka in https://github.com/microsoft/DiskANN/pull/1083
- Bump openssl from 0.10.79 to 0.10.80 by @dependabot[bot] in https://github.com/microsoft/DiskANN/pull/1093
- [Disk CI benchmarks] Use 1ES.Pool=diskann-github by @arrayka in https://github.com/microsoft/DiskANN/pull/869
- Fix recall computation for fewer than k groundtruth results by…
Excerpt shown — open the source for the full document.
Notability
notability 3.0/10Routine version release, no notable traction