CypherLite
SQLite-like simplicity for graph databases
A lightweight, embedded, single-file graph database engine written in Rust. Zero-config deployment, full ACID compliance, and native property graph support.
Why CypherLite?
Zero Configuration
Open a file and start querying. No server process, no setup, no configuration files. Just a single .cyl file.
Single-File Database
All graph data lives in one portable file. Copy, back up, or share your entire graph database with a single file operation.
ACID Compliant
Full transactional safety with Write-Ahead Logging, snapshot isolation, and crash recovery. Your data is always consistent.
Embedded Library
Link CypherLite directly into your application. Available as a Rust crate, Python package, Go module, Node.js addon, and C library.
Quick Example
use cypherlite_query::CypherLite;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db = CypherLite::open("my_graph.cyl")?;
db.execute("CREATE (a:Person {name: 'Alice', age: 30})")?;
db.execute("CREATE (b:Person {name: 'Bob', age: 25})")?;
db.execute(
"MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'}) \
CREATE (a)-[:KNOWS {since: 2023}]->(b)"
)?;
let result = db.execute(
"MATCH (p:Person) WHERE p.age > 20 RETURN p.name, p.age"
)?;
for row in result {
let row = row?;
println!("{}: {}", row.get("p.name").unwrap(), row.get("p.age").unwrap());
}
Ok(())
}Available Bindings
Feature Highlights
| Feature | Description |
|---|---|
| Property Graph | Nodes and edges with typed properties (Null, Bool, Int64, Float64, String, Bytes, Array) |
| Cypher Queries | openCypher subset with MATCH, CREATE, MERGE, SET, DELETE, RETURN, WHERE |
| Temporal Versioning | AT TIME queries, version store, temporal edge versioning |
| Subgraphs | Named subgraphs as first-class entities with CREATE/MATCH SNAPSHOT |
| Hyperedges | N:M relationships connecting arbitrary numbers of nodes |
| Plugin System | ScalarFunction, IndexPlugin, Serializer, and Trigger plugin types |
| FFI Bindings | C ABI, Python (PyO3), Go (CGo), Node.js (napi-rs) |