Open coreBSD-3-Clause / Weaviate LicenseTested by Geekflare

Weaviate review

Vector database that stores objects and vectors, with built-in vectorizer modules and hybrid search

Data refreshedMethodologyHow we tested
Founder of Geekflare

Chandan Kumar is a founder of Geekflare. He is a technology enthusiast and entrepreneur who loves to help businesses and people around the world. Chandan has worked at BNP Paribas, Citibank, Deutsche Bank, Motorola, and HP. He’s got an in-depth understanding of business software and IT infrastructure.

Verdict

Weaviate builds the most into the database itself, with vectorizer modules, hybrid search, generative search and reranking, and it keeps OIDC, RBAC and audit logs in the free edition. The catch is the licence split in v1.40, which moved namespaces and some operations features into a paid Enterprise Edition, so check which features you need before you plan a self-hosted cluster.

Best for

Teams that want the database to call embedding and generative models for them

Not for

Teams that need every feature under one permissive licence

Pros

  • Vectorizer modules for local models and many API providers
  • Hybrid search, generative search and reranking in one API
  • OIDC login, RBAC and audit logs in the free edition
  • One shard per tenant, with idle tenants moved to disk or S3

Cons

  • Namespaces and some operations features need a paid licence key since v1.40
  • The default HNSW index is held in memory and quantization is off by default
  • Embedded mode is experimental and still runs a separate process
What people say
Ask Sparkian

Is Weaviate right for your project?

Describe what you need and AI will check the fit against this review.

Or try:

Weaviate features and capabilities

Vectorizer modules

Weaviate turns text and images into vectors at import and query time through local models such as Ollama, Transformers or Model2Vec, or through API providers, so your application does not call an embedding API itself.

Hybrid search

BM25 keyword search and vector search run in one query with filters, so exact terms such as product codes still match.

Generative search and reranking

A query can pass its results to an LLM or a reranker inside the same request, which keeps a simple RAG app to one API call.

Compression and disk-based indexes

Rotational, product, binary and scalar quantization shrink vectors, and the HFresh index keeps most data on disk, which lowers memory bills for large collections.

Multi-tenancy with tenant states

Each tenant gets its own shard, and inactive tenants can be kept on disk or offloaded to S3, so a SaaS product only pays memory for active customers.

Hybrid searchCombines keyword and vector search in one query
YesBM25 and vector search fused in one query
Built-in embeddingsTurns text into vectors for you, so you don't call an embedding API yourself
YesVectorizer modules for local models or API providers
QuantizationCompresses vectors to cut memory
YesRQ, PQ, BQ and SQ; off by default
Disk-based indexServes indexes bigger than memory from SSD
YesHFresh and flat indexes keep data on disk
Sharding and replicationSpreads data across nodes in the free version
YesShard self-recovery needs an Enterprise key
Multi-tenancyKeeps each customer's data apart in one database
YesTenants are free; namespaces need an Enterprise key
Embedded modeRuns inside your app with no separate server
PartlyExperimental; the client starts a Weaviate process

At a glance

Type
Vector database
Stack
Go
Licence terms
Most of the code is BSD-3-Clause and free, but since v1.40 the features in the wl folder, such as namespaces, shard self-recovery, deduplicated backups and expiring database user keys, need a paid Enterprise licence key.
SSO
Free edition
Roles and permissions
Free edition
Audit logs
Free edition

Free vs paid editions

What you get when you self-host, and what needs a paid plan.

Since v1.40, Weaviate ships one image with a BSD-3-Clause Community Edition and an Enterprise Edition that is switched on with a licence key. The Community Edition keeps RBAC, OIDC login, multi-tenancy, replication and the vectorizer modules, and the Enterprise Edition adds namespaces, shard self-recovery and deduplicated backups. Weaviate Cloud has a free plan, the Flex plan starts at $45 a month, and SAML single sign-on is only on the Premium plans.

Self-hosting Weaviate

Weaviate gives no minimum requirements, and its resource guide estimates memory at twice the size of all vectors, about 3 GB for one million 384-dimension vectors.

New cloud server to ready

6 s

Memory in use at idle

43 MB of 4 GB

Load and index 100,000 vectors

2 min 55 s, 1,243 MB peak

Recall@10

99.3%

Median search

4.9 ms

Slowest 5%

6.1 ms

Version tested

1.40.1 · Oct 19, 2026

  • Ready 6 seconds after docker compose up, with no vectorizer module since the vectors came with the data. The example compose file in the docs allows anonymous access, which is fine on a laptop but not on a server.
  • The batch import took 2 minutes 55 seconds, the slowest here, because the HNSW index is built as objects arrive. Searches worked as soon as the import ended.
  • It found 99.3% of the true top 10 at a median of 4.9 ms per search, the quickest of the five.
  • Memory peaked at 1.2 GB and stayed at 1.3 GB, since the default index lives in RAM and quantization is off unless you turn it on.
Code we ran
# Weaviate 1.40.1 from Docker Compose, no vectorizer module, ports on 127.0.0.1
import weaviate
from weaviate.classes.config import Configure, Property, DataType
from weaviate.util import generate_uuid5

client = weaviate.connect_to_local(host="127.0.0.1", port=8080, grpc_port=50051)
col = client.collections.create("Dbpedia",
    vector_config=Configure.Vectors.self_provided(),
    properties=[Property(name="title", data_type=DataType.TEXT),
                Property(name="row", data_type=DataType.INT)])

with col.batch.fixed_size(batch_size=1000) as batch:   # vectors, titles: the 100,000 rows
    for i, (vec, title) in enumerate(zip(vectors, titles)):
        batch.add_object(properties={"title": title, "row": i},
                         vector=vec.tolist(), uuid=generate_uuid5(i))

hits = col.query.near_vector(near_vector=query.tolist(), limit=10).objects
OutputPassed1.40.1 · 100,000 vectors · same top 5 as an exact search
Request: col.query.near_vector(near_vector=<embedding of the held-out "Apache Tomcat" article>, limit=5, return_metadata=MetadataQuery(distance=True)), distances rounded
[
  {"uuid": "010589f2-07c6-5bc2-b8e1-c5daa1ce0b93", "properties": {"row": 1004, "title": "Apache HTTP Server"}, "metadata": {"distance": 0.1209}},
  {"uuid": "7369d6ee-fc22-5185-8253-488767dec12b", "properties": {"row": 99963, "title": "Web container"}, "metadata": {"distance": 0.1388}},
  {"uuid": "842147bd-a1d6-598e-b1c3-935c2f7d93c8", "properties": {"row": 20767, "title": "Java servlet"}, "metadata": {"distance": 0.1433}},
  {"uuid": "74e40bac-f794-5b19-a8fd-83e0ce728c3d", "properties": {"row": 20383, "title": "JavaServer Pages"}, "metadata": {"distance": 0.1463}},
  {"uuid": "93511f28-6150-5b18-a2b1-8516b5b4d34a", "properties": {"title": "Apache Software Foundation", "row": 396}, "metadata": {"distance": 0.1474}}
]

What you can do with Weaviate

RAG without a separate embedding service

Let a vectorizer module embed documents at import and use generative search to answer questions in one call.

Search for a multi-tenant SaaS app

Give each customer a tenant and offload inactive ones to S3 to keep memory costs in line with active use.

Image and text search

Use a multimodal model such as CLIP to search a product or media library by text or by example image.