v0.2.0 ยท Node 18+ ยท prebuilt binaries

Ultra-fast rate limiting for Node.js powered by Rust

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
limiter.ts
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
// }

Why rust-node-rate-limit

โšก

Ultra-fast

The hot path is native Rust. allow() and check() run with minimal allocation and almost no overhead.

๐ŸชŸ

Fixed & Sliding Window

A simple, predictable Fixed Window by default, or opt into a Sliding Window counter to smooth bursts at the window boundary โ€” { algorithm: "sliding" }.

๐Ÿฆ€

Thread-safe core

Built with napi-rs over a lock-free DashMap โ€” safe under high concurrency with fast reads.

๐Ÿ“ฆ

Prebuilt binaries

No compiler at install time. macOS, Linux and Windows binaries bundled across platforms.

๐Ÿงฉ

TS-first API

Generated .d.ts, clean camelCase fields, and dual CommonJS + ESM output.

๐Ÿ”Œ

Framework ready

Drop-in middleware for Express, a Fastify plugin, and a NestJS guard.

Usage

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" }

Framework integrations

Express

import { rateLimitMiddleware }
  from "rust-node-rate-limit/express";

app.use(rateLimitMiddleware({
  limit: 100, windowSeconds: 60,
}));

Fastify

import { rateLimitPlugin }
  from "rust-node-rate-limit/fastify";

fastify.register(rateLimitPlugin, {
  limit: 100, windowSeconds: 60,
});

NestJS

import { RateLimitGuard }
  from "rust-node-rate-limit/nestjs";

app.useGlobalGuards(
  new RateLimitGuard());

Supported platforms

macOS arm64 macOS x64 Linux x64 (glibc) Linux arm64 (glibc) Windows x64

Roadmap