4.3k stars · Apache-2.0 · v2.26.2, read from /releases/latest, shown as '31 Aug' with no year and therefore 31 August 2026 · Track this in Scout
A single-header similarity search and clustering engine for vectors, usable from ten languages and embedded inside ClickHouse and DuckDB.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A similarity search and clustering engine written in C++, distributed as a single header file. An embedding is the list of numbers a model produces to represent a piece of text or an image, and nearest-neighbour search is the job of finding the closest ones. USearch does that with an index that can live in memory or on disk, and it has bindings for Python, JavaScript, Rust, Java, Go, Swift, C# and more.What it is good for. Anyone adding meaning-based search to something that does not have a database for it, and anyone whose index has grown too big for a simple list. The problem it removes is running a whole separate search server for something that can live inside your process. A short line about Grasppy: its search over the pieces of a long conversation is exactly this shape, and it does not need a server of its own.
- Very small. One header file, no service to run, and the index can be memory-mapped from disk so it does not all have to fit in memory.
- The same index works from many languages, which matters when the model runs in Python and the product runs in something else.
- Apache-2.0 licence, and it is embedded inside ClickHouse and DuckDB, which is a strong signal that the code holds up.
- It is a library, not a database. There is no query language, no filtering by other fields, and no backup story except copying the file.
- Approximate search trades a little accuracy for a lot of speed, and choosing the settings takes some reading.
- You still have to produce the numbers yourself with a model. This is only the search half.
- facebookresearch/faiss
The standard in this area, with far more algorithms and a much heavier install.
Track this in Scout
MinishLab/vicinityPublished in Edition 8, a thin Python layer that gives several engines one interface, so it is the way to try this one against others.
Track this in Scout- spotify/annoy
The older file-based approach that several processes can share, simpler and slower to update.
Track this in Scout
source venv/bin/activate
pip install usearch
# In Python:
# import numpy as np
# from usearch.index import Index
# index = Index(ndim=256, metric='cos')
# index.add(np.arange(1000), np.random.rand(1000, 256).astype(np.float32))
# matches = index.search(np.random.rand(256).astype(np.float32), 10)
# index.save('grasppy.usearch')
# In Node.js:
npm install usearch
