Rust-fast, horizontally scaled, and finally calling itself stable
If you've been waiting for Qdrant to drop the "we're still pre-1.0" disclaimer before committing infra to it — behold: 1.0 just shipped. Horizontal scaling, distributed mode, and an API contract that promises not to move under you.
The Setup
Qdrant is written in Rust, which means it's stupid fast and uses memory like a polite houseguest. Docker run, point a client at it, you're indexing in under a minute. M4 Macs love this thing.
# spin up Qdrant locally
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage \
qdrant/qdrant:latest
# health check
curl http://localhost:6333/healthzThe Money Pattern
The Python client is genuinely pleasant. Named vectors, payload filtering, hybrid search, sparse vectors — it all just works. Here's a full upsert-and-search loop in under 30 lines.
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="claims",
vectors_config=VectorParams(size=1024, distance=Distance.COSINE),
)
client.upsert(
collection_name="claims",
points=[
PointStruct(id=1, vector=embed("hail damage roof QLD"), payload={"region": "qld"}),
PointStruct(id=2, vector=embed("storm water ingress NSW"), payload={"region": "nsw"}),
],
)
hits = client.search(
collection_name="claims",
query_vector=embed("roof leak after hailstorm"),
limit=5,
query_filter={"must": [{"key": "region", "match": {"value": "qld"}}]},
)The Catch
HNSW tuning is still your problem. `m`, `ef_construct`, `ef` — the defaults are sane, but if you're chasing recall at 50M+ vectors you'll spend a weekend benchmarking. Also: distributed mode needs Raft consensus, which means you've signed up for ops work the moment you scale past one node.
The Verdict
For a serious production vector workload, Qdrant 1.0 is the move. It's faster than Weaviate, more featureful than Chroma, and the Rust core means you're not babying a JVM at 3am. If you're past the Postgres + pgvector stage and need real scale, this is what you reach for.