GitHub - IssunDB/issun-db: A fast embedded graph database for AI applications and graph analytics

3 min read Original article ↗

IssunDB is a fast embedded graph database written in Rust. It can be embedded in Rust applications without the need for a server, and can be used for a wide range of applications such as building GraphRAG pipelines and querying knowledge graphs.

You can download the latest binaries (for IssunDB CLI, MCP and HTTP servers) from here.

Key Features

  • Rust graph engine built with ACID, property graph model, and Cypher query language support
  • Fast graph traversal and analytics using sparse matrix operations
  • Fast vectorized query execution with multi-core query parallelism and serializable transactions
  • Built-in vector, text, and hybrid search and retrieval
  • Provides a wide range of APIs, including native Rust, Python bindings, CLI, HTTP (REST), and MCP
  • Fully cross-platform; supports Linux, macOS, and Windows

See ROADMAP.md for the full list of implemented and planned features.

Important

This project is still in early development, so bugs and breaking changes are expected. Please use the issue page to report bugs or request features.


Quickstart

To use IssunDB in your Rust project, add the dependency to your Cargo.toml:

[dependencies]
issundb = "0.1.0-alpha.6"
serde_json = "1.0"

Note

IssunDB needs Rust 1.85.0 or newer.

Here is a basic example showing how to open a database, insert nodes, establish relationships, and query the graph using Cypher:

use std::path::Path;
use issundb::{Graph, GraphQueryExt};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Open a graph database (with a 1 GB memory map size limit)
    let graph = Graph::open(Path::new("./issundb-data"), 1)?;

    // Add two nodes with properties
    let alice_props = serde_json::json!({ "name": "Alice", "age": 30 });
    let alice_id = graph.add_node("Person", &alice_props)?;

    let bob_props = serde_json::json!({ "name": "Bob", "age": 28 });
    let bob_id = graph.add_node("Person", &bob_props)?;

    // Add an edge between the nodes
    let edge_props = serde_json::json!({ "since": 2021 });
    graph.add_edge(alice_id, bob_id, "KNOWS", &edge_props)?;

    // Optional: rebuild CSR snapshot manually after bulk writes
    graph.rebuild_csr()?;

    // Run a Cypher query and print the results
    let result = graph.query(
        "MATCH (a:Person)-[r:KNOWS]->(b:Person) RETURN a.name, b.name, r.since"
    )?;

    for record in result.records {
        println!(
            "Match: {} knows {} since {}",
            record.values[0],
            record.values[1],
            record.values[2]
        );
    }

    Ok(())
}
# Output:
Match: "Alice" knows "Bob" since 2021

Running IssunDB in a Container

CLI

# Run IssunDB with the CLI
docker run --rm -it -v issundb-data:/data ghcr.io/issundb/issundb:latest

HTTP (REST)

# Run IssunDB with the HTTP API on port 7474
docker run --rm -p 7474:7474 -v issundb-data:/data ghcr.io/issundb/issundb:latest issundb-rest

MCP

# Run IssunDB with the MCP API on port 8000
docker run --rm -p 8000:8000 -v issundb-data:/data ghcr.io/issundb/issundb:latest issundb-mcp

Documentation

The project documentation is available here. The Rust API documentation is available on docs.rs/issundb.

Rust Examples

Check out the issundb-examples crate for more examples using IssunDB using the Rust API.

Python Examples

See the issundb-py/examples directory for example usage of the Python API.


Contributing

See CONTRIBUTING.md for details on how to make a contribution.

License

IssunDB is available under either of these licenses:

Acknowledgements

  • The logo is from SVG Repo with some modifications.