Weaviate vs Milvus

Weaviate suits teams that want hybrid search, built-in vectorizers and a single server they can run with a modest platform team. Milvus suits teams that need a disaggregated, Kubernetes-native cluster for very large collections and can staff its dependencies.

On this page

Weaviate vs Milvus: when each one fits large vector workloads

Choose Weaviate when your retrieval workload needs hybrid search, import-time vectorization and a single query interface, and the collection sizes your team will run fit a server that your own Kubernetes or Docker skills can operate. Choose Milvus when the primary problem is very large vector collections, GPU-accelerated indexing or a disaggregated cluster where storage, compute and the write-ahead log scale separately. Both are Apache-2.0 or BSD-3-Clause at the core, so the license alone rarely decides the choice. The decision turns on four questions: how large your collections will get, whether you need BM25 and hybrid search and vectorizer modules inside the database, what Kubernetes and object storage skills your team already has, and where each project's license boundary sits.

Start with collection size and the operating model. Milvus documents a distributed deployment built from stateless proxies, a coordinator, worker nodes, etcd for metadata, object storage such as MinIO, S3 or Azure Blob, and a write-ahead log that can be Woodpecker, Kafka or Pulsar. That is a deliberate fit for large scale, but it means your team owns several stateful dependencies. Weaviate's replication is leaderless, disabled by default and enabled per collection with a replication factor, and consistency is tuned at query time with ONE, QUORUM or ALL. Check how your replication factor, shard layout and consistency level affect latency and recovery for your largest collection before you pick a topology. Confirm the current hardware sizing with each vendor's documentation, since the facts available to us do not give sizing figures.

Check the license boundary and the proof you will need. Weaviate's BSD-3-Clause license covers code outside the repository's wl directory, while code inside wl requires a separate Weaviate enterprise license and features are enabled by a license key. Milvus is Apache-2.0 throughout the material we reviewed, with the LF AI and Data Foundation governance. Ask your legal team which Weaviate features you need and whether they fall inside wl, and ask Milvus's commercial partners what managed or support options exist. Authentication is covered in both: Weaviate offers API key, OIDC and RBAC, while Milvus lists authentication, TLS and role-based access control. Confirm that the specific controls your auditors expect are present in the version you deploy.

Which platform fits which scenario

This table maps common scenarios to the platform that usually fits better and the condition that drives the choice. Read each row as a starting point, then confirm scale limits, replication behavior and operating effort with a load test in your own environment before you commit.

ScenarioBetter fitCondition that drives the choice
A single-team RAG service with a modest corpusWeaviateWeaviate runs as a single server under Docker Compose, and its built-in hybrid search and vectorizers reduce the number of moving parts a small team must run. This holds while the corpus and query load stay within what your own load test confirms.
A multi-tenant SaaS productWeaviate or Milvus, depending on tenant countWeaviate offers per-collection multi-tenancy and RBAC, which suits application-level tenant isolation. Milvus offers multi-tenancy at database, collection, partition or partition key level, which may suit very large tenant counts. Test isolation and tenant creation behavior under your expected load.
A very large corpus with heavy write volumeMilvusMilvus separates stateless proxies, coordinators and worker nodes, and uses an external write-ahead log such as Woodpecker, Kafka or Pulsar. This design targets large distributed clusters, but it also adds components to size and monitor. Confirm throughput and scale limits with your own workload.
A team without Kubernetes staffWeaviateWeaviate documents Docker Compose as an installation path, while Milvus Distributed is a Kubernetes-native cluster. Milvus Standalone on one machine is an option, but large-scale Milvus assumes a platform team able to run etcd, object storage and a message log.
A team that wants to vectorize at import timeWeaviateWeaviate can vectorize data at import through integrated providers such as OpenAI, Cohere and Hugging Face. Milvus expects embeddings to be computed by your pipeline. Confirm which providers your data residency rules permit and whether a self-hosted model is required.
A team that needs replication with tunable consistencyWeaviate or Milvus, depending on designWeaviate replication is leaderless, disabled by default and enabled per collection with a replication factor, with ONE, QUORUM and ALL levels set at query time. Milvus relies on its disaggregated storage design. Confirm failover and recovery behavior in your own environment.
A team that needs GPU indexingMilvusMilvus lists GPU indexing with NVIDIA CAGRA among its index options. This matters only if you have NVIDIA GPU capacity to dedicate to indexing. Weaviate's index options should be checked against your hardware plan.
A team that wants one query interface for keyword, vector and hybrid searchWeaviateWeaviate combines vector similarity, BM25 filtering, hybrid search and reranking in one query interface. Milvus also supports BM25, sparse and hybrid search, so this favors Weaviate mainly when you want the most integrated single API.

