Redis-powered Socket.IO adapter for NestJS enabling scalable WebSocket connections
npm install @nestjs-redis/socket.io-adapter
Redis-powered Socket.IO adapter for NestJS




 
---
- Horizontal scaling with Redis pub/sub
- Works with existing @nestjs-redis/client connections
- Type-safe, production-ready
``bash`
npm install @nestjs-redis/socket.io-adapter @nestjs-redis/client redis
The recommended approach is to use RedisModule from @nestjs-redis/client so Redis connections are lifecycle-managed by Nest (connect/disconnect with your app). Alternatively, you can pass your own Redis client (e.g. created with createClient() from redis) and manage its lifecycle yourself.
`typescript
// app.module.ts
import { Module } from '@nestjs/common';
import { RedisModule } from '@nestjs-redis/client';
@Module({
imports: [
RedisModule.forRoot({
options: { url: 'redis://localhost:6379' },
}),
],
})
export class AppModule {}
`
`typescript
// main.ts
import { NestFactory } from '@nestjs/core';
import { setupRedisAdapter } from '@nestjs-redis/socket.io-adapter';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// Setup Redis adapter for Socket.IO
await setupRedisAdapter(app);
await app.listen(3000);
}
bootstrap();
`
If you have multiple Redis connections, specify which one to use:
`typescript`
// app.module.ts
@Module({
imports: [
RedisModule.forRoot({
options: { url: 'redis://localhost:6379' },
}),
RedisModule.forRoot({
connectionName: 'websockets',
options: { url: 'redis://websockets:6379' },
}),
],
})
export class AppModule {}
`typescript
// main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// Use the 'websockets' Redis connection
await setupRedisAdapter(app, 'websockets');
await app.listen(3000);
}
``
- Root repo: CSenshi/nestjs-redis
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Please see the root contributing guidelines.
MIT © CSenshi