Skip to content

Commit fbb42f8

Browse files
committed
feat: vs/milvus and vs/qdrant comparison pages, fix homepage internal navigation, add llms.txt
1 parent 83d2aa6 commit fbb42f8

3 files changed

Lines changed: 128 additions & 0 deletions

File tree

index.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,20 @@ <h1 style="font-size:1.4em;margin:0 0 8px">altor-vec — Client-Side Vector Sear
136136
<p style="margin:0 0 16px;opacity:0.85">Sub-millisecond semantic search that runs entirely in the browser. 54KB gzipped WASM. No server, no API keys, no per-query billing.</p>
137137
<h2>altor-vec resources</h2>
138138
<p>Browse the blog hub and technical guides covering semantic search, browser RAG, HNSW internals, React integration, and client-side retrieval architecture.</p>
139+
<nav aria-label="altor-vec site sections" style="margin-bottom:16px;padding:12px;background:rgba(255,255,255,0.05);border-radius:8px">
140+
<strong>Browse:</strong>
141+
<a href="/vs/pinecone">vs Pinecone</a> ·
142+
<a href="/vs/weaviate">vs Weaviate</a> ·
143+
<a href="/vs/algolia">vs Algolia</a> ·
144+
<a href="/vs/milvus">vs Milvus</a> ·
145+
<a href="/vs/qdrant">vs Qdrant</a> ·
146+
<a href="/examples/document-search.html">Examples</a> ·
147+
<a href="/use-cases/">Use Cases</a> ·
148+
<a href="/frameworks/">Frameworks</a> ·
149+
<a href="/benchmarks/">Benchmarks</a> ·
150+
<a href="/blog/">Blog</a>
151+
</nav>
152+
139153
<nav aria-label="Crawler-visible blog links">
140154
<p><a href="/blog/">Visit the altor-vec blog index</a></p>
141155
<ul>

