benchmarks

altor-vec benchmark comparisons

These pages compare altor-vec with hosted vector databases, embedded engines, and browser-capable alternatives. The comparisons are intentionally honest: altor-vec does not win on backend scale or infrastructure features, but it does win when local UX, privacy, and small-bundle delivery are the primary constraints.

Browse all 10 benchmark pages

Pinecone

Managed vector database versus browser-native retrieval.

Weaviate

Feature-rich vector database versus lightweight client-side HNSW.

hnswlib-wasm

Two browser-capable HNSW options with different packaging tradeoffs.

USearch

Portable ANN engine versus an aggressively small browser-focused package.

Voyager

Browser-first vector search alternatives with different algorithm and packaging tradeoffs.

FAISS WASM

Research-grade ANN lineage versus a small production-friendly browser package.

ChromaDB

Application database for embeddings versus static browser retrieval.

Lance

Columnar/vector data platform tradeoffs versus browser-native ANN.

Milvus Lite

Embedded/server vector database tradeoffs versus fully in-browser retrieval.

Server-Side Vector Search

When local browser retrieval wins and when server-side retrieval clearly wins.

Summary table

ComparisonWhat is being comparedShort takeaway
PineconeManaged vector database versus browser-native retrieval.Choose Pinecone when search is part of your backend platform. Choose altor-vec when search is a frontend capability and the corpus is intentionally shipped to the browser.
WeaviateFeature-rich vector database versus lightweight client-side HNSW.Weaviate wins on backend capability and scale. altor-vec wins when you want vector retrieval to behave like a frontend dependency, not a service to operate.
hnswlib-wasmTwo browser-capable HNSW options with different packaging tradeoffs.If both reach your recall target, frontend ergonomics and payload size become the real decision factors. Benchmark with your own vectors before claiming a winner.
USearchPortable ANN engine versus an aggressively small browser-focused package.USearch is broader. altor-vec is narrower but easier to justify when your main constraint is shipping vector search inside a web app without dragging in a heavier stack.
VoyagerBrowser-first vector search alternatives with different algorithm and packaging tradeoffs.At this tier, benchmark on your own corpus. Developer experience, bundle budget, and how predictable the results feel in the browser often decide more than theory alone.
FAISS WASMResearch-grade ANN lineage versus a small production-friendly browser package.FAISS wins on breadth and lineage. altor-vec wins on browser pragmatism and small-package delivery.
ChromaDBApplication database for embeddings versus static browser retrieval.ChromaDB is stronger as an application data layer. altor-vec is stronger as a browser-delivered retrieval primitive.
LanceColumnar/vector data platform tradeoffs versus browser-native ANN.Lance is more compelling when you are building a vector-aware data stack. altor-vec is more compelling when you need a frontend feature with minimal overhead.
Milvus LiteEmbedded/server vector database tradeoffs versus fully in-browser retrieval.Milvus Lite is closer to embedded database infrastructure. altor-vec is closer to a frontend dependency. The right choice depends on which role you actually need.
Server-Side Vector SearchWhen local browser retrieval wins and when server-side retrieval clearly wins.Browser search wins when retrieval is part of the interface itself. Server search wins when retrieval is part of the infrastructure. Most teams should choose based on that boundary first, not on raw ANN marketing claims.

Benchmark methodology

These measurements reflect altor-vec running in a controlled browser environment. All queries execute against a pre-built HNSW index loaded from a JSON file — no embedding generation is included in the latency numbers. Embeddings are generated once at build time.

Test configuration

ParameterValue
Index size10,000 vectors
Vector dimensions384 (all-MiniLM-L6-v2)
HNSW M16
ef_construction200
ef_search50
k (neighbors returned)5
BrowserChrome 124, M2 MacBook Pro
Measurementp50/p95 of 1,000 consecutive queries

altor-vec latency results

MetricResult
p50 query latency0.4ms
p95 query latency0.8ms
p99 query latency1.2ms
Index load time (10K vectors)~35ms (JSON parse + WASM init)
Index memory footprint~17MB (10K × 384d)
WASM bundle size54KB gzipped

What these numbers mean for your app

A p50 of 0.4ms and p95 of 0.8ms means search is effectively instant from the user's perspective — human perception of "instantaneous" begins around 100ms. At sub-millisecond latency, the bottleneck shifts to rendering results, not computing them.

For comparison, network-dependent search adds a baseline of 20–150ms for the round-trip, before the server executes its own query. A cloud search call at 100ms total latency is 125× slower than an altor-vec local query at p95. Whether that matters depends on your product: for autocomplete-as-you-type, the difference is significant; for triggered search (user presses Enter), it is less critical.

The 17MB memory footprint for 10K vectors at 384 dimensions fits comfortably within modern browser memory budgets. For 100K vectors at 384 dimensions, expect approximately 170MB — viable for desktop, worth testing on mobile.

Run your own benchmark

import init, { WasmSearchEngine } from 'altor-vec';
await init();

const vectors = new Float32Array(N * DIM); // your embeddings
const engine = WasmSearchEngine.from_vectors(vectors, DIM, 16, 200, 50);
const query = new Float32Array(DIM); // your query embedding
const iterations = 1000;
const times = [];

for (let i = 0; i < iterations; i++) {
  const start = performance.now();
  engine.search(query, 5);
  times.push(performance.now() - start);
}

times.sort((a, b) => a - b);
console.log('p50:', times[Math.floor(iterations * 0.5)].toFixed(2) + 'ms');
console.log('p95:', times[Math.floor(iterations * 0.95)].toFixed(2) + 'ms');
console.log('p99:', times[Math.floor(iterations * 0.99)].toFixed(2) + 'ms');

Run this in your browser against your own index to get accurate numbers for your hardware, vector dimensions, and index size.

When to use altor-vec vs a server-side solution

ScenarioBest choice
Public docs/blog with <50K pagesaltor-vec (browser-native, zero cost)
Product catalog with <100K itemsaltor-vec (ship index as static asset)
Privacy-sensitive data (medical, legal)altor-vec (data never leaves device)
Real-time writes, billion-scale dataCloud vector database
Server-side RAG with private corpusFAISS, Qdrant, or Weaviate server-side