How Weaviate and Milvus are built and deployed

Weaviate and Milvus make very different demands on the team that runs them. One is a single server process you can start with Docker or Kubernetes, the other a set of cooperating services with their own metadata, storage and log layers. The cards below set out what each choice means for patching, backups and the number of services someone must monitor.

Weaviate deployment options

Weaviate documents three routes: Docker, Kubernetes and the managed Weaviate Cloud. Self-hosting on Docker or Kubernetes keeps patching, backups and node sizing with your team, while the managed service moves those tasks to the vendor under its own terms. Before choosing, confirm how your organization plans to handle upgrades across the server and its client libraries, and which backup method your platform team will own.

Milvus's three modes

Milvus runs as Milvus Lite inside a Python process, as Standalone on a single machine, or as Distributed on Kubernetes. Each mode moves more operational work onto your team. Lite suits development, Standalone suits a single node, and Distributed is the path for large clusters. Ask which mode you will run in production and whether the upgrade path between modes has been tested in your environment.

Milvus's disaggregated dependencies

Milvus separates stateless proxies, coordinators and worker nodes from storage. Metadata lives in etcd, data objects sit in MinIO, S3 or Azure Blob, and writes pass through a write-ahead log built on Woodpecker, Kafka or Pulsar. Each dependency needs its own backup, monitoring and failure plan. Count these services during planning, because a cluster outage can start in any of them and the team must be able to diagnose it.

Weaviate leaderless replication

Weaviate replication is disabled by default and is enabled per collection with a replication factor. The design is leaderless, and reads and writes take tunable ONE, QUORUM or ALL consistency levels set at query time. For operators, this means replication policy is a per-collection decision that must be reviewed as data grows. Confirm which collections need replicas, what consistency each application expects, and how node failures will be tested before go-live.

Capabilities side by side, from the documented facts

This table lines up Weaviate and Milvus on the capabilities their documentation describes, so you can see where each one is specified and where you must test it yourself. Read the cells as documented claims, not as measured performance. Where a row shows a confirmation note, the supplied documentation does not settle the point and you should verify it with the vendor or in a load test.

