@ruvector/core
v0.1.17
Published
High-performance Rust vector database for Node.js with HNSW indexing and SIMD optimizations
Maintainers
Readme
@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/coreThe 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): VectorDBCreates 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
