Embedded
Import the engine as a pure-Go library — no server, no cgo, no dependencies. Search runs inside your binary.
import ".../rostam/vector"
Open source · Two engines · Written in Go · v0.1.3
Two engines in one Go module — a vector search engine and a sub-microsecond key-value store.
Or docker run ghcr.io/rostamlabs/rostam · pip install rostam-client ·
Python quickstart →
Building in Go? Skip the server entirely —
go get github.com/rostamlabs/rostam embeds both engines in your binary,
no server and no cgo. The embedded path →
Benchmarks
Under VectorDBBench — a third-party harness, maintained by the company behind Milvus — on Cohere-1M (768d, cosine). Six engines, one continuous session, with HNSW build parameters pinned identically on every engine. Every run is reproducible from rostam-bench →
2.02× Milvus · 2.18× pgvector · 4.16× Qdrant
fastest in the set, least total CPU of any multi-core engine
the lead holds across the whole curve, not at one point
ahead of Memcached, Dragonfly and Aerospike at 64+ conns; RF=2 replicated writes 113.6k/s vs Aerospike 85.9k at 128 conns, replica-ack both sides
Read at matched recall — engines land at different recall for the same
ef, so equal ef is not equal work. Every number is
same-session, because this hardware drifts up to 42% between sessions on
unchanged code, and the benchmark client shares the box, which penalises the fastest engine
hardest — so these are floors, not ceilings. Full per-ef curves, the filter
case, three paired A/B controls and the complete methodology, including where the data cuts
against Rostam, are in
rostam-bench/vectordbbench;
the key-value comparison, run the same way over the wire against seven engines, is in
rostam-bench/netkv.
at 4× smaller
smaller — recall@10 ≈ 0.96 rescored
faster than scalar
recall cliff on selective filtered search
Measured with make bench on the same 12-core AMD EPYC Genoa server — directional, not a marketing sheet.
Run it as a server
Start the server once, then call it over REST, gRPC, or a binary TCP protocol — from any language that speaks HTTP. Python gets a first-party, dependency-free client — it pools connections and sends searches over a binary wire, falling back to JSON against older servers (with optional LangChain, LlamaIndex, and Haystack adapters); everything else talks plain REST or gRPC.
curl -fsSL https://rostamlabs.com/install.sh | sh
rostam-server -http 127.0.0.1:8080 -data ./data
That serves REST. Add -grpc 127.0.0.1:9090 and -tcp 127.0.0.1:7000
to serve gRPC and the binary TCP protocol from the same store — a write on any
transport is visible on the others, and setting a transport's flag to ""
disables it.
The installer verifies the release checksum before installing into ~/.local/bin — add that to your
PATH if it is not there already. Prefer a container?
docker run -p 127.0.0.1:8080:8080 -e ROSTAM_API_KEY=secret ghcr.io/rostamlabs/rostam:latest
— auth is required there, because inside the container it binds a reachable address, so add
-H 'Authorization: Bearer secret' to the calls below.
curl localhost:8080/v1/collections -d '{"name":"docs","config":{"dim":4,"metric":"cosine"}}'
curl localhost:8080/v1/collections/docs/points -d '{"id":1,"vector":[0.1,0.2,0.3,0.4],"content":"hello"}'
curl localhost:8080/v1/collections/docs/points/search -d '{"query":[0.1,0.2,0.3,0.4],"k":3}'
Plain REST over HTTP — or gRPC. Any client works: JavaScript, Rust, Java, curl.
pip install rostam-client
On PyPI as rostam-client.
Quickstart
Create a collection, insert vectors with metadata, and run an exact filtered search — call a running server from Python, or embed the engine directly in Go.
Python client is stdlib-only, with optional LangChain / LlamaIndex / Haystack integrations.
The vector engine
HNSW graphs, IVF centroids, and Vamana — pick the index that fits each workload, mmap-resident.
From SQ8 at 4× smaller to binary at 32× — quantized codes stay mmap-resident, off the heap.
Dense + sparse fusion resolved in a single query, with BM25 full-text search built in.
Metadata filters run through an exact filter-first query planner — no recall cliff.
MMR diversification, recommendation, and discovery retrieval for RAG pipelines.
Per-tenant isolation with quotas, TTL, and a payload index for fast metadata filters.
The AVX2 int8 distance kernel runs ~2.9–3.3× faster than scalar code (VNNI adds ~1.3× on top).
An optional CUDA build moves the exact-KNN scan onto the GPU when you have one.
A pure-Go library — no server, no cgo, no dependencies. Or run it as a server.
Filtered search
Selective metadata filters are where approximate search quietly falls apart. Rostam plans filtered queries exactly: the payload index narrows candidates first, then search runs over what actually matches — so recall holds as filters get sharper.
tenant = "acme"Deployment
Import the engine as a pure-Go library — no server, no cgo, no dependencies. Search runs inside your binary.
import ".../rostam/vector"
Run it as a service and reach it from any language — see the server + Python guide above for the full protocol and auth story.
REST · gRPC · binary TCP
Scale out with per-shard Raft replication and online resharding — grow without rewriting your application.
per-shard Raft · online resharding
The second engine
The same module ships a sub-microsecond KV store behind one
Store interface — Direct in-process (the fastest),
Embedded with per-shard Raft replication, or
Client over TCP to a running cluster. Same API throughout.
| Operation | Latency |
|---|---|
| Get (hit) — Direct, in-process | ~29 ns · 0 allocs |
| Put — Direct | ~240 ns |
| Get — TCP loopback (Direct server) | ~1.7 µs |
| Put — TCP loopback (Direct server) | ~1.8 µs |
Measured with make bench on the same 12-core AMD EPYC Genoa server as the comparisons above — except the loopback rows, which come from a multi-queue host, because that box's NIC has a single queue and would measure the adapter rather than the storage path. Directional, not a marketing sheet.
Read-modify-write under the shard lock — no CAS loops.
Sandboxed and fuel-capped — run your logic next to the data.
Per-shard Raft, online resharding — served over REST, gRPC, and binary TCP.