Voyager

Spotify library for in-memory HNSW vector search with matching Python and Java bindings.

Open SourceSelf HostedOffline Capable
0.0 (0)

About

Spotify built Voyager to run nearest-neighbor lookups over embedding vectors held in memory, and the company relies on it behind many user-facing features at very high query volume. Under the hood it implements HNSW graphs, extending the hnswlib codebase, and gives Python and Java the same feature set (Scala projects can use the Java artifact), so an index saved from one language loads unchanged in the other. Indexes support Euclidean, inner product and cosine distance, tunable graph parameters such as M and ef_construction, multithreaded batch inserts, deletion by marking IDs, and reduced-precision storage in 8-bit fixed point or E4M3 floating point to cut memory use. Install from PyPI or add the com.spotify artifact to a Maven or sbt build; prebuilt wheels cover Python 3.9 to 3.13 on Linux, macOS and Windows, with ARM builds on Linux and macOS. No GPU or server process is involved, which makes it a library to embed inside an application rather than a database to operate. Apache-2.0 licensed for commercial use. A good pick for teams wanting better recall than Spotify's older Annoy without running a vector service.

Should you use Voyager?

Pick it when

Pick Voyager when you need in-memory HNSW search from both Python and Java, for example building an index in a Python job and serving it from a JVM service, since both bindings read the same on-disk index format.

Look elsewhere when

Skip it if your stack is Rust, Go, Swift, or JavaScript, or the index should stay memory-mapped instead of loaded into RAM: USearch covers more languages and disk-backed serving, and Annoy shares one mapped file across processes.

Alternatives to Voyager

  • HNSWlib

    The underlying HNSW library with C++ headers and community Java and R bindings; more barebones, without Voyager's added speed and convenience features.

  • Annoy

    Spotify's older library with read-only memory-mapped indexes shared across processes; lower memory per worker, but no incremental updates.

  • USearch

    Single-header HNSW with about ten language bindings, memory-mapped serving from disk, and i8 or binary precision; broader reach than Python plus Java.

  • FAISS

    Adds quantized and GPU indexes for data too large to hold as full vectors in memory; more complex than Voyager's single HNSW index type.

Reviews (0)

Leave a Review

No reviews yet. Be the first to review!

Details

Price
Free
Platform
Local/Desktop
Difficulty
Easy (2/5)
License
Apache-2.0
Added
Apr 3, 2026

Tags