Qdrant Deep Dive: The Rust-Powered Vector DB Startups Keep Choosing
Spend a week reading the stack diagrams of AI startups, from Bengaluru SaaS tools to YC-backed RAG products, and one name keeps recurring in the retrieval layer: the Qdrant vector database. Ask those teams why, and the lazy answer arrives first: "it is written in Rust, so it is fast." That is an adjective, not an answer.
This article is the longer, honest version: a complete Qdrant vector database overview covering what Qdrant actually is, what Rust genuinely buys you and where the argument collapses, why its filtering design is the part rivals struggle to copy, how quantization keeps the RAM bill survivable, what each deployment option really costs, and where Qdrant is simply the wrong tool. If you only want the product, it lives at qdrant.tech and the source is on GitHub; the navigational search ends there. Everyone else deciding whether Qdrant DB belongs in their stack: read on. Every number below comes from Qdrant's own documentation or is labelled an estimate, and this is independent, unsponsored analysis.
What Is Qdrant?
Short answer first, the snippet version:
Qdrant is an open-source vector database and vector similarity search engine written in Rust. It stores high-dimensional vectors alongside JSON payload metadata in collections, indexes them with HNSW, and returns top-k nearest matches with filters applied during the search itself. It runs locally in Docker, on your own cluster, or as a managed cloud service.
In the Qdrant documentation, a collection is "a named set of points", and each point consists of "a vector (numerical representation of your data) and optional payload metadata". Point IDs are 64-bit integers or UUIDs, and one point can carry several named vectors (dense, sparse, even multivector). Data sits in segments: storage units holding vectors and their indexes, optimized in the background. Access is over HTTP or gRPC, with official clients for Python, JavaScript/TypeScript, Rust, Go, .NET and Java.
The vocabulary, in one table:
| Term | One-line meaning |
|---|---|
| Collection | A named set of points you search within; the unit you configure and scale |
| Point | One record: a vector plus optional JSON payload, identified by ID |
| Vector | The numerical embedding; a point can hold several named vectors |
| Payload | The JSON metadata attached to a point; what your filters match against |
| Payload index | An index on a payload field; makes filters fast and feeds the query planner |
| Top-k query | "Give me the k most similar vectors", where k is your result count |
If you need the one-sentence refresher on what a vector database even is: it is a database built to run similarity search over embeddings, the numerical fingerprints your models produce.
The engine is developed in the open by Qdrant Solutions GmbH, a Berlin company, and its Qdrant GitHub repository passed 34,000 stars (34,106, with 2,600 forks, as of 21 August 2026). That adoption curve is the subtext of this article's title.
Is Qdrant a Vector Database or a Search Engine?
Both, and qdrant.tech's own homepage title ("Qdrant - Vector Search Engine") is why people ask. The database half is real: writes travel through a write-ahead log so a power cut does not eat your data, with snapshots and segments for durability and recovery (details in the storage documentation). The search-engine half is the interface: similarity search is what you query for, not an add-on. The Qdrant vs FAISS confusion comes from FAISS being an in-process library: no persistence, no server, no filtering layer. If other processes must query a durable, filtered service, you want the database; if one Python process needs a fast approximate-nearest-neighbour routine, a library is enough.
Build an AI-First Career, Master the Complete Skillset
Choose from our industry-leading programs designed for career success
Modern Software and AI Engineering Program
Master full-stack development with AI integration
+1000 moreModern Data Science and ML with specialisation in AI
Advanced data science techniques with AI specialization
+1000 moreAdvanced AIML with Specialisation in Agentic AI
Deep dive into AIML with focus on Agentic systems
+1000 moreDevOps, Cloud & AI Platform Engineering
Build and manage AI-powered cloud infrastructure
+1000 moreAI Engineering Advanced Certification by IIT-Roorkee
Premier AI engineering certification from IIT-Roorkee
AI Forward Deployed Engineer Program
Full-stack engineering, production AI and client-facing consulting
+1000 moreIs Qdrant Open Source and Free?
Yes to both, and it pays to separate "free" from "no cost":
Is Qdrant DB free? The engine is free and open source under Apache 2.0, so self-hosting costs zero licence fees, forever. You still pay for infrastructure and operations time. Qdrant Cloud additionally offers a free single-node tier (0.5 vCPU, 1 GB RAM, 4 GB disk) for testing and prototypes.
Put plainly: Qdrant is an open source vector database whose vendor sells convenience, not licences. That places it at a distinct point on the spectrum from a proprietary managed-only service like Pinecone, the embedded, prototype-first Chroma, and pgvector, a Postgres extension. Each is the right answer somewhere; this page goes deep on the Qdrant database itself.
Why Rust Matters (and Where It Doesn't)
"Written in Rust" appears on every Qdrant explainer as a synonym for "trust us, it is fast." Here are the four mechanisms that sentence is actually pointing at:
- No garbage collector, so predictable tail latency. In a GC'd runtime, a collection pause lands on whichever request is unlucky, which is exactly what breaks a user-facing search box at the p99 line. Rust frees memory deterministically, so latency stays tight under load.
- Memory safety without a runtime. Ownership and borrow-checking delete whole bug classes (use-after-free, data races) at compile time, so the engine can multithread aggressively across millions of vectors without a recurring class of crashes.
- A small, steady footprint. No VM, no JIT warm-up, low idle memory. A node runs usefully on a modest cloud VM, which is why cost-sensitive teams self-host instead of paying per query.
- SIMD-friendly distance maths. Similarity search is billions of dot products; Rust's zero-cost abstractions put vectorised CPU instructions in the hot loop. It is also why quantized 8-bit comparisons get faster, not just smaller.
Picture one node: clients speak REST or gRPC into the API layer; a collection splits into segments, each holding the vector index beside its payload indexes; writes land in the WAL before segments flush; vectors sit in RAM or memory-mapped disk depending on your budget.
Now the credibility check, because Rust worship is content-farm fuel. First, Rust is rarely why your RAG pipeline feels slow: embedding-model latency and network round-trips usually dwarf in-database time. Second, language does not beat algorithm: a badly tuned HNSW graph in Rust loses to a well-configured index written in anything.
Third, the moat is gone: Chroma rewrote much of its core in Rust in v1.0.0 (March 2025), so Rust alone no longer separates Qdrant from its most common alternative; filtering, quantization and deployment maturity, the next four sections, are what remain. Fourth, unless you contribute to the engine itself, you will barely feel the language at all.
Judging infrastructure this way, mechanisms instead of adjectives, is a learnable skill, and it sits inside the systems-engineering side of AI infrastructure that separates engineers who operate systems from engineers who only demo them.
Filtering: Qdrant's Real Differentiator
The scenario that decides vector-database choice more often than any benchmark: you want the ten most semantically similar support tickets where language = "hi" and created_at >= 2026-01-01 and plan = "enterprise". Two textbook strategies both fail you.
I have a scar from the first. A support-search feature I worked on filtered after top-k retrieval, and users got three results on a page promising ten, because 7 of the top 10 failed the tenant filter. The team's instinct was to request top-1,000 and trim client-side, which worked until the corpus grew and latency fell off a cliff. Post-filtering has a silent recall-collapse problem: selective filters return fewer results than you asked for, and requesting "more" is a slowdown, not a fix.
Pre-filtering fails the other way: find every point matching the filter, then brute-force compare all their vectors. Correct, but linear in the number of matches; fine for 500 points, a bad afternoon for 5 million.
Qdrant's answer starts with payload indexes: per-field indexes on your metadata (keyword, integer, float, bool, geo, datetime, text, uuid). Those indexes do more than speed up lookups. Per the indexing documentation, the graph itself becomes filter-aware: extra edges are added to the HNSW index based on indexed payload values, so Qdrant filters apply filters as you search in the graph. The traversal never wanders into regions that cannot possibly match. Payload indexes are also "used to accurately estimate the filter cardinality, which helps the query planning choose a search strategy": when the estimated matching set sits below full_scan_threshold (default 10,000 KB of vector data, where 1 KB is one 256-dimension vector), the planner deliberately falls back to a full scan, because brute force on a small set genuinely beats graph traversal. The engine picks the right algorithm per query instead of forcing one strategy everywhere.
One honest caveat, which doubles as a freshness test for anything else you read: filter-aware edges are built per payload index, not per combination, so two very strict filters at once can still disconnect the graph. Qdrant v1.16.0 added the ACORN search algorithm for exactly this: traversal also explores neighbors-of-neighbors when direct neighbors are filtered out, which "improves search accuracy at the cost of performance". Filtering here is not a solved-and-forgotten feature; it is being actively engineered.
| Approach | How it works | Where it breaks |
|---|---|---|
| Post-filtering | Similarity search first (often top-1,000), then discard rows failing the filter | Silent recall collapse on selective filters; oversized requests are slow and still approximate |
| Pre-filtering (full scan) | Collect every matching point, brute-force compare all vectors | Linear in matches: fine for 500 points, unusable for 5 million; ANN speed gone |
| Qdrant filterable HNSW | Payload indexes feed filter-aware edges into the graph; the filter guides traversal | Very strict multi-filter combos can disconnect the graph; v1.16.0's ACORN mitigates it |
HNSW itself, in one breath: a navigable graph index where similar vectors sit near each other, so search hops neighbour to neighbour instead of scanning everything. That is all you need here.
Four habits that make Qdrant filters behave in production:
- Create payload indexes before ingesting data. The docs are blunt: "Payload indexes should be created before ingesting data"; filter-aware edges only generate for indexes that exist when the graph builds.
- Index only fields you actually filter on. Payload indexes "occupy additional memory and disk space", so an index per field is a tax, not a feature.
- Prefer keyword, integer and datetime indexes over full-text wherever an exact or range match will do.
- Make tenant isolation an indexed payload field from day one. Keyword and uuid indexes support optional tenant optimization for exactly this pattern; retrofitting it is misery.
Memory Is the Bill: Quantization and Storage Trade-offs
The arithmetic that rules everything below: a float32 component costs 4 bytes, so a 1,536-dimension vector occupies 6,144 bytes, roughly 6 KB. One million of those is about 6 GB before the index graph, payloads or replicas. At typical cloud rates that RAM is a standing monthly bill (rough estimate: ₹2,000 to ₹4,000 on a modest VM), which makes quantization a budget decision, not an optimisation flag.
All four methods, with Qdrant's own published figures from its quantization documentation:
| Method | Compression | Speed effect | Accuracy cost | Use when |
|---|---|---|---|---|
| TurboQuant (4-bit, v1.18.0+) | 8× (up to 32× at 1-bit) | SIMD-accelerated; queries scored at full precision | Comparable recall to scalar at double the compression (vendor benchmarks; test on your data) | The current default choice; skip only for L1/Manhattan setups |
| Scalar (float32 to uint8) | 4× | Faster: SIMD 8-bit comparison | Error "usually less than 1%" | Established, boring, safe everywhere |
| Binary quantization (1 bit; 1.5/2-bit options) | up to 32× | Fastest: "up to a 40x speedup compared to the original vectors" | Needs centred, high-dimensional vectors; ada-002 (1,536d) hit 0.98 recall@100 with 4× oversampling | High-dimensional embeddings, always with rescoring enabled |
| Product quantization | up to 64× | Slower than scalar: not SIMD-friendly | Significant; docs say use only when "accuracy and speed are not critical" | Memory footprint is the absolute top priority |
Two mechanisms make aggressive compression survivable, and almost no explainer covers them. Oversampling retrieves more candidates than you need with the cheap compressed vectors; rescoring re-ranks that shortlist against the full-precision originals. Together they buy back most of the recall at a fraction of the memory, and the 0.98 recall@100 figure above exists because of that pairing. Caveat from the docs: if the original vectors live on disk, rescoring can "significantly decrease search speed".
The freshness note the 2023-era tutorials all miss: TurboQuant, a method developed by Google, landed in Qdrant v1.18.0, and the docs now recommend 4-bit TurboQuant over classic scalar quantization for most cases (a fast random rotation before compression lets it tolerate distributions that binary quantization cannot). Verify this at publish time; it is the fastest-moving page in the manual.
Storage is the same budget question wearing a different hat. Vectors in RAM are fastest and cost the most; memory-mapped ("cold") storage keeps them on disk, slower on first access while the OS caches pages; payloads can live on disk too. Ask "how much of my working set must be resident", not "which flag do I flip". And the classic self-inflicted wound: binary quantization on 300-dimension embeddings. It is "only efficient for high-dimensional vectors" with centred distributions; teams that skip that caveat report mysteriously terrible recall and blame the database.
Hybrid Search: Sparse Vectors, Multivectors and the Query API
Dense embeddings are brilliant at meaning and unreliable at exact tokens. Ask a dense index for ORA-01555, a product SKU, or a rare surname, and it cheerfully returns "something semantically adjacent", which in support search or e-commerce is worse than wrong.
Qdrant hybrid search handles this with named vectors on the same point: a dense vector for semantics beside a sparse vector "designed to capture precise lexical matches for specific keywords". One collection, both retrieval styles, no second search system to babysit. The unified Query API then runs both retrievals in one request using prefetch (cheap broad candidates first) and fuses the two ranked lists, via Reciprocal Rank Fusion (RRF) or Distribution-Based Score Fusion (DBSF, v1.11.0); mechanics in the hybrid queries documentation. At the advanced end, multivector and late-interaction (ColBERT-style) support covers per-token retrieval. You do not need a second vendor to start: Qdrant's own FastEmbed library generates sparse embeddings (SPLADE-family and friends) locally.
Deployment: Docker, Self-Hosted, or Qdrant Cloud
Qdrant Cloud pricing and the self-hosting math below are checked against the live pricing page in August 2026; re-verify before you budget or quote anyone. The decision has five honest shapes:
| Option | What you run | Ops burden | Cost shape | Best for |
|---|---|---|---|---|
| Local Docker | One disposable container | None | Free | Learning, development, CI test fixtures |
| Self-hosted single node | One VM you own | Backups, upgrades, monitoring, RAM sizing | Your VM bill | Side projects, internal tools, budget production that tolerates downtime |
| Self-hosted cluster (K8s) | Multiple nodes: sharding plus replication on Raft consensus | Real: rebalancing, restores, upgrades, on-call | VM cost × replication factor | Teams with existing platform/DevOps capability |
| Qdrant Cloud (managed) | Nothing | Near zero | Usage-based on vCPU, memory, storage, inference tokens | Teams where engineer-hours cost more than the cloud markup |
| Hybrid / Private Cloud | Qdrant's control plane, your infrastructure | Shared | Enterprise agreement | Data residency, regulated or air-gapped workloads |
The managed tiers as of August 2026: the free tier is "for testing, and prototypes", a single-node cluster with 0.5 vCPU, 1 GB RAM and 4 GB disk, plus free cloud inference on selected models. What fits in 1 GB of RAM? Rough estimate: a quantized 768-dimension collection of a few hundred thousand points; an unquantized million-point 1,536-dimension collection (about 6 GB of vectors alone) does not. Standard is usage-based production Qdrant pricing with dedicated resources, high availability, backup and disaster recovery, and a 99.5% uptime SLA. Premium adds SSO, private VPC links, extended support and a 99.9% SLA (99.95% multi-AZ). Hybrid Cloud runs "managed Qdrant clusters on your own infrastructure", explicitly positioned for local data residency; Private Cloud is the dedicated, air-gapped end. AWS, Azure and GCP are all supported, and billing is "based on actual resource usage during the billing period", metered hourly.
The India angle nobody writes about: if localisation obligations under the Digital Personal Data Protection Act, 2023 are part of your review, an open-source engine changes your options. You can self-host the Qdrant vector database in Mumbai (ap-south-1) on your own AWS account, or take Hybrid Cloud and keep data in your network while Qdrant's control plane does the babysitting. Check the console's current region list before assuming anything, and treat this as engineering context rather than legal advice.
Now the quiet part about "free licence". The docs set replication_factor to 1 by default, meaning zero copies: anything that must survive a node dying needs at least 2, which doubles the node count. Add snapshot scheduling with actual restore rehearsals, version upgrades, and a human on call when a node dies at 2 a.m. For a two-person team, the managed bill is often cheaper than those hours, so run the honest math, not the heroic math. The skills that make self-hosting survivable are the operational practices that keep self-hosted services healthy, and they belong in the budget before you commit.
How Scaler Transformed Careers in Different Fields
Scaler learners achieved 2.5x salary growth with average post-Scaler CTC reaching ₹23L.
Getting Started: Qdrant in Python in Five Steps
Here is how to run Qdrant locally and be querying filtered vectors in minutes. Verified against qdrant-client 1.19.0 (August 2026); skim the official quickstart if your client is newer.
Step 1: Run Qdrant Locally with Docker
Ports 6333 (REST) and 6334 (gRPC), plus a storage volume so collections survive restarts (SELinux hosts: append
Step 2: Install qdrant-client and Connect
pip install qdrant-client
from qdrant_client import QdrantClient
Your Qdrant API key comes from the cloud dashboard; locally, no key is needed at all.
Turn Learning into Career Growth
Step 3: Create a Collection
from qdrant_client.models import Distance, VectorParams
The size must match your embedding model's output exactly (cosine, dot and Euclidean are the distance options). Changing it later means recreating the collection, so decide before you ingest a million points.
Step 4: Create Payload Indexes, Then Upsert
Order matters; remember the filter-aware edges from the filtering section.
Step 5: Query with a Filter
for hit in results.points:
print(hit.id, round(hit.score, 3), hit.payload["text"])
The whole thesis of this article, running in eight lines: filtered search with the filter inside the retrieval, not bolted on after it.
Beyond Python, official clients cover JavaScript/TypeScript, Rust, Go, .NET and Java. LangChain and LlamaIndex both ship first-class Qdrant vector store integrations (the LlamaIndex Qdrant connector is one import away), so existing RAG code usually ports in an afternoon. There is also an official Qdrant MCP server that lets LLM tooling query a collection directly, plugging a running Qdrant DB straight into how retrieval slots into RAG and agent architectures. Hardening tips from teams who run this for real: use gRPC instead of REST for bulk ingestion, batch upserts instead of looping single writes, set memory tiers deliberately (cold storage for oversized collections), and snapshot before every version upgrade.
When Qdrant Is the Right Call (and When It Isn't)
Reach for Qdrant when filtering is central to your queries and must not wreck recall; when you need control over where data physically lives; when RAM cost is a live constraint and configuring quantization is acceptable; when you want one engine for dense, sparse and hybrid retrieval; when running a stateful service is a skill your team has or is building; and when you want to move between laptop, self-hosted and managed without rewriting application code.
Do not reach for it when you have under roughly 100k vectors and no filtering complexity, since an embedded store or a Postgres extension is less machinery for the same result; when nobody will operate a stateful service and managed spend is zero; or when one vendor SLA must cover the whole stack. And the question a Reddit thread ranks for while articles dodge it: what separates Qdrant and pgvector? pgvector adds vector search to a Postgres you already run, keeping transactions, joins and one backup story; Qdrant is a purpose-built engine with far richer filtering, quantization and hybrid retrieval, at the cost of operating another system. The honest tiebreaker in the pgvector vs Qdrant debate: is vector search a feature of your app, or the core of it?
Ask five engineers for the top five vector databases and the shortlist looks like this:
| Engine | Model | One-line position |
|---|---|---|
| Qdrant | Open-source engine plus managed cloud | Control with filtering depth; runs anywhere |
| Pinecone | Proprietary managed service | Zero ops, usage-based; the Qdrant vs Pinecone choice is control vs convenience |
| Chroma (ChromaDB) | Embedded, dev-first; Rust core since v1.0 | Fastest notebook-to-prototype path |
| pgvector | Postgres extension | Vectors next to your relational rows |
| Milvus / FAISS | Distributed engine / in-process library | Massive scale (the Qdrant vs Milvus axis), or no server at all |
Full head-to-head comparisons are their own articles; this snapshot is deliberately one line each. If this exercise is making you want to learn the whole stack rather than comparison-shop it, there are structured generative AI courses covering RAG and deployment end to end.
Now the limits a vendor page will never print, because you deserve them:
- It is another stateful service to operate. The cost is real, recurring, and invisible in the licence fee.
- Memory sizing is genuine engineering. Get dimensions or quantization wrong and the bill surprises you mid-quarter.
- Cluster operations need real Kubernetes competence. Sharding, replication, rebalancing and restores are exactly why the managed tier exists.
- The configuration surface is broad. Defaults are sensible but not optimal; HNSW parameters, quantization and storage placement all reward reading the manual properly.
- Relational semantics are not the product. No cross-collection joins, and graph-shaped relationship traversal is GraphRAG territory, not the Qdrant vector DB's game.
FAQs
Is Qdrant a vector database?
Yes. Qdrant is an open-source vector database and similarity search engine written in Rust. It stores vectors with JSON payloads in collections, indexes them with HNSW, and returns top-k nearest matches with filters applied during the search itself.
Is Qdrant DB free?
The engine is free and open source under Apache 2.0, so self-hosting costs no licence fee, ever. Qdrant Cloud also has a free single-node tier (0.5 vCPU, 1 GB RAM, 4 GB disk) for testing. Self-hosting still costs infrastructure and operations time.
Is Qdrant open source?
Yes, fully. The engine is developed in the open on GitHub under Apache 2.0, and you can run, modify and deploy it yourself. Only the managed Cloud, Hybrid Cloud and Private Cloud offerings are commercial products.
What is the difference between Qdrant and Postgres vector (pgvector)?
pgvector adds vector search to a Postgres database you already run, keeping transactions, joins and one backup story. Qdrant is a purpose-built engine with far richer payload filtering, quantization and hybrid search, but it is another service to operate. Choose by whether vector search is a feature of your app or the core of it.
Why is Qdrant written in Rust?
Rust gives predictable latency with no garbage-collection pauses, memory safety without a runtime, a small resource footprint, and fine control over SIMD-accelerated distance computation. In practice: tighter p99 latency and a node that runs usefully on a modest VM.
Does Qdrant support hybrid search?
Yes. A point can carry dense vectors for semantic similarity and sparse vectors that capture exact keyword matches, and the Query API can run both retrievals and fuse the results, which is invaluable for product codes, error strings and rare proper nouns.
How much memory does Qdrant need?
Rule of thumb: float32 vectors cost dimensions × 4 bytes each, so one million 1,536-dimension vectors need about 6 GB before indexes and payloads. Scalar quantization cuts that 4×, 4-bit TurboQuant about 8×, and binary quantization up to 32×, each trading a little recall.
Can I run Qdrant locally with Docker?
Yes. A single docker run command starts a node with REST and gRPC endpoints plus a built-in web dashboard at localhost:6333/dashboard. Mount a volume so collections survive restarts, and the same engine runs unchanged in production.
Conclusion
Why do startups keep choosing Qdrant? Not because Rust is fashionable, but because it solves the three problems that genuinely bite in production: filters that do not destroy recall, a memory bill that stays survivable through quantization, and the freedom to run one engine on a laptop, in your own VPC, or as a managed cluster without touching application code. Keep the counterweight in view, though: the Qdrant vector database is a stateful service somebody has to operate, and if vector search is one small feature of a Postgres-shaped product, the boring answer is probably the right one.
Choosing and running infrastructure like this is one slice of production AI engineering. If you would rather learn RAG, embeddings and deployment as a structured path with mentorship than assemble it from documentation alone, explore Scaler's AI & Machine Learning program.