qdrant-client is a free, open source machine learning infrastructure project written in Python and released under Apache-2.0. It has 1,377 GitHub stars, 375 forks and 191 open issues, and was last pushed 32 hours ago. On this registry it ranks #65 of 89 tracked projects in Machine Learning Infrastructure, with 5 head-to-head comparisons available. It gained 10 stars over the last 30 tracked days.

What is qdrant-client?

qdrant-client is the official Python client library and SDK for the Qdrant vector search engine, aimed at Python developers who need to create, populate, and query vector collections from scripts, notebooks, services, and pipelines.

What it is

qdrant-client is the Python client for the Qdrant vector search engine, published in the AI and Machine Learning / Machine Learning Infrastructure category of this registry. The library contains type definitions for the full Qdrant API, supports both synchronous and asynchronous requests, and exposes calls for all Qdrant API methods directly, along with helper methods for frequently required operations such as initial collection uploading. It is distributed under the Apache-2.0 licence, is written in Python, and points to https://qdrant.tech as its home.

The concrete problem it solves is the transport and typing work that otherwise sits between Python code and a vector database. Instead of hand-writing requests against the Qdrant HTTP or gRPC interface, callers use one library that covers both protocols and carries type hints across the API surface. The same library also removes the need for a running server during development: local mode accepts QdrantClient(":memory:") for ephemeral work or QdrantClient(path="path/to/db") to persist changes to disk, and the same code switches to server mode when scale demands it.

Key capabilities

  • Type hints for all API methods, so request and response shapes are declared rather than inferred.
  • Both sync and async request styles from the same client library.
  • REST and gRPC support, selectable per deployment.
  • Local mode through QdrantClient(":memory:") or QdrantClient(path="path/to/db"), running the same API without a Qdrant server.
  • Server connection by host and port, or by url such as http://localhost:6333.
  • Inference API for embeddings, using FastEmbed locally via pip install qdrant-client[fastembed] and pip install 'qdrant-client[fastembed-gpu]' for GPU.
  • Collection helpers and typed models including create_collection, upload_collection, query_points, models.VectorParams, models.Distance.COSINE, and models.Document.

Who uses it and how

  • Developers prototyping in Colab or Jupyter notebooks, where local mode runs with no extra dependencies and no server process.
  • Teams running tests in CI/CD pipelines against an in-memory or on-disk local instance rather than a live cluster.
  • Services connecting to a self-hosted Qdrant started with docker run -p 6333:6333 qdrant/qdrant:latest, reaching it at localhost:6333.
  • Cloud users connecting to a Qdrant Cloud cluster by url and api_key against a cloud.qdrant.io endpoint, with a free tier account offering 1GB RAM.
  • Pipelines that build embeddings and upload them in one pass, using models.Document with a model such as sentence-transformers/all-MiniLM-L6-v2 and then query_points for retrieval.

Getting started

Install with pip install qdrant-client, optionally as pip install qdrant-client[fastembed] for local embedding generation. The README directs new users to the QuickStart guide at qdrant.tech for creating a collection.

How it compares

This registry lists no comparable Python client libraries for Qdrant, and the provided facts name no paid products that qdrant-client replaces, so it stands alone in this registry on the evidence available. Its positioning is as the client for the Qdrant engine rather than as an engine in its own right.

When to use it — and when not to

A self-hoster taking the server path must operate a Qdrant instance, which the README shows running as the qdrant/qdrant:latest Docker image on port 6333, and must already be using Python, since the library is Python-only. Local mode and the Qdrant Cloud free tier lower that barrier during development, but neither changes the language constraint. The repository carries 191 open issues and 303 forks, so users should expect an active but busy tracker and should check whether an existing report covers their problem before filing one.

project readme (upstream, from github) — read inline

Qdrant

Python Client library for the Qdrant vector search engine.

PyPI version OpenAPI Docs Apache 2.0 License Discord Roadmap 2025

Python Qdrant Client

Client library and SDK for the Qdrant vector search engine.

Library contains type definitions for all Qdrant API and allows to make both Sync and Async requests.

Client allows calls for all Qdrant API methods directly. It also provides some additional helper methods for frequently required operations, e.g. initial collection uploading.

See QuickStart for more details!

Installation

pip install qdrant-client

Features

  • Type hints for all API methods
  • Local mode - use same API without running server
  • REST and gRPC support
  • Minimal dependencies
  • Extensive Test Coverage

Local mode

Qdrant

Python client allows you to run same code in local mode without running Qdrant server.

Simply initialize client like this:

from qdrant_client import QdrantClient

client = QdrantClient(":memory:")
# or
client = QdrantClient(path="path/to/db")  # Persists changes to disk

Local mode is useful for development, prototyping and testing.

  • You can use it to run tests in your CI/CD pipeline.
  • Run it in Colab or Jupyter Notebook, no extra dependencies required. See an example
  • When you need to scale, simply switch to server mode.

Connect to Qdrant server

To connect to Qdrant server, simply specify host and port:

from qdrant_client import QdrantClient

client = QdrantClient(host="localhost", port=6333)
# or
client = QdrantClient(url="http://localhost:6333")

You can run Qdrant server locally with docker:

docker run -p 6333:6333 qdrant/qdrant:latest

See more launch options in Qdrant repository.

Connect to Qdrant cloud

You can register and use Qdrant Cloud to get a free tier account with 1GB RAM.

Once you have your cluster and API key, you can connect to it like this:

from qdrant_client import QdrantClient

qdrant_client = QdrantClient(
    url="https://xxxxxx-xxxxx-xxxxx-xxxx-xxxxxxxxx.us-east.aws.cloud.qdrant.io:6333",
    api_key="<your-api-key>",
)

