Migrate to Qdrant

The Qdrant Migration Tool is a CLI that moves your vectors, metadata, and sparse embeddings from other vector databases into Qdrant. It streams data in batches and can resume interrupted migrations.

Installation

The tool is distributed as a container image and as a standalone binary.

Container Image

The container image runs with Docker, Podman, or any similar container runtime. It supports every source, and the examples in this documentation use it.

docker pull registry.cloud.qdrant.io/library/qdrant-migration

Binary

On macOS and Linux, install the binary with Homebrew:

brew install qdrant/tap/qdrant-migration

Alternatively, download the archive for your operating system and CPU architecture from GitHub Releases, extract it, and place the qdrant-migration binary in a directory on your PATH.

To run an example from this documentation with the binary, replace docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration, along with any -e or -v options, with qdrant-migration.

Migration Tool or Snapshots

Qdrant snapshots are low-level disk operations built for same-cluster recovery and local backups. They require snapshot consistency across nodes and can be hard to port across machines or cloud zones. The Migration Tool:

  • Streams data in live batches.
  • Resumes interrupted migrations.
  • Works while data is still being inserted.
  • Supports collection reconfiguration, such as changing replication settings or quantization.
  • Reads from other vector databases, not only from Qdrant.

To choose between the two, see Migration and Recovery Options.

Supported Sources

SourceCLI SubcommandAuto-Creates Collection?
PineconepineconeYes
WeaviateweaviateNo (must pre-create)
MilvusmilvusYes
ElasticsearchelasticsearchYes
OpenSearchopensearchYes
Azure AI SearchazureYes
pgvectorpgYes
S3 Vectorss3Yes
Amazon DynamoDBdynamodbYes
TurbopufferturbopufferYes
ChromachromaYes
RedisredisNo (must pre-create)
MongoDBmongodbNo (must pre-create)
FAISSfaissYes
Apache SolrsolrNo (must pre-create)
QdrantqdrantYes

Not seeing your current vector store? Open an issue on GitHub and let us know!

General Advice

  1. Run the tool close to your databases. Direct connectivity between source and target is not required — the tool streams through the machine it runs on. For best performance, use a machine with low latency to both.

  2. Use --net=host for local instances. If either database runs on the host machine, the container needs host networking to reach localhost.

  3. The tool resumes by default. Migration progress is tracked in a _migration_offsets collection in Qdrant. If a migration is interrupted, re-running the same command picks up where it left off. Use --migration.restart to force a fresh start.

  4. Batch size is tunable. The default batch size is 50. For large migrations, increase it with --migration.batch-size (e.g., 256 or 512) to improve throughput.

Universal CLI Options

These flags apply to all source types:

FlagDefaultDescription
--migration.batch-size50Points per upsert batch
--migration.restartfalseIgnore saved progress, start fresh
--migration.create-collectiontrueAuto-create target collection
--migration.batch-delay0Milliseconds between batches
--migration.offsets-collection_migration_offsetsCollection used to track migration progress
--debug / --trace—Verbose logging
--skip-tls-verificationfalseSkip TLS certificate verification

After Migration

Once your data is in Qdrant, verify that everything arrived correctly:

Was this page useful?

Thank you for your feedback! 🙏

We are sorry to hear that. 😔 You can edit this page on GitHub, or create a GitHub issue.