mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-24 05:43:58 +00:00
- Add @ruvector/tiny-dancer to published packages - Add @ruvector/router to published packages - Add platform-specific package listings for both - Remove from "Coming Soon" section 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
420 lines
21 KiB
Markdown
420 lines
21 KiB
Markdown
# RuVector
|
|
|
|
[](https://opensource.org/licenses/MIT)
|
|
[](https://crates.io/crates/ruvector-core)
|
|
[](https://www.npmjs.com/package/ruvector)
|
|
[](https://www.rust-lang.org)
|
|
[](https://github.com/ruvnet/ruvector/actions)
|
|
[](./docs/)
|
|
|
|
**A distributed vector database that learns.** Store embeddings, query with Cypher, scale horizontally with Raft consensus, and let the index improve itself through Graph Neural Networks.
|
|
|
|
```bash
|
|
npx ruvector
|
|
```
|
|
|
|
> **All-in-One Package**: The core `ruvector` package includes everything — vector search, graph queries, GNN layers, distributed clustering, AI routing, and WASM support. No additional packages needed.
|
|
|
|
## What Problem Does RuVector Solve?
|
|
|
|
Traditional vector databases just store and search. When you ask "find similar items," they return results but never get smarter. They don't scale horizontally. They can't route AI requests intelligently.
|
|
|
|
**RuVector is different:**
|
|
|
|
1. **Store vectors** like any vector DB (embeddings from OpenAI, Cohere, etc.)
|
|
2. **Query with Cypher** like Neo4j (`MATCH (a)-[:SIMILAR]->(b) RETURN b`)
|
|
3. **The index learns** — GNN layers make search results improve over time
|
|
4. **Scale horizontally** — Raft consensus, multi-master replication, auto-sharding
|
|
5. **Route AI requests** — Semantic routing and FastGRNN neural inference for LLM optimization
|
|
6. **Compress automatically** — 2-32x memory reduction with adaptive tiered compression
|
|
7. **Run anywhere** — Node.js, browser (WASM), HTTP server, or native Rust
|
|
|
|
Think of it as: **Pinecone + Neo4j + PyTorch + etcd** in one Rust package.
|
|
|
|
## Quick Start
|
|
|
|
### One-Line Install
|
|
|
|
```bash
|
|
# Install everything (Rust + npm)
|
|
curl -fsSL https://raw.githubusercontent.com/ruvnet/ruvector/main/install.sh | bash
|
|
|
|
# Rust only
|
|
curl -fsSL https://raw.githubusercontent.com/ruvnet/ruvector/main/install.sh | bash -s -- --rust-only
|
|
|
|
# npm only
|
|
curl -fsSL https://raw.githubusercontent.com/ruvnet/ruvector/main/install.sh | bash -s -- --npm-only
|
|
|
|
# List available packages
|
|
curl -fsSL https://raw.githubusercontent.com/ruvnet/ruvector/main/install.sh | bash -s -- --list
|
|
```
|
|
|
|
### Node.js / Browser
|
|
|
|
```bash
|
|
# Install
|
|
npm install ruvector
|
|
|
|
# Or try instantly
|
|
npx ruvector
|
|
```
|
|
|
|
```javascript
|
|
const ruvector = require('ruvector');
|
|
|
|
// Vector search
|
|
const db = new ruvector.VectorDB(128);
|
|
db.insert('doc1', embedding1);
|
|
const results = db.search(queryEmbedding, 10);
|
|
|
|
// Graph queries (Cypher)
|
|
db.execute("CREATE (a:Person {name: 'Alice'})-[:KNOWS]->(b:Person {name: 'Bob'})");
|
|
db.execute("MATCH (p:Person)-[:KNOWS]->(friend) RETURN friend.name");
|
|
|
|
// GNN-enhanced search
|
|
const layer = new ruvector.GNNLayer(128, 256, 4);
|
|
const enhanced = layer.forward(query, neighbors, weights);
|
|
|
|
// Compression (2-32x memory savings)
|
|
const compressed = ruvector.compress(embedding, 0.3);
|
|
|
|
// Tiny Dancer: AI agent routing
|
|
const router = new ruvector.Router();
|
|
const decision = router.route(candidates, { optimize: 'cost' });
|
|
```
|
|
|
|
### Rust
|
|
|
|
```bash
|
|
cargo add ruvector-graph ruvector-gnn
|
|
```
|
|
|
|
```rust
|
|
use ruvector_graph::{GraphDB, NodeBuilder};
|
|
use ruvector_gnn::{RuvectorLayer, differentiable_search};
|
|
|
|
let db = GraphDB::new();
|
|
|
|
let doc = NodeBuilder::new("doc1")
|
|
.label("Document")
|
|
.property("embedding", vec![0.1, 0.2, 0.3])
|
|
.build();
|
|
db.create_node(doc)?;
|
|
|
|
// GNN layer
|
|
let layer = RuvectorLayer::new(128, 256, 4, 0.1);
|
|
let enhanced = layer.forward(&query, &neighbors, &weights);
|
|
```
|
|
|
|
## Features
|
|
|
|
### Core Capabilities
|
|
|
|
| Feature | What It Does | Why It Matters |
|
|
|---------|--------------|----------------|
|
|
| **Vector Search** | HNSW index, <0.5ms latency, SIMD acceleration | Fast enough for real-time apps |
|
|
| **Cypher Queries** | `MATCH`, `WHERE`, `CREATE`, `RETURN` | Familiar Neo4j syntax |
|
|
| **GNN Layers** | Neural network on index topology | Search improves with usage |
|
|
| **Hyperedges** | Connect 3+ nodes at once | Model complex relationships |
|
|
| **Metadata Filtering** | Filter vectors by properties | Combine semantic + structured search |
|
|
| **Collections** | Namespace isolation, multi-tenancy | Organize vectors by project/user |
|
|
|
|
### Distributed Systems
|
|
|
|
| Feature | What It Does | Why It Matters |
|
|
|---------|--------------|----------------|
|
|
| **Raft Consensus** | Leader election, log replication | Strong consistency for metadata |
|
|
| **Auto-Sharding** | Consistent hashing, shard migration | Scale to billions of vectors |
|
|
| **Multi-Master Replication** | Write to any node, conflict resolution | High availability, no SPOF |
|
|
| **Snapshots** | Point-in-time backups, incremental | Disaster recovery |
|
|
| **Cluster Metrics** | Prometheus-compatible monitoring | Observability at scale |
|
|
|
|
### AI & ML
|
|
|
|
| Feature | What It Does | Why It Matters |
|
|
|---------|--------------|----------------|
|
|
| **Tensor Compression** | f32→f16→PQ8→PQ4→Binary | 2-32x memory reduction |
|
|
| **Differentiable Search** | Soft attention k-NN | End-to-end trainable |
|
|
| **Semantic Router** | Route queries to optimal endpoints | Multi-model AI orchestration |
|
|
| **Tiny Dancer** | FastGRNN neural inference | Optimize LLM inference costs |
|
|
| **Adaptive Routing** | Learn optimal routing strategies | Minimize latency, maximize accuracy |
|
|
|
|
### Deployment
|
|
|
|
| Feature | What It Does | Why It Matters |
|
|
|---------|--------------|----------------|
|
|
| **HTTP/gRPC Server** | REST API, streaming support | Easy integration |
|
|
| **WASM/Browser** | Full client-side support | Run AI search offline |
|
|
| **Node.js Bindings** | Native napi-rs bindings | No serialization overhead |
|
|
| **FFI Bindings** | C-compatible interface | Use from Python, Go, etc. |
|
|
| **CLI Tools** | Benchmarking, testing, management | DevOps-friendly |
|
|
|
|
## Benchmarks
|
|
|
|
Real benchmark results on standard hardware:
|
|
|
|
| Operation | Dimensions | Time | Throughput |
|
|
|-----------|------------|------|------------|
|
|
| **HNSW Search (k=10)** | 384 | 61µs | 16,400 QPS |
|
|
| **HNSW Search (k=100)** | 384 | 164µs | 6,100 QPS |
|
|
| **Cosine Distance** | 1536 | 143ns | 7M ops/sec |
|
|
| **Dot Product** | 384 | 33ns | 30M ops/sec |
|
|
| **Batch Distance (1000)** | 384 | 237µs | 4.2M/sec |
|
|
|
|
### Global Cloud Performance (500M Streams)
|
|
|
|
Production-validated metrics at hyperscale:
|
|
|
|
| Metric | Value | Details |
|
|
|--------|-------|---------|
|
|
| **Concurrent Streams** | 500M baseline | Burst capacity to 25B (50x) |
|
|
| **Global Latency (p50)** | <10ms | Multi-region + CDN edge caching |
|
|
| **Global Latency (p99)** | <50ms | Cross-continental with failover |
|
|
| **Availability SLA** | 99.99% | 15 regions, automatic failover |
|
|
| **Cost per Stream/Month** | $0.0035 | 60% optimized ($1.74M total at 500M) |
|
|
| **Regions** | 15 global | Americas, EMEA, APAC coverage |
|
|
| **Throughput per Region** | 100K+ QPS | Adaptive batching enabled |
|
|
| **Memory Efficiency** | 2-32x compression | Tiered hot/warm/cold storage |
|
|
| **Index Build Time** | 1M vectors/min | Parallel HNSW construction |
|
|
| **Replication Lag** | <100ms | Multi-master async replication |
|
|
|
|
## Comparison
|
|
|
|
| Feature | RuVector | Pinecone | Qdrant | Milvus | ChromaDB |
|
|
|---------|----------|----------|--------|--------|----------|
|
|
| **Latency (p50)** | **61µs** | ~2ms | ~1ms | ~5ms | ~50ms |
|
|
| **Memory (1M vec)** | 200MB* | 2GB | 1.5GB | 1GB | 3GB |
|
|
| **Graph Queries** | ✅ Cypher | ❌ | ❌ | ❌ | ❌ |
|
|
| **Hyperedges** | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
| **Self-Learning (GNN)** | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
| **AI Agent Routing** | ✅ Tiny Dancer | ❌ | ❌ | ❌ | ❌ |
|
|
| **Raft Consensus** | ✅ | ❌ | ✅ | ❌ | ❌ |
|
|
| **Multi-Master Replication** | ✅ | ❌ | ❌ | ✅ | ❌ |
|
|
| **Auto-Compression** | ✅ 2-32x | ❌ | ❌ | ✅ | ❌ |
|
|
| **Browser/WASM** | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
| **Differentiable** | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
| **Open Source** | ✅ MIT | ❌ | ✅ | ✅ | ✅ |
|
|
|
|
*With PQ8 compression. Benchmarks on Apple M2 / Intel i7.
|
|
|
|
## How the GNN Works
|
|
|
|
Traditional vector search:
|
|
```
|
|
Query → HNSW Index → Top K Results
|
|
```
|
|
|
|
RuVector with GNN:
|
|
```
|
|
Query → HNSW Index → GNN Layer → Enhanced Results
|
|
↑ │
|
|
└──── learns from ─────┘
|
|
```
|
|
|
|
The GNN layer:
|
|
1. Takes your query and its nearest neighbors
|
|
2. Applies multi-head attention to weigh which neighbors matter
|
|
3. Updates representations based on graph structure
|
|
4. Returns better-ranked results
|
|
|
|
Over time, frequently-accessed paths get reinforced, making common queries faster and more accurate.
|
|
|
|
## Compression Tiers
|
|
|
|
**The architecture adapts to your data.** Hot paths get full precision and maximum compute. Cold paths compress automatically and throttle resources. Recent data stays crystal clear; historical data optimizes itself in the background.
|
|
|
|
Think of it like your computer's memory hierarchy—frequently accessed data lives in fast cache, while older files move to slower, denser storage. RuVector does this automatically for your vectors:
|
|
|
|
| Access Frequency | Format | Compression | What Happens |
|
|
|-----------------|--------|-------------|--------------|
|
|
| **Hot** (>80%) | f32 | 1x | Full precision, instant retrieval |
|
|
| **Warm** (40-80%) | f16 | 2x | Slight compression, imperceptible latency |
|
|
| **Cool** (10-40%) | PQ8 | 8x | Smart quantization, ~1ms overhead |
|
|
| **Cold** (1-10%) | PQ4 | 16x | Heavy compression, still fast search |
|
|
| **Archive** (<1%) | Binary | 32x | Maximum density, batch retrieval |
|
|
|
|
**No configuration needed.** RuVector tracks access patterns and automatically promotes/demotes vectors between tiers. Your hot data stays fast; your cold data shrinks.
|
|
|
|
## Use Cases
|
|
|
|
**RAG (Retrieval-Augmented Generation)**
|
|
```javascript
|
|
const context = ruvector.search(questionEmbedding, 5);
|
|
const prompt = `Context: ${context.join('\n')}\n\nQuestion: ${question}`;
|
|
```
|
|
|
|
**Recommendation Systems**
|
|
```cypher
|
|
MATCH (user:User)-[:VIEWED]->(item:Product)
|
|
MATCH (item)-[:SIMILAR_TO]->(rec:Product)
|
|
RETURN rec ORDER BY rec.score DESC LIMIT 10
|
|
```
|
|
|
|
**Knowledge Graphs**
|
|
```cypher
|
|
MATCH (concept:Concept)-[:RELATES_TO*1..3]->(related)
|
|
RETURN related
|
|
```
|
|
|
|
## Installation
|
|
|
|
| Platform | Command |
|
|
|----------|---------|
|
|
| **npm** | `npm install ruvector` |
|
|
| **Browser/WASM** | `npm install ruvector-wasm` |
|
|
| **Rust** | `cargo add ruvector-core ruvector-graph ruvector-gnn` |
|
|
|
|
## Documentation
|
|
|
|
| Topic | Link |
|
|
|-------|------|
|
|
| Getting Started | [docs/guide/GETTING_STARTED.md](./docs/guide/GETTING_STARTED.md) |
|
|
| Cypher Reference | [docs/api/CYPHER_REFERENCE.md](./docs/api/CYPHER_REFERENCE.md) |
|
|
| GNN Architecture | [docs/gnn-layer-implementation.md](./docs/gnn-layer-implementation.md) |
|
|
| Node.js API | [crates/ruvector-gnn-node/README.md](./crates/ruvector-gnn-node/README.md) |
|
|
| WASM API | [crates/ruvector-gnn-wasm/README.md](./crates/ruvector-gnn-wasm/README.md) |
|
|
| Performance Tuning | [docs/optimization/PERFORMANCE_TUNING_GUIDE.md](./docs/optimization/PERFORMANCE_TUNING_GUIDE.md) |
|
|
| API Reference | [docs/api/](./docs/api/) |
|
|
|
|
## Crates
|
|
|
|
All crates are published to [crates.io](https://crates.io) under the `ruvector-*` namespace.
|
|
|
|
### Core Crates
|
|
|
|
| Crate | Description | crates.io |
|
|
|-------|-------------|-----------|
|
|
| [ruvector-core](./crates/ruvector-core) | Vector database engine with HNSW indexing | [](https://crates.io/crates/ruvector-core) |
|
|
| [ruvector-collections](./crates/ruvector-collections) | Collection and namespace management | [](https://crates.io/crates/ruvector-collections) |
|
|
| [ruvector-filter](./crates/ruvector-filter) | Vector filtering and metadata queries | [](https://crates.io/crates/ruvector-filter) |
|
|
| [ruvector-metrics](./crates/ruvector-metrics) | Performance metrics and monitoring | [](https://crates.io/crates/ruvector-metrics) |
|
|
| [ruvector-snapshot](./crates/ruvector-snapshot) | Snapshot and persistence management | [](https://crates.io/crates/ruvector-snapshot) |
|
|
|
|
### Graph & GNN
|
|
|
|
| Crate | Description | crates.io |
|
|
|-------|-------------|-----------|
|
|
| [ruvector-graph](./crates/ruvector-graph) | Hypergraph database with Neo4j-style Cypher | [](https://crates.io/crates/ruvector-graph) |
|
|
| [ruvector-graph-node](./crates/ruvector-graph-node) | Node.js bindings for graph operations | [](https://crates.io/crates/ruvector-graph-node) |
|
|
| [ruvector-graph-wasm](./crates/ruvector-graph-wasm) | WASM bindings for browser graph queries | [](https://crates.io/crates/ruvector-graph-wasm) |
|
|
| [ruvector-gnn](./crates/ruvector-gnn) | Graph Neural Network layers and training | [](https://crates.io/crates/ruvector-gnn) |
|
|
| [ruvector-gnn-node](./crates/ruvector-gnn-node) | Node.js bindings for GNN inference | [](https://crates.io/crates/ruvector-gnn-node) |
|
|
| [ruvector-gnn-wasm](./crates/ruvector-gnn-wasm) | WASM bindings for browser GNN | [](https://crates.io/crates/ruvector-gnn-wasm) |
|
|
|
|
### Distributed Systems
|
|
|
|
| Crate | Description | crates.io |
|
|
|-------|-------------|-----------|
|
|
| [ruvector-cluster](./crates/ruvector-cluster) | Cluster management and coordination | [](https://crates.io/crates/ruvector-cluster) |
|
|
| [ruvector-raft](./crates/ruvector-raft) | Raft consensus implementation | [](https://crates.io/crates/ruvector-raft) |
|
|
| [ruvector-replication](./crates/ruvector-replication) | Data replication and synchronization | [](https://crates.io/crates/ruvector-replication) |
|
|
|
|
### AI Agent Routing (Tiny Dancer)
|
|
|
|
| Crate | Description | crates.io |
|
|
|-------|-------------|-----------|
|
|
| [ruvector-tiny-dancer-core](./crates/ruvector-tiny-dancer-core) | FastGRNN neural inference for AI routing | [](https://crates.io/crates/ruvector-tiny-dancer-core) |
|
|
| [ruvector-tiny-dancer-node](./crates/ruvector-tiny-dancer-node) | Node.js bindings for AI routing | [](https://crates.io/crates/ruvector-tiny-dancer-node) |
|
|
| [ruvector-tiny-dancer-wasm](./crates/ruvector-tiny-dancer-wasm) | WASM bindings for browser AI routing | [](https://crates.io/crates/ruvector-tiny-dancer-wasm) |
|
|
|
|
### Router (Semantic Routing)
|
|
|
|
| Crate | Description | crates.io |
|
|
|-------|-------------|-----------|
|
|
| [ruvector-router-core](./crates/ruvector-router-core) | Core semantic routing engine | [](https://crates.io/crates/ruvector-router-core) |
|
|
| [ruvector-router-cli](./crates/ruvector-router-cli) | CLI for router testing and benchmarking | [](https://crates.io/crates/ruvector-router-cli) |
|
|
| [ruvector-router-ffi](./crates/ruvector-router-ffi) | FFI bindings for other languages | [](https://crates.io/crates/ruvector-router-ffi) |
|
|
| [ruvector-router-wasm](./crates/ruvector-router-wasm) | WASM bindings for browser routing | [](https://crates.io/crates/ruvector-router-wasm) |
|
|
|
|
### Bindings & Tools
|
|
|
|
| Crate | Description | crates.io |
|
|
|-------|-------------|-----------|
|
|
| [ruvector-node](./crates/ruvector-node) | Main Node.js bindings (napi-rs) | [](https://crates.io/crates/ruvector-node) |
|
|
| [ruvector-wasm](./crates/ruvector-wasm) | Main WASM bindings for browsers | [](https://crates.io/crates/ruvector-wasm) |
|
|
| [ruvector-cli](./crates/ruvector-cli) | Command-line interface | [](https://crates.io/crates/ruvector-cli) |
|
|
| [ruvector-server](./crates/ruvector-server) | HTTP/gRPC server | [](https://crates.io/crates/ruvector-server) |
|
|
|
|
### npm Packages
|
|
|
|
#### ✅ Published
|
|
|
|
| Package | Description | npm |
|
|
|---------|-------------|-----|
|
|
| [ruvector](https://www.npmjs.com/package/ruvector) | All-in-one CLI & package (vectors, graphs, GNN) | [](https://www.npmjs.com/package/ruvector) |
|
|
| [@ruvector/core](https://www.npmjs.com/package/@ruvector/core) | Core vector database with native Rust bindings | [](https://www.npmjs.com/package/@ruvector/core) |
|
|
| [@ruvector/gnn](https://www.npmjs.com/package/@ruvector/gnn) | Graph Neural Network layers & tensor compression | [](https://www.npmjs.com/package/@ruvector/gnn) |
|
|
| [@ruvector/graph-node](https://www.npmjs.com/package/@ruvector/graph-node) | Hypergraph database with Cypher queries | [](https://www.npmjs.com/package/@ruvector/graph-node) |
|
|
| [@ruvector/tiny-dancer](https://www.npmjs.com/package/@ruvector/tiny-dancer) | FastGRNN neural inference for AI agent routing | [](https://www.npmjs.com/package/@ruvector/tiny-dancer) |
|
|
| [@ruvector/router](https://www.npmjs.com/package/@ruvector/router) | Semantic router with HNSW vector search | [](https://www.npmjs.com/package/@ruvector/router) |
|
|
| [@ruvector/agentic-synth](https://www.npmjs.com/package/@ruvector/agentic-synth) | Synthetic data generator for AI/ML | [](https://www.npmjs.com/package/@ruvector/agentic-synth) |
|
|
|
|
**Platform-specific native bindings** (auto-detected):
|
|
- `@ruvector/node-linux-x64-gnu`, `@ruvector/node-linux-arm64-gnu`, `@ruvector/node-darwin-x64`, `@ruvector/node-darwin-arm64`, `@ruvector/node-win32-x64-msvc`
|
|
- `@ruvector/gnn-linux-x64-gnu`, `@ruvector/gnn-linux-arm64-gnu`, `@ruvector/gnn-darwin-x64`, `@ruvector/gnn-darwin-arm64`, `@ruvector/gnn-win32-x64-msvc`
|
|
- `@ruvector/tiny-dancer-linux-x64-gnu`, `@ruvector/tiny-dancer-linux-arm64-gnu`, `@ruvector/tiny-dancer-darwin-x64`, `@ruvector/tiny-dancer-darwin-arm64`, `@ruvector/tiny-dancer-win32-x64-msvc`
|
|
- `@ruvector/router-linux-x64-gnu`, `@ruvector/router-linux-arm64-gnu`, `@ruvector/router-darwin-x64`, `@ruvector/router-darwin-arm64`, `@ruvector/router-win32-x64-msvc`
|
|
|
|
#### 🚧 Coming Soon
|
|
|
|
| Package | Description | Status |
|
|
|---------|-------------|--------|
|
|
| @ruvector/wasm | WASM fallback for core vector DB | Crate ready |
|
|
| @ruvector/gnn-wasm | WASM fallback for GNN | Crate ready |
|
|
| @ruvector/graph-wasm | WASM fallback for graph DB | Crate ready |
|
|
| @ruvector/cluster | Distributed clustering | Crate ready |
|
|
| @ruvector/server | HTTP/gRPC server mode | Crate ready |
|
|
|
|
See [GitHub Issue #20](https://github.com/ruvnet/ruvector/issues/20) for multi-platform npm package roadmap.
|
|
|
|
```bash
|
|
# Install all-in-one package
|
|
npm install ruvector
|
|
|
|
# Or install individual packages
|
|
npm install @ruvector/core @ruvector/gnn @ruvector/graph-node
|
|
|
|
# List all available packages
|
|
npx ruvector install
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
crates/
|
|
├── ruvector-core/ # Vector DB engine (HNSW, storage)
|
|
├── ruvector-graph/ # Graph DB + Cypher parser + Hyperedges
|
|
├── ruvector-gnn/ # GNN layers, compression, training
|
|
├── ruvector-tiny-dancer-core/ # AI agent routing (FastGRNN)
|
|
├── ruvector-*-wasm/ # WebAssembly bindings
|
|
└── ruvector-*-node/ # Node.js bindings (napi-rs)
|
|
```
|
|
|
|
## Contributing
|
|
|
|
We welcome contributions! See [CONTRIBUTING.md](./docs/development/CONTRIBUTING.md).
|
|
|
|
```bash
|
|
# Run tests
|
|
cargo test --workspace
|
|
|
|
# Run benchmarks
|
|
cargo bench --workspace
|
|
|
|
# Build WASM
|
|
cargo build -p ruvector-gnn-wasm --target wasm32-unknown-unknown
|
|
```
|
|
|
|
## License
|
|
|
|
MIT License — free for commercial and personal use.
|
|
|
|
---
|
|
|
|
<div align="center">
|
|
|
|
**Built by [rUv](https://ruv.io)** • [GitHub](https://github.com/ruvnet/ruvector) • [npm](https://npmjs.com/package/ruvector) • [Docs](./docs/)
|
|
|
|
*Vector search that gets smarter over time.*
|
|
|
|
</div>
|