{"id":946,"date":"2026-05-21T05:42:31","date_gmt":"2026-05-20T21:42:31","guid":{"rendered":"https:\/\/connectword.dpdns.org\/?p=946"},"modified":"2026-05-21T05:42:31","modified_gmt":"2026-05-20T21:42:31","slug":"meet-turbovec-a-rust-vector-index-with-python-bindings-and-built-on-googles-turboquant-algorithm","status":"publish","type":"post","link":"https:\/\/connectword.dpdns.org\/?p=946","title":{"rendered":"Meet Turbovec: A Rust Vector Index with Python Bindings, and Built on Google\u2019s TurboQuant Algorithm"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Vector search underpins most retrieval-augmented generation (RAG) pipelines. At scale, it gets expensive. Storing 10 million document embeddings in float32 consumes 31 GB of RAM. For dev teams running local or on-premise inference, that number creates real constraints.<\/p>\n<p class=\"wp-block-paragraph\">A new open-source library called <strong><a href=\"https:\/\/github.com\/RyanCodrai\/turbovec\" target=\"_blank\" rel=\"noreferrer noopener\">turbovec<\/a><\/strong> addresses this directly. It is a vector index written in Rust with Python bindings. It is built on <strong>TurboQuant<\/strong>, a quantization algorithm from Google Research. The same 10-million-document corpus fits in 4 GB with turbovec. On ARM hardware, search speed beats FAISS IndexPQFastScan by 12\u201320%.<\/p>\n<h2 class=\"wp-block-heading\"><strong>The TurboQuant Paper<\/strong><\/h2>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/arxiv.org\/abs\/2504.19874\" target=\"_blank\" rel=\"noreferrer noopener\">TurboQuant<\/a> was introduced by Google\u2019s research team. The Google team proposes TurboQuant as a data-oblivious quantizer. It achieves near-optimal distortion rates across all bit-widths and dimensions. It requires zero training and zero passes over the data.<\/p>\n<p class=\"wp-block-paragraph\">Most production-grade vector quantizers, including FAISS\u2019s Product Quantization, requires a codebook training step. You must run k-means over a representative sample of your vectors before indexing begins. If your corpus grows or shifts, you may need to retrain and rebuild the index entirely. TurboQuant skips all of that. It uses an analytical property of rotated vectors instead of a data-dependent calibration.<\/p>\n<h2 class=\"wp-block-heading\"><strong>How turbovec Quantizes Vectors<\/strong><\/h2>\n<p class=\"wp-block-paragraph\"><strong>The quantization pipeline has four steps<\/strong>:<\/p>\n<p class=\"wp-block-paragraph\"><strong>(1) Each vector is <em>normalized<\/em>.<\/strong> The length (norm) is stripped and stored as a single float. Every vector becomes a unit direction on a high-dimensional hypersphere.<\/p>\n<p class=\"wp-block-paragraph\"><strong>(2) A <em>random rotation<\/em> is applied.<\/strong> All vectors are multiplied by the same random orthogonal matrix. After rotation, each coordinate independently follows a Beta distribution. In high dimensions, this converges to Gaussian N(0, 1\/d). This holds for any input data \u2014 the rotation makes the coordinate distribution predictable.<\/p>\n<p class=\"wp-block-paragraph\"><strong>(3) <em>Lloyd-Max scalar quantization<\/em> is applied.<\/strong> Because the distribution is known analytically, the optimal bucket boundaries and centroids can be precomputed from the math alone. For 2-bit quantization, that means 4 buckets per coordinate. For 4-bit, it means 16 buckets. No data passes are needed.<\/p>\n<p class=\"wp-block-paragraph\"><strong>(4) The quantized coordinates are <em>bit-packed<\/em> into bytes<\/strong>. A 1536-dimensional vector shrinks from 6,144 bytes in FP32 to 384 bytes at 2-bit. That is a 16x compression ratio.<\/p>\n<p class=\"wp-block-paragraph\">At search time, the query is rotated once into the same domain. Scoring happens directly against the codebook values. The scoring kernel uses SIMD intrinsics \u2014 NEON on ARM and AVX-512BW on modern x86, with an AVX2 fallback \u2014 with nibble-split lookup tables for throughput.<\/p>\n<p class=\"wp-block-paragraph\">TurboQuant achieves distortion within approximately 2.7x of the information-theoretic Shannon lower bound.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Recall and Speed: The Numbers<\/strong><\/h2>\n<p class=\"wp-block-paragraph\"><strong>All benchmarks use 100K vectors, 1,000 queries, k=64, and report the median of 5 runs.<\/strong><\/p>\n<p class=\"wp-block-paragraph\">For recall, turbovec compares against FAISS <code>IndexPQ<\/code> (LUT256, nbits=8, float32 LUT). This is a strong baseline: FAISS uses a higher-precision LUT at scoring time and k-means++ for codebook training. Despite this, TurboQuant and FAISS are within 0\u20131 point at R@1 for OpenAI embeddings at d=1536 and d=3072. Both converge to 1.0 recall by k=4\u20138. GloVe at d=200 is harder. At that dimension, TurboQuant trails FAISS by 3\u20136 points at R@1, closing by k\u224816\u201332. <\/p>\n<p class=\"wp-block-paragraph\">On speed, ARM results (Apple M3 Max) show turbovec beating FAISS IndexPQFastScan by 12\u201320% across every configuration. On x86 (Intel Xeon Platinum 8481C \/ Sapphire Rapids, 8 vCPUs), turbovec wins every 4-bit configuration by 1\u20136%. It runs within ~1% of FAISS on 2-bit single-threaded. Two configurations sit slightly behind FAISS: 2-bit multi-threaded at d=1536 and d=3072. There, the inner accumulate loop is too short for unrolling amortization. FAISS\u2019s AVX-512 VBMI path holds the edge in those two cases (2\u20134%).<\/p>\n<h2 class=\"wp-block-heading\"><strong>Python API<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">Installation is a single command: <code>pip install turbovec<\/code>. The primary class is <code>TurboQuantIndex<\/code>, initialized with a dimension and bit width.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\" no-line-numbers\"><code class=\" no-wrap language-php\">from turbovec import TurboQuantIndex\n\nindex = TurboQuantIndex(dim=1536, bit_width=4)\nindex.add(vectors)\nscores, indices = index.search(query, k=10)\nindex.write(\"my_index.tq\")<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"wp-block-paragraph\">A second class, <code>IdMapIndex<\/code>, supports stable external uint64 IDs that survive deletes. Removal is O(1) by ID. This is useful for document stores where vectors are frequently updated or deleted.<\/p>\n<p class=\"wp-block-paragraph\">turbovec integrates with LangChain (<code>pip install turbovec[langchain]<\/code>), LlamaIndex (<code>pip install turbovec[llama-index]<\/code>), and Haystack (<code>pip install turbovec[haystack]<\/code>). The Rust crate is available via <code>cargo add turbovec<\/code>.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Marktechpost\u2019s Visual Explainer<\/strong><\/h2>\n<div>\n<div class=\"tvg-header\">\n<div class=\"tvg-header-left\">\n      <span class=\"tvg-logo-badge\">turbovec<\/span>\n<div class=\"tvg-header-divider\"><\/div>\n<div>\n<div class=\"tvg-header-title\">How to Use turbovec<\/div>\n<div class=\"tvg-header-sub\">TurboQuant vector search \u2014 Rust + Python<\/div>\n<\/div>\n<\/div>\n<p>    <span class=\"tvg-step-counter\">01 \/ 07<\/span>\n  <\/p><\/div>\n<div class=\"tvg-progress-bar\">\n<div class=\"tvg-progress-fill\"><\/div>\n<\/div>\n<div class=\"tvg-slides-wrap\">\n<div class=\"tvg-slides-track\">\n<div class=\"tvg-slide tvg-active\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Overview<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">What is turbovec?<\/div>\n<div class=\"tvg-slide-desc\">turbovec is a vector index written in Rust with Python bindings. It is built on Google Research\u2019s TurboQuant algorithm \u2014 a data-oblivious quantizer that requires zero codebook training. A 10 million document corpus that occupies 31 GB as float32 fits in 4 GB with turbovec.<\/div>\n<div class=\"tvg-chips\">\n<div class=\"tvg-chip\"><span class=\"tvg-chip-icon\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/26a1.png\" alt=\"\u26a1\" class=\"wp-smiley\" \/><\/span> 16x compression at 2-bit<\/div>\n<div class=\"tvg-chip\"><span class=\"tvg-chip-icon\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4a8.png\" alt=\"\ud83d\udca8\" class=\"wp-smiley\" \/><\/span> Beats FAISS on ARM by 12\u201320%<\/div>\n<div class=\"tvg-chip\"><span class=\"tvg-chip-icon\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f512.png\" alt=\"\ud83d\udd12\" class=\"wp-smiley\" \/><\/span> Fully local \u2014 no data egress<\/div>\n<div class=\"tvg-chip\"><span class=\"tvg-chip-icon\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4e6.png\" alt=\"\ud83d\udce6\" class=\"wp-smiley\" \/><\/span> MIT licensed<\/div>\n<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<div class=\"tvg-slide\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Step 1<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">Installation<\/div>\n<div class=\"tvg-slide-desc\">Install the Python package from PyPI with a single command. For Rust, add the crate via Cargo.<\/div>\n<div class=\"tvg-code-wrap\">\n<div class=\"tvg-code-topbar\">\n<div class=\"tvg-code-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n<p>            <span class=\"tvg-code-lang\">terminal<\/span><br \/>\n            <button class=\"tvg-code-copy\">copy<\/button>\n          <\/p><\/div>\n<pre class=\"tvg-pre\"><span class=\"cm\"># Python<\/span>\n<span class=\"fn\">pip install<\/span> turbovec\n\n<span class=\"cm\"># Rust<\/span>\n<span class=\"fn\">cargo add<\/span> turbovec<\/pre>\n<\/div>\n<div class=\"tvg-note\"><strong>Note:<\/strong> To build from source, install <span class=\"icode\">maturin<\/span> then run <span class=\"icode\">maturin build \u2013release<\/span> inside the <span class=\"icode\">turbovec-python\/<\/span> directory. For Rust, run <span class=\"icode\">cargo build \u2013release<\/span>.<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<div class=\"tvg-slide\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Step 2<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">Basic Usage \u2014 TurboQuantIndex<\/div>\n<div class=\"tvg-slide-desc\"><span class=\"icode\">TurboQuantIndex<\/span> is the primary class. Initialize it with a vector <span class=\"icode\">dim<\/span> and a <span class=\"icode\">bit_width<\/span> of 2 or 4. Vectors are indexed immediately on <span class=\"icode\">add()<\/span> \u2014 no training step required.<\/div>\n<div class=\"tvg-code-wrap\">\n<div class=\"tvg-code-topbar\">\n<div class=\"tvg-code-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n<p>            <span class=\"tvg-code-lang\">python<\/span><br \/>\n            <button class=\"tvg-code-copy\">copy<\/button>\n          <\/p><\/div>\n<pre class=\"tvg-pre\"><span class=\"kw\">from<\/span> turbovec <span class=\"kw\">import<\/span> <span class=\"fn\">TurboQuantIndex<\/span>\n\nindex = <span class=\"fn\">TurboQuantIndex<\/span>(dim=<span class=\"num\">1536<\/span>, bit_width=<span class=\"num\">4<\/span>)\n\n<span class=\"cm\"># Add vectors (numpy float32 array, shape [n, dim])<\/span>\nindex.<span class=\"fn\">add<\/span>(vectors)\nindex.<span class=\"fn\">add<\/span>(more_vectors)  <span class=\"cm\"># incremental adds are fine<\/span>\n\n<span class=\"cm\"># Search: returns top-k scores and positional indices<\/span>\nscores, indices = index.<span class=\"fn\">search<\/span>(query, k=<span class=\"num\">10<\/span>)<\/pre>\n<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<div class=\"tvg-slide\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Step 3<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">Stable IDs \u2014 IdMapIndex<\/div>\n<div class=\"tvg-slide-desc\">Use <span class=\"icode\">IdMapIndex<\/span> when you need external <span class=\"icode\">uint64<\/span> IDs that survive deletes. Removal is O(1) by ID \u2014 useful for document stores where vectors change over time.<\/div>\n<div class=\"tvg-code-wrap\">\n<div class=\"tvg-code-topbar\">\n<div class=\"tvg-code-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n<p>            <span class=\"tvg-code-lang\">python<\/span><br \/>\n            <button class=\"tvg-code-copy\">copy<\/button>\n          <\/p><\/div>\n<pre class=\"tvg-pre\"><span class=\"kw\">import<\/span> numpy <span class=\"kw\">as<\/span> np\n<span class=\"kw\">from<\/span> turbovec <span class=\"kw\">import<\/span> <span class=\"fn\">IdMapIndex<\/span>\n\nindex = <span class=\"fn\">IdMapIndex<\/span>(dim=<span class=\"num\">1536<\/span>, bit_width=<span class=\"num\">4<\/span>)\n\n<span class=\"cm\"># Map vectors to your own uint64 external IDs<\/span>\nindex.<span class=\"fn\">add_with_ids<\/span>(vectors, np.<span class=\"fn\">array<\/span>([<span class=\"num\">1001<\/span>, <span class=\"num\">1002<\/span>, <span class=\"num\">1003<\/span>], dtype=np.uint64))\n\n<span class=\"cm\"># Search returns your external IDs, not positional indices<\/span>\nscores, ids = index.<span class=\"fn\">search<\/span>(query, k=<span class=\"num\">10<\/span>)\n\n<span class=\"cm\"># O(1) delete by external IDnindex.<span class=\"fn\">remove<\/span>(<span class=\"num\">1002<\/span>)<\/span><\/pre>\n<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<div class=\"tvg-slide\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Step 4<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">Save &amp; Load an Index<\/div>\n<div class=\"tvg-slide-desc\">Both index types support persistent storage. <span class=\"icode\">TurboQuantIndex<\/span> writes to <span class=\"icode\">.tq<\/span> files. <span class=\"icode\">IdMapIndex<\/span> writes to <span class=\"icode\">.tvim<\/span> files.<\/div>\n<div class=\"tvg-code-wrap\">\n<div class=\"tvg-code-topbar\">\n<div class=\"tvg-code-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n<p>            <span class=\"tvg-code-lang\">python<\/span><br \/>\n            <button class=\"tvg-code-copy\">copy<\/button>\n          <\/p><\/div>\n<pre class=\"tvg-pre\"><span class=\"kw\">from<\/span> turbovec <span class=\"kw\">import<\/span> <span class=\"fn\">TurboQuantIndex<\/span>, <span class=\"fn\">IdMapIndex<\/span>\n\n<span class=\"cm\"># TurboQuantIndex  \u2014&gt;  .tq<\/span>\nindex.<span class=\"fn\">write<\/span>(<span class=\"st\">\"my_index.tq\"<\/span>)\nloaded = <span class=\"fn\">TurboQuantIndex<\/span>.<span class=\"fn\">load<\/span>(<span class=\"st\">\"my_index.tq\"<\/span>)\n\n<span class=\"cm\"># IdMapIndex  \u2014&gt;  .tvim<\/span>\nindex.<span class=\"fn\">write<\/span>(<span class=\"st\">\"my_index.tvim\"<\/span>)\nloaded = <span class=\"fn\">IdMapIndex<\/span>.<span class=\"fn\">load<\/span>(<span class=\"st\">\"my_index.tvim\"<\/span>)<\/pre>\n<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<div class=\"tvg-slide\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Step 5<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">Framework Integrations<\/div>\n<div class=\"tvg-slide-desc\">turbovec ships optional extras for LangChain, LlamaIndex, and Haystack. Install the extra that matches your stack.<\/div>\n<div class=\"tvg-code-wrap\">\n<div class=\"tvg-code-topbar\">\n<div class=\"tvg-code-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n<p>            <span class=\"tvg-code-lang\">terminal<\/span><br \/>\n            <button class=\"tvg-code-copy\">copy<\/button>\n          <\/p><\/div>\n<pre class=\"tvg-pre\"><span class=\"cm\"># LangChain<\/span>\n<span class=\"fn\">pip install<\/span> turbovec[langchain]\n\n<span class=\"cm\"># LlamaIndex<\/span>\n<span class=\"fn\">pip install<\/span> turbovec[llama-index]\n\n<span class=\"cm\"># Haystack<\/span>\n<span class=\"fn\">pip install<\/span> turbovec[haystack]<\/pre>\n<\/div>\n<div class=\"tvg-note\"><strong>Tip:<\/strong> Each integration plugs turbovec in as a drop-in vector store. See <span class=\"icode\">docs\/integrations\/<\/span> in the repo for full usage examples with each framework.<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<div class=\"tvg-slide\">\n<div class=\"tvg-slide-label\">\n<div class=\"tvg-label-bar\"><\/div>\n<p><span class=\"tvg-slide-label-text\">Step 6<\/span><\/p><\/div>\n<div class=\"tvg-slide-heading\">Using turbovec in Rust<\/div>\n<div class=\"tvg-slide-desc\">The Rust API mirrors the Python API. Both <span class=\"icode\">TurboQuantIndex<\/span> and <span class=\"icode\">IdMapIndex<\/span> are available. All x86_64 builds target AVX2 as baseline; AVX-512 is enabled at runtime via feature detection.<\/div>\n<div class=\"tvg-code-wrap\">\n<div class=\"tvg-code-topbar\">\n<div class=\"tvg-code-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n<p>            <span class=\"tvg-code-lang\">rust<\/span><br \/>\n            <button class=\"tvg-code-copy\">copy<\/button>\n          <\/p><\/div>\n<pre class=\"tvg-pre\"><span class=\"kw\">use<\/span> turbovec::<span class=\"fn\">TurboQuantIndex<\/span>;\n\n<span class=\"kw\">let mut<\/span> index = <span class=\"fn\">TurboQuantIndex<\/span>::<span class=\"fn\">new<\/span>(<span class=\"num\">1536<\/span>, <span class=\"num\">4<\/span>);\nindex.<span class=\"fn\">add<\/span>(&amp;vectors);\n\n<span class=\"kw\">let<\/span> results = index.<span class=\"fn\">search<\/span>(&amp;queries, <span class=\"num\">10<\/span>);\n\nindex.<span class=\"fn\">write<\/span>(<span class=\"st\">\"index.tv\"<\/span>).<span class=\"fn\">unwrap<\/span>();\n<span class=\"kw\">let<\/span> loaded = <span class=\"fn\">TurboQuantIndex<\/span>::<span class=\"fn\">load<\/span>(<span class=\"st\">\"index.tv\"<\/span>).<span class=\"fn\">unwrap<\/span>();<\/pre>\n<\/div>\n<div class=\"tvg-chips\">\n<div class=\"tvg-chip\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f4da.png\" alt=\"\ud83d\udcda\" class=\"wp-smiley\" \/> Full API: <span class=\"icode\">docs\/api.md<\/span><\/div>\n<div class=\"tvg-chip\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/2b50.png\" alt=\"\u2b50\" class=\"wp-smiley\" \/> github.com\/RyanCodrai\/turbovec<\/div>\n<\/div>\n<div class=\"tvg-slide-footer\">\n<div class=\"tvg-footer-dot\"><\/div>\n<p>          <span class=\"tvg-footer-text\">Guide created by<\/span><br \/>\n          <a class=\"tvg-footer-link\" href=\"https:\/\/www.marktechpost.com\/\" target=\"_blank\">Marktechpost<\/a><br \/>\n          <span class=\"tvg-footer-text\">\u2014 AI &amp; ML Research News<\/span>\n        <\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tvg-nav\">\n    <button class=\"tvg-nav-btn tvg-btn-prev\" disabled>\u2190 Prev<\/button>\n<div class=\"tvg-dots\"><\/div>\n<p>    <button class=\"tvg-nav-btn tvg-btn-next\">Next \u2192<\/button>\n  <\/p><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\"><strong>Key Takeaways<\/strong><\/h2>\n<ul class=\"wp-block-list\">\n<li><strong>No codebook training.<\/strong> turbovec indexes vectors instantly \u2014 no k-means, no rebuilds as the corpus grows.<\/li>\n<li><strong>16x compression.<\/strong> A 1536-dim float32 vector shrinks from 6,144 bytes to 384 bytes at 2-bit quantization.<\/li>\n<li><strong>Faster than FAISS on ARM.<\/strong> turbovec beats FAISS IndexPQFastScan by 12\u201320% on ARM across every configuration.<\/li>\n<li><strong>Near-optimal distortion.<\/strong> TurboQuant achieves distortion within ~2.7x of the Shannon lower bound \u2014 provably near the theoretical limit.<\/li>\n<li><strong>Fully local.<\/strong> No managed service, no data egress \u2014 pairs with any open-source embedding model for an air-gapped RAG stack.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<\/p><p class=\"wp-block-paragraph\">\n<\/p><p class=\"wp-block-paragraph\">Check out\u00a0the\u00a0<strong><a href=\"https:\/\/github.com\/RyanCodrai\/turbovec\" target=\"_blank\" rel=\"noreferrer noopener\">Repo here<\/a>.\u00a0<\/strong>Also,\u00a0feel free to follow us on\u00a0<strong><a href=\"https:\/\/x.com\/intent\/follow?screen_name=marktechpost\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Twitter<\/mark><\/a><\/strong>\u00a0and don\u2019t forget to join our\u00a0<strong><a href=\"https:\/\/www.reddit.com\/r\/machinelearningnews\/\" target=\"_blank\" rel=\"noreferrer noopener\">150k+ ML SubReddit<\/a><\/strong>\u00a0and Subscribe to\u00a0<strong><a href=\"https:\/\/www.aidevsignals.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">our Newsletter<\/a><\/strong>. Wait! are you on telegram?\u00a0<strong><a href=\"https:\/\/t.me\/machinelearningresearchnews\" target=\"_blank\" rel=\"noreferrer noopener\">now you can join us on telegram as well.<\/a><\/strong><\/p>\n<p class=\"wp-block-paragraph\">Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.?\u00a0<strong><a href=\"https:\/\/forms.gle\/MTNLpmJtsFA3VRVd9\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Connect with us<\/mark><\/a><\/strong><\/p>\n<p>The post <a href=\"https:\/\/www.marktechpost.com\/2026\/05\/20\/meet-turbovec-a-rust-vector-index-with-python-bindings-and-built-on-googles-turboquant-algorithm\/\">Meet Turbovec: A Rust Vector Index with Python Bindings, and Built on Google\u2019s TurboQuant Algorithm<\/a> appeared first on <a href=\"https:\/\/www.marktechpost.com\/\">MarkTechPost<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Vector search underpins most r&hellip;<\/p>\n","protected":false},"author":1,"featured_media":29,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=946"}],"version-history":[{"count":0,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/946\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/media\/29"}],"wp:attachment":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}