sqlite-vec vs ChromaDB vs Pinecone: Choosing a Vector Store for Personal RAG

I shipped a personal RAG on a SQLite vector database. Here is the honest call on sqlite-vec vs ChromaDB vs Pinecone — when embedded wins and when you actually need a server.

Three vector stores compared as a single SQLite file, a local server box, and a remote managed cloud
Three vector stores compared as a single SQLite file, a local server box, and a remote managed cloud
sqlite-vec what I shipped Ask Tom on (one file, no server)
3 tiers embedded file → local server → managed cloud
0 servers the embedded option runs nothing extra
~10k chunk scale where the embedded call is obvious

For a personal or single-developer RAG system, use an embedded SQLite vector database (sqlite-vec): the vectors live in the same SQLite file as everything else, there is no server to run, and deploying a new index is copying a file. Reach for ChromaDB when you want a purpose-built local vector store with collections and metadata filtering and accept running a process for it. Reach for Pinecone only when you genuinely need managed scale, high write throughput, or multi-tenant isolation — which most personal projects never reach. The deciding axis is operational burden, not raw capability, and I shipped Ask Tom on sqlite-vec for exactly that reason.

Key Takeaways

  • Decide on operational burden, not feature lists. — All three can store a vector and return its neighbours. What differs is what you have to run, bill, and get paged for. For a personal build, the right question is which failure modes you are willing to own — and the answer that owns the fewest is a file.
  • Embedded (sqlite-vec) is the default for personal scale. — A few thousand chunks of prose do not need a vector server or a managed cloud. sqlite-vec keeps the vectors in the same SQLite file as everything else: no process, no account, and deploying a new index is copying a file.
  • ChromaDB is the middle, and the middle has a cost. — Chroma is a real, purpose-built local vector store with collections and metadata filtering. It is the right pick when you want those batteries — but you are now running and persisting a process, which is the exact burden the embedded option removes.
  • Pinecone is a scale answer to a scale question. — Managed, horizontally scalable, multi-tenant — and a monthly bill plus a network hop. It earns its keep when you have outgrown a single machine. A personal RAG almost never has, so paying that tax up front buys you nothing you can feel.

What did I actually choose, and why?

I shipped Ask Tom, a chatbot that answers from everything I have published, on a SQLite vector database — sqlite-vec, a single file, no server. I did not arrive there by benchmarking three products. I arrived there the way you choose training load before a race block: by asking what I am willing to carry, not what is theoretically fastest. A managed vector service is a faster engine I did not need and a recurring cost I would feel, in exchange for scale I will never use on a personal corpus.

That is the whole argument of this piece, and it is deliberately not a feature shootout. All three of these can store an embedding and hand you its nearest neighbours — that part is solved. What differs, and what actually decides a personal build, is what you have to run, bill, and get paged for. So the comparison below is organised around operational burden, because that is the number that stopped measuring the thing the moment people started ranking vector stores by raw capability instead.

What are the three real options?

They are not three competitors on one shelf; they are three points on a single axis of how much you run. Embedded is a file in your process. Local-server is a process you operate. Managed is a service someone else operates and bills you for. Knowing which tier you are in matters more than which brand you pick inside it.

  • Embedded — sqlite-vec. The vector store is a vec0 virtual table inside an ordinary SQLite file. Nothing extra runs; the "database" is bytes on disk you can copy and back up like any other file.
  • Local server — ChromaDB. A purpose-built vector store you run as a process, with collections, metadata filtering, and a Python-native API designed for retrieval workloads.
  • Managed cloud — Pinecone. A hosted, horizontally scalable vector service. No process to operate, a network hop per query, and a monthly bill that buys scale and isolation.

How do they compare for a personal build?

Scored for the personal-RAG use case specifically — a single small-to-medium corpus, read-heavy, one operator. A different use case (a multi-tenant SaaS, say) would score these in almost the opposite order, which is exactly the point: the "best" vector store is a function of the burden you are sized for.

