MCPcopy Create free account
hub / github.com/VectorDB-NTU/RaBitQ-Library

github.com/VectorDB-NTU/RaBitQ-Library @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
9,529 symbols 17,318 edges 370 files ⚖ Apache-2.0 694 documented · 7% updated 2d agov0.2.1 · 2026-09-02★ 2695 open issues

Browse by type

Functions 6,934 Types & classes 2,595
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

RaBitQ Library

Compact vectors. Accurate distances. Fast ANN search.

A research-backed C++17 library with Python bindings for 1-bit and multi-bit

vector quantization, IVF, HNSW, and SymphonyQG.

PyPI Python versions Documentation Paper DOI License

Documentation · Python package · Paper · Releases

Install

pip install rabitqlib

Prebuilt wheels support Linux x86-64 and CPython 3.11–3.14. AVX2 + FMA is the portable CPU baseline; supported AVX-512 kernels are selected at runtime.

RaBitQ across the vector-search ecosystem

Milvus logo Milvus Faiss logo Faiss NVIDIA cuVS logo NVIDIA cuVS Microsoft DiskANN logo Microsoft DiskANN VSAG logo VSAG
VectorChord logo VectorChord Volcengine OpenSearch logo Volcengine OpenSearch CockroachDB logo CockroachDB Elasticsearch logo Elasticsearch Apache Lucene logo Apache Lucene
turbopuffer logo turbopuffer Zvec logo Zvec LanceDB logo LanceDB Databricks logo Databricks ClickHouse logo ClickHouse
Qdrant logo Qdrant Weaviate logo Weaviate

Accuracy at a glance

RaBitQ estimation error benchmark across MSong, YouTube, OpenAI embeddings, Word2Vec, and GIST

Average and maximum relative estimation error across six datasets; lower is better. Results from the SIGMOD camera-ready paper.

Why RaBitQ?

Compact by design Choose 1-bit or multi-bit codes to match your memory and accuracy target.
Accurate estimates An asymptotically optimal theoretical error bound supports reliable ordering and reranking.
Fast on x86-64 Dedicated AVX2 and AVX-512 kernels are selected through runtime CPU dispatch.
Ready for ANN search Use the quantizer directly or build complete IVF, HNSW, and SymphonyQG indexes.

The library supports Euclidean distance and inner product. Cosine search is available by normalizing vectors before using inner product.

RaBitQ is developed by the VectorDB group at Nanyang Technological University, Singapore. A GPU implementation is also available in cuvs_rabitq.

Python quick start

The following complete example builds a small IVF index and searches it. It uses deterministic synthetic data, so no dataset download is required.

import numpy as np
from rabitqlib import IvfIndex

rng = np.random.default_rng(42)
data = rng.standard_normal((500, 64)).astype(np.float32)
queries = rng.standard_normal((5, 64)).astype(np.float32)

# Assign vectors to five clusters and calculate their centroids.
cluster_ids = (np.arange(len(data)) % 5).astype(np.uint32)
centroids = np.stack(
    [data[cluster_ids == cluster].mean(axis=0) for cluster in range(5)]
).astype(np.float32)

index = IvfIndex(
    dim=64,
    max_elements=len(data),
    num_clusters=5,
    nbits=4,
    metric="l2",
)
index.build(data, centroids, cluster_ids)

ids, distances = index.search(queries, k=10, nprobe=5)
print(ids.shape, distances.shape)  # (5, 10) (5, 10)
print(ids[0])

Python bindings are also available for HnswIndex and SymqgIndex. See the Python examples for index construction, querying, and index persistence.

Build the Python bindings from source

Source builds require a C++17 compiler, CMake 3.15 or newer, and OpenMP. On Ubuntu or Debian:

sudo apt-get update
sudo apt-get install -y build-essential cmake libomp-dev
git clone https://github.com/VectorDB-NTU/RaBitQ-Library.git
cd RaBitQ-Library
python -m pip install .

C++ quick start

Requirements

  • CMake 3.15 or newer
  • a C++17 compiler with OpenMP support
  • an x86-64 CPU supported by the selected kernels: most paths accept either AVX2 with FMA or AVX-512F/BW/DQ with FMA

CPU dispatch details

