ruvector/crates/ruvector-graph-node
rUv a48d2fcb6a
chore(release): per-crate patch versions so the 5 failed crates can publish (#1028)
- ruvector-core 2.3.1 (per-crate override): ruvector-context and ruvector-node
  use save/load_config_value and the Turbo4/SearchPolicy types that are newer
  than the published 2.3.0.
- Gate HnswIndex::structural_violations() behind a new non-default
  `hnsw-structural-diagnostics` feature: it calls methods that only exist in
  the workspace-patched hnsw_rs, so the packaged crate failed to build against
  upstream hnsw_rs. The #773 regression test still runs via a path-only self
  dev-dependency (stripped by cargo publish).
- ruvector-graph 2.3.2: crates.io 2.3.1 predates all_nodes/all_edges, which
  ruvector-graph-node needs. graph-node now requires core 2.3.1 / graph 2.3.2.
- rvf-types 0.2.2 + rvf-wire 0.1.1: published rvf-wire 0.1.0 requires
  rvf-types 0.1, giving ruvector-domain-expansion two RvfError types.
- ruvector-nervous-system-wasm: Cyrillic "hdс" keyword -> ASCII "hdc".
2026-09-26 18:01:35 -05:00
..
src fix: #995 #984 #968 #988 + publish hardening; ruvector 0.3.3, graph-node 2.1.1 (#1014) 2026-09-23 15:58:54 +00:00
build.rs feat: Add Neo4j-compatible hypergraph database package (ruvector-graph) 2025-11-25 23:11:54 +00:00
Cargo.toml chore(release): per-crate patch versions so the 5 failed crates can publish (#1028) 2026-09-26 18:01:35 -05:00
README.md docs: Add README files for all crates and update root README with crates table 2025-11-26 18:15:05 +00:00

Ruvector Graph Node

npm Crates.io License: MIT

Node.js bindings for RuVector Graph Database via NAPI-RS.

ruvector-graph-node provides native Node.js bindings for the Ruvector graph database, enabling high-performance graph operations with Cypher queries directly from JavaScript/TypeScript. Part of the Ruvector ecosystem.

Why Ruvector Graph Node?

  • Native Performance: Rust speed in Node.js
  • Zero-Copy: Efficient data transfer via NAPI-RS
  • Async/Await: Full async support for non-blocking I/O
  • TypeScript: Complete type definitions included
  • Neo4j Compatible: Cypher query language support

Features

Core Capabilities

  • Graph CRUD: Create nodes, edges, and hyperedges
  • Cypher Queries: Execute Neo4j-compatible queries
  • Vector Search: Semantic search on graph elements
  • Traversal: BFS, DFS, shortest path algorithms
  • Batch Operations: Bulk insert and query

Advanced Features

  • Streaming Results: Handle large result sets
  • Transaction Support: ACID transactions (planned)
  • Connection Pooling: Efficient resource management
  • Worker Threads: Multi-threaded operations

Installation

npm install @ruvector/graph
# or
yarn add @ruvector/graph
# or
pnpm add @ruvector/graph

Quick Start

Create a Graph

import { Graph, Node, Edge } from '@ruvector/graph';

// Create a new graph
const graph = new Graph({
  dimensions: 384,  // For vector embeddings
  distanceMetric: 'cosine',
});

// Create nodes
const alice = await graph.createNode({
  labels: ['Person'],
  properties: { name: 'Alice', age: 30 },
});

const bob = await graph.createNode({
  labels: ['Person'],
  properties: { name: 'Bob', age: 25 },
});

// Create relationship
await graph.createEdge({
  label: 'KNOWS',
  source: alice.id,
  target: bob.id,
  properties: { since: 2020 },
});

Cypher Queries

import { Graph } from '@ruvector/graph';

const graph = new Graph();

// Execute Cypher query
const results = await graph.query(`
  MATCH (p:Person)-[:KNOWS]->(friend:Person)
  WHERE p.name = 'Alice'
  RETURN friend.name AS name, friend.age AS age
`);

for (const row of results) {
  console.log(`Friend: ${row.name} (age ${row.age})`);
}
import { Graph } from '@ruvector/graph';

const graph = new Graph({ dimensions: 384 });

// Create node with embedding
await graph.createNode({
  labels: ['Document'],
  properties: { title: 'Introduction to Graphs' },
  embedding: new Float32Array([0.1, 0.2, 0.3, /* ... */]),
});

// Semantic search
const similar = await graph.searchSimilar({
  vector: new Float32Array([0.1, 0.2, 0.3, /* ... */]),
  k: 10,
  labels: ['Document'],
});

for (const node of similar) {
  console.log(`${node.properties.title}: ${node.score}`);
}

API Reference

Graph Class

class Graph {
  constructor(config?: GraphConfig);

  // Node operations
  createNode(node: NodeInput): Promise<Node>;
  getNode(id: string): Promise<Node | null>;
  updateNode(id: string, updates: Partial<NodeInput>): Promise<Node>;
  deleteNode(id: string): Promise<boolean>;

  // Edge operations
  createEdge(edge: EdgeInput): Promise<Edge>;
  getEdge(id: string): Promise<Edge | null>;
  deleteEdge(id: string): Promise<boolean>;

  // Query
  query(cypher: string, params?: Record<string, any>): Promise<Row[]>;

  // Search
  searchSimilar(options: SearchOptions): Promise<ScoredNode[]>;

  // Traversal
  neighbors(id: string, direction?: 'in' | 'out' | 'both'): Promise<Node[]>;
  shortestPath(from: string, to: string): Promise<Path | null>;
}

Types

interface GraphConfig {
  dimensions?: number;
  distanceMetric?: 'cosine' | 'euclidean' | 'dotProduct';
}

interface NodeInput {
  labels: string[];
  properties: Record<string, any>;
  embedding?: Float32Array;
}

interface Node {
  id: string;
  labels: string[];
  properties: Record<string, any>;
  embedding?: Float32Array;
}

interface EdgeInput {
  label: string;
  source: string;
  target: string;
  properties?: Record<string, any>;
}

interface SearchOptions {
  vector: Float32Array;
  k: number;
  labels?: string[];
  filter?: Record<string, any>;
}

Building from Source

# Clone repository
git clone https://github.com/ruvnet/ruvector.git
cd ruvector/crates/ruvector-graph-node

# Install dependencies
npm install

# Build native module
npm run build

# Run tests
npm test

Platform Support

Platform Architecture Status
Linux x64 ✅
Linux arm64 ✅
macOS x64 ✅
macOS arm64 (M1/M2) ✅
Windows x64 ✅

Documentation

License

MIT License - see LICENSE for details.


Part of Ruvector - Built by rUv

Star on GitHub

Documentation | npm | GitHub