Rust Driver

Connect to Traverse from Rust using a Bolt protocol client.

Install

Add the neo4rs crate to your Cargo.toml:

[dependencies]
neo4rs = "0.8"
tokio = { version = "1", features = ["full"] }

Connect

use neo4rs::*;

let graph = Graph::new("bolt://localhost:7690", "", "").await.unwrap();

// With authentication
let graph = Graph::new("bolt://localhost:7690", "admin", "s3cret").await.unwrap();

// With configuration
let config = ConfigBuilder::default()
    .uri("bolt://localhost:7690")
    .db("mydb")
    .fetch_size(500)
    .max_connections(10)
    .build()
    .unwrap();
let graph = Graph::connect(config).await.unwrap();

Run Queries

let mut result = graph
    .execute(query("MATCH (n:Person) WHERE n.age > $min_age RETURN n.name, n.age")
        .param("min_age", 25))
    .await
    .unwrap();

while let Ok(Some(row)) = result.next().await {
    let name: String = row.get("n.name").unwrap();
    let age: i64 = row.get("n.age").unwrap();
    println!("{name} is {age}");
}

Write Data

graph.run(
    query("CREATE (p:Person {name: $name, age: $age})")
        .param("name", "Alice")
        .param("age", 30)
).await.unwrap();

Transactions

let txn = graph.start_txn().await.unwrap();

txn.run(query("CREATE (p:Person {name: 'Bob'})")).await.unwrap();
txn.run(query("CREATE (p:Person {name: 'Carol'})")).await.unwrap();

txn.commit().await.unwrap();
// or: txn.rollback().await.unwrap();

Graph Types

let mut result = graph
    .execute(query("MATCH (n:Person) RETURN n LIMIT 1"))
    .await
    .unwrap();

while let Ok(Some(row)) = result.next().await {
    let node: Node = row.get("n").unwrap();
    let name: String = node.get("name").unwrap();
    let labels = node.labels();
    println!("{labels:?}: {name}");
}

Note: Traverse speaks Bolt 5.1–6.0. The neo4rs crate supports Bolt 4.x+. See Bolt Protocol for version details.