ruvector/crates/ruvector-graph-node
Reuven f91075e8e6 Release v2.0.0: WASM support, multi-platform, performance optimizations
## Major Features
- WASM crate (ruvllm-wasm) for browser-compatible LLM inference
- Multi-platform support with #[cfg] guards for CPU-only environments
- npm packages updated to v2.0.0 with WASM integration
- Workspace version bump to 2.0.0

## Performance Improvements
- GEMV: 6 → 35.9 GFLOPS (6x improvement)
- GEMM: 6 → 19.2 GFLOPS (3.2x improvement)
- Flash Attention 2: 840us for 256-seq (2.4x better than target)
- RMSNorm: 620ns for 4096-dim (16x better than target)
- Rayon parallelization: 12.7x speedup on M4 Pro

## New Capabilities
- INT8/INT4/Q4_K quantized inference (4-8x memory reduction)
- Two-tier KV cache (FP16 tail + Q4 cold storage)
- Arena allocator for zero-alloc inference
- MicroLoRA with <1ms adaptation latency
- Cross-platform test suite

## Fixes
- Removed hardcoded version constraints from path dependencies
- Fixed test syntax errors in backend_integration.rs
- Widened INT4 tolerance to 40% (realistic for 4-bit precision)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:09:40 -05:00
..
src fix(ci): Fix formatting and workflow permission issues 2025-12-26 22:11:57 +00:00
build.rs feat: Add Neo4j-compatible hypergraph database package (ruvector-graph) 2025-11-25 23:11:54 +00:00
Cargo.toml Release v2.0.0: WASM support, multi-platform, performance optimizations 2026-01-19 10:09:40 -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