@ruvector/core
High-performance Rust vector database for Node.js with HNSW indexing and SIMD optimizations.
Features
- 🚀 Blazing Fast: Rust + SIMD optimizations for maximum performance
- 🎯 HNSW Indexing: State-of-the-art approximate nearest neighbor search
- 📦 Zero-Copy: Efficient buffer sharing between Rust and Node.js
- 🔍 Multiple Distance Metrics: Euclidean, Cosine, Dot Product, Manhattan
- 💾 Persistent Storage: Optional disk-based storage with memory mapping
- 🔧 Quantization: Scalar, Product, and Binary quantization support
- 📊 TypeScript: Full type definitions included
- 🌍 Cross-Platform: Linux, macOS, and Windows support
Installation
npm install @ruvector/core
The package will automatically install the correct native binding for your platform:
- Linux x64 (GNU)
- Linux ARM64 (GNU)
- macOS x64 (Intel)
- macOS ARM64 (Apple Silicon)
- Windows x64 (MSVC)
Quick Start
import { VectorDB, DistanceMetric } from '@ruvector/core';
// Create a database
const db = new VectorDB({
dimensions: 384,
distanceMetric: DistanceMetric.Cosine,
storagePath: './vectors.db',
hnswConfig: {
m: 32,
efConstruction: 200,
efSearch: 100
}
});
// Insert vectors
const id = await db.insert({
vector: new Float32Array([1.0, 2.0, 3.0, ...])
});
// Search for similar vectors
const results = await db.search({
vector: new Float32Array([1.0, 2.0, 3.0, ...]),
k: 10
});
console.log(results);
// [{ id: 'vector-id', score: 0.95 }, ...]
API Reference
VectorDB
Constructor
new VectorDB(options: DbOptions)
Creates a new vector database with the specified options.
Options:
dimensions(number, required): Vector dimensionsdistanceMetric(DistanceMetric, optional): Distance metric (default: Cosine)storagePath(string, optional): Path for persistent storage (default: './ruvector.db')hnswConfig(HnswConfig, optional): HNSW index configurationquantization(QuantizationConfig, optional): Quantization configuration
Static Methods
VectorDB.withDimensions(dimensions: number): VectorDB
Creates a vector database with default options.
Instance Methods
insert(entry: VectorEntry): Promise
Inserts a vector into the database.
const id = await db.insert({
id: 'optional-id',
vector: new Float32Array([1, 2, 3])
});
insertBatch(entries: VectorEntry[]): Promise<string[]>
Inserts multiple vectors in a batch.
const ids = await db.insertBatch([
{ vector: new Float32Array([1, 2, 3]) },
{ vector: new Float32Array([4, 5, 6]) }
]);
search(query: SearchQuery): Promise<SearchResult[]>
Searches for similar vectors.
const results = await db.search({
vector: new Float32Array([1, 2, 3]),
k: 10,
efSearch: 100
});
delete(id: string): Promise
Deletes a vector by ID.
const deleted = await db.delete('vector-id');
get(id: string): Promise<VectorEntry | null>
Retrieves a vector by ID.
const entry = await db.get('vector-id');
len(): Promise
Returns the number of vectors in the database.
const count = await db.len();
isEmpty(): Promise
Checks if the database is empty.
const empty = await db.isEmpty();
Types
DistanceMetric
enum DistanceMetric {
Euclidean = 'Euclidean',
Cosine = 'Cosine',
DotProduct = 'DotProduct',
Manhattan = 'Manhattan'
}
DbOptions
interface DbOptions {
dimensions: number;
distanceMetric?: DistanceMetric;
storagePath?: string;
hnswConfig?: HnswConfig;
quantization?: QuantizationConfig;
}
HnswConfig
interface HnswConfig {
m?: number;
efConstruction?: number;
efSearch?: number;
maxElements?: number;
}
QuantizationConfig
interface QuantizationConfig {
type: 'none' | 'scalar' | 'product' | 'binary';
subspaces?: number;
k?: number;
}
Performance
rUvector delivers exceptional performance:
- 150x faster than pure JavaScript implementations
- 1M+ vectors/second insertion rate
- Sub-millisecond search latency
- 4-32x memory reduction with quantization
Platform Support
| Platform | Architecture | Package |
|---|---|---|
| Linux | x64 | @ruvector/core-linux-x64-gnu |
| Linux | ARM64 | @ruvector/core-linux-arm64-gnu |
| macOS | x64 (Intel) | @ruvector/core-darwin-x64 |
| macOS | ARM64 (Apple Silicon) | @ruvector/core-darwin-arm64 |
| Windows | x64 | @ruvector/core-win32-x64-msvc |
License
MIT