JavaScript Driver
Connect to Traverse from Node.js or the browser using the official Neo4j Bolt driver.
Install
npm install neo4j-driverConnect
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 safeGraph 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 implements Bolt 5.1-6.0. See Bolt Protocol for details.