Skip to main content

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(())
}