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.

Extensible Plugin System

Four plugin types (ScalarFunction, IndexPlugin, Serializer, Trigger) let you extend CypherLite to fit your exact needs.

Temporal Queries

Query your graph at any point in time. Built-in versioning tracks every change to nodes, edges, and properties.

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

FeatureDescription
Property GraphNodes and edges with typed properties (Null, Bool, Int64, Float64, String, Bytes, Array)
Cypher QueriesopenCypher subset with MATCH, CREATE, MERGE, SET, DELETE, RETURN, WHERE
Temporal VersioningAT TIME queries, version store, temporal edge versioning
SubgraphsNamed subgraphs as first-class entities with CREATE/MATCH SNAPSHOT
HyperedgesN:M relationships connecting arbitrary numbers of nodes
Plugin SystemScalarFunction, IndexPlugin, Serializer, and Trigger plugin types
FFI BindingsC ABI, Python (PyO3), Go (CGo), Node.js (napi-rs)