{
    "meta": {
        "title": "D-Central — Self-Hosted Vector Databases for RAG",
        "description": "Self-hostable vector databases (14) by type, language, index types, native hybrid search, quantization, persistence and OSI-open-vs-source-available license — the storage layer of a self-hosted RAG stack.",
        "generated": "2026-07-17T18:21:40+00:00",
        "last_verified": "July 2026",
        "version": "1.0",
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "license_name": "CC BY 4.0",
        "source": "https://d-central.tech/self-hosted-vector-databases/",
        "record_count": 14,
        "provenance": "Each project's GitHub LICENSE file + official docs, reconciled adversarially. license_osi_open distinguishes genuine OSI open-source (Apache/BSD/MIT/PostgreSQL/AGPL) from source-available (SSPL/BSL/Elastic License/RSAL).",
        "disclaimer": "Feature sets and licenses change fast (several products relicensed recently); confirm the current LICENSE and docs before committing. \"Hybrid search\" here means native dense+sparse/BM25 fusion, not metadata filtering."
    },
    "rows": [
        {
            "db_id": "chroma",
            "name": "Chroma (ChromaDB)",
            "developer": "Chroma (chroma-core)",
            "db_type": "embedded-library",
            "primary_language": "Rust core (1.x rewrite) with Python/JS clients",
            "deployment": "in-process embedded (PersistentClient / in-memory) or a single self-hosted server (chroma run / Docker)",
            "index_types": "HNSW (SPANN in the distributed/Cloud engine)",
            "hybrid_search": "partial",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "none (stores full-precision vectors)",
            "distance_metrics": "cosine, L2, inner product (dot)",
            "persistence": "both",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": "Core is Apache-2.0 (cleanly OSI-open). Hybrid caveat, not license: stable self-hosted OSS does dense + metadata + document $contains/$regex full-text FILTER, not BM25 fusion; native sparse (BM25/SPLADE) + dense RRF 'Search() API' is newly announced and documented Cloud-first — OSS-GA unconfirmed.",
            "managed_cloud": true,
            "best_for": "fastest 'pip install and go' DX for a RAG prototype; embedded first, scales to a single server later",
            "source_url": "https://github.com/chroma-core/chroma",
            "confidence": "medium"
        },
        {
            "db_id": "lancedb",
            "name": "LanceDB",
            "developer": "LanceDB Inc. (built on the Lance columnar format)",
            "db_type": "embedded-library",
            "primary_language": "Rust (with Python, TypeScript, Rust, Go SDKs)",
            "deployment": "in-process embedded / serverless (opens a directory of Lance files, incl. on object storage); optional LanceDB Cloud/Enterprise",
            "index_types": "IVF-PQ, IVF-HNSW variants (HNSW), flat/brute-force; disk-based columnar Lance format",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "product (PQ), scalar (SQ), binary",
            "distance_metrics": "cosine, L2, dot",
            "persistence": "on-disk",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": "Embedded OSS core is Apache-2.0 and includes native FTS+vector hybrid; LanceDB Cloud/Enterprise are separate proprietary offerings (does not affect the OSS boolean).",
            "managed_cloud": true,
            "best_for": "embedded multimodal RAG at scale on a laptop or object storage — native Tantivy BM25 + vector hybrid with rerankers, no server to run",
            "source_url": "https://github.com/lancedb/lancedb",
            "confidence": "high"
        },
        {
            "db_id": "sqlite-vec",
            "name": "sqlite-vec",
            "developer": "Alex Garcia (asg017); backed by Mozilla Builders",
            "db_type": "embedded-library",
            "primary_language": "C (zero dependencies)",
            "deployment": "in-process embedded (a single loadable SQLite extension; runs anywhere SQLite/libSQL runs)",
            "index_types": "flat/brute-force KNN in stable v0.1.9 (2026-03-31); IVF ('experimental, not enabled') + DiskANN only in v0.1.10-alpha pre-releases; no HNSW. vec0 virtual tables with partition & metadata columns",
            "hybrid_search": "no",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "binary (bit vectors) + scalar (int8); float32 default",
            "distance_metrics": "L2, cosine, hamming (for bit vectors)",
            "persistence": "both",
            "license": "MIT OR Apache-2.0 (dual)",
            "license_osi_open": true,
            "license_note": null,
            "managed_cloud": false,
            "best_for": "lowest-friction option — add vector search to an existing SQLite/libSQL app with one extension load, no server; brute-force only at GA so best for small/medium corpora",
            "source_url": "https://github.com/asg017/sqlite-vec",
            "confidence": "high"
        },
        {
            "db_id": "txtai",
            "name": "txtai",
            "developer": "NeuML (David Mezzetti)",
            "db_type": "embedded-library",
            "primary_language": "Python",
            "deployment": "in-process embedded embeddings database (optional FastAPI service)",
            "index_types": "pluggable ANN backends: Faiss (default), HNSW (hnswlib), Annoy, NumPy brute-force, Torch, pgvector, sqlite-vec",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "scalar; product/scalar via the Faiss backend",
            "distance_metrics": "cosine (default, normalized), L2, inner product (backend-dependent)",
            "persistence": "both",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": null,
            "managed_cloud": false,
            "best_for": "all-in-one embedded RAG/semantic-search framework — native sparse(BM25)+dense hybrid, SQLite content store, pick your ANN backend",
            "source_url": "https://github.com/neuml/txtai",
            "confidence": "high"
        },
        {
            "db_id": "pgvector",
            "name": "pgvector",
            "developer": "Andrew Kane",
            "db_type": "database-extension",
            "primary_language": "C",
            "deployment": "Postgres extension (CREATE EXTENSION vector in any existing Postgres)",
            "index_types": "HNSW, IVFFlat, flat/exact",
            "hybrid_search": "no",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "scalar (halfvec/fp16), binary (bit), plus sparsevec type",
            "distance_metrics": "L2, cosine, inner product, L1, hamming, jaccard",
            "persistence": "on-disk",
            "license": "PostgreSQL License",
            "license_osi_open": true,
            "license_note": "PostgreSQL License is an OSI-approved permissive (MIT/BSD-style) license — cleanly open.",
            "managed_cloud": false,
            "best_for": "self-hosters who already run Postgres — keep vectors, metadata, and joins in one ACID database (native BM25 fusion is DIY via tsvector + manual RRF)",
            "source_url": "https://github.com/pgvector/pgvector",
            "confidence": "high"
        },
        {
            "db_id": "vectorchord",
            "name": "VectorChord (vchord)",
            "developer": "TensorChord (successor to pgvecto.rs)",
            "db_type": "database-extension",
            "primary_language": "Rust (pgrx)",
            "deployment": "Postgres extension (builds on pgvector's vector type; disk-friendly)",
            "index_types": "RaBitQ-based IVF, disk-friendly ANN (DiskANN-style); pairs with the vchord_bm25 companion extension for keyword ranking",
            "hybrid_search": "partial",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "binary (RaBitQ), scalar",
            "distance_metrics": "L2, cosine, dot",
            "persistence": "on-disk",
            "license": "AGPL-3.0-only OR Elastic-License-2.0 (dual)",
            "license_osi_open": true,
            "license_note": "VERIFIED dual AGPL-3.0 OR ELv2 (both VectorChord and the vchord_bm25 companion). license_osi_open=true only because AGPLv3 is genuinely selectable and copyleft-open — NOT permissive, and a real openness downgrade from its pgvecto.rs predecessor (Apache-2.0). The ELv2 option is source-available/non-OSI. Hybrid is 'partial': requires the separate vchord_bm25 extension + manual fusion.",
            "managed_cloud": true,
            "best_for": "Postgres users who need pgvector-compatible search at larger scale / lower cost via RaBitQ disk indexing — but note AGPL/ELv2 dual licensing, not the permissive Apache-2.0 of pgvecto.rs",
            "source_url": "https://github.com/tensorchord/VectorChord",
            "confidence": "high"
        },
        {
            "db_id": "qdrant",
            "name": "Qdrant",
            "developer": "Qdrant Solutions GmbH",
            "db_type": "single-binary-server",
            "primary_language": "Rust",
            "deployment": "single self-hosted binary / Docker; scales to a distributed cluster (Raft-based sharding + replication)",
            "index_types": "HNSW (payload-aware / filterable); flat/brute-force for exact search",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "multiple (scalar, product, binary)",
            "distance_metrics": "cosine, dot, euclidean (L2), manhattan",
            "persistence": "both (in-memory + on-disk / memmap)",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": "Core DB (incl. sparse+dense hybrid via the Query API) is Apache-2.0. Some cloud/enterprise features (e.g., RBAC) are proprietary but do not gate the OSS vector+hybrid engine.",
            "managed_cloud": true,
            "best_for": "purpose-built vector search with rich payload pre-filtering, native sparse(BM25/BM42)+dense fusion (RRF/DBSF), and an easy single-binary self-host",
            "source_url": "https://github.com/qdrant/qdrant",
            "confidence": "high"
        },
        {
            "db_id": "redis",
            "name": "Redis (Query Engine / Vector Sets)",
            "developer": "Redis Ltd. (originally Salvatore Sanfilippo / antirez)",
            "db_type": "single-binary-server",
            "primary_language": "C",
            "deployment": "single self-hosted in-memory server; scales horizontally via Redis Cluster (hash-slot sharding + replicas)",
            "index_types": "HNSW and FLAT (brute-force) — used by both the Query Engine vector index and the Vector Sets type",
            "hybrid_search": "partial",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "scalar int8 (Q8) and binary in the Vector Sets type; classic Query Engine FLOAT32/FLOAT16 vectors are unquantized",
            "distance_metrics": "cosine, L2 (euclidean), inner product (dot)",
            "persistence": "both (in-memory primary; RDB snapshot + AOF for durability)",
            "license": "Tri-license (Redis 8+): AGPLv3 OR RSALv2 OR SSPLv1",
            "license_osi_open": true,
            "license_note": "VERIFIED. Timeline: BSD-3 → (Mar 2024) dual RSALv2/SSPLv1 source-available, non-OSI → (May 2025, Redis 8.0) AGPLv3 re-added as a third option. license_osi_open=true because — unlike Elasticsearch — AGPLv3 covers the ACTUAL Redis 8 product you build/run, and vector search (Query Engine, formerly the RediSearch module, + the new Vector Sets type) is folded into Redis 8 core under the tri-license. RSALv2 and SSPLv1 remain non-OSI options; pre-8, vector search was a source-available module only. AGPL network-copyleft still applies.",
            "managed_cloud": true,
            "best_for": "ultra-low-latency in-memory vector search co-located with caching for real-time RAG",
            "source_url": "https://github.com/redis/redis",
            "confidence": "high"
        },
        {
            "db_id": "weaviate",
            "name": "Weaviate",
            "developer": "Weaviate B.V.",
            "db_type": "single-binary-server",
            "primary_language": "Go",
            "deployment": "single self-hosted binary / Docker; horizontally scalable cluster (Raft metadata, sharding + replication) on k8s",
            "index_types": "HNSW, flat/brute-force, dynamic (flat auto-upgrades to HNSW)",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "multiple (product PQ, binary BQ, scalar SQ, rotational RQ)",
            "distance_metrics": "cosine, dot, L2-squared, hamming, manhattan",
            "persistence": "both (LSM object store on-disk + in-memory HNSW graph)",
            "license": "BSD-3-Clause",
            "license_osi_open": true,
            "license_note": "Core is BSD-3-Clause (permissive, cleanly OSI-open) — genuinely open, no source-available trap on the DB core. Native BM25F+dense fusion (rankedFusion/relativeScoreFusion) built in.",
            "managed_cloud": true,
            "best_for": "developer-friendly native BM25F + dense hybrid search with built-in vectorizer modules",
            "source_url": "https://github.com/weaviate/weaviate",
            "confidence": "high"
        },
        {
            "db_id": "opensearch",
            "name": "OpenSearch (k-NN plugin)",
            "developer": "OpenSearch Software Foundation (Linux Foundation); forked from Elasticsearch by AWS",
            "db_type": "search-engine",
            "primary_language": "Java",
            "deployment": "self-hosted distributed JVM cluster (shards + replicas) on k8s/VMs",
            "index_types": "HNSW (Lucene / faiss / nmslib engines), IVF (faiss), flat/exact k-NN",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "multiple (byte/scalar, faiss product PQ, binary/BQ, FP16 disk-based)",
            "distance_metrics": "cosine (cosinesimil), L2, inner product, L1, L-infinity, hamming (binary)",
            "persistence": "on-disk (Lucene segments)",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": "Apache-2.0 and now under vendor-neutral Linux Foundation governance (OpenSearch Software Foundation, 2024). THE truly-open, permissive alternative to source-available Elasticsearch — the key sovereignty pick in the ES/OpenSearch split.",
            "managed_cloud": true,
            "best_for": "Apache-2.0 full search engine + native BM25 + kNN hybrid (normalization processor); the permissive Elasticsearch alternative",
            "source_url": "https://github.com/opensearch-project/OpenSearch",
            "confidence": "high"
        },
        {
            "db_id": "elasticsearch",
            "name": "Elasticsearch",
            "developer": "Elastic N.V.",
            "db_type": "search-engine",
            "primary_language": "Java",
            "deployment": "self-hosted distributed JVM cluster (shards + replicas) on k8s/VMs",
            "index_types": "HNSW (Lucene), flat/brute-force exact kNN, int8/int4/BBQ-quantized HNSW",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "multiple (int8 scalar, int4, BBQ better-binary-quantization)",
            "distance_metrics": "cosine, dot_product, L2 (euclidean), max_inner_product",
            "persistence": "on-disk (Lucene segments)",
            "license": "Elastic License 2.0 / SSPL 1.0 (all downloadable binaries) + AGPLv3 source-only option (added 8.16, 2024)",
            "license_osi_open": false,
            "license_note": "CORRECTED to FALSE (candidate had true). Every official downloadable distribution is Elastic License 2.0 / SSPL 1.0 — both source-available, NON-OSI. Elastic added an OSI-approved AGPLv3 option in 8.16 (announced 2024) but per Elastic's own licensing FAQ, 'Elastic does not currently offer any downloadable distribution that is covered by the AGPL' — AGPL applies to source code only, so you must self-compile to get an OSI-open build. Practical/mainstream posture remains source-available; contrast Redis 8 (AGPL covers the shipped product) and OpenSearch (clean Apache-2.0).",
            "managed_cloud": true,
            "best_for": "mature search engine with native RRF hybrid (BM25 + dense kNN + ELSER sparse) at enterprise scale — but source-available licensing; choose OpenSearch if you need a permissive OSI license",
            "source_url": "https://github.com/elastic/elasticsearch",
            "confidence": "medium"
        },
        {
            "db_id": "milvus",
            "name": "Milvus (incl. Milvus Lite embedded mode)",
            "developer": "Zilliz / LF AI & Data Foundation",
            "db_type": "distributed-cluster",
            "primary_language": "Go, C++ (Milvus Lite: Python wrapper over the C++ core)",
            "deployment": "k8s distributed cluster (disaggregated compute/storage); single-node Standalone via Docker; and Milvus Lite embedded local .db file via pymilvus — same API across all three",
            "index_types": "Full Milvus: HNSW, IVF (FLAT/SQ8/PQ), DiskANN, SCANN, FLAT, GPU (CAGRA/GPU_IVF), SPARSE_INVERTED_INDEX. Milvus Lite embedded: FLAT + IVF_FLAT (dense) and SPARSE_INVERTED_INDEX (sparse) ONLY — no HNSW/DiskANN locally",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "multiple (scalar SQ8, product PQ, binary) in full Milvus; limited in Lite",
            "distance_metrics": "cosine, L2 (euclidean), inner product (dot); Hamming/Jaccard for binary vectors",
            "persistence": "on-disk (object-storage-backed; indexes served in-memory/mmap). Milvus Lite: local file, memory-bound",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": "Apache-2.0 across full Milvus and Milvus Lite (same project/repo — the two research-pass rows were deduped into this one entry). Native dense+sparse+BM25 hybrid with RRF is confirmed even in Lite.",
            "managed_cloud": true,
            "best_for": "billion-scale distributed vector search with the widest index selection and GPU indexing; Milvus Lite gives the same API for embedded local prototyping that lifts to Standalone/Distributed/Zilliz Cloud unchanged",
            "source_url": "https://github.com/milvus-io/milvus",
            "confidence": "high"
        },
        {
            "db_id": "vespa",
            "name": "Vespa",
            "developer": "Vespa.ai (spun out of Yahoo!)",
            "db_type": "distributed-cluster",
            "primary_language": "Java, C++",
            "deployment": "self-hosted distributed cluster (stateless container + stateful content nodes); also Vespa Cloud",
            "index_types": "HNSW (real-time modifiable), multi-vector HNSW, flat/brute-force",
            "hybrid_search": "yes",
            "metadata_filtering": "yes (pre-filter)",
            "quantization": "multiple (int8, binary/hamming via tensor cell types)",
            "distance_metrics": "angular (cosine), euclidean, dotproduct, prenormalized-angular, hamming, geodegrees",
            "persistence": "both (on-disk with in-memory attributes/tensors)",
            "license": "Apache-2.0",
            "license_osi_open": true,
            "license_note": null,
            "managed_cloud": true,
            "best_for": "very large-scale hybrid retrieval (text + tensor in one ranking expression) with complex multi-phase ML ranking in a single engine",
            "source_url": "https://github.com/vespa-engine/vespa",
            "confidence": "high"
        },
        {
            "db_id": "faiss",
            "name": "FAISS (Facebook AI Similarity Search)",
            "developer": "Meta (Fundamental AI Research)",
            "db_type": "library-only",
            "primary_language": "C++ (with Python/NumPy bindings; some GPU-accelerated)",
            "deployment": "in-process library — NOT a database: no server, no metadata store, no query language; you manage persistence and IDs yourself",
            "index_types": "flat, IVF, IVF-PQ, HNSW, LSH, IVF-SQ, PQ/OPQ, IVF-HNSW composites",
            "hybrid_search": "no",
            "metadata_filtering": "limited",
            "quantization": "product (PQ/OPQ), scalar (SQ), binary",
            "distance_metrics": "L2, inner product (cosine via normalization)",
            "persistence": "both",
            "license": "MIT",
            "license_osi_open": true,
            "license_note": "Not a database — a raw ANN library. db_type intentionally 'library-only'; no persistence/metadata/serving layer of its own.",
            "managed_cloud": false,
            "best_for": "the raw ANN engine underneath many of the above — maximum index control when you'll build the storage/metadata/serving layer yourself",
            "source_url": "https://github.com/facebookresearch/faiss",
            "confidence": "high"
        }
    ]
}