CapabilityWeaviateMilvus
LicenseBSD-3-Clause for code outside the wl directory; code in wl and enterprise features need a Weaviate enterprise license and keyApache-2.0, under the LF AI and Data Foundation with Zilliz as primary contributor
LanguageGoGo and C++
Deployment modesDocker, Kubernetes (Helm chart) and managed Weaviate Cloud; AWS and GCP marketplace listingsMilvus Lite (Python library), Standalone (single machine) and Distributed (Kubernetes-native cluster)
DependenciesSingle server product per the README; confirm external components needed for your chosen cluster layoutetcd for metadata, MinIO, S3 or Azure Blob for objects, and Woodpecker, Kafka or Pulsar as the write-ahead log
Horizontal scalingListed as a built-in feature; confirm node-count behavior and limits with Weaviate for your target sizeDisaggregated storage and compute with stateless proxies, coordinator and worker nodes; confirm behavior at your target size in a test
Replication and consistencyLeaderless, off by default, enabled per collection with a replication factor; ONE, QUORUM and ALL set at query timeReplication behavior at large cluster sizes is not covered by the supplied documentation; confirm with Milvus or Zilliz
Vectorizer modulesIntegrated providers such as OpenAI, Cohere and Hugging Face at import time, or pre-computed embeddingsNot covered in the supplied facts; confirm which embedding functions run server-side versus in your client
BM25, hybrid and sparse searchBM25 keyword filtering, hybrid search and reranking in one query interfaceBM25 full-text search, sparse vectors and hybrid dense plus sparse search
Index typesQuantization and compression are listed; confirm the index types available in your versionHNSW, IVF, FLAT, SCANN and DiskANN, GPU indexing with NVIDIA CAGRA, quantization and memory-mapped files
Multi-tenancyBuilt-in feature, configured per collection; confirm tenant limits for your workloadDatabase, collection, partition or partition key level
Authentication and RBACAPI key, OIDC and anonymous access (discouraged outside development); custom roles through RBACAuthentication, TLS encryption and role-based access control
APIs and clientsREST, gRPC and GraphQL; official clients for Python, JavaScript/TypeScript, Java, Go and C#/.NETConfirm the full SDK list and API surface in the Milvus documentation for your client language
Managed optionsWeaviate CloudZilliz Cloud with Serverless, Dedicated and bring-your-own-cloud options

What the license and editions cover for each platform

Weaviate's license splits the repository in two. Source code outside the wl directory is licensed under BSD-3-Clause, according to the Weaviate LICENSE file. Code inside wl is available only under a separate Weaviate enterprise license, and enterprise features are enabled by a license key. Your legal review should therefore cover both the directory boundary and the key mechanism.

  • Open-source scope: Everything outside wl is BSD-3-Clause. Ask counsel to confirm that the images, Helm charts and binaries you deploy are built from those files only.
  • Enterprise code boundary: Any capability that depends on code in wl needs an enterprise agreement. Ask Weaviate to confirm in writing which of your planned features sit in that directory.
  • License key handling: Ask how keys are issued, renewed and stored, and what happens when a key expires. Confirm whether an expired key blocks only new enterprise feature use or affects running service.
  • Feature mapping: The LICENSE file does not give a feature-by-feature edition list. Request that mapping for replication, RBAC, backups and multi-tenancy before you commit to a design.
  • Release line scope: The latest release is v1.40.1, published October 13, 2026, with maintenance on the 1.39 and 1.38 lines the same week. Confirm that the terms apply the same way on each line you may run.

Before procurement signs, get the enterprise feature list and key terms in writing and tie them to the release line you will deploy.

What drives the running cost of each platform

Running either Weaviate or Milvus at scale costs more than the software license, which is Apache-2.0 for Milvus and BSD-3-Clause for the Weaviate core. The four cards below cover where the money goes: infrastructure, the people who operate it, the editions you choose, and the upgrade and support work that recurs after go-live.

Infrastructure footprint

Compute, memory and object storage recur every month for as long as the cluster runs, and vector indexes are memory-hungry, so RAM sizing usually dominates. Weaviate runs as its own service with its storage on the node. Milvus adds etcd for metadata, an object store such as MinIO, S3 or Azure Blob, and a write-ahead log service (Woodpecker, Kafka or Pulsar), each with its own capacity and backup needs. Ask the implementer to price each of these components separately, including replicas, which multiply storage and memory under replication.

Skilled operations staff

Staff time is the largest recurring cost for most self-hosted deployments and it is often missing from comparisons. Milvus distributed mode is Kubernetes-native and expects people who can run etcd, object storage and a log service, so budget for Kubernetes, storage and database operator skills. Weaviate can run on Docker Compose or its Helm chart, which may need fewer specialists at a smaller scale. Ask who carries on-call duty, who owns backups and who runs restore tests.

Editions and license fees

