Web Standards
Built on Request/Response APIs — runs on Node.js, Bun, Deno, Cloudflare Workers, and Vercel Edge.
Web-standards-based rate limiting with pluggable stores and framework middleware. Zero dependencies, works everywhere.
npm install universal-rate-limitimport { 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
});
}Rate limit any framework with a single line:
// 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 }));Scale across multiple instances with the official Redis store:
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
})
});| Package | Description |
|---|---|
universal-rate-limit | Core rate limiting library |
@universal-rate-limit/redis | Redis store |
@universal-rate-limit/express | Express middleware |
@universal-rate-limit/fastify | Fastify plugin |
@universal-rate-limit/hono | Hono middleware |
@universal-rate-limit/nextjs | Next.js App Router wrapper |
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.