Inference API

Qdrant Client has Inference API that allows to seamlessly create embeddings and use them in Qdrant. Inference API can be used locally with FastEmbed or remotely with models available in Qdrant Cloud.

Local Inference with FastEmbed

pip install qdrant-client[fastembed]

FastEmbed is a library for creating fast vector embeddings on CPU. It is based on ONNX Runtime and allows to run inference both on CPU and GPU.

Qdrant Client can use FastEmbed to create embeddings and upload them to Qdrant. This allows to simplify API and make it more intuitive.

from qdrant_client import QdrantClient, models

# running qdrant in local mode suitable for experiments
client = QdrantClient(":memory:")  # or QdrantClient(path="path/to/db") for local mode and persistent storage

model_name = "sentence-transformers/all-MiniLM-L6-v2"
payload = [
    {"document": "Qdrant has Langchain integrations", "source": "Langchain-docs", },
    {"document": "Qdrant also has Llama Index integrations", "source": "LlamaIndex-docs"},
]
docs = [models.Document(text=data["document"], model=model_name) for data in payload]
ids = [42, 2]

client.create_collection(
    "demo_collection",
    vectors_config=models.VectorParams(
        size=client.get_embedding_size(model_name), distance=models.Distance.COSINE)
)

client.upload_collection(
    collection_name="demo_collection",
    vectors=docs,
    ids=ids,
    payload=payload,
)

search_result = client.query_points(
    collection_name="demo_collection",
    query=models.Document(text="This is a query document", model=model_name)
).points
print(search_result)

FastEmbed can also utilise GPU for faster embeddings. To enable GPU support, install

pip install 'qdrant-client[fastembed-gpu]'

In order to set GPU, extend documents from the previous example with options.

models.Document(text="To be computed on GPU", model=model_name, options={"cuda": True})

Note: fastembed-gpu and fastembed are mutually exclusive. You can only install one of them.

If you previously installed fastembed, you might need to start from a fresh environment to install fastembed-gpu.

Remote inference with Qdrant Cloud

Qdrant Cloud provides a set of predefined models that can be used for inference without a need to install any additional libraries or host models locally. (Currently available only on paid plans.)

Inference API is the same as in the local mode, but the client has to be instantiated with cloud_inference=True:

from qdrant_client import QdrantClient
client = QdrantClient(
    url="https://xxxxxx-xxxxx-xxxxx-xxxx-xxxxxxxxx.us-east.aws.cloud.qdrant.io:6333",
    api_key="<your-api-key>",
    cloud_inference=True,  # Enable remote inference
)

Note: remote inference requires images to be provided as base64 encoded strings or urls

Examples

Create a new collection

from qdrant_client.models import Distance, VectorParams

client.create_collection(
    collection_name="my_collection",
    vectors_config=VectorParams(size=100, distance=Distance.COSINE),
)

Insert vectors into a collection

import numpy as np

from qdrant_client.models import PointStruct

vectors = np.random.rand(100, 100)
# NOTE: consider splitting the data into chunks to avoid hitting the server's payload size limit
# or use `upload_collection` or `upload_points` methods which handle this for you
# WARNING: uploading points one-by-one is not recommended due to requests overhead
client.upsert(
    collection_name="my_collection",
    points=[
        PointStruct(
            id=idx,
            vector=vector.tolist(),
            payload={"color": "red", "rand_number": idx % 10}
        )
        for idx, vector in enumerate(vectors)
    ]
)

Search for similar vectors

query_vector = np.random.rand(100)
hits = client.query_points(
    collection_name="my_collection",
    query=query_vector,
    limit=5  # Return 5 closest points
)

Search for similar vectors with filtering condition

from qdrant_client.models import Filter, FieldCondition, Range

hits = client.query_points(
    collection_name="my_collection",
    query=query_vector,
    query_filter=Filter(
        must=[  # These conditions are required for search results
            FieldCondition(
                key='rand_number',  # Condition based on values of `rand_number` field.
                range=Range(
                    gte=3  # Select only those results where `rand_number` >= 3
                )
            )
        ]
    ),
    limit=5  # Return 5 closest points
)

See more examples in our Documentation!

gRPC

To enable (typically, much faster) collection uploading with gRPC, use the following initialization:

from qdrant_client import QdrantClient

client = QdrantClient(host="localhost", grpc_port=6334, prefer_grpc=True)

Async client

Starting from version 1.6.1, all python client methods are available in async version.

To use it, just import AsyncQdrantClient instead of QdrantClient:

import asyncio

import numpy as np

from qdrant_client import AsyncQdrantClient, models


async def main():
    # Your async code using QdrantClient might be put here
    client = AsyncQdrantClient(url="http://localhost:6333")

    await client.create_collection(
        collection_name="my_collection",
        vectors_config=models.VectorParams(size=10, distance=models.Distance.COSINE),
    )

    await client.upsert(
        collection_name="my_collection",
        points=[
            models.PointStruct(
                id=i,
                vector=np.random.rand(10).tolist(),
            )
            for i in range(100)
        ],
    )

    res = await client.query_points(
        collection_name="my_collection",
        query=np.random.rand(10).tolist(),  # type: ignore
        limit=10,
    )

    print(res)

asyncio.run(main())

Both, gRPC and REST API are supported in async mode. More examples can be found here.

Development

This project uses git hooks to run code formatters.

Set up hooks with pre-commit install before making contributions.

Frequently asked questions

Is qdrant-client free to use?

qdrant-client is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does qdrant-client do?

Python client for Qdrant vector search engine

What is qdrant-client written in?

qdrant-client is primarily written in Python. Its source is publicly available at https://github.com/qdrant/qdrant-client, and it has 1,377 GitHub stars.