Both cores are open source, so license fees are optional and depend on the features you need. Weaviate enterprise features are enabled by a license key and sit in a separate enterprise directory. Milvus has no separate enterprise core, but managed options such as Zilliz Cloud are billed as a service. Confirm in writing which features your use case needs, whether they carry a fee, and whether that fee recurs annually or per node.

Upgrades and support

Upgrades recur, and each one needs a test window, a rollback plan and a check of client compatibility. Milvus publishes two release lines, so you must decide which line to track and when to move. Weaviate publishes maintenance releases on several lines in the same week, which means patch work is continuous. Ask the implementer for a written upgrade scope, whether support is a fixed-scope project or a retainer, and what is covered in each.

How to move a workload from one platform to the other

This sequence moves a vector workload between Weaviate and Milvus without losing track of what was re-embedded, what was recreated and what still needs a cutover test before users depend on the new system.

  1. Inventory collections, schemas and access rules

    Start by listing every collection or Milvus collection, its vector fields and dimensions, the index and distance settings, the metadata properties used in filters, any multi-tenancy layout, and each API key, OIDC mapping and RBAC role in use. Your team owns this inventory, and DeployOpen can produce it as part of a scoped assessment. It is done when each workload has a written record of schema, index and access settings that someone other than the author can read and confirm.

  2. Decide whether to reuse or re-embed vectors

    Choose one path per collection. Reusing vectors means exporting the stored vectors and payloads and confirming the embedding model, dimensions and normalization match what the target expects. Re-embedding means running the source text through the model again, which Weaviate can do at import time through its integrated vectorizers and which Milvus expects your pipeline to handle. Ask the model owner to confirm the model version is pinned, because a silent change will break similarity scores. It is done when each collection has a recorded decision and a pinned model reference.

  3. Export vectors, payloads and identifiers

    Run the export from the source system in batches, keeping object identifiers, metadata fields and tenant labels together so each record can be traced after import. Store the exports in your own object storage or data center with the same access controls as the source. Check record counts and a sample of checksums against the source before you treat the export as complete. It is done when counts match per collection and a sample of records round-trips without field loss.

  4. Recreate schemas, indexes and tenant layout on the target

    Create the target collections with matching vector dimensions, distance metric, index type and filterable properties. Translate Weaviate's per-collection replication factor and consistency settings into Milvus's deployment and replication design, and translate Milvus partitions or partition keys into Weaviate tenants where the workload relies on them. Note where the two systems differ on index options such as DiskANN or quantization so that recall is measured, not assumed. It is done when a schema review signs off on each target collection and the index choices are recorded with their reasons.

  5. Re-map metadata filters and query logic

    Rewrite each filter and hybrid query for the target. Weaviate combines vector, BM25 and filter clauses in one query interface, while Milvus supports BM25, sparse vectors and hybrid dense plus sparse search, so the query shape and the scoring behavior will differ. Keep a test set of representative queries with expected top results, and record where ranking changes. It is done when every production query pattern has a mapped equivalent and a documented result comparison.

  6. Rebuild authentication, roles and client code

    Recreate API keys, OIDC integration and role assignments on the target, mapping each source role to the smallest set of target permissions that does the same job. Then port client code from the source client library to the target SDK, covering import, query and error handling. Both platforms document authentication and access control, but the role models are not interchangeable, so each permission is a deliberate mapping rather than a copy. It is done when every service account authenticates on the target and a permission review confirms no role is broader than its source.

  7. Rebuild ingestion pipelines and backups

    Point ingestion jobs, scheduled re-indexing and backup routines at the new system. Backup and recovery design is not carried over by an export, so define the target's backup method and test a restore into a separate environment. It is done when a new record flows from source document to target collection automatically and a restore test completes with verified record counts.

  8. Run both systems in parallel for a cutover test

    Send a copy of production traffic or a replayed query set to both systems for a fixed observation period agreed in advance, comparing result sets, latency, error rates and access denials. Cut over only when the differences are explained and accepted by the workload owner, and keep the source system readable until rollback is no longer needed. It is done when the workload owner signs a cutover record that lists the accepted differences, the rollback path and the date the source system is retired.

