Skip to content

v1.0.0

Latest

Choose a tag to compare

@wxyucs wxyucs released this 12 Jul 14:41
efdaf17

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 repr field 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

Full Changelog: v0.18.0...v1.0.0