No server
Embedded package, no database service to operate.
HybridDB gives AI apps durable on-disk rows, keyword search, vector retrieval, local analytics, and graph context from a single Python class — with git-like versioned tables, filters pushed into the vector scan, and a self-healing journal that keeps every derived index repairable.
pip install hybriddb Embedded package, no database service to operate.
Persistent local data, not an in-memory cache.
Exact terms and semantic retrieval together, fused with RRF — with scalar filters pushed into the vector scan via where=, before it runs.
DuckDB OLAP plus NetworkX algorithms (PageRank, Louvain, shortest path) — mirrors built lazily, on first OLAP query.
Git-like versioned tables (0.6.0): time-travel reads and update-heavy rollbacks with batched restores — up to 41× faster.
Default MiniLM from ChromaDB — no API key, no download. Or pass your own embedding_fn.
HybridDB is for teams that need local search and retrieval inside an app, not another production database cluster to deploy, monitor, secure, and synchronize.
Use one embedded package instead of wiring a database server, vector service, analytics store, and sync jobs.
Store app data on disk in the customer environment, on-device, or next to the agent runtime.
Avoid running Postgres + pgvector, Milvus, and ClickHouse for local-first AI features that do not need a cluster.
Backups, SQL export/import, integrity checks, and reindexing make derived search state repairable.
Great for rows and full-text; vectors, graphs, and analytics arrive as bolted-on extensions with no unified API. HybridDB ships all five engines behind one interface — with versioning and self-healing none of them offer.
DuckDB is analytics-first — it is not a transactional app store with FTS and vector retrieval. HybridDB uses DuckDB for OLAP and pairs it with rows, search, and graphs, mirroring tables lazily so unused engines cost nothing.
Excellent for server-side app data. HybridDB is lighter when an embedded app needs rows, keyword search, vectors, analytics, graph context, and local repair tools without operating Postgres.
ChromaDB is excellent at vector similarity — it's literally what HybridDB uses under the hood. But it has no rows, no full-text, no OLAP, no graph context, and no versioned tables. HybridDB keeps Chroma as one engine among five, adding metadata pre-filtering, durability, and repair around it.
No shade: we love those open-source projects and use them every day.
When you do need the details, the API stays concrete: create a table, insert rows, search, then verify or rebuild indexes.
pip install hybriddb
from hybriddb import HybridDB, LONGTEXT, TEXT
db = HybridDB("./my_data") db.create_table("docs", {
"title": TEXT,
"body": LONGTEXT,
})
db.insert("docs", {
"title": "Gmail OAuth bug",
"body": "Refresh token failed during sync",
}) from hybriddb import HYBRID
results = db.search(
"docs", "body", "gmail token refresh",
mode=HYBRID,
recency_weight=0.3,
recency_column="updated_at",
) db.register_entity_node("docs", id_column="id")
db.register_edge_rule("docs", "docs", target_match="parent_id")
results = db.search_graph_ppr(
"oauth refresh failure",
k_seeds=8,
) report = db.health("docs")
db.reconcile("docs")
sizes = db.stats()
db.reindex("docs") HybridDB is not a pile of databases. It is a local data flow where SQLite owns truth and every retrieval layer can be regenerated from the write journal.
Agents and apps write ordinary structured records into SQLite-backed tables.
Every write is journaled so secondary indexes can be replayed, repaired, and verified.
FTS5, ChromaDB, optional DuckDB, and NetworkX graph projections update from the same local truth.
db.health() reports index drift; db.reconcile() replays the journal and repairs derived state after a crash.
Each component has a narrow job. The source data remains inspectable while retrieval, analytics, and graph projections evolve independently.
Source of truth for rows, schemas, transactions, and the repair journal.
Exact keyword retrieval for names, emails, titles, and high-signal terms.
Persistent vector collections for semantic recall over long text fields.
Optional columnar analytical queries via the hybriddb[analytics] extra.
Nodes, edges, PageRank (with personalization), Louvain communities, shortest path via the hybriddb[graph] extra.
SQL export/import, backup/restore, integrity checks, stats, vacuum, reindex, health(), and reconcile().
Long-running agent systems that need durable, searchable local state.
Email caches and knowledge bases that need keyword and semantic retrieval with recency-weighted scoring.
App-builder tables created and queried by agents at runtime, sync or async.
Local analytics over agent activity without exporting data.
Entity and provenance graphs with graph-aware retrieval via search_graph and Personalized PageRank (search_graph_ppr).
HybridDB is an embedded data layer that unifies rows, full-text search, vector embeddings, graphs, and OLAP analytics in a single local store — one DataLayer API over SQLite + FTS5, ChromaDB, NetworkX, and DuckDB, with no server to run.
No. It uses vector search as one layer, alongside rows, FTS, analytics, and graph context. You get hybrid keyword + vector retrieval without adopting a separate vector service.
No. HybridDB is embedded — it runs in-process on your machine. There is no server to deploy, no connection strings, and no external infrastructure.
Yes — MIT-licensed under the Open Assistants Lab. It runs entirely on your machine with no cloud services and no paid tiers.
SQLite gives you rows and FTS5 full-text; DuckDB gives you analytics; neither does vectors or graphs out of the box. HybridDB combines all four engines behind one API, with cross-engine queries, health checks, and reconciliation built in.
Yes. HybridDB stores vector embeddings alongside rows and full-text indexes, so you can do hybrid keyword + vector retrieval — the same pattern CoreMem uses for zero-LLM recall.
HybridDB is a Python library with no GPU requirement. It runs on any machine that runs Python — laptops included — and stores everything in local files.
No. Rows live in a standard SQLite file you can open with any tool, and the derived indexes (FTS, vectors, graph, analytics) are rebuildable from that source of truth at any time — the self-healing journal exists precisely so nothing is unrecoverable.
Start with SQLite-shaped records, then add keyword search, semantic retrieval, optional analytics, graph context, and repairable indexes without introducing external infrastructure.