
Product
Rust Support Now in Beta
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
neo4j-fiber
Advanced tools
Most advanced and efficient Neo4j REST API Driver, with support of https and GrapheneDB
Most advanced, well documented and efficient REST client for Neo4j database, with 100% tests coverage. Fibers allows to give a new level experience to developers, no more callback-hell and blocking operations. Speed and low resources consumption is top priority of neo4j-fiber package.
npm install --save neo4j-fiber
Please see full API with examples in our wiki
const Neo4jDB = require('neo4j-fiber').Neo4jDB;
const db = new Neo4jDB('http://localhost:7474', {
username: 'neo4j',
password: '1234'
});
Set NEO4J_URL or GRAPHENEDB_URL to as connection URL to Neo4j Database
NEO4J_URL="http://neo4j:1234@localhost:7474" node index.js
If environment variable is set, no need to pass url argument into Neo4jDB constructor
const Neo4jDB = require('neo4j-fiber').Neo4jDB;
const db = new Neo4jDB();
const cursor = db.query('CREATE (n:City {props}) RETURN n', {
props: {
title: 'Ottawa',
lat: 45.416667,
long: -75.683333
}
});
console.log(cursor.fetch());
// Returns array of nodes:
// [{
// n: {
// long: -75.683333,
// lat: 45.416667,
// title: "Ottawa",
// id: 8421,
// labels": ["City"],
// metadata: {
// id: 8421,
// labels": ["City"]
// }
// }
// }]
// Iterate through results as plain objects:
cursor.forEach((node) => {
console.log(node)
// Returns node as Object:
// {
// n: {
// long: -75.683333,
// lat: 45.416667,
// title: "Ottawa",
// id: 8421,
// labels": ["City"],
// metadata: {
// id: 8421,
// labels": ["City"]
// }
// }
// }
});
// Iterate through cursor as `Neo4jNode` instances:
cursor.each((node) => {
console.log(node.n.get());
// {
// long: -75.683333,
// lat: 45.416667,
// title: "Ottawa",
// id: 8421,
// labels": ["City"],
// metadata: {
// id: 8421,
// labels": ["City"]
// }
// }
});
const node = db.nodes();
const node2 = db.nodes({property: 'value', property2: ['val', 'val2', 'val3']});
const node = db.nodes(123);
node.delete();
const n1 = db.nodes();
const relationship = db.nodes().to(n1, "KNOWS", {property: 'value'});
relationship.delete();
// Create some data:
const cities = {};
cities['Zürich'] = db.nodes({
title: 'Zürich',
lat: 47.27,
long: 8.31
}).label(['City']);
cities['Tokyo'] = db.nodes({
title: 'Tokyo',
lat: 35.40,
long: 139.45
}).label(['City']);
cities['Athens'] = db.nodes({
title: 'Athens',
lat: 37.58,
long: 23.43
}).label(['City']);
cities['Cape Town'] = db.nodes({
title: 'Cape Town',
lat: 33.55,
long: 18.22
}).label(['City']);
// Add relationship between cities
// At this example we set distance
cities['Zürich'].to(cities['Tokyo'], "DISTANCE", {m: 9576670, km: 9576.67, mi: 5950.67});
cities['Tokyo'].to(cities['Zürich'], "DISTANCE", {m: 9576670, km: 9576.67, mi: 5950.67});
// Create route 1 (Zürich -> Athens -> Cape Town -> Tokyo)
cities['Zürich'].to(cities['Athens'], "ROUTE", {m: 1617270, km: 1617.27, mi: 1004.93, price: 50});
cities['Athens'].to(cities['Cape Town'], "ROUTE", {m: 8015080, km: 8015.08, mi: 4980.34, price: 500});
cities['Cape Town'].to(cities['Tokyo'], "ROUTE", {m: 9505550, km: 9505.55, mi: 5906.48, price: 850});
// Create route 2 (Zürich -> Cape Town -> Tokyo)
cities['Zürich'].to(cities['Cape Town'], "ROUTE", {m: 1617270, km: 1617.27, mi: 1004.93, price: 550});
cities['Cape Town'].to(cities['Tokyo'], "ROUTE", {m: 9576670, km: 9576.67, mi: 5950.67, price: 850});
// Create route 3 (Zürich -> Athens -> Tokyo)
cities['Zürich'].to(cities['Athens'], "ROUTE", {m: 1617270, km: 1617.27, mi: 1004.93, price: 50});
cities['Athens'].to(cities['Tokyo'], "ROUTE", {m: 9576670, km: 9576.67, mi: 5950.67, price: 850});
// Get Shortest Route (in km) between two Cities:
const shortest = cities['Zürich'].path(cities['Tokyo'], "ROUTE", {cost_property: 'km', algorithm: 'dijkstra'})[0];
let shortestStr = 'Shortest from Zürich to Tokyo, via: ';
shortest.nodes.forEach((id) => {
shortestStr += db.nodes(id).property('title') + ', ';
});
shortestStr += '| Distance: ' + shortest.weight + ' km';
console.info(shortestStr); // <-- Shortest from Zürich to Tokyo, via: Zürich, Cape Town, Tokyo, | Distance: 11122.82 km
// Get Cheapest Route (in notional currency) between two Cities:
const cheapest = cities['Zürich'].path(cities['Tokyo'], "ROUTE", {cost_property: 'price', algorithm: 'dijkstra'})[0];
let cheapestStr = 'Cheapest from Zürich to Tokyo, via: ';
cheapest.nodes.forEach((id) => {
cheapestStr += db.nodes(id).property('title') + ', ';
});
cheapestStr += '| Price: ' + cheapest.weight + ' nc';
console.info(cheapestStr); // <-- Cheapest from Zürich to Tokyo, via: Zürich, Athens, Tokyo, | Price: 900 nc
For more complex examples and docs, please see our wiki
FAQs
Most advanced and efficient Neo4j REST API Driver, with support of https and GrapheneDB
We found that neo4j-fiber demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.

Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.

Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.