Where Weaviate and Milvus implementation projects usually run long

Implementation effort on a Weaviate project concentrates in three configuration decisions that are cheap to make on day one and expensive to change after data is loaded. The first is the replication factor per collection, since replication is disabled by default and must be switched on for each collection. The second is the consistency level each query path uses (ONE, QUORUM or ALL), which trades read freshness against latency and must be agreed with the application team before load testing. The third is the vectorizer provider configuration: if embeddings come from an integrated provider such as OpenAI, Cohere or Hugging Face, the team must decide where API keys live, how the provider is reached from a network that may be air-gapped, and who owns re-embedding when the model changes. Role-based access control also takes real design work. Map API key and OIDC identities to custom roles through the user management API, test each role against the collections it should and should not reach, and document the result before any service account goes into production.

Milvus projects run long mostly because the platform is a distributed system with its own dependencies. A Distributed deployment needs etcd for metadata, an object store (MinIO, S3 or Azure Blob) for segment data, and a write-ahead log, which the architecture documentation lists as Woodpecker, Kafka or Pulsar. Each of these must be stood up, backed up, monitored and sized before Milvus itself is installed, and the team must confirm that the chosen log and storage services are supported for its release line (v2.6.25 and v3.0.3 are both current on the releases page, so confirm which one the project targets). Worker sizing is the next long task: query nodes, data nodes and index nodes scale separately, so load tests should use realistic vector dimensions and collection sizes. Index tuning for large collections (HNSW, IVF, DiskANN or GPU CAGRA, with quantization and memory-mapped files as options) is iterative and should be benchmarked against recall targets. A fixed-scope written agreement should fix the target release line, the dependency list, the sizing test profile, the index and recall acceptance criteria, the RBAC and TLS configuration, backup and restore tests, and the documentation handed over. DeployOpen plans, implements and documents self-hosted platforms inside the client's own infrastructure, so these items should be written into scope before work starts, with the client's cloud accounts, data centers or air-gapped network named as the target.

Questions buyers ask before choosing or hiring help

How much does running Weaviate or Milvus at scale cost?

Neither core platform carries a license fee by default: Milvus is Apache-2.0 and Weaviate's core outside the wl directory is BSD-3-Clause, so license spend depends on whether you buy Weaviate's enterprise features. The larger costs are infrastructure (compute, memory, storage, and for Milvus the object store and write-ahead log), engineering time, and any managed service or support contract. Infrastructure and support recur monthly or yearly, while design, deployment and migration are usually one-time. Cost rises with vector count, dimensions, replication factor and index choice. Ask any quote for sizing assumptions per component, a split of one-time and recurring items, which Weaviate features are licensed and whether they are included, and who carries on-call and upgrades.

How long does it take to reach a working cluster?

No researched duration exists for either platform, so confirm timing with each vendor and against your own environment. The main drivers are whether Kubernetes, object storage and identity are already in place. Milvus Distributed needs etcd for metadata, MinIO, S3 or Azure Blob for object storage, and a write-ahead log such as Woodpecker, Kafka or Pulsar before the cluster is useful. Weaviate can run through Docker, Kubernetes or Weaviate Cloud, and its replication is set per collection, so the first cluster can be smaller. Ask for a written scope with named milestones, acceptance tests for replication and failover, and a list of what the client must provide before work starts. DeployOpen agrees scope, deliverables and timelines in writing before work begins.

What skills does our team need in-house to run Milvus?

Milvus needs more platform skills than Weaviate because its distributed architecture has more moving parts. Your team should be able to operate:

  • Kubernetes, including storage classes, networking and upgrades
  • etcd, object storage (MinIO, S3 or Azure Blob) and the chosen write-ahead log
  • Milvus authentication, TLS and role-based access control configuration
  • Index and capacity planning for HNSW, IVF, DiskANN or GPU indexes

