mrkeyoor.com_
Tue 08 Sept 15:00 UTC
Dataevaluationupdated 08 Sept 2026

faiss review

Faiss is a C++ library, with Python wrappers, for finding vectors that are closest to a query vector and for clustering vector data. It supplies exact and approximate indexes for workloads such as semantic search and recommendation, leaving storage, metadata, permissions, and application APIs to the developer.

trackingstars / 7d
Verdict

Our Faiss checkout installed 35 packages in 41 seconds, then its build failed and all 89 tests either failed or hit setup errors. Try the supported Conda package if you need direct control over high-scale vector indexes, but prove your chosen index and wrapper on production-like data before adoption. Use a vector database when persistence, metadata filtering, replication, or tenant controls are part of the job.

We ran it

Lab card: what happened when we ran faissScreenshot of faiss (faiss.ai)
Install✓ · 41s35 packages · 37 MB
Build✗ · 6s
Tests✗ · 7s0 passed · 21 failed · 68 errors of 89 (pytest)
Known vulns0(pip-audit)
Repo1093 files~235,838 lines of source · 9.9 MB · 11 CI workflows · tests dir

Answers from our run

Does faiss build from source?

Dependencies installed in 41 seconds (35 packages), and the build failed. We cloned commit 2ed4c10 into a clean Debian container with 3 CPUs and no project-specific setup.

Do faiss's tests pass?

Not all of them: 0 of 89 passed and 21 failed when we ran the project's own test command (pytest), with 68 collection errors. Some failures need services or credentials a bare container does not have.

Does faiss have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use faiss?

Teams expecting a complete vector database: the README describes indexes over integer-identified vectors, not a server with metadata, access control, replication, or backups.

What are the alternatives to faiss?

hnswlib, Annoy, Qdrant. Our Faiss checkout installed 35 packages in 41 seconds, then its build failed and all 89 tests either failed or hit setup errors.

Setup2/5Install passed; build and all 89 tests failed or errored
Docs5/5Install, index tradeoffs, tutorials, and troubleshooting are detailed
Community5/5Fresh pushes and active issue and pull request traffic
Maturity4/5v1.15.0 is established, with current correctness reports to track

Who it’s for

Search and machine-learning engineers who need direct control over vector index choice, training, memory use, and accuracy.
Python or C++ teams prepared to test index behavior against their own data and queries.
GPU users who can match Faiss, CUDA, and optional cuVS packages to supported Linux hardware.
Researchers reproducing similarity-search work or comparing compressed and graph-based indexes.

Who it’s NOT for

Teams expecting a complete vector database: the README describes indexes over integer-identified vectors, not a server with metadata, access control, replication, or backups.
Developers who need a minimal source build with few native prerequisites: the install guide requires C++20, OpenMP, BLAS, CMake, and SWIG for Python bindings.
Applications using HNSW selectors as an authorization boundary without checking returned IDs: issue 5504 reports excluded IDs being returned with an unbounded queue, and its fix remains an open pull request.
Services that repeatedly reset and reuse IndexPQFastScan without a regression test: open issue 5591 reports a process crash on the first search after reset.
Windows or macOS teams requiring the official GPU package: the install guide lists faiss-gpu only for Linux x86-64.

Setup reality

Our sandbox installed 35 Python packages in 41 seconds and used 37 MB. The build failed with exit 1 after 6 seconds. Tests then failed in 7 seconds: 0 passed, 21 failed, and 68 collection or setup errors were recorded across 89 tests.

Faiss needs no hosted service or API credential. The supported binary route uses Conda channels. A source build needs C++20, OpenMP, BLAS, CMake, and SWIG for Python; CUDA, ROCm, cuVS, and SVS are optional paths with their own packages.

The test log showed a faiss module missing public symbols including IndexFlatL2, index_binary_factory, and SIMDConfig. It did not say why those bindings were absent. The checkout had 11 CI workflows and a tests directory, but no Dockerfile.

The 235,838-line checkout is an index library, not a vector database

Faiss stores dense vectors and searches them by L2 distance or dot product; cosine similarity works after vectors are normalized. Its index families cover exact search, compressed representations, inverted files, HNSW, NSG, binary vectors, and clustering. Python users get wrappers around a codebase written mainly in C++. The choice is unusually broad, but Faiss does not supply a hosted endpoint, document store, metadata schema, user permissions, replication, or backups. Those pieces stay in your application or another service.

Our measured checkout had 1,093 files and roughly 235,838 lines of source. That size reflects years of CPU, GPU, quantization, graph, and wrapper work. It also means the first design question cannot be which Faiss class is fastest. Index selection trades search time, accuracy, memory per vector, training time, insertion cost, and sometimes a separate training set. The README names those tradeoffs directly, so a useful evaluation needs your vector dimensions, data volume, update pattern, and recall target.

Compressed indexes can fit more vectors by accepting lower precision

