https://github.com/unsoon/qdrant-client
๐ซฆ A dynamic, type-safe Qdrant module for NestJS with built-in gRPC and REST client support
https://github.com/unsoon/qdrant-client
client database grpc nestjs qdrant rest unsoon vector
Last synced: 8 months ago
JSON representation
๐ซฆ A dynamic, type-safe Qdrant module for NestJS with built-in gRPC and REST client support
- Host: GitHub
- URL: https://github.com/unsoon/qdrant-client
- Owner: unsoon
- License: mit
- Created: 2025-06-17T18:31:22.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-06-17T20:28:01.000Z (10 months ago)
- Last Synced: 2025-07-30T07:12:56.990Z (8 months ago)
- Topics: client, database, grpc, nestjs, qdrant, rest, unsoon, vector
- Language: TypeScript
- Homepage:
- Size: 63.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
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
```bash
npm install --save @unsoon/qdrant-client
```
๐ This module also requires the following peer dependencies:
```bash
npm install --save @qdrant/{js-client-grpc,js-client-rest}
```
## ๐งโ๐ป Quick Start
### Single REST client (static config)
```ts
// 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
```ts
// 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)
```ts
// 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)
```ts
// 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 {}
```
```ts
// 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)
```ts
// 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:
```ts
// 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](LICENSE).