Weaviate also needs Docker or Kubernetes operations, API key or OIDC authentication, RBAC roles, and per-collection replication settings with consistency levels. In both cases, someone must own the schema, index choices and backup restore tests. Ask a partner to name which of these skills it covers and which it expects you to keep in-house.

Can a small team run Milvus Distributed on its own?

A small team can run Milvus Distributed alone only if it already operates Kubernetes and the supporting services with confidence. Distributed mode separates stateless proxies, a coordinator, worker nodes, etcd, object storage and the write-ahead log, so a failure can involve several components. Milvus also offers Standalone on a single machine and Milvus Lite as a Python library, which are simpler starting points for workloads that do not need a distributed cluster. Before committing, check on-call coverage, who handles upgrades (the project publishes two current lines, v3.0.3 and v2.6.25), and how restores are tested. The Milvus architecture overview lists the components to map against your staff. Many teams pair a small staff with a retainer for upgrades and continuous support.

When does Weaviate's enterprise license matter?

Weaviate's enterprise license matters when your requirements depend on features that sit in the wl directory or that are enabled by a license key. Code outside wl is BSD-3-Clause, and the README lists horizontal scaling, multi-tenancy, quantization and time-to-live as built-in features, so many production designs may not need a paid license. The authentication documentation covers API key, OIDC and RBAC for self-hosted deployments, so do not assume a license is needed for access control. Confirm with Weaviate which features you need are licensed, whether the license covers support, and how license keys are renewed. Put the answers in the quote so the license line item is explicit.

How hard is it to switch from Weaviate to Milvus later?

Switching cost comes from four areas: the data model and query code, the embedding pipeline, the data itself, and the operating model. Weaviate can vectorize at import time through integrated providers, while Milvus clients typically supply embeddings, so an application that relies on Weaviate vectorizers will need a new embedding step and possibly re-embedding of the corpus. Hybrid search, BM25 filters and multi-tenancy need to be re-expressed in Milvus's API and tested. Operations also change, because Milvus adds etcd, object storage and a write-ahead log. Ask for a migration plan with export and reindex steps, a parallel run for query quality, and a rollback path. Keeping embedding generation behind your own service reduces later switching cost.

Can DeployOpen implement Weaviate or Milvus in our infrastructure?

DeployOpen plans, implements, integrates, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks, so both platforms fall within that work. Most engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Ongoing support, upgrades and continuous testing are available as retainers. DeployOpen does not publish a price list, and a quote follows from the written scope. DeployOpen is not an official partner of Weaviate or Zilliz, and it does not issue audit reports or certifications. Give the scope a clear platform choice, deployment mode, data volume and acceptance tests so the quote is comparable.

How DeployOpen helps choose, implement or migrate between them

DeployOpen is a Chainscore Labs company that plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure. For Weaviate vs Milvus, we start from your workload and team, then build and hand over the option you choose, or the migration path between them.

How we scope

  • Written scope covers your vector count, query patterns, filtering and hybrid search needs before any platform is chosen.
  • Scope names the target environment: your cloud account, data center or air-gapped network, and the Kubernetes or Compose layout.
  • Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.

How we build

  • Deployment of Weaviate or Milvus with replication settings, authentication, TLS and RBAC configured to your access model.
  • Integration of the chosen vectorizer approach, whether provider modules or pre-computed embeddings from your own pipeline.
  • Security testing of the API surface and the vector store's access controls, with findings tracked against the written scope.

How we hand over

  • Documentation of the deployed topology, backup and restore steps, upgrade path and license boundaries for the edition in use.
  • Migration runbook for moving collections between systems, including a validation plan to confirm result parity before cutover.
  • Operator handover so your platform or database team can run, scale and patch the cluster without us in the loop.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers for the running cluster.
  • Retainer scope can cover tracking Weaviate and Milvus release lines and planning upgrades in your change windows.
  • Evidence for compliance assessments is prepared for your auditors, who issue any attestations or certifications.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.