Dimension sqlite-vec (embedded) ChromaDB (local server) Pinecone (managed)
Deployment model A file in your app — nothing else runs A process you start and keep alive A remote service over the network
Ops burden Lowest — back up with cp, deploy with scp Medium — run, persist, and monitor the process Low to operate, but it is an external dependency and account
Running cost $0 beyond the disk you already have $0 in software; you pay in the host you run it on A recurring bill that starts before you need it
Metadata filtering Plain SQL — fine for simple cases, hand-rolled for rich ones First-class, built for it First-class, built for it
Scale ceiling Comfortable into tens of thousands of chunks, single-writer Higher; still bounded by the one host you run it on Highest — horizontal scale is the product
Best when Personal / single-dev RAG, small corpus, read-heavy Several corpora or real metadata filtering, locally You have genuinely outgrown one machine

Read down the columns and the verdict is not subtle. For one person and one corpus, the embedded store wins every row that costs you time, and loses only the rows — scale ceiling, fancy filtering — that a personal build does not cash in. That asymmetry is the whole decision.

When is sqlite-vec the right call?

When your corpus is a few thousand to low-tens-of-thousands of chunks, the workload is read-heavy, and there is one of you. That describes almost every personal knowledge base, including mine. The win is not that sqlite-vec is the fastest engine — it is that the vector store stops being a moving part. There is no process to keep alive, no account to provision, no separate backup story. The vectors live in the same SQLite file as the rest of the data, so the entire deployment story for a fresh index is: build it locally, scp the file, bounce the API.

I keep coming back to the same discipline I use for training load: spend complexity only where it changes the outcome. A managed vector database does not change the answers Ask Tom gives over a few thousand chunks; it only adds a bill and a dependency. So the embedded store is not a compromise I settled for, it is the correct sizing for the load — the same reason you do not bring a team time-trial bike to a parkrun.

When does ChromaDB start to make sense?

When you want the batteries that a hand-rolled vec0 table does not ship with, and you accept running a process to get them. The clearest trigger is metadata: if your retrieval needs to filter on structured fields — source, date, author, document type — at query time across several distinct collections, Chroma is built for exactly that and saves you writing and maintaining the SQL by hand. It is the right pick the moment "manage several corpora with real filtering" becomes a recurring need rather than a one-off.

The honest counterweight is that you have crossed the line from "the vector store is a file" to "the vector store is a service I operate," even though that service runs locally. You now have a process to start, persist, monitor, and back up on its own terms. For a single small corpus answering plain similarity queries, that is overhead with no payoff. For several corpora with genuine filtering, the overhead buys something real. The boundary is whether the filtering and multi-collection ergonomics are load-bearing in your build or just nice to have.

When is Pinecone worth the bill?

When you have genuinely outgrown a single machine — and not before. Pinecone is a managed, horizontally scalable vector service, and the things it sells are the things a personal RAG does not need: high write throughput, multi-tenant isolation, elastic scale, and the freedom to not operate the store yourself. If you are building a product where many users each have their own large, frequently-updated corpus, those stop being luxuries and become the requirement, and a managed service is a reasonable answer.

For a personal build, paying that bill up front buys you scale you will not use, isolation you do not need (one tenant), and a network hop on every query — in exchange for problems you do not have. That is the inverted version of the sqlite-vec case: where embedded is correct sizing for a small read-heavy load, Pinecone is correct sizing for a large multi-tenant one. Most personal RAG systems live their entire life in the first regime. If yours genuinely crosses into the second, the upgrade is not a rewrite — you swap the storage layer and keep the chunking, embedding, and retrieval logic intact.

So how do I actually decide?

Start from burden, not benchmarks. Ask how big the corpus really is, whether it is read-heavy or write-heavy, how many tenants it serves, and which failure mode you are willing to own at 3am. For one person, one corpus, mostly reads, the answer is the embedded SQLite vector database, because the part of a system you most want to be boring is the part that holds your data — and a file is the most boring, most copyable, most recoverable thing it can be.

