What's Changed
Bug Fixes
- Remove liburing-devel from pre-cxx11 Dockerfile by @wxyucs with @Copilot in #1566
- fix(hnsw): fix concurrent access to max_level_ in HNSW search operations by @inabao in #1573
- fix(iter_filter): add bound check for iter filter context by @inabao in #1588
- fix(memory_usage): conditionally call cal_memory_usage only on actual capacity changes by @LHT129 in #1587
- fix(sindi): fix error when neither doc nor query is relevant by @inabao in #1589
- fix(build): fix ASAN build failure in diskann by @inabao in #1604
- fix(datacell): restore total_count_ during deserialization by @inabao in #1621
- fix(datacell): fix resize logic to update size after expansion by @inabao in #1642
- fix(hgraph): restore total_count after deserialization by @inabao in #1647
- fix(quantization): add missing quantization types to IsValidQuantizationType by @LHT129 in #1668
- fix(quantization): add null check in TransformQuantizer Computer destructor by @LHT129 in #1664
- fix(datacell): fix memory leak in FlattenDataCell query on exception by @wxyucs with @Copilot in #1680
- fix(hgraph): fix potential out-of-bounds access in Merge function by @inabao in #1626
- fix: correct GetStats unsupported error message by @wxyucs in #1699
- fix(quantizer): prevent division by zero in ScalarQuantizer::EncodeOneImpl by @LHT129 in #1666
- fix(hgraph): serialize ignore_reorder field in ToJson() by @LHT129 in #1711
- fix(pyramid): add missing RaBitQ parameter mappings by @inabao in #1703
- fix(diskann): fix memory leak in search paths by using RAII by @LHT129 in #1733
- fix: add INVALID_ENTRY_POINT guard to iterative KnnSearch and RangeSearch by @wxyucs with @Copilot in #1742
- fix(io): correct IO type name in AsyncIOParameter JSON constructor by @LHT129 in #1723
- fix(hgraph): add null check in GetVectorByInnerId to prevent crash during Tune by @LHT129 in #1761
- fix(quantization): add missing constexpr and static_assert in INT8Quantizer::ComputeImpl by @LHT129 in #1719
- fix: make VsagException public inherit from std::exception by @inabao in #1776
- perf(build): skip boost library compilation, only copy headers by @inabao in #1773
- fix(build): make clean targets remove hidden files in build directories by @LHT129 in #1781
- fix(io): check mremap return value to prevent potential crash by @LHT129 in #1725
- fix(build): filter sanitizer flags for external projects by @LHT129 in #1794
- fix(json_wrapper): fix undefined behavior in copy constructor by @LHT129 in #1715
- fix: prevent crash when KnnSearch and Tune run concurrently by @wxyucs with @Copilot in #1764
- fix(hnsw): synchronize parallel add graph updates by @inabao in #1802
- fix: propagate iterator filter init failures in hnsw by @wxyucs in #1844
- fix(build): avoid sanitizer linker flags in external projects by @wxyucs in #1849
- Fix Check Compatibility CI Failure by @LHT129 in #1862
- fix(simd): link simd_test against simd by @wxyucs in #1857
- fix(ci): publish pyvsag wheels on release by @jac0626 in #1888
- test(transform): fix flaky Basic Hadamard Test by raising minimum threshold by @LHT129 in #1893
- fix(quantization): correct FP16/BF16 conversion in QuantizerAdapter::ProcessQueryImpl by @LHT129 in #1898
- fix(ci): use pr url to obtain contributors PR number by @wxyucs in #1919
- fix(ci): fetch remote branch before force-with-lease push by @wxyucs in #1921
- fix: make lint parse .clang-tidy Checks correctly by @jac0626 in #1928
- fix: fallback async_io param and warn when libaio is unavailable by @jac0626 in #1932
- fix: prevent memory leak when MemoryIO reallocate fails by @LHT129 in #1853
- fix: correct FP16 conversion and add BF16 support in search reasoning; exempt FP16 from NEED_TRAIN flag by @LHT129 in #1944
- test: stabilize hnsw feedback functest by @jac0626 in #1954
- fix: avoid memcmp on dataset path strings by @jac0626 in #1952
- fix: make filtered graph search deterministic by @wxyucs in #1970
- fix: keep HGraph count consistent after add OOM by @wxyucs in #1975
- fix: CalDistanceById batch interface returns -1 for invalid IDs by @LHT129 in #2006
- fix: avoid NaN recall in HGraph duplicate range-search functest by @jac0626 in #2013
- fix: alloc-dealloc-mismatch in 110_index_warp example by @LHT129 in #2011
- fix: compilation failure on newer gcc version by @pkusunjy in #1982
- fix: avoid empty fast bitset memcpy by @jac0626 in #1983
- fix: avoid OOM in release packaging by @wxyucs in #2042
- fix: guard scalar quantizer NaN encoding by @jac0626 in #1997
- fix: normalize missing CalcDistanceById results by @LHT129 in #2044
- fix(hgraph): make repeated force remove idempotent by @LHT129 in #2080
- fix: add null-check before buf_ allocation in ProcessQueryImpl by @mukejane in #2165
- fix: guard extra_info pointer arithmetic against nullptr in BruteForce::Add by @LHT129 in #2168
- fix(datacell): prevent uint32 multiplication overflow in FlattenDataCell::query by @LHT129 in #2188
- fix(allocator): use throw instead of throw e to prevent exception slicing by @LHT129 in #2178
- fix(rabitq): use fabs to skip near-zero dims in EncodeExtendRaBitQ by @LHT129 in #2197
- fix(ci): install deps for AArch64 example tests by @wxyucs in #2192
- fix(io): zero-initialize MemoryBlockIO blocks to prevent reverse edge corruption by @LHT129 in #2212
- fix(pyramid): set duplicate_query_id in add_one_point for duplicate detection by @LHT129 in #2208
- fix(cluster): correct x_sqr vector offset for non-first batches in KMeans BLAS path by @LHT129 in #2201
- fix(c_api): return error when index is NULL in vsag_index_add and vsag_index_train by @LHT129 in #2183
- fix(ci): add shell: bash to Run Examples step to fix silent skip by @jac0626 in #2218
- fix(io): zero-initialize buffer in BasicIO::Resize fallback path by @LHT129 in #2221
- fix(dataset): handle SourceID in DeepCopy, Append, and destructor by @LHT129 in #2199
- fix(datacell): avoid integer overflow in FlattenDataCell::MergeOther offset by @LHT129 in #2210
- fix: prevent int16 accumulator overflow in SQ4UniformComputeCodesIPImpl by @LHT129 in #2229
- fix(io): guard resource cleanup on error paths in AsyncIO and MMapIO by @jfeng18 in #2205
- fix: defer NumElements update in DatasetImpl::Append for exception safety by @LHT129 in #2190
- fix(datacell): memory leak in SparseVectorDataCell query and ComputePairVectors on exception path by @LHT129 in #2242
- fix(quantizer): use correct copy length in FP32Quantizer::DecodeBatchImpl by @LHT129 in #2181
- fix(ci): strip -Ofast/-ffast-math from third-party build flags by @LHT129 in #2246
- fix(datacell): validate ID ranges in DenseDuplicateTracker deserialization by @LHT129 in #2258
- fix(hgraph): add shared_lock in CalDistanceById to prevent crash with concurrent Tune by @LHT129 in #2247
- fix(hgraph): avoid undefined behavior on nullptr arithmetic in get_data by @LHT129 in #2279
- fix: correct bucket bias calculation in IVF merge when buckets_per_data > 1 by @LHT129 in #2261
- fix(hgraph): add force_remove_mutex_ shared lock in UpdateVector to prevent data race by @LHT129 in #2272
- fix(quantizer): add nullptr check in SQ4UniformQuantizer::ProcessQueryImpl by @LHT129 in #2269
- fix(io): block until all in-flight async reads complete in MultiReadImpl by @LHT129 in #2287
- fix(searcher): correct candidate_set sign and lower_bound in iterator drain path by @LHT129 in #2293
- fix(io): add nullptr check in AsyncIO::ReadImpl before memcpy by @LHT129 in #2231
- fix(label_table): eliminate TOCTOU race in MarkRemove by @LHT129 in #2271
- fix(hgraph): update parallel_searcher_ mutex in SetImmutable() by @LHT129 in #2329
- fix(c-api): add result cap to range_search and validate file open status by @LHT129 in #2320
- fix: reuse existing BlackListFilter on repeated Run() calls to prevent memory leak by @LHT129 in #2317
- fix(hgraph): add radius filtering after reorder in RangeSearch by @LHT129 in #2321
- fix(bruteforce): RangeSearch must exclude MarkRemove-deleted documents by @LHT129 in #2330
- fix(storage): guard footer parse for short streams by @LHT129 in #2326
- bug: filter check in visit stage breaks graph connectivity and reduces recall by @LHT129 in #2314
- fix(hgraph): avoid GetStats crash for RabitQ split by @LightWant in #2360
- fix(simq): remove AddMode parameter from SIMQ::Add by @LHT129 in #2373
- fix: add minimum sample count check in PCATransformer::Train by @LHT129 in #2173
- fix: compact SINDI sparse term lists by @Roxanne0321 in #2351
- fix: guard inner index binary deserialization by @jac0626 in #1984
- [codex] fix main lint failures by @Roxanne0321 in #2384
- fix: support RabitQ bucket quantization in IVF by @jac0626 in #2323
- fix(hgraph): expose skip_ratio and skip_strategy search parameters by @LHT129 in #2367
- fix: avoid null write during skip deserialize by @LHT129 in #2403
- fix(heap): bound non-fixed MemmoveHeap Push to prevent buffer overflow (topk<10) by @jac0626 in #2299
- fix: resolve clang-tidy linter failures by @wxyucs in #2430
- fix: avoid clang-tidy shared pointer leak reports by @wxyucs in #2433
New Features
- feat(diskann): support calculate distance by id in diskann by @inabao in #1553
- feat(remove): refactor Remove with mark remove mode by @LHT129 in #1551
- feat(platform): Add support for macOS (Darwin) by @stuBirdFly in #1439
- feat(io): add Resize API for efficient storage allocation by @LHT129 in #1571
- Add Copilot instructions for repository coding standards by @wxyucs with @Copilot in #1586
- feat: upgrade yaml-cpp from 0.8.0 to 0.9.0 by @wxyucs in #1591
- feat: support to build vsag with system OpenBLAS by @wxyucs in #1594
- feat: support downloading third parties from custom URLs by @wxyucs in #1606
- feat(index): add ShrinkAndRepair API with timeout by @LHT129 in #1613
- feat: replace CPR with cpp-httplib and add HTTP monitor server by @wxyucs in #1616
- feat(datacell): add CheckIdExists interface to Graph DataCell classes by @LHT129 in #1653
- feat(label_table): add hole list for reusable inner_id by @LHT129 in #1683
- feat(hgraph): implement ShrinkAndRepair for deleted node reclamation by @LHT129 in #1706
- python:modernize python build system with native CMake and support Python 3.13 & 3.14 by @jac0626 in #1599
- feat(hgraph): add reverse edge support for HGraph index by @LHT129 in #1747
- feat(dataset): add FP16/BF16 input vector support by @LHT129 in #1731
- feat(api): add reasoning support to SearchRequest, Dataset and QueryContext by @LHT129 in #1838
- feat: add Node.js/TypeScript bindings and quickstart examples by @jiaweizone in #1812
- feat(reasoning): implement ReasoningContext data collector by @LHT129 in #1839
- feat(hgraph): add remove support for graph indexes by @LHT129 in #1810
- feat(warp): add multi-vector interface and brute force implementation by @xfmeng17 in #1945
- feat(sindi): add built-in term ID remapping for sparse vocabularies by @liric24 in #1961
- feat: add MultiVector dataset support and migrate WARP to MultiVectors API by @xfmeng17 in #1995
- [skip ci] feat: add AI-agent-assisted issue drafting workflow by @wxyucs in #2007
- feat(hgraph): integrate reasoning mechanism for search diagnostics by @LHT129 in #1911
- feat: support Pyramid ExportModel by @wxyucs in #2034
- feat(python): add sparse HDF5 dataset helpers for pyvsag by @wxyucs in #2036
- feat(simd): add AMX backends — SQ8U INT8 IP and BF16 GEMM for KMeans by @wxyucs in #2032
- Add SINDI analyze support by @Roxanne0321 in #2018
- feat: support parallel brute force range search by @wxyucs in #2040
- feat(eval): support multi-vector datasets by @LHT129 in #2031
- feat: add RabitQ split base reorder support by @LightWant in #1980
- feat: add MultiVectorDataCell for ColBERT-style multi-vector storage by @xfmeng17 in #2076
- feat: support disabling reorder through search params by @LHT129 in #2078
- feat: add Source ID support and cache export/import for HGraph by @LHT129 in #2093
- feat(hgraph): switch to brute-force search on low valid_ratio by @wxyucs in #2115
- feat: support system-installed OpenBLAS via VSAG_USE_SYSTEM_DEPS by @wxyucs in #2117
- feat(hgraph): accelerate Build by warm-starting from an imported cache by @LHT129 in #2114
- feat(hgraph): add support_force_remove switch by @LHT129 in #2086
- feat: use tl::unexpected in Index default implementations by @LHT129 in #2141
- feat: define pyramid named hierarchy API parameters by @jac0626 in #2104
- feat(pyramid): implement multi-hierarchy Build/Add/Search by @jac0626 in #2226
- feat: add SIMQ multi-vector retrieval index by @Sia-Sheerland in #2357
- feat: integrate reasoning into IVF search by @LHT129 in #2345
- feat: expose mrle_dim parameter to HGraph public API by @LHT129 in #2371
- feat(common): add
reprfield to IndexCommonParam by @LHT129 in #2379 - feat(sindi): add low-memory immutable build by @Roxanne0321 in #2424
- feat(serialization): add streaming serialization foundation by @wxyucs in #2256
Improvements
- refactor(inner_index): remove default thread pool during index creation by @inabao in #1558
- refactor(api): update public API comments by @wxyucs in #1554
- refactor(smart_pointer): replace shared_ptr with unique_ptr for better performance by @LHT129 in #1570
- feat(example): add HGraph extra_info usage example by @inabao in #1577
- refactor(duplicate): refactor record array for duplicate by @inabao in #1563
- refactor(example): simplify sindi example by @inabao in #1584
- enhance(label_table): use robin_pg_map instead of unordered_map by @inabao in #1592
- refactor(pyramid): modify default value of pyramid thread pool by @inabao in #1595
- refactor(test): unify filter logic based on ID and extra-info by @inabao in #1600
- feat(pyramid): move topk_factor to IndexSearchParameter base class by @inabao in #1605
- refactor(tests): migrate Python tests to pytest framework by @LHT129 in #1619
- refactor(quantizer): deduplicate batch methods in CRTP base class by @LHT129 in #1624
- feat(hgraph): add hops_limit search parameter by @inabao in #1620
- chore(ci): remove pull_request trigger from coverage workflow by @LHT129 in #1675
- fix: add missing namespaces for stream serialization helpers by @wxyucs in #1669
- perf(simd): optimize FP32 distance computation with reduce and templa… by @LHT129 in #1625
- refactor(hnsw,io): correct error type for memory allocation by @inabao in #1658
- fix(quantization): add null pointer check in Computer destructor by @LHT129 in #1662
- chore(ci): migrate compatibility indexes from git branch to GitHub Releases by @LHT129 in #1692
- test: add unit coverage for utils module by @wxyucs in #1700
- fix(ci): improve index upload logic to compatibility-indexes release by @LHT129 in #1708
- refactor(io): replace C-style cast with C++ style cast by @LHT129 in #1641
- refactor(io): extract platform-specific syscalls to IOSyscall by @LHT129 in #1629
- fix(datacell): add virtual destructor to ExtraInfoInterface by @LHT129 in #1717
- perf(label_table): add TryGetIdByLabel to avoid exception overhead by @inabao in #1701
- feat(analyzer): implement duplicate detection in GetDuplicate by @inabao in #1705
- chore(build): isolate MKL and OpenBLAS paths by @wxyucs in #1709
- perf(pyramid): trim flat search path overhead by @wxyucs in #1713
- fix: use quoted project includes in search_param.h by @wxyucs in #1712
- refactor: decentralize factory and python bindings by @wxyucs in #1697
- feat(ci): merge workflows into unified PR CI with path filtering by @LHT129 in #1744
- refactor: replace spdlog with internal default logger by @wxyucs in #1750
- refactor: reorganize and clean up cmake configuration by @wxyucs in #1762
- perf(cluster): optimize KMeans algorithm with K-means++ and parallel improvement by @LHT129 in #1737
- test(impl): add unit tests for untested components in impl module by @LHT129 in #1728
- refactor(hnsw): remove static HNSW implementation by @LHT129 in #1784
- perf(build): reduce diskann static library size by @LHT129 in #1792
- style: unify 'constexpr static' to 'static constexpr' by @LHT129 in #1782
- fix: unify virtual/override keyword usage in destructors by @LHT129 in #1763
- ci(mergify): upgrade configuration to current format by @mergify[bot] in #1799
- chore: change default value of ENABLE_INTEL_MKL to OFF and trigger Python Build X86 on CMake changes by @wxyucs with @Copilot in #1806
- refactor(scripts): dynamic compatibility index list from release files by @LHT129 in #1813
- docs(clang-tidy): Switched from > to | in .clang-tidy to pr… by @pkusunjy in #1828
- refactor(tests): modularize fixtures and split functest/unittest include by @LHT129 in #1821
- build: slim default build targets by @wxyucs in #1796
- chore: enforce kind and version labels on PRs via Mergify by @wxyucs in #1850
- ci(mergify): upgrade configuration to current format by @mergify[bot] in #1854
- chore: replace all-contributors with contributors-readme-action by @wxyucs in #1856
- refactor(simd): unify SIMD dispatch cascades via shared macros by @LHT129 in #1871
- ci: skip heavy builds on docs-only changes by @wxyucs in #1885
- chore(ci): allow manual dispatch for docs sync workflow by @wxyucs in #1897
- chore(ci): skip docs-only changes on push-triggered workflows by @wxyucs in #1901
- refactor(quantizer): eliminate code redundancy in FP16/BF16 quantizers using template by @LHT129 in #1855
- test(fixtures): use fixed seed for reproducible test data generation by @LHT129 in #1872
- test: add timestamp to UT log output by @LHT129 in #1909
- chore: make fmt and lint compatible with macOS (Homebrew llvm@15) by @jac0626 in #1906
- Unify exception types to use VsagException by @LHT129 in #1852
- test: normalize functest tag system by @LHT129 in #1902
- perf(index): replace stats_mutex_ with lock-free atomic counter in WindowResultQueue by @LHT129 in #1721
- test: move expression_visitor test from functests to unittests by @LHT129 in #1895
- chore: remove ShrinkAndRepair API and related shrink code by @LHT129 in #1924
- refactor(quantization): remove redundant DataType alias by @LHT129 in #1938
- fix: reduce PGUnorderedMap overhead in label indexes by @LHT129 in #1940
- ci: skip tsan for markdown-only pull requests by @wxyucs in #1972
- chore: harden C++ release workflow by @wxyucs in #1971
- refactor: remove RemoveMode backward-compatible aliases by @LHT129 in #1978
- fix: make public headers self-contained by @LHT129 in #1987
- feat(simd): add SIMD implementations for NormalizeWithCentroid by @LHT129 in #1926
- refactor: deduplicate hgraph and ivf functests by @LHT129 in #1993
- ci: correctly skip tsan for markdown-only pull requests by @wxyucs in #2000
- feat: allow selecting inner index label remap map by @LHT129 in #1981
- refactor: split typing aliases and slim common param includes by @LHT129 in #1991
- ci: skip coverage workflow for markdown-only pushes by @wxyucs in #2038
- ci: require linked issue for kind/bug and kind/feature PRs by @wxyucs in #2039
- feat: add HGraph duplicate distance threshold by @LHT129 in #2051
- test: split TestIndex implementation into focused files by @LHT129 in #2058
- refactor(hgraph): create hgraph directory and split cpp files by @LHT129 in #2030
- build: install CMake package config and set library SOVERSION by @wxyucs in #2106
- chore: add Apache 2.0 license headers to remaining source files by @wxyucs in #2107
- refactor(label_table): extract LabelRemap class and remove Hole functionality by @LHT129 in #2089
- chore(docker): split ci-x86 image into base / mkl / openblas variants by @wxyucs in #2119
- feat(sparse): add optional token_sequences to sparse HDF5 datasets by @Roxanne0321 in #2111
- fix: honor system dependency setting in Makefile by @wxyucs in #2122
- ci: switch fast-path jobs to system OpenBLAS and split-image tags by @wxyucs in #2120
- refactor(algorithm): move scattered index implementations into dedicated subdirectories by @LHT129 in #2127
- feat(python): unify FP16/BF16 dense binding interfaces by @LHT129 in #1946
- chore: bundle dependencies for release artifacts by @wxyucs in #2142
- refactor(algorithm): extract common search helpers to InnerIndexInterface base class by @LHT129 in #2139
- fix(hgraph): correct build-cache source_id mapping and improve warm-start performance by @misaka0714 in #2125
- build: install OpenBLAS in dependency scripts by @wxyucs in #2143
- chore: align coverage threshold check by @wxyucs in #2149
- test: add coverage tests for rabitq_split, mmap_io, warp, and c_api by @LHT129 in #2148
- refactor(parameter): introduce macros to eliminate CheckCompatibility boilerplate by @LHT129 in #2153
- fix: expand Pyramid ef search for large topk by @jac0626 in #2162
- fix(ci): keep docs sync branch aligned by @wxyucs in #2159
- build: support system fmt dependency by @wxyucs in #2169
- perf(simd): optimize AVX-512 reductions and remove dead allocation by @jfeng18 in #2155
- perf(hgraph): skip mutex acquisition on immutable index search by @jfeng18 in #2154
- perf: avoid unnecessary copies in ConjugateGraph::Serialize loop by @LHT129 in #2161
- feat: add LazyHGraph index by @Roxanne0321 in #2151
- refactor(simd): unify cross-ISA implementations via traits + kernel templates by @LHT129 in #2156
- ci: add aarch64 CI docker images and run arm jobs in containers by @wxyucs in #2198
- perf(sindi): grow sparse term list safely by @Roxanne0321 in #2195
- perf(simd): use dual accumulators in SQ4 kernel templates for better ILP by @jfeng18 in #2227
- feat(hgraph): Refactor HGraph node refinement with immediate neighbor writeback by @misaka0714 in #2174
- Remove SO version suffix from libvsag.so by @LHT129 in #2224
- refactor: extract total_count_ to InnerIndexInterface base class by @LHT129 in #2157
- feat(hgraph): expose ImportCache build hit-rate via GetStats by @LHT129 in #2238
- feat(pyramid,sindi,warp): add MARK_REMOVE support by @LHT129 in #2136
- refactor(searcher): remove dead to_be_visited_rid allocation and writes by @LHT129 in #2251
- test(reasoning): add comprehensive test coverage for ReasoningContext by @LHT129 in #2267
- refactor(algorithm): merge WARP into BruteForce as multi-vector mode by @LHT129 in #2275
- feat(rabitq): support split hybrid IO and 3+5 base reorder by @LightWant in #2112
- test: enhance quantization test coverage and quality by @LHT129 in #2316
- ci: reuse ASan build artifacts for compatibility check by @LHT129 in #2342
- test: optimize TSAN CI test performance by @LHT129 in #2344
- ci: run clang-tidy only on changed files in PR CI by @LHT129 in #2339
- fix: resolve src/ circular dependencies and establish unidirectional layering by @LHT129 in #2348
- refactor(index): unify KnnSearch/RangeSearch into SearchWithRequest for IVF/HGraph/BruteForce by @LHT129 in #2341
- refactor: remove unused AddMode parameter from Index::Add by @LHT129 in #2366
- feat(sindi): support immutable reads and sparse fp16 values by @Roxanne0321 in #2296
- feat(bruteforce): integrate reasoning mechanism for search diagnostics by @LHT129 in #2328
- Fix/sindi auto heap insert by @Roxanne0321 in #2147
- feat(lazy_hgraph): support extra info filtering by @Roxanne0321 in #2263
- feat(sindi): use sparse vector datacell and remove sparse index by @Roxanne0321 in #2056
- [codex] Add macOS build and PR CI support by @jac0626 in #1930
- perf: optimize rabitq split 3-bit filtering by @LightWant in #2390
- fix(hgraph): optimize rabitq split 2bit search by @LightWant in #2407
- refactor(io): split io files into subdirectories by @LHT129 in #2393
- test(diskann): reduce pq_dim test runs from 3 to 1 in PR CI by @LHT129 in #2404
- fix: rename MMapIO::start_ to mapped_ptr_ to avoid shadowing BasicIO::start_ by @LHT129 in #2398
- feat(logger): support VSAG_LOG_LEVEL by @wxyucs in #2414
- feat: unify memory statistics API signatures by @LHT129 in #2388
- feat(simq): add search statistics by @LHT129 in #2418
Other Changes
- [skip ci] docs: add SINDI algorithm documentation by @inabao in #1572
- fix(reader_io): fix missing parameter when deserialize index by @inabao in #1597
- [skip ci]Update Roadmap in README.md by @wxyucs in #1560
- fix(io): add MAP_FAILED error check for mmap by @LHT129 in #1655
- chore(io): remove unused io_read_object.h file by @LHT129 in #1640
- optimize: avoid repeated align param calculation in DirectIOObject.Set by @LHT129 in #1638
- feat(python): extend Python bindings with additional index operations by @LHT129 in #1678
- [skip ci] docs: add Claude guidance for coding agents by @wxyucs in #1686
- [skip ci] chore: complete P0 workflow hygiene by @wxyucs in #1693
- refactor(quantizer): extract mapper array as static class member by @LHT129 in #1671
- chore: simplify CODEOWNERS to require all four maintainers for every … by @wxyucs in #1702
- docs(quantization): add layout diagrams for all quantizer types by @LHT129 in #1688
- fix(diskann): normalize data for COSINE metric in PQ quantization by @inabao in #1745
- fix(hgraph): enable continuous shrink processing in HGraphShrinkContext by @LHT129 in #1790
- [skip ci] docs(readme): refresh publications list by @inabao in #1803
- fix: narrowing conversion warnings by @pkusunjy in #1800
- feat(pyramid): add PyramidAnalyzer for index statistics and diagnostics by @inabao in #1766
- refactor(reverse_edge): move reverse edge logic from HGraph to graph datacell by @LHT129 in #1805
- refactor(hgraph): move duplicate tracking to graph layer by @inabao in #1797
- docs: add arXiv badges for all publications in README by @wxyucs in #1811
- docs(io): add Doxygen comments for src/io directory by @LHT129 in #1817
- chore(docs): refactor docs/ dir and add GH Action to sync docs by @wxyucs in #1333
- docs(contributor): contributors readme action update by @github-actions[bot] in #1859
- docs: add AGENTS.md for openai codex and gitignore .DS_Store by @xfmeng17 in #1866
- [skip ci] docs: restructure docs/blog for mdbook and rewrite sync workflow by @wxyucs in #1882
- docs: correct 'last updated' date in contributors list by @wxyucs in #1883
- docs(contributor): contributors readme action update by @github-actions[bot] in #1884
- [skip ci] docs: refresh zh/en guides and mirror full en docs by @wxyucs in #1886
- docs(contributor): contributors readme action update by @github-actions[bot] in #1903
- docs(landing): add copy buttons, refine indexes table, update ecosystem by @wxyucs in #1910
- docs(indexes): add dedicated pages for HGraph, IVF, SINDI, Pyramid by @wxyucs in #1914
- fix(ci): stabilize contributors readme updates by @wxyucs in #1913
- docs(contributor): contributors readme action update by @github-actions[bot] in #1922
- docs: add language toggle button on docs, blogs and landing by @wxyucs in #1925
- docs: reorganize documentation navigation by @wxyucs in #1934
- docs: add Index Analysis page for AnalyzeIndexBySearch and analyze_index tool by @wxyucs in #1941
- docs(contributor): contributors readme action update by @github-actions[bot] in #1935
- docs: fix CMake quickstart example by @wxyucs in #1948
- docs(contributor): contributors readme action update by @github-actions[bot] in #1956
- docs: update eval_performance tool documentation by @wxyucs in #1967
- docs(contributor): contributors readme action update by @github-actions[bot] in #1988
- docs: clarify CalcDistanceById/CalDistanceById overload usage by @LHT129 in #1992
- docs: update sindi parameter descriptions by @Roxanne0321 in #1998
- [skip ci] docs: align AI sign-off rules with Linux kernel policy by @wxyucs in #2001
- docs: add user guide for extra_info feature by @wxyucs in #2004
- docs(contributor): contributors readme action update by @github-actions[bot] in #2003
- docs(site): add Google Analytics (gtag.js) to vsag.io by @wxyucs in #2010
- docs: add filtered search and attribute (hybrid) search guides by @wxyucs in #2016
- docs: add HDF5 dataset format page to Resources by @wxyucs in #2019
- docs: add Index Lifecycle Management page by @wxyucs in #2020
- docs: add BruteForce index page (en + zh) by @wxyucs in #2023
- docs: expand memory page and add Index Introspection page by @wxyucs in #2021
- docs: document non-fp32 input types for HGraph by @wxyucs in #2022
- docs: add Build and Train page (Train API + ODescent) by @wxyucs in #2024
- docs(contributor): contributors readme action update by @github-actions[bot] in #2035
- docs: reorganize agent guidance by @wxyucs in #2033
- docs: add Per-Search Allocator advanced page by @wxyucs in #2025
- docs: add extensibility guide for advanced features by @wxyucs in #2026
- docs: add Quantization Transform advanced page by @wxyucs in #2027
- docs(contributor): contributors readme action update by @github-actions[bot] in #2041
- docs: add metric semantics note by @wxyucs in #2043
- docs(contributor): contributors readme action update by @github-actions[bot] in #2048
- docs: update Google Analytics tracking tag by @wxyucs in #2065
- docs: document CalcDistanceById and CalDistanceById APIs by @wxyucs in #2067
- docs: refresh site logo across landing page and mdbook subsites by @wxyucs in #2075
- docs: add Quantization chapter with per-quantizer reference pages by @wxyucs in #2074
- docs: add agent guide for filing GitHub issues by @wxyucs in #2082
- docs(indexes): add overview SVG diagrams for each index by @wxyucs in #2091
- docs: add per-language README to examples/{cpp,python,typescript}/ by @wxyucs in #2109
- docs: add iterator search page (EN/ZH) by @wxyucs in #2110
- docs(contributor): contributors readme action update by @github-actions[bot] in #2084
- docs(hgraph): document brute_force_threshold and add example by @wxyucs in #2124
- refactor: remove tombstone recovery functionality by @LHT129 in #2134
- docs: consolidate documentation entry points by @wxyucs in #2150
- docs(contributor): contributors readme action update by @github-actions[bot] in #2146
- docs(contributor): contributors readme action update by @github-actions[bot] in #2184
- docs: use HGraph in example snippets instead of deprecated HNSW by @wxyucs in #2203
- docs(contributor): update contributors list and sync zh page by @wxyucs in #2191
- docs(contributor): contributors readme action update by @github-actions[bot] in #2225
- docs(contributor): contributors readme action update by @github-actions[bot] in #2248
- docs(pyramid): add multi-hierarchy example and documentation by @jac0626 in #2252
- docs: add offline / internal-mirror third-party build guide by @wxyucs in #2307
- docs: remove hnsw/diskann references from user-facing docs by @wxyucs in #2343
- docs: add Doxygen comments to InnerIndex subclass headers by @LHT129 in #2338
- docs: add FAQ documentation by @wxyucs in #2362
- refactor: migrate test_index_old tests to target files and remove redundant file by @LHT129 in #2361
- docs: add HGraph-based disk index best practices guide by @wxyucs in #2382
- docs: add C++ public API reference (en + zh) by @wxyucs in #2391
New Contributors
- @mergify[bot] made their first contribution in #1799
- @pkusunjy made their first contribution in #1800
- @jiaweizone made their first contribution in #1812
- @xfmeng17 made their first contribution in #1866
- @liric24 made their first contribution in #1961
- @LightWant made their first contribution in #1980
- @mukejane made their first contribution in #2165
- @jfeng18 made their first contribution in #2155
- @Sia-Sheerland made their first contribution in #2357
Full Changelog: v0.18.0...v1.0.0