pypi / faiss-cpu
faiss-cpu
What changed in faiss-cpu 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-28.
5 breaking7 security22 new APIs and options15 performance5 behavior and defaults3 tooling22 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initfaiss-cpu 179 changes
Breaking changes 5
The multi-GPU CAGRA build is folded into train(), and trainMultiGpu is deleted.
cuVS dispatch is now opt-in rather than implied by the build.
The deserialization byte limit now also applies to SVS IVF.
Rejects degenerate code_size==0 indexes with ntotal>0 during deserialization.
Rejects nbits==0 during deserialization.
Security 7
Deserialization now validates the IndexScalarQuantizer codes buffer size.
Fixes a leak and unbounded lists during OnDisk inverted list deserialization.
Fixes an out-of-bounds read through IndexPreTransform.
Hardens deserialization with bounds, consistency, allocation, recursion-depth, and null-index checks across multiple index types.
Bounds-checks the decoded direct_map entry.
Hardens the mmap reader against malformed inverted-list sizes.
Fixes a heap-buffer-overflow during deserialization.
New APIs and options 22
HNSW adds an opt-in deterministic lock-free graph build.
A scan-context hook is added for locality-aware selectors.
The C API now exposes IndexBinaryIVF.set_direct_map_type.
IVFPQ scanners now support explicit distance modes.
HNSW now supports staged RaBitQ storage.
SVS now allows vector storing to be disabled.
IndexRaBitQ deserialization now supports ZeroCopyIOReader.
Adds multi-GPU CAGRA-to-HNSW building with trainAllNeighbors and multi-GPU optimization.
Adds a cuVS IVF-SQ backend.
Adds EDEN quantizer indexes.
Adds clone index support.
Adds read and write support for the IndexHNSW base class.
Adds GPU IVF add_preassigned support via add_core.
Adds a FastScan conversion constructor.
Adds a Metal index with product quantization and residual encoding support.
Adds a cuVS Faiss Python package for aarch64/GH200 with CUDA 12.4.
The C API exposes the ScalarQuantizer codec and completes the FaissQuantizerType enum.
Adds has_dynamic_dispatch() to SIMDConfig.
Extracts the assignment iteration as a shared public SuperKMeans kernel.
Adds an HNSW is_similarity mode for inner-product and similarity metrics.
Adds a Metal IVF flat index with IVF scan/merge kernels and expanded top-k support.
Adds support for static vamana through SVS.
Performance 15
Extends batching to PQ, SQ, and PreTransform.
Reuses the visited table across searches and raises the hash-set threshold from 500k to 10M.
Adds memory-mapped I/O for Flat and static Vamana SVS indices.
Optimizes Panorama HNSW, with the notes reporting approximately 1.2x performance.
Adds AVX2 and AVX512 byte-domain kernels.
Enables a byte-LUT gather path for distance computation.
Optimizes query setup, scanning, LUT quantization, bit-plane operations, and scanner distance-computer reuse.
Adds RISC-V RVV RaBitQ and vector distance kernels.
Uses a 256-bit fast-scan QBS kernel on AMD Zen 4 with split AVX-512.
Adds a VPOPCNTDQ-based implementation for Sapphire Rapids and newer processors.
Adds a VPOPCNTDQ-based kernel for Sapphire Rapids and newer processors.
Adds full TurboQuant Algorithm 2, including the QJL stage, with SIMD and optimizations.
Adds Sapphire Rapids optimizations for L2 and inner-product operations.
Avoids runtime checks in VisitedTable.
Reserves capacity to avoid rehashes during HNSW search.
Behavior and default changes 5
The context hook is extended to IVFPQ/PQR, multibit RaBitQ, and Panorama scanners.
The default Panorama batch size is now 1024.
Range search now supports METRIC_L1 and additional metrics.
reverse_index_factory now supports IndexIDMap and IndexIDMap2.
Metal is enabled by default on Apple machines.
Tooling 3
Adds pip wheel packaging for faiss-gpu-cuvs.
Adds package type stubs, including SVS index classes, IndexIVFFlatPanorama.batch_size, quantizer types, and ClusteringInitMethod enum constants.
Adds pip wheel packaging for faiss-gpu.
Fixes and other changes 22
DirectoryArchiver entries are now contained within the extraction root.
Fixes search results for empty indexes using BLAS.
faiss::hammings() now accepts ragged code sizes.
Fixes byte-stride handling in reconstruct_n and search_and_reconstruct.
Fixes range search parameters for IndexIDMap.
The result limit now respects all similarity metrics.
Guards against empty query batches (nx=0); the same guard is added for exhaustive_L2sqr_seq.
Fixes symmetric_dis().
Fixes add_sa_codes returning -1 labels with an IVF subindex.
Fixes a crash with empty SearchParameters.
Bounds precomputed-table allocation during deserialization.
Bounds the constructor loop to fix a deserialization timeout.
Rejects null base or refine indexes during deserialization.
Filters out-of-radius results and widens the base radius by k_factor.
Fixes pruning so dominated equal-time points do not remain on the Pareto frontier.
Guards constant or zero-norm queries during quantization, clamps L2 estimates to zero or greater, and throws instead of aborting on a null decode buffer.
Fixes handling of multi-bit RaBitQ indexes, missing quantizer types, and IDMap2 identification.
Guards compute_codes/decode OpenMP regions for small n.
Deserialization now validates bool fields.
Rejects null inner indexes during deserialization.
Re-enables musllinux wheels for faiss-cpu.
Fixes an import SIGILL on non-AVX2 systems by moving partitioning tables to .rodata.