Skip to content

universal-rate-limit

Web-standards-based rate limiting with pluggable stores and framework middleware. Zero dependencies, works everywhere.

Quick Start

bash
npm install universal-rate-limit
ts
import { rateLimit } from 'universal-rate-limit';

const limiter = rateLimit({
    windowMs: 60_000, // 1 minute
    limit: 60 // 60 requests per window
});

const result = await limiter(request);

if (result.limited) {
    return new Response('Too Many Requests', {
        status: 429,
        headers: result.headers
    });
}

Middleware

Rate limit any framework with a single line:

ts
// Express
import { expressRateLimit } from '@universal-rate-limit/express';
app.use(expressRateLimit({ windowMs: 60_000, limit: 60 }));

// Hono
import { honoRateLimit } from '@universal-rate-limit/hono';
app.use(honoRateLimit({ windowMs: 60_000, limit: 60 }));

Redis Store

Scale across multiple instances with the official Redis store:

ts
import { rateLimit } from 'universal-rate-limit';
import { RedisStore } from '@universal-rate-limit/redis';

const limiter = rateLimit({
    windowMs: 60_000,
    limit: 60,
    store: new RedisStore({
        sendCommand: (...args) => redis.call(...args),
        windowMs: 60_000
    })
});

Packages

PackageDescription
universal-rate-limitCore rate limiting library
@universal-rate-limit/redisRedis store
@universal-rate-limit/expressExpress middleware
@universal-rate-limit/fastifyFastify plugin
@universal-rate-limit/honoHono middleware
@universal-rate-limit/nextjsNext.js App Router wrapper

Acknowledgements

Inspired by express-rate-limit — the most popular rate limiting middleware for Express.js. universal-rate-limit builds on its proven API design while extending it to work across frameworks and runtimes with Web Standard APIs.

Released under the MIT License.