Overview
Several Rust crates in the ruvector monorepo have Node.js bindings ready but haven't been published to npm yet. This issue tracks the work needed to create npm packages with multi-platform native bindings for all major operating systems.
Current State
✅ Already Published to npm
| Rust Crate |
npm Package |
Platforms |
ruvector-core |
@ruvector/core |
linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64 |
ruvector-node |
@ruvector/node-* |
5 platform packages |
ruvector-gnn |
@ruvector/gnn |
5 platform packages |
ruvector-gnn-node |
@ruvector/gnn-* |
5 platform packages |
ruvector-graph-node |
@ruvector/graph-node |
linux-x64 (partial) |
❌ Missing npm Packages
Priority 1: Node.js Native Bindings (NAPI-RS)
| Rust Crate |
Target npm Package |
Description |
Has Node Crate |
ruvector-tiny-dancer-core |
@ruvector/tiny-dancer |
Tracing & observability system |
✅ ruvector-tiny-dancer-node |
ruvector-router-core |
@ruvector/router |
AI agent routing & orchestration |
✅ ruvector-router-ffi |
ruvector-graph-node |
@ruvector/graph-node-* |
Graph database (missing platforms) |
✅ Exists |
Priority 2: WASM Packages (Browser/Universal)
| Rust Crate |
Target npm Package |
Description |
ruvector-wasm |
@ruvector/wasm |
Core vector DB WASM fallback |
ruvector-gnn-wasm |
@ruvector/gnn-wasm |
GNN WASM fallback |
ruvector-graph-wasm |
@ruvector/graph-wasm |
Graph DB WASM fallback |
ruvector-tiny-dancer-wasm |
@ruvector/tiny-dancer-wasm |
Tracing WASM |
ruvector-router-wasm |
@ruvector/router-wasm |
Router WASM |
Priority 3: Server/Distributed Components
| Rust Crate |
Target npm Package |
Description |
ruvector-cluster |
@ruvector/cluster |
Distributed clustering |
ruvector-raft |
@ruvector/raft |
Raft consensus |
ruvector-replication |
@ruvector/replication |
Data replication |
ruvector-server |
@ruvector/server |
Server mode |
Target Platforms
All native packages should support these platforms:
| Platform |
Architecture |
Target Triple |
GitHub Runner |
| Linux |
x64 |
x86_64-unknown-linux-gnu |
ubuntu-latest |
| Linux |
ARM64 |
aarch64-unknown-linux-gnu |
ubuntu-latest (cross) |
| macOS |
Intel x64 |
x86_64-apple-darwin |
macos-13 |
| macOS |
Apple Silicon |
aarch64-apple-darwin |
macos-14 |
| Windows |
x64 |
x86_64-pc-windows-msvc |
windows-latest |
Implementation Tasks
Phase 1: @ruvector/tiny-dancer (Tracing & Observability)
Phase 2: @ruvector/router (AI Agent Router)
Phase 3: @ruvector/graph-node (Complete Multi-Platform)
Phase 4: WASM Packages
Phase 5: Server/Distributed Components
GitHub Actions Workflow Template
Each package needs a workflow like this:
name: Build @ruvector/[package-name]
on:
push:
paths:
- 'crates/ruvector-[package]-node/**'
- 'npm/packages/[package]/**'
workflow_dispatch:
jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
npm-dir: linux-x64-gnu
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
npm-dir: linux-arm64-gnu
- os: macos-13
target: x86_64-apple-darwin
npm-dir: darwin-x64
- os: macos-14
target: aarch64-apple-darwin
npm-dir: darwin-arm64
- os: windows-latest
target: x86_64-pc-windows-msvc
npm-dir: win32-x64-msvc
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- run: cargo build --release -p ruvector-[package]-node --target ${{ matrix.target }}
- run: npm publish
working-directory: crates/ruvector-[package]-node/npm/${{ matrix.npm-dir }}
npm Package Structure
Each package should follow this structure:
npm/packages/[package]/
├── package.json # Main package with optionalDependencies
├── index.js # Platform detection & loading
├── index.d.ts # TypeScript definitions
├── README.md # Documentation
└── test.js # Integration tests
crates/ruvector-[package]-node/
├── Cargo.toml
├── src/lib.rs # NAPI-RS bindings
└── npm/
├── linux-x64-gnu/
│ └── package.json
├── linux-arm64-gnu/
│ └── package.json
├── darwin-x64/
│ └── package.json
├── darwin-arm64/
│ └── package.json
└── win32-x64-msvc/
└── package.json
CLI Integration
Update npx ruvector install to include all new packages:
const availablePackages = {
// ... existing packages ...
'tiny-dancer': {
name: '@ruvector/tiny-dancer',
description: 'Tracing and observability for vector operations',
category: 'core'
},
'router': {
name: '@ruvector/router',
description: 'AI agent routing and orchestration',
category: 'core'
},
// WASM fallbacks
'wasm': {
name: '@ruvector/wasm',
description: 'WASM fallback for core (browser/universal)',
category: 'wasm'
},
// ... etc
};
Success Criteria
Related Issues
- Depends on: Rust crates being stable and tested
- Blocks: Full multi-platform support for ruvector ecosystem
Labels
enhancement, npm, multi-platform, napi-rs, wasm
Overview
Several Rust crates in the ruvector monorepo have Node.js bindings ready but haven't been published to npm yet. This issue tracks the work needed to create npm packages with multi-platform native bindings for all major operating systems.
Current State
✅ Already Published to npm
ruvector-core@ruvector/coreruvector-node@ruvector/node-*ruvector-gnn@ruvector/gnnruvector-gnn-node@ruvector/gnn-*ruvector-graph-node@ruvector/graph-node❌ Missing npm Packages
Priority 1: Node.js Native Bindings (NAPI-RS)
ruvector-tiny-dancer-core@ruvector/tiny-dancerruvector-tiny-dancer-noderuvector-router-core@ruvector/routerruvector-router-ffiruvector-graph-node@ruvector/graph-node-*Priority 2: WASM Packages (Browser/Universal)
ruvector-wasm@ruvector/wasmruvector-gnn-wasm@ruvector/gnn-wasmruvector-graph-wasm@ruvector/graph-wasmruvector-tiny-dancer-wasm@ruvector/tiny-dancer-wasmruvector-router-wasm@ruvector/router-wasmPriority 3: Server/Distributed Components
ruvector-cluster@ruvector/clusterruvector-raft@ruvector/raftruvector-replication@ruvector/replicationruvector-server@ruvector/serverTarget Platforms
All native packages should support these platforms:
x86_64-unknown-linux-gnuubuntu-latestaarch64-unknown-linux-gnuubuntu-latest(cross)x86_64-apple-darwinmacos-13aarch64-apple-darwinmacos-14x86_64-pc-windows-msvcwindows-latestImplementation Tasks
Phase 1: @ruvector/tiny-dancer (Tracing & Observability)
npm/packages/tiny-dancer/directory structureindex.jswith platform detection and fallbackindex.d.ts@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.github/workflows/build-tiny-dancer.ymlnpx ruvector installcommandPhase 2: @ruvector/router (AI Agent Router)
npm/packages/router/directory structureindex.jswith platform detectionindex.d.ts@ruvector/router-linux-x64-gnu@ruvector/router-linux-arm64-gnu@ruvector/router-darwin-x64@ruvector/router-darwin-arm64@ruvector/router-win32-x64-msvc.github/workflows/build-router.ymlnpx ruvector installcommandPhase 3: @ruvector/graph-node (Complete Multi-Platform)
@ruvector/graph-node-linux-arm64-gnu@ruvector/graph-node-darwin-x64@ruvector/graph-node-darwin-arm64@ruvector/graph-node-win32-x64-msvc@ruvector/graph-nodeto auto-detect platformPhase 4: WASM Packages
@ruvector/wasm@ruvector/gnn-wasm@ruvector/graph-wasm@ruvector/tiny-dancer-wasm@ruvector/router-wasmPhase 5: Server/Distributed Components
ruvector-clusterruvector-serverGitHub Actions Workflow Template
Each package needs a workflow like this:
npm Package Structure
Each package should follow this structure:
CLI Integration
Update
npx ruvector installto include all new packages:Success Criteria
npx ruvector installlists and installs all packagesRelated Issues
Labels
enhancement,npm,multi-platform,napi-rs,wasm