Quick Start
Python
import vectlite
# Open or create a database (dimension must match your embeddings)
db = vectlite.open("knowledge.vdb", dimension=384)
# Insert vectors with metadata
db.upsert("doc1", embedding, {"source": "blog", "title": "Auth Guide"})
db.upsert("doc2", embedding2, {"source": "notes", "title": "Billing"})
# Search
results = db.search(query_embedding, k=5, filter={"source": "blog"})
for r in results:
print(f"{r['id']} — score: {r['score']:.3f}")
# Persist to disk
db.compact()
Node.js
const vectlite = require('vectlite')
// Open or create a database
const db = vectlite.open('knowledge.vdb', { dimension: 384 })
// Insert vectors with metadata
db.upsert('doc1', embedding, { source: 'blog', title: 'Auth Guide' })
db.upsert('doc2', embedding2, { source: 'notes', title: 'Billing' })
// Search
const results = db.search(queryEmbedding, { k: 5, filter: { source: 'blog' } })
results.forEach(r => console.log(`${r.id} — score: ${r.score.toFixed(3)}`))
// Persist to disk
db.compact()
Rust
use vectlite::Database;
fn main() -> vectlite::Result<()> {
let mut db = Database::open_or_create("knowledge.vdb", 384)?;
let mut metadata = vectlite::Metadata::new();
metadata.insert("source".into(), "blog".into());
db.upsert("doc1", vec![0.9, 0.1, 0.0], metadata)?;
let results = db.search(
&[1.0, 0.0, 0.0],
vectlite::SearchOptions { top_k: 5, filter: None },
)?;
for r in results {
println!("{} -> {:.3}", r.id, r.score);
}
db.compact()?;
Ok(())
}