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.