Most SIMD entry points select AVX-512 kernels when AVX-512F, AVX-512BW, and AVX-512DQ are detected; otherwise they use AVX2 when AVX2 and FMA are available. AVX-512 VPOPCNTDQ enables additional popcount kernels. The HNSW AVX-512 core path also checks for AVX2 and FMA. AVX-512 translation units are compiled with FMA enabled.

Clone and build the library and example programs:

git clone https://github.com/VectorDB-NTU/RaBitQ-Library.git
cd RaBitQ-Library

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel

Release builds enable native CPU tuning by default. To build a binary that can be moved between AVX2- and AVX-512-capable machines, configure with -DRABITQ_ENABLE_NATIVE_OPTIMIZATION=OFF; the ISA-specific kernels will still be selected at runtime.

The index example executables are written to bin/. Their source code shows the complete indexing and querying workflows:

A separate RaBitQ quantization example demonstrates the lower-level quantizer API; it is provided as source and is not currently a CMake target.

To build and run the C++ test suite:

cmake -S . -B build -DRABITQ_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
ctest --test-dir build --output-on-failure

GoogleTest is downloaded during test configuration. For a full benchmark on the GIST dataset, see example.sh. More detailed API and algorithm guidance is available in the documentation.

Choose the right building block

Component Best fit Storage and search profile
Quantizer Integrating RaBitQ into an existing system Low-level 1-bit or multi-bit encoding and distance estimation.
IVF Memory-efficient partitioned search Stores quantized codes without retaining the raw dataset.
HNSW Graph search with compact vectors Adds graph links and searches directly from quantized codes.
SymphonyQG Query speed when more memory is available Retains raw vectors and stores per-neighborhood quantization data.

IVF and SymphonyQG use FastScan for batched estimates, while HNSW uses single-code AVX2 or AVX-512 kernels.

In typical workloads, 4-bit, 5-bit, and 7-bit quantization can achieve roughly 90%, 95%, and 99% recall, respectively, without reranking. Actual results depend on the dataset, index configuration, and search parameters.

Citation

If RaBitQ helps your research or system, please cite:

Jianyang Gao, Yutong Gou, Yuexuan Xu, Yongyi Yang, Cheng Long, and Raymond Chi-Wing Wong. “Practical and Asymptotically Optimal Quantization of High-Dimensional Vectors in Euclidean Space for Approximate Nearest Neighbor Search.” Proceedings of the ACM on Management of Data 3, 3, Article 202 (June 2025), 26 pages. https://doi.org/10.1145/3725413.

Contributing

Contributions are welcome. See the contributing guide for the build, formatting, pre-commit, and static-analysis workflows.

Acknowledgements

RaBitQ Library is developed by Yutong Gou, Jianyang Gao, Yuexuan Xu, Jifan Shi, and Zhonghao Yang. We thank Alexandr Guzhva, Li Liu, Chao Gao, Silu Huang, Jiabao Jin, Xiaoyao Zhong, and Jinjing Zhou for their valuable feedback.

License

RaBitQ Library is available under the Apache License 2.0.

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 3,495
Method 3,439
Class 2,556
Enum 39

Languages

C++100%
Python1%

Modules by API surface

include/rabitqlib/third/Eigen/src/Core/arch/NEON/PacketMath.h773 symbols
include/rabitqlib/third/Eigen/src/Core/arch/NEON/TypeCasting.h283 symbols
include/rabitqlib/third/Eigen/src/Core/arch/AltiVec/PacketMath.h281 symbols
include/rabitqlib/third/Eigen/src/Core/arch/AVX512/PacketMath.h210 symbols
include/rabitqlib/third/Eigen/src/Core/MathFunctions.h193 symbols
include/rabitqlib/third/Eigen/src/Core/arch/AVX/PacketMath.h192 symbols
include/rabitqlib/third/Eigen/src/Core/functors/UnaryFunctors.h191 symbols
include/rabitqlib/third/Eigen/src/Core/arch/SSE/PacketMath.h190 symbols
include/rabitqlib/third/Eigen/src/Core/util/Meta.h184 symbols
include/rabitqlib/third/Eigen/src/Core/util/ForwardDeclarations.h173 symbols
include/rabitqlib/third/Eigen/src/Core/arch/GPU/PacketMath.h166 symbols
include/rabitqlib/third/Eigen/src/Core/CoreEvaluators.h140 symbols

For agents

$ claude mcp add RaBitQ-Library \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page