v0.1.11 — Open Source

vectlite

Embedded vector store for local-first AI

Base de donnees vectorielle single-file ecrite en Rust. Recherche hybride dense + sparse, indexation HNSW, filtres MongoDB-style, transactions et persistance crash-safe — le tout dans un fichier .vdb portable. Aucun serveur, Docker ou appel reseau.

pip install vectlite
npm install vectlite

Fonctionnalites

Recherche hybride

Vecteurs denses avec HNSW + index inverse BM25 pour la recherche par mots-cles, fusion par combinaison lineaire ou RRF.

Stockage single-file

Tout dans un fichier .vdb portable. WAL crash-safe, verrouillage de fichier, snapshots et backup.

Ingestion en masse

Importez de grands datasets efficacement avec reconstruction d'index differee via bulk_ingest() / bulkIngest().

Filtres metadata riches

Operateurs MongoDB-style : $eq, $gt, $in, $contains, $exists, avec acces par dot-path imbrique.

Transactions

Ecritures atomiques par lot avec rollback. Context manager en Python, try/catch en Node.js.

Multi-langage

Coeur Rust natif avec bindings Python (PyO3) et Node.js (napi-rs).

Quick Start

import vectlite

with vectlite.open("knowledge.vdb", dimension=384) as db:

    db.upsert("doc1", embedding, {"source": "blog", "title": "Auth Guide"})
    db.upsert("doc2", embedding2, {"source": "notes", "title": "Billing"})

    results = db.search(query_embedding, k=5, filter={"source": "blog"})

    # For large imports, prefer bulk_ingest()
    records = [
        {"id": f"doc{i}", "vector": embeddings[i], "metadata": {"source": "corpus"}}
        for i in range(len(embeddings))
    ]
    db.bulk_ingest(records, batch_size=5000)

    for r in results:
        print(r["id"], r["score"])

    db.compact()

Python 3.9+ / Node.js 18+ — Wheels pre-compiles pour macOS, Linux et Windows.

Recherche et recuperation

Vecteurs nommes

Plusieurs espaces vectoriels par enregistrement ("title", "body", ...).

Requetes multi-vecteurs

Recherche ponderee sur plusieurs espaces vectoriels en un seul appel.

Diversification MMR

Compromis reglable entre pertinence et diversite.

Namespaces

Isolation logique avec recherche par namespace ou cross-namespace.

Rerankers integres

text_match(), metadata_boost(), cross_encoder(), bi_encoder() — composables avec compose().

Diagnostics de recherche

search_with_stats() retourne les temps, scores BM25, stats ANN et mode explain.

Gestion des donnees

Collections physiques

open_store() gere un repertoire de bases de donnees independantes.

Snapshots et backup

snapshot() cree une copie autonome. backup() / restore() avec sidecars ANN.

Mode lecture seule

Verrous partages pour des lecteurs concurrents en toute securite.

Analyseurs de texte

Pipeline de tokenisation configurable avec stopwords (en/fr), stemming Snowball, n-grams.

Roadmap langages

Python — pip install vectlite
Node.js — npm install vectlite
Swift — prevu apres stabilisation FFI
Kotlin — prevu apres stabilisation FFI

Licence MIT — Maintenu par mcsEdition

rustvector-databasehnswbm25hybrid-searchraglocal-firstpythonnodejs

Python 3.9+ · Node.js 18+ · Rust (core)

En bref

Qu'est-ce que VectLite et comment fonctionne-t-il ?

VectLite est une base de données vectorielle embarquée écrite en Rust, conçue sur le modèle de SQLite : un fichier unique sur disque, aucun serveur à déployer, exécution directe dans le processus de l'application. Elle expose des bindings officiels pour Python et Node.js, ce qui permet de l'intégrer dans une application web, un agent IA ou un script de RAG (Retrieval-Augmented Generation) en moins de 5 lignes de code. VectLite combine 2 index dans le même fichier : un index dense HNSW (Hierarchical Navigable Small World) pour les recherches sémantiques par embeddings, et un index sparse BM25 pour les recherches par mots-clés. Une requête hybride pèse les 2 scores via une fusion RRF (Reciprocal Rank Fusion) et retourne les résultats en moins de 5 millisecondes pour 100 000 vecteurs.

Pourquoi choisir VectLite plutôt que Pinecone ou Chroma ?

Pinecone, Weaviate, Qdrant et Milvus sont des bases vectorielles serveur, conçues pour des charges distribuées de plusieurs millions de vecteurs et facturées entre 70 $ et 500 $ par mois pour les plus petites instances. VectLite cible un cas d'usage différent : applications local-first, edge computing, RAG embarqué dans une app desktop ou mobile, ou prototype où le coût d'un service hébergé est disproportionné. La taille typique d'une base VectLite va de 1 000 à 1 million de vecteurs en 768 ou 1 536 dimensions, soit la majorité des cas d'usage individuels et professionnels modestes. VectLite supporte les transactions ACID, la persistance crash-safe via journal d'écriture anticipée, et les filtres de métadonnées style MongoDB. La bibliothèque est distribuée sous licence MIT, gratuite, sans télémétrie.

Questions fréquentes

VectLite est-il une alternative à Pinecone, Weaviate ou Chroma ?

Oui. VectLite est une base vectorielle embarquée single-file (modèle SQLite) écrite en Rust. Contrairement à Pinecone, Weaviate ou Qdrant qui sont des serveurs distribués, VectLite tourne directement dans votre application Python ou Node.js — idéal pour le local-first et l'edge.

VectLite supporte-t-il la recherche hybride ?

Oui. VectLite combine un index dense HNSW et un index sparse BM25 pour la recherche hybride, avec des filtres style MongoDB sur les métadonnées.

Quelle est la différence entre VectLite et FAISS ?

FAISS est une bibliothèque d'indexation pure (pas de persistance ni transactions). VectLite ajoute la persistance crash-safe, les transactions ACID, les filtres MongoDB et les bindings Python/Node.js avec une seule installation.

VectLite — Base vectorielle embarquée pour l'IA local-first | mcsEdition