public/vs/milvus.html

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<!doctype html><html lang="en-US"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>altor-vec vs Milvus — Client-Side vs Distributed Vector Database</title><meta name="description" content="Compare altor-vec and Milvus: browser-native 54KB semantic search versus enterprise-grade distributed vector database. When to use each for JavaScript applications." /><meta name="keywords" content="altor-vec vs milvus, milvus alternative, client-side vector search, browser semantic search javascript" /><meta name="geo.region" content="US" /><link rel="canonical" href="https://altorlab.dev/vs/milvus.html" /><meta property="og:type" content="article" /><meta property="og:title" content="altor-vec vs Milvus — Client-Side vs Distributed Vector Database" /><meta property="og:description" content="Compare altor-vec and Milvus: browser-native semantic search versus enterprise distributed vector DB." /><meta property="og:url" content="https://altorlab.dev/vs/milvus.html" /><link rel="preconnect" href="https://fonts.googleapis.com" /><link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Plus+Jakarta+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
2+
<style>:root { --bg:#080a09; --surface:#0e1210; --surface-raised:#141a17; --border:#1e2823; --text:#edf0ee; --text-secondary:#8b9690; --muted:#556059; --altor:#6ee7b7; --altor-glow:rgba(110,231,183,.07); --code:#c3e88d; } * { box-sizing:border-box; } body { margin:0; background:var(--bg); color:var(--text); font-family:'Plus Jakarta Sans',system-ui,sans-serif; line-height:1.74; } a { color:var(--altor); text-decoration:none; } a:hover { text-decoration:underline; } main { max-width:920px; margin:0 auto; padding:30px 22px 78px; } .breadcrumbs { display:flex; gap:8px; flex-wrap:wrap; color:var(--muted); font-size:13px; } .mono, code, pre { font-family:'JetBrains Mono',monospace; } h1 { font-family:'Instrument Serif',serif; font-size:clamp(2rem,5vw,3.4rem); line-height:1.08; margin:.55rem 0 1rem; } h2 { margin-top:2.35rem; font-size:1.55rem; } p, li, td, th { color:var(--text-secondary); } pre { background:#0d1512; border:1px solid var(--border); border-radius:12px; padding:14px; overflow:auto; color:var(--code); line-height:1.6; } code { color:#d9f99d; } .table-wrap { overflow:auto; } table { width:100%; border-collapse:collapse; margin:14px 0; background:var(--surface-raised); border:1px solid var(--border); border-radius:12px; overflow:hidden; } th, td { padding:12px 14px; border-bottom:1px solid var(--border); text-align:left; vertical-align:top; } th { color:var(--text); background:#111814; } tr:last-child td { border-bottom:none; } .k { text-transform:uppercase; letter-spacing:.16em; color:var(--muted); font-size:11px; } .lead { font-size:1.03rem; } .install, .callout { background:var(--surface-raised); border:1px solid rgba(110,231,183,.2); border-radius:12px; padding:14px; } .callout { background:var(--altor-glow); } .footer-nav { display:flex; gap:14px; flex-wrap:wrap; margin-top:28px; font-size:14px; }</style>
3+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"TechArticle","headline":"altor-vec vs Milvus — Client-Side vs Distributed Vector Database","url":"https://altorlab.dev/vs/milvus.html","datePublished":"2026-04-14","dateModified":"2026-04-14","author":{"@type":"Organization","name":"AltorLab"},"publisher":{"@type":"Organization","name":"AltorLab"},"keywords":["milvus","altor-vec","vector search","browser","comparison"]}</script>
4+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Is Milvus better than altor-vec?","acceptedAnswer":{"@type":"Answer","text":"They serve different use cases. Milvus is a distributed vector database for server-side, high-scale workloads with billions of vectors. altor-vec runs entirely in the browser, requires no server, and is 54KB. For JavaScript applications needing client-side semantic search, altor-vec is the right choice. For shared, server-side vector infrastructure at scale, Milvus is better."}},{"@type":"Question","name":"Can altor-vec replace Milvus?","acceptedAnswer":{"@type":"Answer","text":"Only for browser-side use cases with public data and moderate corpus sizes. Milvus handles billions of vectors, concurrent writes, and enterprise-scale filtering. altor-vec is optimized for frontend semantic search without any backend dependency."}},{"@type":"Question","name":"Which is easier to set up?","acceptedAnswer":{"@type":"Answer","text":"altor-vec requires only npm install and works in the browser immediately. Milvus requires deploying a distributed system with multiple components (etcd, MinIO, and Milvus nodes) — typically a multi-hour setup with Kubernetes or Docker Compose."}}]}</script>
5+
</head><body><main>
6+
<nav class="breadcrumbs" aria-label="Breadcrumb"><a class="mono" href="/">Home</a><span>&gt;</span><a class="mono" href="/vs/">Comparisons</a><span>&gt;</span><span>altor-vec vs Milvus</span></nav>
7+
<p class="k">altor-vec vs milvus</p>
8+
<h1>altor-vec vs Milvus — Client-Side vs Distributed Vector Database</h1>
9+
<p class="lead">Milvus is an open-source distributed vector database built for billion-scale server-side workloads. altor-vec is a 54KB WASM library that runs semantic search entirely in the browser with no server required. They are different tools solving different problems — but both appear when developers search for "vector search for JavaScript."</p>
10+
11+
<div class="install"><strong>Install altor-vec:</strong> <code>npm install altor-vec</code> &nbsp;|&nbsp; No server, no configuration, no API keys.</div>
12+
13+
<h2>Feature comparison</h2>
14+
<div class="table-wrap"><table><thead><tr><th>Capability</th><th>altor-vec</th><th>Milvus</th></tr></thead><tbody>
15+
<tr><td>Runs in browser</td><td>Yes — 54KB WASM</td><td>No</td></tr>
16+
<tr><td>Server required</td><td>No</td><td>Yes — etcd, MinIO, Milvus nodes</td></tr>
17+
<tr><td>Setup time</td><td>&lt; 2 minutes</td><td>Hours (Docker Compose or Kubernetes)</td></tr>
18+
<tr><td>Max corpus size</td><td>~100K vectors (browser memory)</td><td>Billions of vectors</td></tr>
19+
<tr><td>Concurrent writes</td><td>Batch only (on deploy)</td><td>Continuous, high-throughput</td></tr>
20+
<tr><td>Filtering</td><td>Post-search metadata filter</td><td>Rich structured filtering at query time</td></tr>
21+
<tr><td>Cost</td><td>Zero API cost — compute is client-side</td><td>Infrastructure cost (self-hosted or Zilliz Cloud)</td></tr>
22+
<tr><td>Privacy</td><td>Data never leaves the browser</td><td>Server-side — data in your infrastructure</td></tr>
23+
<tr><td>TypeScript</td><td>Full type support</td><td>Python-first; JS SDK available</td></tr>
24+
<tr><td>Offline</td><td>Yes — works without network</td><td>No</td></tr>
25+
</tbody></table></div>
26+
27+
<h2>Code comparison</h2>
28+
<h3>altor-vec (browser, no server)</h3>
29+
<pre><code>import init, { WasmSearchEngine } from 'altor-vec';
30+
31+
await init();
32+
const engine = WasmSearchEngine.from_vectors(vectors, 384, 16, 200, 50);
33+
const results = JSON.parse(engine.search(queryVector, 5));</code></pre>
34+
35+
<h3>Milvus (server-side)</h3>
36+
<pre><code>import { MilvusClient } from '@zilliz/milvus2-sdk-node';
37+
38+
const client = new MilvusClient({ address: 'localhost:19530' });
39+
await client.search({
40+
collection_name: 'docs',
41+
vectors: [queryVector],
42+
limit: 5,
43+
output_fields: ['title', 'content'],
44+
});</code></pre>
45+
46+
<p>The code difference reflects the architecture: altor-vec initializes locally and queries locally. Milvus requires a running server, collection management, and network round-trips. For a public documentation search or product catalog, altor-vec ships 10x faster with zero operational cost. For a shared AI platform with millions of private vectors and concurrent writes from multiple services, Milvus is the right foundation.</p>
47+
48+
<h2>When to choose each</h2>
49+
<p><strong>Choose altor-vec when:</strong> You need semantic search in a JavaScript/TypeScript application, your corpus is public or device-local, you want zero backend infrastructure, and your dataset fits in browser memory (up to ~100K vectors).</p>
50+
<p><strong>Choose Milvus when:</strong> You need billion-scale vector storage, concurrent writes from multiple services, complex structured filtering at query time, or centralized vector infrastructure shared across multiple applications.</p>
51+
52+
<h2>The hybrid approach</h2>
53+
<p>Many teams use both: altor-vec for public documentation search (shipped as a static asset, works offline, zero cost), and Milvus for private knowledge bases, recommendation engines, or AI features that require centralized data with access control. The boundary is usually: can the browser hold this data? If yes, altor-vec. If not, Milvus.</p>
54+
55+
<div class="callout"><strong>Try it:</strong> <span class="mono">npm install altor-vec</span> — semantic search in your browser in under 5 minutes. No Kubernetes required.</div>
56+
<nav class="footer-nav"><a href="/">Homepage</a><a href="/vs/pinecone.html">vs Pinecone</a><a href="/vs/weaviate.html">vs Weaviate</a><a href="/vs/qdrant.html">vs Qdrant</a><a href="/blog/">Blog</a></nav>
57+
</main></body></html>