Faiss supports exact indexes as a baseline and approximate structures that reduce memory or search work. Some compressed index types do not retain the original vectors, which the README says generally costs precision. HNSW and NSG instead add graph structures over vectors. That range lets an experienced team fit an index to one workload, but it offers no universal default. A nearest-neighbor result can be numerically valid while still missing the item your product needed.

The lab run did not measure query latency, recall, throughput, or GPU speed. Its 3 CPUs and 8 GB of RAM were used for repository setup, build, and tests only. Faiss publishes research papers and benchmark scripts for performance work, yet those results do not predict a buyer's dataset and hardware. Build a small exact index as the reference, compare candidate indexes against it, and check the returned IDs at the application boundary.

What happened when we ran it

Our sandbox installed 35 Python packages in 41 seconds, consuming 37 MB on disk. Pip-audit found 0 known vulnerabilities in that environment. The source build failed with exit code 1 after 6 seconds. No diagnostic tail accompanied the recorded build result, so it would be guesswork to blame a compiler, system package, or Faiss source error. The defensible finding is that commit 2ed4c10 did not build in the stated fresh Debian container.

Pytest also exited 1 after 7 seconds. Of 89 tests, 0 passed, 21 failed, and 68 stopped during collection or setup. The last 1.06 seconds of pytest output showed a loaded faiss module without attributes such as IndexFlatL2, index_binary_factory, check_openmp, get_compile_options, and SIMDConfig. That is what the log establishes. It does not establish why the expected Python bindings were missing.

The repository signals are much better than this one run: our scan counted 11 CI workflow files and found a tests directory. It found no Dockerfile. Those workflows show that the maintainers test several supported configurations, while our 7-second failure shows that a generic Python environment is not automatically one of them. The project install guide should be treated as required reading, especially when source and Python bindings are built together.

C++20, BLAS, and SWIG make source builds a systems task

Faiss calls Conda the supported installation method and publishes CPU, NVIDIA GPU, and cuVS packages through specific channels. Version 1.15.0 CPU binaries cover several operating systems and architectures, while the official GPU packages have narrower Linux and CUDA combinations. This route is the sensible first trial for most Python users because it delivers the compiled native library and wrapper as a matched set.

Building from source needs a C++20 compiler with OpenMP, a BLAS implementation, and CMake. Python bindings add Python, NumPy, and SWIG. CUDA or ROCm enters the picture for GPU indexes, while cuVS and SVS add other dependencies and switches. The install guide exposes SIMD choices such as AVX2 and AVX512 as well. None of these require an API key, but each expands the matrix that a team must pin and reproduce.

Two open index bugs can affect filtering and process stability

GitHub listed 325 combined issues and pull requests when fetched. Issue 5504 reports that IndexHNSW can return an ID rejected by SearchParameters.sel when bounded_queue is false; pull request 5508 proposes a fix and remains open. An application using that selector for tenant or permission filtering should verify results independently. Approximate search settings should never turn a hard access rule into a best-effort request.

Open issue 5591 reports a repeatable crash after training and populating IndexPQFastScan, calling reset(), then searching the emptied index. Issue 5599 separately reports incorrect reconstruction after merging scalar-quantizer indexes trained on incompatible ranges. These are specific index paths, not proof that every Faiss index is unsafe. They do show why production tests must cover the exact index class, training recipe, merge flow, reset behavior, and selector settings that the service will use.

Version 1.15.0 is active, while database duties remain elsewhere

Faiss v1.15.0 was released in August 2026, and the last push was September 8, 2026. Issues and pull requests were also moving on September 7 and 8, so current activity supports a healthy maintenance judgment. GitHub showed 40,876 stars, but stars say less about fit than the installation matrix and open correctness reports. The 11 CI workflows are more useful evidence of the project's effort to cover its many hardware paths.

Faiss is a strong candidate when vector search itself is the engineering problem and the team wants control at C++ or Python level. Our failed 6-second build and 89 unsuccessful tests make the source checkout a poor quick-start result, so begin with a supported binary and rerun relevant tests. If the requirement already includes payload filters, network APIs, durability, replication, and tenant isolation, Qdrant or another vector database is the more honest comparison.

Alternatives

ProjectWhat it isPick it when
hnswlibA focused C++ and Python library for approximate nearest-neighbor search with HNSW.pick this instead when one graph index and a smaller API are enough.
AnnoyA read-oriented approximate-neighbor library built around memory-mapped indexes.pick this instead when indexes are built offline, shared by several processes, and queried far more often than updated.
Qdrant gh↗A vector database server with filtering, payloads, persistence, and network APIs.pick this instead when the team needs an operated database rather than an in-process index library.

What people are saying

  1. [velocity-scout] facebookresearch/faiss

Sources

  1. Faiss README
  2. Faiss installation guide
  3. Faiss repository facts
  4. Faiss v1.15.0 release
  5. Issue 5504: HNSW selector ignored with unbounded queue
  6. Pull request 5508: HNSW selector fix
  7. Issue 5591: IndexFastScan reset crash
  8. Issue 5599: incompatible scalar quantizer merge

More data reviews

quickwit · mongoose · domain-list-community · dragonfly · TVAPP · timescaledb · the whole board →