Migrate from Chroma to Qdrant

What You Need from Chroma

  • Chroma URL — the HTTP endpoint of your Chroma server
  • Collection name — the collection to migrate
  • Authentication — API token or basic auth credentials, if configured

Concept Mapping

ChromaQdrantNotes
CollectionCollectionOne-to-one mapping
DocumentPointEach document becomes a point
EmbeddingsVectorMapped automatically
MetadataPayloadDirect mapping
Documents (text)Payload fieldStored via --qdrant.document-field

Run the Migration

docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration chroma \
    --chroma.url 'http://localhost:8000' \
    --chroma.collection 'your-collection' \
    --qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
    --qdrant.api-key 'your-qdrant-api-key' \
    --qdrant.collection 'your-collection'

With Authentication

docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration chroma \
    --chroma.url 'https://your-chroma-host:8000' \
    --chroma.collection 'your-collection' \
    --chroma.auth-type token \
    --chroma.token 'your-chroma-token' \
    --qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
    --qdrant.api-key 'your-qdrant-api-key' \
    --qdrant.collection 'your-collection'

All Chroma-Specific Flags

FlagRequiredDescription
--chroma.urlNoChroma HTTP endpoint (default: http://localhost:8000)
--chroma.collectionYesCollection name to migrate
--chroma.tenantNoChroma tenant
--chroma.databaseNoChroma database
--chroma.auth-typeNonone, basic, or token (default: none)
--chroma.usernameNoUsername (when auth-type is basic)
--chroma.passwordNoPassword (when auth-type is basic)
--chroma.tokenNoToken (when auth-type is token)
--chroma.token-headerNoCustom header name for token auth

Qdrant-Side Options

FlagDefaultDescription
--qdrant.document-fielddocumentPayload field name to store Chroma document text
--qdrant.id-field__id__Payload field name for original Chroma IDs
--qdrant.distance-metriceuclidcosine, dot, manhattan, or euclid

Gotchas

  • Distance metric: The tool does not read the collection’s distance function and defaults to euclid, which matches Chroma’s default l2. If your collection uses cosine or ip, set --qdrant.distance-metric.

Next Steps

After migration, verify your data arrived correctly with the Migration Verification Guide.

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.