public/vs/qdrant.html

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<!doctype html><html lang="en-US"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>altor-vec vs Qdrant — Browser Vector Search vs Rust Vector Database</title><meta name="description" content="Compare altor-vec and Qdrant: 54KB browser WASM vector search versus Rust-powered vector database. Which is right for your JavaScript application?" /><meta name="keywords" content="altor-vec vs qdrant, qdrant alternative javascript, browser vector search, client-side semantic search" /><meta name="geo.region" content="US" /><link rel="canonical" href="https://altorlab.dev/vs/qdrant.html" /><meta property="og:type" content="article" /><meta property="og:title" content="altor-vec vs Qdrant — Browser Vector Search vs Rust Vector Database" /><meta property="og:description" content="altor-vec runs in the browser with no server. Qdrant is a high-performance Rust vector database for server workloads. Compare the two honestly." /><meta property="og:url" content="https://altorlab.dev/vs/qdrant.html" /><link rel="preconnect" href="https://fonts.googleapis.com" /><link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Plus+Jakarta+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
2+
<style>:root { --bg:#080a09; --surface:#0e1210; --surface-raised:#141a17; --border:#1e2823; --text:#edf0ee; --text-secondary:#8b9690; --muted:#556059; --altor:#6ee7b7; --altor-glow:rgba(110,231,183,.07); --code:#c3e88d; } * { box-sizing:border-box; } body { margin:0; background:var(--bg); color:var(--text); font-family:'Plus Jakarta Sans',system-ui,sans-serif; line-height:1.74; } a { color:var(--altor); text-decoration:none; } a:hover { text-decoration:underline; } main { max-width:920px; margin:0 auto; padding:30px 22px 78px; } .breadcrumbs { display:flex; gap:8px; flex-wrap:wrap; color:var(--muted); font-size:13px; } code, pre { font-family:'JetBrains Mono',monospace; } h1 { font-family:'Instrument Serif',serif; font-size:clamp(2rem,5vw,3.4rem); line-height:1.08; margin:.55rem 0 1rem; } h2 { margin-top:2.35rem; font-size:1.55rem; } p, li, td, th { color:var(--text-secondary); } pre { background:#0d1512; border:1px solid var(--border); border-radius:12px; padding:14px; overflow:auto; color:var(--code); } code { color:#d9f99d; } .table-wrap { overflow:auto; } table { width:100%; border-collapse:collapse; margin:14px 0; background:var(--surface-raised); border:1px solid var(--border); border-radius:12px; overflow:hidden; } th, td { padding:12px 14px; border-bottom:1px solid var(--border); text-align:left; vertical-align:top; } th { color:var(--text); background:#111814; } tr:last-child td { border-bottom:none; } .k { text-transform:uppercase; letter-spacing:.16em; color:var(--muted); font-size:11px; } .lead { font-size:1.03rem; } .install, .callout { background:var(--surface-raised); border:1px solid rgba(110,231,183,.2); border-radius:12px; padding:14px; } .callout { background:var(--altor-glow); } .footer-nav { display:flex; gap:14px; flex-wrap:wrap; margin-top:28px; font-size:14px; }</style>
3+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"TechArticle","headline":"altor-vec vs Qdrant — Browser Vector Search vs Rust Vector Database","url":"https://altorlab.dev/vs/qdrant.html","datePublished":"2026-04-14","dateModified":"2026-04-14","author":{"@type":"Organization","name":"AltorLab"},"publisher":{"@type":"Organization","name":"AltorLab"},"keywords":["qdrant","altor-vec","vector search","javascript","comparison"]}</script>
4+
<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Can altor-vec replace Qdrant?","acceptedAnswer":{"@type":"Answer","text":"For browser-side semantic search over public data, yes. altor-vec runs in the browser with no server, handles up to ~100K vectors, and delivers sub-millisecond queries. Qdrant is designed for server-side workloads with rich filtering, payload storage, and high-throughput writes. They are not direct substitutes."}},{"@type":"Question","name":"Is Qdrant available for JavaScript?","acceptedAnswer":{"@type":"Answer","text":"Qdrant has a JavaScript/TypeScript client for Node.js and server environments. It does not run in the browser. altor-vec is the only production-ready WASM vector search library that runs in the browser."}},{"@type":"Question","name":"Which is faster?","acceptedAnswer":{"@type":"Answer","text":"altor-vec delivers sub-millisecond query latency from the browser — no network round-trip. Qdrant is extremely fast server-side but adds network latency. For browser applications, altor-vec wins on perceived speed."}}]}</script>
5+
</head><body><main>
6+
<nav class="breadcrumbs" aria-label="Breadcrumb"><a href="/">Home</a><span>&gt;</span><a href="/vs/">Comparisons</a><span>&gt;</span><span>altor-vec vs Qdrant</span></nav>
7+
<p class="k">altor-vec vs qdrant</p>
8+
<h1>altor-vec vs Qdrant — Browser WASM vs Rust Vector Database</h1>
9+
<p class="lead">Qdrant is a high-performance vector database written in Rust, designed for server-side retrieval with payload filtering and production-grade reliability. altor-vec is a 54KB WASM library that runs HNSW vector search entirely in the browser. Both use HNSW indexing — but they serve fundamentally different deployment contexts.</p>
10+
11+
<div class="install"><strong>altor-vec:</strong> <code>npm install altor-vec</code> — works in the browser immediately. No Qdrant server, no Docker, no config.</div>
12+
13+
<h2>Feature comparison</h2>
14+
<div class="table-wrap"><table><thead><tr><th>Capability</th><th>altor-vec</th><th>Qdrant</th></tr></thead><tbody>
15+
<tr><td>Indexing algorithm</td><td>HNSW (WASM)</td><td>HNSW (Rust)</td></tr>
16+
<tr><td>Deployment</td><td>Browser (client-side)</td><td>Server (Docker, Kubernetes, Qdrant Cloud)</td></tr>
17+
<tr><td>Network required</td><td>No — runs offline</td><td>Yes — HTTP/gRPC to Qdrant server</td></tr>
18+
<tr><td>Query latency</td><td>Sub-millisecond (no network)</td><td>1-10ms + network round-trip</td></tr>
19+
<tr><td>Bundle size</td><td>54KB gzipped</td><td>Full server binary</td></tr>
20+
<tr><td>Payload filtering</td><td>Basic post-search filter</td><td>Rich structured filtering at index time</td></tr>
21+
<tr><td>Max vectors</td><td>~100K (browser memory)</td><td>Billions (distributed)</td></tr>
22+
<tr><td>JavaScript support</td><td>Native (WASM)</td><td>Node.js client (not browser)</td></tr>
23+
<tr><td>Privacy</td><td>Data stays in browser</td><td>Data on your server</td></tr>
24+
<tr><td>Cost</td><td>Zero API/infra cost</td><td>Self-hosted or Qdrant Cloud pricing</td></tr>
25+
</tbody></table></div>
26+
27+
<h2>Code comparison</h2>
28+
<h3>altor-vec (browser, no server)</h3>
29+
<pre><code>import init, { WasmSearchEngine } from 'altor-vec';
30+
31+
await init();
32+
const engine = WasmSearchEngine.from_vectors(embeddedVectors, 384, 16, 200, 50);
33+
const hits = JSON.parse(engine.search(queryEmbedding, 5));
34+
// Results in &lt;1ms, no network</code></pre>
35+
36+
<h3>Qdrant (Node.js, server required)</h3>
37+
<pre><code>import { QdrantClient } from '@qdrant/js-client-rest';
38+
39+
const client = new QdrantClient({ url: 'http://localhost:6333' });
40+
const results = await client.search('my_collection', {
41+
vector: queryEmbedding,
42+
limit: 5,
43+
filter: { must: [{ key: 'category', match: { value: 'docs' } }] },
44+
});</code></pre>
45+
46+
<p>Both use HNSW under the hood, but the deployment model is completely different. altor-vec bundles the index as a WASM asset that ships with your frontend. Qdrant runs as a persistent service that your application calls over HTTP or gRPC. For search that needs to work offline, stay in the browser, or avoid backend infrastructure costs, altor-vec is the right architecture. For search that needs to be shared across services, requires complex filtering, or must handle continuous writes, Qdrant fits better.</p>
47+
48+
<h2>The HNSW connection</h2>
49+
<p>Both altor-vec and Qdrant use HNSW (Hierarchical Navigable Small World) indexing, which is why they appear together in searches for "best vector search library." HNSW gives near-perfect recall with sub-linear query time. The difference is where the graph lives: in your browser's WASM runtime with altor-vec, or in a Rust process on your server with Qdrant.</p>
50+
51+
<h2>When to choose each</h2>
52+
<p><strong>Choose altor-vec when:</strong> your search is a frontend feature, data is public or device-local, you want offline capability, or you need zero-cost vector search without infrastructure management.</p>
53+
<p><strong>Choose Qdrant when:</strong> you need server-side vector retrieval, rich payload filtering (category, date range, metadata), billions of vectors, or search as shared infrastructure across multiple services.</p>
54+
55+
<div class="callout"><strong>Get started with altor-vec:</strong> <code>npm install altor-vec</code> — HNSW in your browser, sub-millisecond queries, 54KB. No Qdrant server needed.</div>
56+
<nav class="footer-nav"><a href="/">Homepage</a><a href="/vs/pinecone.html">vs Pinecone</a><a href="/vs/milvus.html">vs Milvus</a><a href="/vs/weaviate.html">vs Weaviate</a><a href="/blog/">Blog</a></nav>
57+
</main></body></html>

0 commit comments

Comments
 (0)