SQLite for Embeddings — A simple, embedded vector database that stores everything in a single file.
pip install vectorlitedb
db = VectorLiteDB("my.db", 1536) # Start building in 30 secondsNo server. No setup. Just vectors in a file.
Every vector database is either a cloud service (Pinecone), needs a server (Chroma), or doesn't persist (FAISS).
Sometimes you just want to store embeddings in a file and search them. Like SQLite does for relational data.
Start small, swap later:
# Local dev
db = VectorLiteDB("local.db", 1536)
# Swap to Pinecone in prod
db = pinecone.Index("my-index")
# Same interface works for both
results = db.search(query, top_k=5)Build your entire AI app locally, then swap to a cloud service when you actually need scale.
pip install vectorlitedbfrom vectorlitedb import VectorLiteDB
# Create a database (just a file)
db = VectorLiteDB("my_vectors.db", dimension=384)
# Store vectors with metadata
db.insert(id="doc1", vector=embedding, metadata={"text": "Hello world"})
db.insert(id="doc2", vector=embedding2, metadata={"text": "Goodbye world"})
# Search (returns most similar vectors)
results = db.search(query=query_embedding, top_k=5)
# Results format
for result in results:
print(f"ID: {result['id']}")
print(f"Similarity: {result['similarity']}")
print(f"Metadata: {result['metadata']}")Your vectors are saved in my_vectors.db.
- Stores vectors (embeddings) with metadata in a single file
- Searches for similar vectors using cosine/L2/dot distance
- Persists everything to disk automatically
- Filters results by metadata
- Works offline - no internet required
- ❌ Generate embeddings (use OpenAI, etc.)
- ❌ Scale beyond ~100K vectors (uses brute force search)
- ❌ Handle concurrent writes
- ❌ Optimize for speed
- Local RAG: Store document embeddings for offline search
- Personal AI: Give your assistant persistent memory
- Prototyping: Test vector search ideas without infrastructure
- Edge devices: Semantic search on Raspberry Pi
- Privacy: Keep embeddings on your device
db = VectorLiteDB("path/to/file.db", dimension=384, distance_metric="cosine")
# distance_metric: "cosine" (default), "l2", or "dot"db.insert(id="unique_id", vector=[0.1, 0.2, ...], metadata={"key": "value"})results = db.search(
query=[0.1, 0.2, ...],
top_k=5,
filter=lambda meta: meta.get("type") == "document" # optional
)vector, metadata = db.get("unique_id")
db.delete("unique_id")print(len(db)) # number of vectors
print(repr(db)) # database summaryThis is v0.1.0 - a working alpha focused on simplicity over performance.
What works:
- ✅ Basic CRUD operations
- ✅ File persistence
- ✅ Metadata filtering
- ✅ ~100ms search for 10K vectors
This is development mode - the codebase is small and readable.
- First-time contributors
- Performance optimizations
- Documentation improvements
- Feature requests
See issues labeled good first issue.
- SQLite: Single-file, serverless, embedded
- FAISS: Fast similarity search
VectorLiteDB combines the best parts: embedded like SQLite, simple like a Python dict, persistent like a real database.
VectorLiteDB is licensed under the Apache 2.0 License.
Built with ❤️ for AI developers