grafeo 0.5.1

A high-performance, embeddable graph database with a Rust core and no required C dependencies
Documentation

A high-performance, embeddable graph database with a Rust core and no required C dependencies, supporting both Labeled Property Graph (LPG) and RDF data models. Optional allocators (jemalloc/mimalloc) and TLS use C libraries for performance.

Features

  • Dual data model support: LPG and RDF with optimized storage for each
  • Multi-language queries: GQL, Cypher, Gremlin, GraphQL, SPARQL, and SQL/PGQ (all enabled by default)
  • Embeddable with zero external dependencies
  • Multi-language bindings: Python (PyO3), Node.js (napi-rs), Go (CGO), WebAssembly (wasm-bindgen)
  • In-memory and persistent storage modes
  • MVCC transactions with snapshot isolation

Query Language & Data Model Support

Query Language LPG RDF Status
GQL (ISO/IEC 39075) Default
Cypher (openCypher 9.0) Default
Gremlin (Apache TinkerPop) Default
GraphQL Default
SPARQL (W3C 1.1) Default
SQL/PGQ (SQL:2023) Default

Grafeo uses a modular translator architecture where query languages are parsed into ASTs, then translated to a unified logical plan that executes against the appropriate storage backend (LPG or RDF).

Data Models

  • LPG (Labeled Property Graph): Nodes with labels and properties, edges with types and properties. Ideal for social networks, knowledge graphs, and application data.
  • RDF (Resource Description Framework): Triple-based storage (subject-predicate-object) with SPO/POS/OSP indexes. Ideal for semantic web, linked data, and ontology-based applications.

Installation

cargo add grafeo

By default, all query languages and AI features are enabled (full = languages + ai). Customize with feature groups:

cargo add grafeo                                             # Everything (default)
cargo add grafeo --no-default-features --features languages  # All languages, no AI
cargo add grafeo --no-default-features --features gql,ai     # GQL + AI features
cargo add grafeo --no-default-features --features gql        # Minimal: GQL only
cargo add grafeo --features embed                            # Add ONNX embeddings (opt-in)

Quick Start

use grafeo::GrafeoDB;

fn main() -> Result<(), grafeo_common::utils::error::Error> {
    let db = GrafeoDB::new_in_memory();
    let mut session = db.session();

    // Create nodes
    session.execute("INSERT (:Person {name: 'Alice', age: 30})")?;
    session.execute("INSERT (:Person {name: 'Bob', age: 25})")?;

    // Query
    let result = session.execute("MATCH (p:Person) RETURN p.name, p.age")?;
    for row in result.rows {
        println!("{:?}", row);
    }

    Ok(())
}

License

Apache-2.0