EdgeVec
The first WASM-native vector database. Binary quantization, metadata filtering, memory management — all in the browser.
EdgeVec is an embedded vector database built in Rust with first-class WebAssembly support. It brings server-grade vector database features to the browser: 32x memory reduction via binary quantization, metadata filtering, soft delete, persistence, and sub-millisecond search.
Why EdgeVec?
| Feature | EdgeVec | hnswlib-wasm | Pinecone |
|---|---|---|---|
| Vector Search | Yes | Yes | Yes |
| Binary Quantization | Yes (32x) | No | No |
| Metadata Filtering | Yes | No | Yes |
| SQL-like Queries | Yes | No | Yes |
| Memory Pressure API | Yes | No | No |
| Soft Delete | Yes | No | Yes |
| Persistence | Yes | No | Yes |
| Browser-native | Yes | Yes | No |
| No server required | Yes | Yes | No |
| Offline capable | Yes | Yes | No |
EdgeVec is the only WASM vector database with binary quantization and filtered search.
Try It Now
Build filters visually, see live results, copy-paste ready code:
Filter Playground - Interactive filter builder with live sandbox
- Visual filter construction
- 10 ready-to-use examples
- Live WASM execution
- Copy-paste code snippets (JS/TS/React)
Quick Start
import init, { EdgeVec } from 'edgevec';
await init();
// Create index (768D for embeddings like OpenAI, Cohere)
const db = new EdgeVec({ dimensions: 768 });
// Insert vectors with metadata (v0.6.0)
const vector = new Float32Array(768).map(() => Math.random());
const id = db.insertWithMetadata(vector, {
category: "books",
price: 29.99,
inStock: true
});
// Search with filter expression (v0.6.0)
const query = new Float32Array(768).map(() => Math.random());
const results = db.searchWithFilter(query, 'category = "books" AND price < 50', 10);
// Fast BQ search with rescoring — 32x less memory, 95% recall (v0.6.0)
const fastResults = db.searchBQ(query, 10);
// Monitor memory pressure (v0.6.0)
const pressure = db.getMemoryPressure();
if (pressure.level === 'warning') {
db.compact(); // Free deleted vectors
}
Interactive Demos
Try EdgeVec directly in your browser:
| Demo | Description |
|---|---|
| Filter Playground v0.7.0 | Visual filter builder with live sandbox (NEW!) |
| v0.6.0 Cyberpunk Demo | BQ vs F32 comparison, metadata filtering, memory pressure |
| Demo Hub | All demos in one place |
Run locally:
| Demo | Path |
|---|---|
| SIMD Benchmark | wasm/examples/simd_benchmark.html |
| Benchmark Dashboard | wasm/examples/benchmark-dashboard.html |
| Soft Delete Demo | wasm/examples/soft_delete.html |
| Main Demo | wasm/examples/index.html |
# Run demos locally
# Open http://localhost:8080/wasm/examples/index.html
Performance
EdgeVec v0.7.0 uses SIMD instructions for 2x+ faster vector operations on modern browsers.
Distance Calculation (Native Benchmark)
| Dimension | Dot Product | L2 Distance | Throughput |
|---|---|---|---|
| 128 | 55 ns | 66 ns | 2.3 Gelem/s |
| 384 | 188 ns | 184 ns | 2.1 Gelem/s |
| 768 | 374 ns | 358 ns | 2.1 Gelem/s |
| 1536 | 761 ns | 693 ns | 2.1 Gelem/s |
Search Latency (768D vectors, k=10)
| Scale | EdgeVec | Target | Status |
|---|---|---|---|
| 1k vectors | 380 us | <1 ms | 2.6x under |
| 10k vectors | 938 us | <1 ms | PASS |
Hamming Distance (Binary Quantization)
| Operation | Time | Throughput |
|---|---|---|
| 768-bit pair | 4.5 ns | 40 GiB/s |
| Batch 10k | 79 us | 127 Melem/s |
Browser Support
| Browser | SIMD | Performance |
|---|---|---|
| Chrome 91+ | YES | Full speed |
| Firefox 89+ | YES | Full speed |
| Safari 16.4+ | YES | Full speed (macOS) |
| Edge 91+ | YES | Full speed |
| iOS Safari | NO | Scalar fallback |
Note: iOS Safari doesn't support WASM SIMD. EdgeVec automatically uses scalar fallback, which is ~2x slower but still functional.
Bundle Size
| Package | Size (gzip) | Notes |
|---|---|---|
| edgevec | 217 KB | SIMD enabled (541 KB uncompressed) |
Database Features
Binary Quantization (v0.6.0)
32x memory reduction with minimal recall loss:
// BQ is auto-enabled for dimensions divisible by 8
const db = ;
// Raw BQ search (~85% recall, ~5x faster)
const bqResults = db.;
// BQ + rescore (~95% recall, ~3x faster)
const rescoredResults = db.;
| Mode | Memory (100k × 768D) | Speed | Recall@10 |
|---|---|---|---|
| F32 (baseline) | ~300 MB | 1x | 100% |
| BQ raw | ~10 MB | 5x | ~85% |
| BQ + rescore(5) | ~10 MB | 3x | ~95% |
Metadata Filtering (v0.6.0)
Insert vectors with metadata, search with SQL-like filter expressions:
// Insert with metadata
db.;
// Search with filter
db.;
db.; // Array membership
// Complex expressions
db.;
Operators: =, !=, >, <, >=, <=, AND, OR, NOT, ANY
Filter syntax documentation ->
Memory Pressure API (v0.6.0)
Monitor and control WASM heap usage:
const pressure = db.;
// { level: 'normal', usedBytes: 52428800, totalBytes: 268435456, usagePercent: 19.5 }
if
if
Soft Delete & Compaction
// O(1) soft delete
db.;
// Check status
console.log;
console.log;
// Reclaim space when needed
if
Persistence
// Save to IndexedDB (browser) or filesystem
await db.;
// Load existing database
const db = await ;
Scalar Quantization
const config = ;
config. = true; // Enable SQ8 quantization
// 3.6x memory reduction: 3.03 GB -> 832 MB at 1M vectors
Rust Usage
use ;
Documentation
| Document | Description |
|---|---|
| Tutorial | Getting started guide |
| Filter Syntax | Complete filter expression reference |
| Database Operations | CRUD operations guide |
| Performance Tuning | HNSW parameter optimization |
| Migration Guide | Migrating from hnswlib, FAISS, Pinecone |
| Comparison | When to use EdgeVec vs alternatives |
Limitations
EdgeVec is designed for client-side vector search. It is NOT suitable for:
- Billion-scale datasets — Browser memory limits apply (~1GB practical limit)
- Multi-user concurrent access — Single-user, single-tab design
- Distributed deployments — Runs locally only
For these use cases, consider Pinecone, Qdrant, or Weaviate.
Version History
- v0.7.0 — SIMD acceleration (2x+ speedup), First Community Contribution (@jsonMartin — 8.75x Hamming)
- v0.6.0 — Binary quantization (32x memory), metadata storage, memory pressure API
- v0.5.4 — iOS Safari compatibility fixes
- v0.5.3 — crates.io publishing fix (package size reduction)
- v0.5.2 — npm TypeScript compilation fix
- v0.5.0 — Metadata filtering with SQL-like syntax, Filter Playground demo
- v0.4.0 — Documentation sprint, benchmark dashboard, chaos testing
- v0.3.0 — Soft delete API, compaction, persistence format v3
- v0.2.0 — Scalar quantization (SQ8), SIMD optimization
- v0.1.0 — Initial release with HNSW indexing
Contributors
Thank you to everyone who has contributed to EdgeVec!
| Contributor | Contribution |
|---|---|
| @jsonMartin | SIMD Hamming distance (PR #4) — 8.75x speedup |
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Built with Rust + WebAssembly