If you want the worked example behind this verdict — the actual pipeline, the vec0 table, the chunking knobs — it is all in Build Ask Tom: A RAG Chatbot on One SQLite File. If you are upstream of the build and still deciding whether a citable knowledge base earns its keep at all, I made the strategy case in Build a Second Brain That Answers Back on ctaio.dev. And if you would rather see the whole field ranked than take my single opinionated call, the We The Flywheel Radar on AI knowledge-base tools is the place to compare.

FAQ

Is SQLite a real vector database, or a toy for RAG?

It is a real option, with the sqlite-vec extension doing the vector work. It adds a vec0 virtual table to an ordinary SQLite database, so you store embeddings as rows and query them with a SELECT ordered by a distance function. For a personal or single-developer corpus of a few thousand to low-tens-of-thousands of chunks, that is not a toy — it is the appropriate tool, and the one I shipped Ask Tom on. "Toy" is the wrong axis. The right axis is scale and concurrency: a SQLite vector database is a single-writer, single-file store, so it is excellent for a read-heavy personal bot and a poor fit for a high-write, many-tenant production service. Match the tool to that reality and it is genuinely a vector database, not a stand-in for one.

When should I pick ChromaDB over sqlite-vec?

Reach for ChromaDB when you want a purpose-built vector store with collections, richer metadata filtering, and a Python-native API designed for exactly this job — and you do not mind running and persisting a process to get it. Chroma gives you more ergonomics around managing multiple distinct corpora and filtering on metadata at query time than a hand-rolled vec0 table does. The cost is that you have moved from "the vector store is a file" to "the vector store is a service I operate," even if that service is local. For a single small corpus where retrieval is plain similarity search, that trade rarely pays; for several corpora with real metadata filtering, it starts to.

Do I ever actually need Pinecone for a personal project?

Almost never, and that is the honest answer rather than a dismissive one. Pinecone is a managed, horizontally scalable vector service, and you pay for it with a monthly bill, an account, and a network hop on every query. Those costs buy you scale, high write throughput, multi-tenant isolation, and the freedom to not operate the store yourself. A personal RAG over your own writing has none of those problems: the corpus is small, writes are a once-in-a-while re-index, and there is one tenant. So Pinecone solves problems you do not have while adding a bill and a dependency you would otherwise avoid. The moment you genuinely outgrow a single machine, it becomes a reasonable answer — but reaching that point is the exception for personal builds, not the path.

How big can a sqlite-vec corpus get before it breaks down?

There is no single cliff, but a useful mental model: a SQLite vector database is comfortable into the tens of thousands of chunks for a read-heavy workload on one machine, and the pressure points show up around concurrency and write volume long before raw row count. The store is single-writer, so a re-index is a serial job, not a streaming firehose — which is fine when you rebuild the index occasionally and serve reads. If you find yourself wanting many simultaneous writers, sharding across machines, or sub-50ms queries over millions of vectors with heavy filtering, you have left the zone where an embedded file is the right tool. For a personal knowledge base you almost certainly have not, and the upgrade path is real: you swap the storage layer and keep the chunking, embedding, and retrieval logic.

What is the one thing you would not trade away for a personal build?

The file. With sqlite-vec the entire vector store is one SQLite file on disk — I build the index on my machine, scp it to the server, and bounce the API, and that is the whole deployment. No vector-database migration, no managed-service account to provision, no separate backup story: backing up the vectors is cp. That property is what makes the system fit in your head, and "fits in your head" is the thing that actually matters when something breaks at an inconvenient hour. For a personal build I will trade raw scale ceiling and fancy filtering to keep it, every time. If you want the strategy case for why a citable knowledge base is worth building at all, I made it in Build a Second Brain That Answers Back.

Only 3 slots available this month

Ready to Transform Your AI Strategy?

Get personalized guidance from someone who's led AI initiatives at Adidas, Sweetgreen, and 50+ Fortune 500 projects.

Trusted by leaders at
Google · Amazon · Nike · Adidas · McDonald's