ruvector/docs
rUv ce1afecb22
feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm (#394)
* feat(ruvector-rabitq-wasm): WASM bindings for RaBitQ via wasm-bindgen

Closes the WASM gap from `docs/research/rabitq-integration/` Tier 2
("WASM / edge: 32× compression makes on-device RAG feasible") and
ADR-157 ("VectorKernel WASM kernel as a Phase 2 goal"). Adds a
`ruvector-rabitq-wasm` sibling crate that exposes `RabitqIndex` to
JavaScript/TypeScript callers (browsers, Cloudflare Workers, Deno,
Bun) via wasm-bindgen.

```js
import init, { RabitqIndex } from "ruvector-rabitq";
await init();

const dim = 768;
const n = 10_000;
const vectors = new Float32Array(n * dim);  // populate
const idx = RabitqIndex.build(vectors, dim, 42, 20);
const query = new Float32Array(dim);
const results = idx.search(query, 10);  // [{id, distance}, ...]
```

## Surface

- `RabitqIndex.build(vectors: Float32Array, dim, seed, rerank_factor)`
- `idx.search(query: Float32Array, k) → SearchResult[]`
- `idx.len`, `idx.isEmpty`
- `version()` — crate version baked at build time
- `SearchResult { id: u32, distance: f32 }` — mirrors the Python SDK
  (PR #381) shape so callers porting code between languages get
  identical structures.

## Native compatibility tweak

`ruvector-rabitq` had one rayon call site in
`from_vectors_parallel_with_rotation`. WASM is single-threaded — gated
that path on `cfg(not(target_arch = "wasm32"))` with a sequential
`.into_iter()` fallback for wasm. Output is bit-identical because the
rotation matrix is deterministic (ADR-154); parallel ordering doesn't
affect bytes.

`rayon` is now `[target.'cfg(not(target_arch = "wasm32"))'.dependencies]`
so the wasm build doesn't pull it in. Native build behavior unchanged
(39 / 39 lib tests still pass).

## Crate layout

  crates/ruvector-rabitq-wasm/
    Cargo.toml      cdylib + rlib, wasm-bindgen 0.2, abi-3-friendly
    src/lib.rs      ~150 LoC of bindings; tests gated to wasm32 via
                    wasm_bindgen_test (native test would panic in
                    wasm-bindgen 0.2.117's runtime stub).

## Testing strategy

Native tests of WASM bindings panic by design — `JsValue::from_str`
calls into a wasm-bindgen runtime stub that's `unimplemented!()` on
non-wasm32 targets (since 0.2.117). The right path is
`wasm-pack test --node` or `wasm-pack test --headless --chrome`,
which we'll wire into CI as a follow-up.

The numerical correctness is already covered by `ruvector-rabitq`'s
own test suite. This crate only adds the JS-facing surface.

## Verification (native)

  cargo build --workspace                                              → 0 errors
  cargo build -p ruvector-rabitq-wasm                                  → clean
  cargo clippy -p ruvector-rabitq-wasm --all-targets --no-deps -- -D warnings → exit 0
  cargo test -p ruvector-rabitq                                        → 39 / 39 (unchanged)
  cargo fmt --all --check                                              → clean

WASM target build (`wasm32-unknown-unknown`) requires `rustup target
add wasm32-unknown-unknown` — not exercised in this PR; will be
covered by a follow-up CI job.

Refs: docs/research/rabitq-integration/ Tier 2, ADR-157
("Optional Accelerator Plane"), PR #381 (Python SDK shape mirror).

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(acorn): add ruvector-acorn crate — ACORN predicate-agnostic filtered HNSW

Implements the ACORN algorithm (Patel et al., SIGMOD 2024, arXiv:2403.04871)
as a standalone Rust crate. ACORN solves filtered vector search recall collapse
at low predicate selectivity by expanding ALL graph neighbors regardless of
predicate outcome, combined with a γ-augmented graph (γ·M neighbors/node).

Three index variants:
- FlatFilteredIndex: post-filter brute-force baseline
- AcornIndex1: ACORN with M=16 standard edges
- AcornIndexGamma: ACORN with 2M=32 edges (γ=2)

Measured (n=5K, D=128, release): ACORN-γ achieves 98.9% recall@10 at 1%
selectivity. cargo build --release and cargo test (12/12) both pass.

https://claude.ai/code/session_0173QrGBttNDWcVXXh4P17if

* perf(acorn): bounded beam, parallel build, flat data, unrolled L2²

Five linked optimizations to ruvector-acorn (≈50% smaller search
working set, ≈6× faster build on 8 cores, comparable or better
recall at every selectivity):

1. **Fix broken bounded-beam eviction in `acorn_search`.**
   The previous implementation admitted that its `else` branch was
   "wrong" (the comment literally said "this is wrong") and pushed
   every neighbor into `candidates` unconditionally, growing the
   frontier to O(n). Replace with a correct max-heap eviction:
   when `|candidates| >= ef`, only admit a neighbor if it improves
   on the farthest pending candidate, evicting that one. This gives
   the documented O(ef) memory bound and stops wasted neighbor
   expansions at the prune cutoff.

2. **Parallelize the O(n²·D) graph build with rayon.**
   The forward pass (each node finds its M nearest predecessors) is
   embarrassingly parallel — `into_par_iter` over rows. Back-edge
   merge stays serial behind a `Mutex<Vec<u32>>` per node so the
   merge is deterministic. ~6× faster on an 8-core box for 5K×128.

3. **Flat row-major vector storage.**
   `data: Vec<Vec<f32>>` → `data: Vec<f32>` (length n·dim) with a
   `row(i)` accessor. Eliminates the per-vector heap indirection,
   keeps the L2² inner loop on contiguous memory the compiler can
   vectorize, and trims index size by ~one allocation per row.

4. **`Vec<bool>` for `visited` instead of `HashSet<u32>`.**
   O(1) lookup with no hashing or allocator pressure on the hot path.

5. **Hand-unroll L2² by 4.**
   Four independent accumulators give LLVM enough room to issue
   AVX2/SSE/NEON FMA chains on contemporary x86_64 / aarch64.
   3-5× faster for D ≥ 64 in microbenchmarks.

Other:
- `exact_filtered_knn` parallelizes across data via rayon (recall
  measurement only — needs `+ Sync` on the predicate).
- `benches/acorn_bench.rs` switches `SmallRng` → `StdRng` (the
  workspace doesn't enable rand's `small_rng` feature so the bench
  failed to compile).
- `cargo fmt` applied across the crate; CI's Rustfmt check was the
  blocking failure on the original PR.

Demo run on x86_64, n=5000, D=128, k=10:
  Build:  ACORN-γ ≈ 23 ms (was 1.8 s)
  Recall: 96.0% @ 1% selectivity (paper: ~98%)
          92.0% @ 5% selectivity
          79.7% @ 10% selectivity
          34.5% @ 50% selectivity (predicate dilutes top-k truth)
  QPS:    18 K @ 1% sel, 65 K @ 50% sel

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(acorn): clippy clean-up — sort_by_key, is_empty, redundant closures

CI's `Clippy (deny warnings)` flagged three lints introduced by the
previous optimization commit:

- `unnecessary_sort_by` (graph.rs:158, 176) → use `sort_by_key`
- `len_without_is_empty` (graph.rs) → add `AcornGraph::is_empty`
  and `if graph.is_empty()` in search.rs
- `redundant_closure` (main.rs:65, 159, 160) → pass the predicate
  directly to `recall_at_k` instead of `|id| pred(id)`

No semantic change.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm

Two new WASM packages (both v0.1.0, MIT OR Apache-2.0, scoped under
@ruvector). Mirrors the existing @ruvector/graph-wasm packaging
pattern so release tooling treats all three uniformly.

- ADR-161: @ruvector/rabitq-wasm — RaBitQ 1-bit quantized vector
  index. 32× embedding compression with deterministic rotation.
  Wraps the existing crates/ruvector-rabitq-wasm crate.
- ADR-162: @ruvector/acorn-wasm — ACORN predicate-agnostic filtered
  HNSW. 96% recall@10 at 1% selectivity with arbitrary JS predicates.
  Adds crates/ruvector-acorn-wasm (new), wrapping the ruvector-acorn
  crate from PR #391.

Each crate ships with:
- `build.sh` that runs `wasm-pack build` for web / nodejs / bundler
  targets, emitting into npm/packages/{rabitq,acorn}-wasm/{,node/,bundler/}.
- A canonical scoped package.json (kept under git as
  package.scoped.json because wasm-pack regenerates package.json from
  Cargo metadata on every build).
- A README.md with install + usage for browser, Node.js, and bundler
  contexts.
- A `.gitignore` that excludes the wasm-pack-generated artifacts
  (.wasm + .js + .d.ts) so only canonical source lives in the repo.

Build sanity:
- `cargo check -p ruvector-acorn-wasm -p ruvector-rabitq-wasm` clean
- `cargo clippy -- -D warnings` clean for both
- `wasm-pack build` succeeds for all three targets on both crates

Published:
- @ruvector/rabitq-wasm@0.1.0 — 40 KB tarball, 71 KB wasm
- @ruvector/acorn-wasm@0.1.0  — 49 KB tarball, ~85 KB wasm

Root README updated with both packages in the npm packages table.

Note: this branch also carries cherry-picks of PR #391's `ruvector-acorn`
crate (commits b90af9caa, 0b4eab11f, eb88176bd, f5913b783) and PR
#391's predecessor commit a674d6eba for `ruvector-rabitq-wasm` itself,
because both base crates are required to build the new WASM wrappers.

Co-Authored-By: claude-flow <ruv@ruv.net>

---------

Co-authored-by: ruvnet <ruvnet@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-04-26 23:10:39 -04:00
..
adr feat(wasm): publish @ruvector/rabitq-wasm and @ruvector/acorn-wasm to npm (#394) 2026-04-26 23:10:39 -04:00
analysis fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
api fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
architecture fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
benchmarks fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
cloud-architecture fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
cnn feat(demo): add Self-Learning tab with 6 interactive training demos 2026-03-11 19:31:23 -04:00
code-reviews docs: reorganize into subfolders 2026-01-21 23:43:50 -05:00
dag docs(dag): add comprehensive Neural DAG Learning implementation plan 2025-12-29 22:15:55 +00:00
development feat(micro-hnsw-wasm): Add Neuromorphic HNSW v2.3 with SNN Integration (#40) 2025-12-01 22:30:15 -05:00
examples feat(musica): structure-first audio separation via dynamic mincut (#337) 2026-04-08 12:23:48 -05:00
gnn fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
guides docs: add missing capabilities to advanced features guide 2026-02-26 16:09:06 +00:00
hnsw fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
hooks feat(cli): Implement full hooks system in Rust CLI 2025-12-27 01:08:36 +00:00
implementation fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
integration fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
nervous-system docs: reorganize into subfolders 2026-01-21 23:43:50 -05:00
optimization fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
plans/subpolynomial-time-mincut chore(docs): Clean up and reorganize documentation structure 2025-12-25 19:39:44 +00:00
postgres fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
project-phases Clean up repository structure and organize documentation 2025-11-20 19:50:03 +00:00
publishing fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
research chore: gitignore .claude/worktrees + commit ruvllm research docs 2026-04-25 17:21:54 -04:00
reviews perf(ruvllm): optimize MoE routing with buffer reuse and optional metrics 2026-03-12 23:27:00 -04:00
ruvllm docs: reorganize into subfolders 2026-01-21 23:43:50 -05:00
rvagent feat(rvAgent): Complete DeepAgents Rust Conversion (ADR-093 → ADR-103) (#262) 2026-03-16 09:52:32 -04:00
sdk docs(sdk): add deep planning review for ruvector Python SDK 2026-04-25 20:28:54 -04:00
security feat(rvAgent): Complete DeepAgents Rust Conversion (ADR-093 → ADR-103) (#262) 2026-03-16 09:52:32 -04:00
sparse-inference feat: Add PowerInfer-style sparse inference engine with precision lanes (#106) 2026-01-04 23:40:31 -05:00
sql feat(postgres): Add ruvector-postgres extension with SIMD optimizations (#42) 2025-12-02 09:55:07 -05:00
testing Clean up repository structure and organize documentation 2025-11-20 19:50:03 +00:00
training fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
.gitkeep Clean up repository structure and organize documentation 2025-11-20 19:50:03 +00:00
.nojekyll fix: add .nojekyll to disable Jekyll processing 2026-03-11 17:53:19 -04:00
agi-container.md feat(rvAgent): Complete DeepAgents Rust Conversion (ADR-093 → ADR-103) (#262) 2026-03-16 09:52:32 -04:00
C2-shell-execution-hardening.md feat(rvAgent): Complete DeepAgents Rust Conversion (ADR-093 → ADR-103) (#262) 2026-03-16 09:52:32 -04:00
C8_RESULT_VALIDATION_IMPLEMENTATION.md feat(rvAgent): Complete DeepAgents Rust Conversion (ADR-093 → ADR-103) (#262) 2026-03-16 09:52:32 -04:00
consciousness-api.md feat(consciousness): SOTA IIT Φ, causal emergence, quantum collapse crate (ADR-131) 2026-03-31 16:36:25 -04:00
IMPLEMENTATION-C5.md feat(rvAgent): Complete DeepAgents Rust Conversion (ADR-093 → ADR-103) (#262) 2026-03-16 09:52:32 -04:00
index.html refactor: move CNN demo to docs/cnn/ for shorter URL 2026-03-11 17:52:13 -04:00
INDEX.md fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
moe-routing-optimization-analysis.md perf(ruvllm): optimize MoE routing with buffer reuse and optional metrics 2026-03-12 23:27:00 -04:00
README.md fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
REPO_STRUCTURE.md fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
research-openfang.md Add OpenFang project research document 2026-02-26 14:14:58 +00:00

RuVector Documentation

Complete documentation for RuVector, the high-performance Rust vector database with global scale capabilities.

📚 Documentation Structure

docs/
├── adr/                    # Architecture Decision Records
├── analysis/               # Research & analysis docs
├── api/                    # API references (Rust, Node.js, Cypher)
├── architecture/           # System design docs
├── benchmarks/             # Performance benchmarks & results
├── cloud-architecture/     # Cloud deployment guides
├── code-reviews/           # Code review documentation
├── dag/                    # DAG implementation
├── development/            # Developer guides
├── examples/               # SQL examples
├── gnn/                    # GNN/Graph implementation
├── guides/                 # User guides & tutorials
├── hnsw/                   # HNSW index documentation
├── hooks/                  # Hooks system documentation
├── implementation/         # Implementation details & summaries
├── integration/            # Integration guides
├── nervous-system/         # Nervous system architecture
├── optimization/           # Performance optimization guides
├── plans/                  # Implementation plans
├── postgres/               # PostgreSQL extension docs
├── project-phases/         # Development phases
├── publishing/             # NPM publishing guides
├── research/               # Research documentation
├── ruvllm/                 # RuVLLM documentation
├── security/               # Security audits & reports
├── sparse-inference/       # Sparse inference docs
├── sql/                    # SQL examples
├── testing/                # Testing documentation
└── training/               # Training & LoRA docs

Getting Started

Architecture & Design

API Reference

Performance & Benchmarks

Security

Implementation

Specialized Topics

Development

Research

  • research/ - Research documentation
    • cognitive-frontier/ - Cognitive frontier research
    • gnn-v2/ - GNN v2 research
    • latent-space/ - HNSW & attention research
    • mincut/ - MinCut algorithm research

For New Users

  1. Start with Getting Started Guide
  2. Try the Basic Tutorial
  3. Review API Documentation

For Cloud Deployment

  1. Read Architecture Overview
  2. Follow Deployment Guide
  3. Apply Performance Optimizations

For Contributors

  1. Read Contributing Guidelines
  2. Review Architecture Decisions
  3. Check Migration Guide

For Performance Tuning

  1. Review Optimization Guide
  2. Run Benchmarks
  3. Check Analysis

📊 Documentation Status

Category Directory Status
Getting Started guides/ Complete
Architecture architecture/, adr/ Complete
API Reference api/ Complete
Performance benchmarks/, optimization/, analysis/ Complete
Security security/ Complete
Implementation implementation/, integration/ Complete
Development development/, testing/ Complete
Research research/ 📚 Ongoing

Total Documentation: 460+ documents across 60+ directories


🔗 External Resources


Last Updated: 2026-02-26 | Version: 2.0.4 (core) / 0.1.100 (npm) | Status: Production Ready