GraphCanon updated 2d · GitHub synced 2d · 33 views this month
Decision brief
turbovec is a Rust-based vector indexing library with Python bindings that offers significant memory savings and fast SIMD search capabilities, built on Google Research's TurboQuant algorithm.
Good fit when
- - Use turbovec when you need to save substantial amounts of memory; for instance, a 10 million document corpus can fit in 4 GB RAM instead of the typical 31 GB with float32.
- - Optimize your implementation if latency is critical, as it provides faster SIMD search capabilities compared to FAISS on specific hardware architectures (i.e., ARM).
Avoid when
- - Avoid using turbovec in environments where the hardware architecture does not support specific SIMD instructions (like NEON on ARM and AVX-512BW on x86), as this can lead to performance degradation.
- - Do not use it if your application requires external managed services for vector indexing, as turbovec is designed for local deployments without data leaving the machine or VPC.
Observed Jul 11, 2026 · Source: enrich:decision_facts
Verify the decision
Maintenance and security
Full trust report- Maintenance
- Very active (0d since push)
- As of 2d
- Provenance
- Not a fork · Personal account
- As of 2d
- Security (OSV)
- No lockfile
- As of 1mo
Public GitHub metadata and optional OSV scans. Signals, not a guarantee. Trust methodology.
Install
cargo add turbovec crates.ioHow it fits your stack(4)
Typed graph edges - alternatives, integrations, successors, and dependencies. Ranked by relationship type, not raw GitHub stars.
Alternative
Relationship graph
Optional deeper exploration of typed edges and category neighbours.
Similar tools
Same-category neighbours not already linked as typed edges.
Evidence and technical details
Sourced facts, taxonomy, compatibility claims, README excerpt, and machine-readable endpoints.
Overview
turbovec is a Rust-based vector indexing library offering significant memory savings and fast SIMD search capabilities. Built on Google Research's TurboQuant algorithm, it supports efficient online ingest and filtering at search time without external managed services.
Capability facts
- Languages
- rust
Source: github.language · Aug 18, 2026
Categories
Compatibility
Sourced claims from the README excerpt - not unsourced marketing copy.
Source: README excerpt (regex_v1, Aug 18, 2026)
turbovec is a Rust vector index with Python bindings, built on Google Research's [**TurboQuant**](https://arxiv.org/abs/2504Source link
Tags
README
A 10 million document corpus takes 31 GB of RAM as float32. turbovec fits it in 4 GB - and searches it faster than FAISS.
turbovec is a Rust vector index with Python bindings, built on Google Research's TurboQuant algorithm — a data-oblivious quantizer with near-optimal distortion and no separate training phase.
- Online ingest. Add vectors, they're indexed — no train step, no parameter tuning, no rebuilds as the corpus grows.
- Fast SIMD search. Hand-written kernels — NEON SDOT/SMMLA on ARM, AVX-512 VNNI and
vpermbon x86, with AVX2 and scalar fallbacks — beat FAISS IndexPQFastScan in every measured config, averaging 3.4× at 4-bit and 23% at 2-bit across the eight cells of each width, on both architectures. - Incremental saves.
sync(path)persists just what changed since the last sync — one fsync per call, crash-safe at any byte, and a removal or a small append costs milliseconds however large the index.write/loadstay for whole-file snapshots. - Filter at search time. Pass an id allowlist (or a slot bitmask) to
search()and the kernel honours it directly. You always get up tokresults from the allowed set — no over-fetching, no recall hit on selective filters. - Pure local. No managed service, no data leaving your machine or VPC. Pair with any open-source embedding model for a fully air-gapped RAG stack.
Building RAG where privacy, memory, or latency matters? You're in the right place.
Python
pip install turbovec
from turbovec import TurboQuantIndex
index = TurboQuantIndex(dim=1536, bit_width=4)
index.add(vectors)
index.add(more_vectors)
scores, indices = index.search(query, k=10)
index.write("my_index.tv")
loaded = TurboQuantIndex.load("my_index.tv")
index.sync("my_index.tv") # after more changes: durable incremental save
vectors and query are 2-D float32 arrays of shape (n, dim) — other dtypes are rejected rather than silently converted, so cast with np.asarray(x, dtype=np.float32) first if needed.
Need stable ids that survive deletes? Use IdMapIndex:
import numpy as np
from turbovec import IdMapIndex
index = IdMapIndex(dim=1536, bit_width=4)
index.add_with_ids(vectors, np.array([1001, 1002, 1003], dtype=np.uint64))
scores, ids = index.search(query, k=10) # ids are your uint64 external ids
index.remove(1002) # O(1) by id
index.write("my_index.tvim")
loaded = IdMapIndex.load("my_index.tvim")
index.sync("my_index.tvim") # durable incremental save, ids included
Hybrid retrieval (filtered search)
Restrict results to a candidate set produced by another system (SQL, BM25, ACL, time window, …):
import numpy as np
from turbovec import IdMapIndex
idx = IdMapIndex(dim=1536, bit_width=4)
idx.add_with_ids(vectors, ids)
# Stage 1: external system narrows to candidate ids.
allowed = np.array(db.execute("SELECT id FROM docs WHERE tenant=?", (t,)).fetchall(),
dtype=np.uint64)
# Stage 2: dense rerank within the candidate set.
scores, ids = idx.search(query, k=10, allowlist=allowed)
Filtering happens inside the SIMD kernel at 32-vector block granula
For agents
This page has a .md twin and JSON over the API.