Skip to content

@shinijs/rate-limitFlexible Rate Limiting for NestJS

Protect your APIs with distributed rate limiting powered by Redis

Quick Start โ€‹

bash
pnpm add @shinijs/rate-limit
typescript
import { Controller, Get, UseGuards } from '@nestjs/common';
import { RateLimit, RateLimitGuard } from '@shinijs/rate-limit';

@Controller('api')
@UseGuards(RateLimitGuard)
export class ApiController {
  @Get('users')
  @RateLimit({ requests: 100, window: '1m' }) // 100 requests per minute
  getUsers() {
    return { users: [] };
  }

  @Get('sensitive')
  @RateLimit({ requests: 5, window: '1h' }) // Stricter limit for sensitive endpoints
  getSensitiveData() {
    return { data: 'secret' };
  }
}

Installation โ€‹

See the Installation Guide for detailed setup instructions.

Key Features โ€‹

  • โœ… Distributed Rate Limiting - Redis-backed rate limiting for multi-instance deployments
  • โœ… Automatic Fallback - Gracefully falls back to memory-based limiting when Redis is unavailable
  • โœ… Multiple Integration Patterns - Use decorators, guards, interceptors, or service directly
  • โœ… Flexible Time Windows - Support for seconds, minutes, hours, and days
  • โœ… TypeScript Support - Full type definitions and IntelliSense
  • โœ… Health Monitoring - Built-in health check for Redis connectivity

Documentation โ€‹