SQLiteGraph
Embedded graph database with dual backend architecture, graph algorithms, Cypher-inspired queries, and HNSW vector search.
Positioning: Single-binary embedded database (no server). Persistent storage with atomic batch commits. Graph algorithms + HNSW vector search in one engine. SQLite: stable, mature, and easy to inspect with standard tooling. Native V3: graph-oriented storage with cache, KV, pub/sub, and traversal features. See the benchmarks below for workload-specific behavior.
What's New in v3.0.0
v3.0.0 is the first release that ships the full Cypher engine, the
expanded CLI surface, and the cross-session HNSW persistence fix:
- Cypher-inspired
MATCH,CREATE,SET,DELETE, multi-hop, variable-depth, star/multi-pattern joins,WHEREwith precedence/parentheses, and HNSW vector search viaCALL db.index.vector.queryNodes(...). - CLI coverage for PageRank, betweenness, WCC/SCC, Louvain, label propagation, cycle search, dominators, topological sort, critical path, and HNSW create/insert/search/list/delete.
- Python
Graph.query()plus algorithm bindings for SCC, label propagation, cycle search, dominators, critical path, and HNSW index deletion. - V3 durability fixes and HNSW autoload persistence fixes.
See CHANGELOG for full history.
Backends
| Feature | SQLite | Native V3 |
|---|---|---|
| Status | Stable | Stable |
| Storage | .db file |
.graph file |
| Capacity model | Storage-limited | Storage-limited |
| Graph algorithms | 35+ | 35+ |
| HNSW vectors | Yes | Yes |
| Pub/Sub | Yes | Yes |
| LRU Cache | No | Yes (v2.1.0) |
| Parallel BFS | No | Yes (v2.1.1) |
Benchmarks
See Architecture for system design details.
Backend Comparison (v2.2.4 - AMD Ryzen 7 7800X3D, tmpfs, Rust 1.95.0):
| Benchmark | SQLite | V3 | Ratio |
|---|---|---|---|
| BFS 1K nodes / 5K edges | 2.5ms | 0.45ms | V3 5.5x faster |
| BFS 10K / 50K | 26ms | 27ms | ~parity |
| BFS 50K / 250K | 160ms | 586ms | SQLite 3.6x faster |
| DFS 1K / 5K | 2.4ms | 0.46ms | V3 5.2x faster |
| Point lookup 1K | 15us | 82us | SQLite 5.4x faster |
| Point lookup 10K | 27us | 503us | SQLite 18x faster |
| Shortest path 1K | 304us | 393us | SQLite 29% faster |
V3 excels at small-scale traversals. SQLite dominates at larger graph sizes and point lookups.
Run benchmarks yourself:
See examples/ for reproducible performance tests.
Quick Start
[]
# SQLite backend (default)
= "3.0"
# OR Native V3 backend (graph-oriented storage)
= { = "3.0", = ["native-v3"] }
use ;
use SqliteGraphBackend;
TypedDiGraph (In-Memory)
A lightweight in-memory directed graph with typed node and edge weights,
independent of the GraphBackend persistence layer. Useful for build-system
DAGs, dependency graphs, and analysis passes that don't need disk storage.
use ;
use ;
let mut g = new;
let a = g.add_node;
let b = g.add_node;
let c = g.add_node;
g.add_edge;
g.add_edge;
// Topological order
let order = toposort.expect;
assert_eq!;
// DFS traversal
let mut dfs = new;
assert_eq!;
New in v3.0.5.
CLI
# Query
# Algorithms
Copy-Paste CLI Demo
Hybrid Runtime Demo
This crate includes a runnable demo that combines ordinary SQLite rows, Native V3 graph metadata, SQLite-backed HNSW vectors, and V3 pub/sub:
Safety Invariants
- Orphan edges are detected by verifying every edge endpoint references a stored entity before any reasoning or subgraph extraction runs.
- Duplicate edges (identical
(from,to,type)tuples) are tallied so traversal/pipeline counts stay deterministic and regressions surface quickly. - Invalid label/property references (metadata rows pointing at missing entities) are reported by the safety-check helpers.
- Integrity sweeps perform a deep table walk (entities/edges/labels/properties), verifying sorted IDs, valid JSON payloads, and metadata references before committing to pipelines or migrations.
DSL Constraints
- Supported clauses are limited to deterministic
pattern,k-hop,filter type=…, andscoresteps; ordering matters and only one filter clause is allowed. - Combination syntax (
CALLS*2,CALLS->USES) must not introduce conflicting filters or unknown tokens—ambiguous or unsupported input causes parser errors surfaced to the CLI/tests.
Performance & Instrumentation
Performance thresholds in sqlitegraph_bench.json gate releases. Benchmarks produce HTML reports under target/criterion. Use cargo bench --bench bench_insert (etc.) to isolate suites. The bench_driver binary runs all benches sequentially and surfaces pass/fail summaries.
Runtime instrumentation is exposed through the core APIs used by benchmarks and integration tests: prepare/execute counts, transaction begins/commits/rollbacks, and cache hits/misses can be captured while reproducing workloads.
Schema Compatibility Matrix
| Version | Description |
|---|---|
| 1 | Base tables (graph_entities, graph_edges, graph_labels, graph_properties) plus indexes and graph_meta. |
| 2 | Adds graph_meta_history rows so each migration application is recorded; exposed via run_pending_migrations / CLI migrate. |
| Future | The CLI refuses to open DBs whose version exceeds the compiled SCHEMA_VERSION. |
Upgrade workflow:
- Inspect the database with
sqlitegraph --db <path> status. - Review pending migrations through the library migration helpers.
- Apply migrations atomically through the library helper; history entries are appended automatically.
Ecosystem
Tools built on SQLiteGraph:
| Tool | Purpose | Repository | crates.io |
|---|---|---|---|
| Magellan | Code graph indexing, symbol navigation | github.com/oldnordic/magellan | crates.io/crates/magellan |
| llmgrep | Semantic code search | github.com/oldnordic/llmgrep | crates.io/crates/llmgrep |
| Mirage | CFG analysis, path enumeration | github.com/oldnordic/mirage | crates.io/crates/mirage-analyzer |
| splice | Precision code editing | github.com/oldnordic/splice | crates.io/crates/splice |
Documentation
- Architecture - System design
- Manual - API guide
- Query Language - Cypher-inspired query reference
- Changelog - Version history
- SnapshotId Migration Guide - v2.1.2 API changes
License
GPL-3.0-only