JSPM

@unsoon/qdrant-client

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 61
  • Score
    100M100P100Q43105F
  • License MIT

Qdrant client for NestJS with gRPC and REST support

Package Exports

  • @unsoon/qdrant-client

Readme

Nestjs Qdrant Client

@unsoon/qdrant-client is a NestJS dynamic module that provides seamless integration with Qdrant's REST and gRPC clients.
It enables you to connect, configure, and inject multiple Qdrant clients in a scalable and type-safe way โ€” ideal for production-grade vector search applications.

๐Ÿš€ Features

  • ๐Ÿง  Type-safe configuration (per client)
  • ๐Ÿงฉ Supports both gRPC and REST clients
  • ๐ŸŽฏ Inject clients by name (multitenancy, separation of concerns)
  • ๐Ÿงผ Tiny, clean and dependency-light

๐Ÿ“ฆ Installation

npm install --save @unsoon/qdrant-client

๐Ÿ‘‡ This module also requires the following peer dependencies:

npm install --save @qdrant/{js-client-grpc,js-client-rest}

๐Ÿง‘โ€๐Ÿ’ป Quick Start

Single REST client (static config)

// app.module.ts

import { Module } from "@nestjs/common";
import { QdrantModule } from "@unsoon/qdrant-client";

@Module({
  imports: [
    QdrantModule.forRoot({
        name: "my-qdrant-client",
        type: "rest",
        options: {
            url: "http://localhost:6333",
        },
    });
  ],
})
export class AppModule {}

๐Ÿช„ Injecting

// search.service.ts

import { Injectable } from "@nestjs/common";
import { InjectQdrantClient, QdrantRestClient } from "@unsoon/qdrant-client";

@Injectable()
export class SearchService {
  constructor(
    @InjectQdrantClient("my-qdrant-client")
    private readonly client: QdrantRestClient,
  ) {}
}

๐Ÿ‹๏ธโ€โ™‚๏ธ Advantage usage

๐Ÿ”ง Async Configuration (useFactory)

// app.module.ts

import { Module } from "@nestjs/common";
import { QdrantModule } from "@unsoon/qdrant-client";
import { ConfigModule, ConfigService } from "@nestjs/config";

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    QdrantModule.forRootAsync({
        name: "my-qdrant-client",
        type: "rest",
        useFactory: (config: ConfigService) => ({
            url: config.get("QDRANT_HTTP_URL"),
            headers: {
                "x-api-key": config.get("QDRANT_API_KEY"),
            },
        }),
        inject: [ConfigService],
    });
  ],
})
export class AppModule {}

๐Ÿงฑ Async Configuration (useClass)

// app.module.ts

import { Module } from "@nestjs/common";
import { QdrantModule } from "@unsoon/qdrant-client";
import { ConfigModule } from "@nestjs/config";

import { QdrantGrpcClientService } from "./qdrant-grpc.config.ts";

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    QdrantModule.forRootAsync({
        name: "my-qdrant-grpc-client",
        type: "grpc",
        useClass: QdrantGrpcClientService,
    });
  ],
})
export class AppModule {}
// qdrant-grpc.config.ts

import { Injectable } from "@nestjs/common";
import { QdrantFactoryClass, QdrantGrpcClientParams } from "@unsoon/qdrant-client";
import { ConfigService } from "@nestjs/config";

@Injectable()
export class QdrantGrpcClientService implements QdrantFactoryClass<"grpc"> {
  constructor(private readonly config: ConfigService) {}

  createQdrantOptions(): QdrantGrpcClientParams {
    return {
      url: this.config.get("QDRANT_GRPC_URL"),
    };
  }
}

โ™ป๏ธ Multiple Clients (gRPC + REST)

// app.module.ts

import { Module } from "@nestjs/common";
import { QdrantModule } from "@unsoon/qdrant-client";
import { ConfigModule, ConfigService } from "@nestjs/config";

import { QdrantGrpcClientService } from "./qdrant-grpc.config.ts";

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    QdrantModule.forRootAsync([
        {
            name: "my-qdrant-grpc-client",
            type: "grpc",
            useClass: QdrantGrpcClientService,
        },
        {
            name: "my-qdrant-rest-client",
            type: "rest",
            useFactory: (config: ConfigService) => ({
                url: config.get("QDRANT_HTTP_URL"),
            }),
            inject: [ConfigService],
        },
    ]);
  ],
})
export class AppModule {}

Then inject as:

// search.service.ts

import { Injectable } from "@nestjs/common";
import { InjectQdrantClient, QdrantRestClient, QdrantGrpcClient } from "@unsoon/qdrant-client";

@Injectable()
export class SearchService {
  constructor(
    @InjectQdrantClient("my-qdrant-grpc-client")
    private readonly grpcClient: QdrantGrpcClient,

    @InjectQdrantClient("my-qdrant-rest-client")
    private readonly restClient: QdrantRestClient,
  ) {}
}

๐Ÿ“˜ License

This package is distributed under the MIT License.