AgentSkillsCN

@ruvector/wasm

为浏览器与边缘运行时提供 HNSW 搜索的 WebAssembly 向量数据库绑定。适用于用户需要在浏览器中进行客户端侧向量搜索、在边缘部署相似度搜索、使用 WASM 基础的嵌入,或在无需服务器的情况下实现便携式向量操作。

SKILL.md
--- frontmatter
name: "@ruvector/wasm"
description: "WebAssembly vector database bindings for browser and edge runtimes with HNSW search. Use when the user needs client-side vector search in the browser, edge-deployed similarity search, WASM-based embeddings, or portable vector operations without a server."

@ruvector/wasm

WebAssembly bindings for the RuVector vector database, enabling high-performance HNSW vector search in browsers, edge workers (Cloudflare Workers, Deno Deploy), and any WASM-compatible runtime.

Quick Command Reference

TaskCode
Initialize WASMawait init()
Create databaseconst db = new WasmVectorDB(384)
Insert vectordb.insert(id, vector, metadata)
Searchdb.search(queryVector, topK)
Build indexdb.buildIndex()
Serializeconst bytes = db.serialize()
Deserializeconst db = WasmVectorDB.deserialize(bytes)
Get countdb.count()

Installation

Hub install (recommended): npx ruvector@latest includes this package. Standalone: npx @ruvector/wasm@latest See Installation Guide for the full ecosystem.

Core API

Initialization

typescript
import init, { WasmVectorDB } from '@ruvector/wasm';

// Must initialize WASM module before use
await init();
const db = new WasmVectorDB(384); // dimensions

Constructor

typescript
const db = new WasmVectorDB(dimensions: number, metric?: string);
ParameterTypeDescriptionDefault
dimensionsnumberVector dimensionalityRequired
metricstring'cosine', 'euclidean', 'dot''cosine'

Insert Operations

typescript
// Single insert
db.insert(id: string, vector: Float32Array, metadata?: string);

// Example
db.insert('doc-1', new Float32Array([0.1, 0.2, 0.3]), JSON.stringify({ title: 'Hello' }));

// Batch insert
db.batchInsert(items: Array<[string, Float32Array, string?]>);

Search Operations

typescript
// Basic search
const results = db.search(query: Float32Array, topK: number): SearchResult[];

// Search with filter
const results = db.searchWithFilter(
  query: Float32Array,
  topK: number,
  filter: string  // JSON filter expression
): SearchResult[];

SearchResult (WASM):

typescript
interface SearchResult {
  id: string;
  score: number;
  metadata?: string; // JSON string
}

Serialization

typescript
// Serialize to bytes (for IndexedDB, localStorage, network transfer)
const bytes: Uint8Array = db.serialize();

// Deserialize from bytes
const db = WasmVectorDB.deserialize(bytes: Uint8Array);

Browser Usage

html
<script type="module">
  import init, { WasmVectorDB } from '@ruvector/wasm';

  async function main() {
    await init();
    const db = new WasmVectorDB(384);
    db.insert('doc-1', new Float32Array(384).fill(0.1));
    db.buildIndex();
    const results = db.search(new Float32Array(384).fill(0.2), 5);
    console.log(results);
  }
  main();
</script>

Common Patterns

Client-Side Semantic Search

typescript
import init, { WasmVectorDB } from '@ruvector/wasm';

await init();
const db = new WasmVectorDB(384);
// Load pre-computed embeddings
const embeddings = await fetch('/embeddings.json').then(r => r.json());
for (const item of embeddings) {
  db.insert(item.id, new Float32Array(item.vector), JSON.stringify(item.meta));
}
db.buildIndex();
// Search on user query
const queryVec = await embedText(userQuery);
const results = db.search(queryVec, 10);

Persist to IndexedDB

typescript
// Save
const bytes = db.serialize();
await idb.put('vectors', bytes);
// Restore
const stored = await idb.get('vectors');
const db = WasmVectorDB.deserialize(stored);

Edge Worker (Cloudflare Workers)

typescript
import init, { WasmVectorDB } from '@ruvector/wasm';

export default {
  async fetch(request) {
    await init();
    const db = WasmVectorDB.deserialize(await VECTORS_KV.get('index', 'arrayBuffer'));
    const query = await request.json();
    const results = db.search(new Float32Array(query.vector), 5);
    return Response.json(results);
  }
};

Key Options

FeatureValue
Bundle size~200KB gzipped
Search latency< 5ms (10k vectors)
Max vectors~100k (browser memory)
Supported runtimesBrowser, Cloudflare Workers, Deno, Bun
SerializationBinary (Uint8Array)

RAN DDD Context

Bounded Context: Data Infrastructure

References