We replaced Pinecone with Qdrant + SQLite. Here is the playbook.
When we built AetherFS, the semantic file index for Artume OS, the first instinct was Pinecone. Industry standard, works out of the box, reasonable pricing. We shipped with it.
Three months later we were paying $1,400/month for a workload that ran fine on a $5/month VPS. Here is how we replaced it.
Why we left
Pinecone's pricing is per-pod-hour, not per-query. We had a 1M-vector index with modest QPS (50–200 queries/sec) and were being charged for reserved capacity we never used.
Worse, the network round-trip added 80–120ms to every query. For a conversational OS, that's the difference between "feels instant" and "feels broken."
The replacement: Qdrant + FTS5 hybrid
We split the index into two:
1. **Lexical search** — SQLite FTS5 with porter stemming. Handles exact-term and keyword queries. ~5ms per query. 2. **Semantic search** — Qdrant running locally, single-node, mmap'd storage. Handles embedding-based similarity. ~15ms per query. 3. **Hybrid merge** — combine top 20 from each, rerank with a small cross-encoder. ~25ms total.
The hybrid approach handles queries that pure vector search misses ("the PDF I created last Tuesday"), and the lexical component is much cheaper to maintain than a pure semantic setup.
Migration in 4 steps
1. Dump your Pinecone index to Parquet (Pinecone has a describe_index_stats endpoint plus bulk fetch API). 2. Spin up Qdrant locally, ingest via REST. 3. Build a hybrid query layer that calls both backends and reranks. 4. Shadow test: send production traffic to both, compare top-5 results, tune reranker.
We did this in 3 weeks including benchmarking. Saved us $16k/year on a single workload.
When to stay on managed
If you're pre-PMF and your team has zero infrastructure bandwidth, managed makes sense. If you have a workload where vector search is on the hot path of every user interaction, self-hosting pays off within 6 months almost always.
The middle ground: managed Qdrant Cloud, self-hosted Qdrant, or Weaviate. Anything but the per-pod pricing model.
Related posts
Why every production LLM app needs a two-stage intent router
A monolithic LLM that handles everything — classification, planning, tool use — is slow, expensive, and hard to debug. A two-stage architecture with a small classifier upstream fixes all three.
ProductDesigning an LLM UX for users who cannot see the screen
Building conversational AI for blind users forced us to rethink every UX assumption we had. Here are the four biggest lessons that apply to any LLM product.