JavaScript Driver
Connect to Traverse from Node.js or the browser using the official Neo4j Bolt driver.
Install
npm install neo4j-driver
Connect
import neo4j from 'neo4j-driver';
const driver = neo4j.driver('bolt://localhost:7690');
// With authentication
const driver = neo4j.driver(
'bolt://localhost:7690',
neo4j.auth.basic('admin', 's3cret')
);
Run Queries
const { records, summary } = await driver.executeQuery(
'MATCH (n:Person) WHERE n.age > $minAge RETURN n.name, n.age',
{ minAge: neo4j.int(25) },
);
for (const record of records) {
console.log(record.get('n.name'), record.get('n.age').toNumber());
}
Select a Database
const { records } = await driver.executeQuery(
'MATCH (n) RETURN count(n) AS count',
{},
{ database: 'mydb' },
);
console.log(records[0].get('count').toNumber());
Write Data
await driver.executeQuery(
'CREATE (p:Person {name: $name, age: $age})',
{ name: 'Alice', age: neo4j.int(30) },
);
Session-Based Queries
const session = driver.session({ database: 'mydb' });
const result = await session.run('MATCH (n:Person) RETURN n.name');
for (const record of result.records) {
console.log(record.get('n.name'));
}
await session.close();
Transactions
const session = driver.session();
// Transaction function (recommended — auto-retries on transient errors)
await session.executeWrite(async tx => {
await tx.run(
'CREATE (p:Person {name: $name, age: $age})',
{ name: 'Dave', age: neo4j.int(28) }
);
});
// Explicit transaction
const tx = session.beginTransaction();
await tx.run("CREATE (p:Person {name: 'Bob'})");
await tx.run("CREATE (p:Person {name: 'Carol'})");
await tx.commit();
await session.close();
Integer Handling
Bolt integers are 64-bit. The driver uses neo4j.Integer to avoid JavaScript precision loss:
// Creating integers
const age = neo4j.int(42);
// Reading integers
const val = record.get('age');
console.log(val.toNumber()); // safe if within Number.MAX_SAFE_INTEGER
console.log(val.toString()); // always safe
Graph Types
const { records } = await driver.executeQuery(
'MATCH (n:Person)-[r:KNOWS]->(m) RETURN n, r, m LIMIT 1'
);
const record = records[0];
const node = record.get('n');
console.log(node.labels); // ['Person']
console.log(node.properties.name); // property access
const rel = record.get('r');
console.log(rel.type); // 'KNOWS'
Close the Driver
await driver.close();
Note: Traverse speaks Bolt 5.1–6.0. See Bolt Protocol for details.