Ultra-fast
The hot path is native Rust. allow() and
check() run with minimal allocation and almost no
overhead.
Local, in-process rate limiting with very low overhead. A native core built with napi-rs and a lock-free DashMap, exposed through a clean TypeScript API.
npm install rust-node-rate-limit
import { RateLimiter } from "rust-node-rate-limit";
const limiter = new RateLimiter({ limit: 100, windowSeconds: 60 });
console.log(limiter.check("user:123"));
// {
// allowed: true,
// limit: 100,
// remaining: 99,
// retryAfter: 0,
// resetAfter: 60
// }
The hot path is native Rust. allow() and
check() run with minimal allocation and almost no
overhead.
A simple, predictable Fixed Window by default, or opt into a
Sliding Window counter to smooth bursts at the window boundary โ
{ algorithm: "sliding" }.
Built with napi-rs over a lock-free DashMap โ safe
under high concurrency with fast reads.
No compiler at install time. macOS, Linux and Windows binaries bundled across platforms.
Generated .d.ts, clean camelCase fields, and dual
CommonJS + ESM output.
Drop-in middleware for Express, a Fastify plugin, and a NestJS guard.
import { RateLimiter } from "rust-node-rate-limit";
const limiter = new RateLimiter({ limit: 5, windowSeconds: 60 });
limiter.allow("ip:127.0.0.1"); // true / false
limiter.remaining("ip:127.0.0.1"); // remaining requests
limiter.reset("ip:127.0.0.1"); // reset one key
limiter.clear(); // reset every key
import { RateLimiter } from "rust-node-rate-limit";
const limiter = new RateLimiter({ limit: 100, windowSeconds: 60 });
console.log(limiter.stats());
// {
// allowed: 1500,
// blocked: 42,
// checks: 1542,
// activeKeys: 73
// }
import express from "express";
import { rateLimitMiddleware } from "rust-node-rate-limit/express";
const app = express();
app.use(
rateLimitMiddleware({ limit: 100, windowSeconds: 60 })
);
// Blocked โ 429 { "message": "Too many requests" }
import { rateLimitMiddleware }
from "rust-node-rate-limit/express";
app.use(rateLimitMiddleware({
limit: 100, windowSeconds: 60,
}));
import { rateLimitPlugin }
from "rust-node-rate-limit/fastify";
fastify.register(rateLimitPlugin, {
limit: 100, windowSeconds: 60,
});
import { RateLimitGuard }
from "rust-node-rate-limit/nestjs";
app.useGlobalGuards(
new RateLimitGuard());