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.
Documentation · Python package · Paper · Releases · Maintenance
Contributors welcome! Help shape RaBitQ by reporting bugs, asking questions, suggesting features, or contributing code, tests, documentation, and examples. First-time contributors are welcome—open an issue or start with our contribution guide and starter tasks.
News
-
September 2026 — Apple Silicon support: macOS ARM64 joins Linux and Windows x86-64, with NEON kernels and CPython 3.11–3.14 wheel builds for macOS 14+. See the platform requirements.
-
September 2026 — Windows x86-64 support: C++ and Python source builds now support MSVC, runtime AVX2/AVX-512 dispatch, and Unicode index paths. Windows wheels are available for CPython 3.11–3.14. For source builds, see the Windows build instructions.
-
September 2026 — IVF raw-vector reranking: Use
nbits=32for float32 reranking. Quantized IVF automatically selects HACC for 4–9-bit codes. See the IVF documentation. -
September 2026 — Quantized SymphonyQG: Set
quantization_bits=4or8for compact vector storage; raw vectors remain the default. See the SymphonyQG documentation.
Install
python -m pip install --upgrade rabitqlib
Wheels: CPython 3.11–3.14 on Linux and Windows x86-64, and macOS 14+ ARM64 (Apple Silicon). x86-64 uses AVX2/FMA with optional AVX-512 acceleration; ARM64 uses NEON and portable scalar kernels. macOS wheels bundle OpenMP; Intel Mac and universal2 wheels are not provided.
Python quick start
Build and search a small IVF index using synthetic data:
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])
For all three indexes, build and search interpret num_threads=0 as the
detected hardware thread count. Larger requests are capped at that count;
smaller positive requests are respected. Operations may use fewer workers when
there are fewer work items. If hardware detection is unavailable, one thread is
used. Omitting num_threads in Python still defaults to one thread.
Python bindings are also available for HnswIndex and SymqgIndex. See the
Python examples for index construction, querying, and
index persistence. IVF and HNSW examples run Faiss clustering in a separate process,
then pass saved clusters to RaBitQ indexing so their OpenMP runtimes stay separate.
Index save/load paths are UTF-8 strings on Windows and native path bytes on POSIX in C++; Python paths are Unicode strings on all platforms.
Build the Python bindings from source
Source builds require a C++17 compiler, CMake 3.20 or newer, and OpenMP. On
Windows, install Visual Studio 2026 with the Desktop development with C++
workload, then run python -m pip install . from the repository root.
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 .
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, or one-bit codes plus raw vectors for reranking. |
| HNSW | Graph search with compact vectors | Adds graph links and searches directly from quantized codes. |
| SymphonyQG | Fast graph search with a configurable memory/accuracy tradeoff | Uses raw vectors by default, or optional packed 4-bit/8-bit RaBitQ vectors, alongside per-neighborhood quantization data. |
IVF and SymphonyQG use FastScan for batched estimates, while HNSW uses single-code kernels selected for the target architecture.
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.
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. |
| Native CPU backends | Runtime AVX2/AVX-512 selection on x86-64; NEON distance, packed-code, FastScan, rotation, query preparation, and HNSW search kernels on ARM64, with portable scalar fallbacks. |
| 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.
RaBitQ across the vector-search ecosystem
The projects below illustrate adoption of RaBitQ techniques across vector search; this is not a list of direct dependencies on RaBitQ-Library.
Integration story: How zvec integrates RaBitQ-Library traces its use of the library's quantizers and estimators inside zvec's IVF and HNSW implementations, with links to the source code.
|
Milvus |
Faiss |
NVIDIA cuVS |
Microsoft DiskANN |
VSAG |
|
VectorChord |
Volcengine OpenSearch |
CockroachDB |
Elasticsearch |
Apache Lucene |
|
turbopuffer |
Zvec |
LanceDB |
Databricks |
ClickHouse |
|
Qdrant |
Weaviate |
C++ quick start
Requirements
- CMake 3.20 or newer
- a C++17 compiler with OpenMP support
- an x86-64 CPU with AVX2 and FMA, or an Apple Silicon Mac
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
For MSVC, follow the Windows build instructions.
For Apple Silicon source builds, see the macOS ARM64 instructions.
The ARM kernel sources use portable AArch64 intrinsics, but macOS tests do not
establish Linux ARM64 support.
Local GCC/Clang builds enable -march=native by default; set
-DRABITQ_ENABLE_NATIVE_OPTIMIZATION=OFF for portable binaries, as release
wheels do. See CPU dispatch details
for backend requirements and fallbacks.
Use RaBitQ-Library in another C++ project
The C++ API and ABI are still evolving. For reproducible builds, pin a release or commit and include RaBitQ-Library as a Git submodule:
git submodule add https://github.com/VectorDB-NTU/RaBitQ-Library.git third_party/rabitqlib
git submodule update --init --recursive
Add the library and link its namespaced target in the consuming project's
CMakeLists.txt:
set(RABITQ_BUILD_SAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(third_party/rabitqlib)
target_link_libraries(my_program PRIVATE rabitqlib::rabitqlib)
Update the pinned revision deliberately when you are ready to adopt upstream changes:
git -C third_party/rabitqlib fetch
git -C third_party/rabitqlib checkout <release-or-commit>
git add third_party/rabitqlib
Optional: install the C++ library
Installation is useful for package managers, container images, and shared server environments. Disable native optimization when the installed library may run on a different CPU from the build machine:
cmake -S . -B build \
-DRABITQ_BUILD_SAMPLES=OFF \
-DRABITQ_ENABLE_NATIVE_OPTIMIZATION=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$HOME/.local"
cmake --build build --parallel
cmake --install build
Consume the installed package with:
find_package(rabitqlib CONFIG REQUIRED)
target_link_libraries(my_program PRIVATE rabitqlib::rabitqlib)
For a non-system prefix, point CMake to the installation when configuring the consumer:
cmake -S . -B build -DCMAKE_PREFIX_PATH="$HOME/.local"
cmake --build build --parallel
The downstream consumer test provides a minimal complete example of the installed-package workflow.
Both integration methods require OpenMP on the consuming system.
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.
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.
Yutong Gou, Jianyang Gao, Yuexuan Xu, and Cheng Long. “SymphonyQG: Towards Symphonious Integration of Quantization and Graph for Approximate Nearest Neighbor Search.” Proceedings of the ACM on Management of Data 3, 1, Article 80 (February 2025), 26 pages. https://doi.org/10.1145/3709730.
Jianyang Gao and Cheng Long. “RaBitQ: Quantizing High-Dimensional Vectors with a Theoretical Error Bound for Approximate Nearest Neighbor Search.” Proceedings of the ACM on Management of Data 2, 3, Article 167 (May 2024), 27 pages. https://doi.org/10.1145/3654970.
Contributing
Contributions are welcome, including documentation and examples. Start with your first contribution or choose a small starter task. The guide explains which build, test, and formatting checks apply to your change.
See maintenance and feedback for the current maintainer. Use GitHub Issues for bugs, feature requests, and usage or contribution questions.
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.
Release files for rabitqlib 0.3.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 34.2 MB
Release files / rabitqlib-0.3.9-cp314-cp314-win_amd64.whl
| Download URL | rabitqlib-0.3.9-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 3.9 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f216e6c282bc4d1e64fa42fff0b40650e7a554ab54c2f2801063d9eb35885949
|
|
BLAKE2b-256 checksum How to use checksums |
996dad790b53eb660d34f7b7686367425536bb7467563aac0d66dfd6e573efa9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | rabitqlib-0.3.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
ecaffa3233fca068f436676a5af6af0f641b1c29f33887c69c6d8926d0be2644
|
|
BLAKE2b-256 checksum How to use checksums |
542a8e26e863a3d572dda6c28a694933c5e0f97f694c36690171c1a35437f59b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp314-cp314-macosx_14_0_arm64.whl
| Download URL | rabitqlib-0.3.9-cp314-cp314-macosx_14_0_arm64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.14 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
edc1d5627e878d81c8c25967aba68ac73b7544211af34589aa3e23da08eca947
|
|
BLAKE2b-256 checksum How to use checksums |
11b34f304fa4e97600b30100624b1b8278e72a4e03d4007285762208c2e99c8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp313-cp313-win_amd64.whl
| Download URL | rabitqlib-0.3.9-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 3.9 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
70badd3583df3d2fff4da01d7ef944aec002f0cdd54a8c8cd94a48edc00ae997
|
|
BLAKE2b-256 checksum How to use checksums |
1787acdda3f18f8072882b92020ac0df554f96c6a3ef6119493dc10be5f2d841
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | rabitqlib-0.3.9-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0741d032e6eace78ee6dbdad029a344a7a54d7a486cc85430cf7491bdbd8f112
|
|
BLAKE2b-256 checksum How to use checksums |
00e2a7cca122ebe5f61aebf483cef4c2ce57d5e0ddf9f95fc0a996e532d2f793
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp313-cp313-macosx_14_0_arm64.whl
| Download URL | rabitqlib-0.3.9-cp313-cp313-macosx_14_0_arm64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.13 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b83efb4898acbe554259f931afbb4ad9ba0cc8922102c1640a96a58289f0d315
|
|
BLAKE2b-256 checksum How to use checksums |
5153dd99a5dd3ec4afe550cffad80daca540f795422e600224881d6129fbfa6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp312-cp312-win_amd64.whl
| Download URL | rabitqlib-0.3.9-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 3.9 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ac9049526d1bf0fca208db86b501420567bf7d0885c3f03e3592bd8a00f74115
|
|
BLAKE2b-256 checksum How to use checksums |
7193ce8b310fee685eb3bccb9f52aa253923fb1cfc1877d29bbb0d93729b9e89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | rabitqlib-0.3.9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
43e8afa78182f4f8fb3efce644720294fcbfc6a5e5f295cf74038decfac85b38
|
|
BLAKE2b-256 checksum How to use checksums |
f32380a971b1da90c5beb39868404af5266ddeae44645a6a6bde68c80e04d6de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp312-cp312-macosx_14_0_arm64.whl
| Download URL | rabitqlib-0.3.9-cp312-cp312-macosx_14_0_arm64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.12 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b5ca3110a792a742995d04f790ac1e5a62305dbbd0c9e5054f2e40897720d9f2
|
|
BLAKE2b-256 checksum How to use checksums |
4c77c3b0fea9763021b8e0c20900367fcf088ae5ce12163e7cc35a6868373bfd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp311-cp311-win_amd64.whl
| Download URL | rabitqlib-0.3.9-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 3.9 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
004eadcbe1ed58f6440c3a2ccb10dfb43a0e021adebfb9c1bbec46d68d545687
|
|
BLAKE2b-256 checksum How to use checksums |
f3dcead6804661d19644c877c6068cc6e27d13413e6c8a8bd2bf58b409a2e04d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | rabitqlib-0.3.9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
bdafe13d35fa27b1380d5f199aa6240de4621b1906b535c6fcdad30c3e014c1e
|
|
BLAKE2b-256 checksum How to use checksums |
c46c84869cbcef97ef2aa282e825596fcf3548b48b778bbdebf5b7c6266d28d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / rabitqlib-0.3.9-cp311-cp311-macosx_14_0_arm64.whl
| Download URL | rabitqlib-0.3.9-cp311-cp311-macosx_14_0_arm64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.11 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3c9d402fca43a7f2c283562b73328f2ae1cf661df5f005fb83a96aa3800bac64
|
|
BLAKE2b-256 checksum How to use checksums |
18c2e45523f65e3b9705e90bf496fed40e6596818df800dc76468457e14ddc5f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log