Rate Limiting⚡Made Simple
The best TypeScript-first rate limiting SDK for Node.js and browsers. Redis-backed distributed rate limiting with optional bring-your-own Redis support.
Built for developers
Everything you need to implement sophisticated rate limiting without the complexity.
TypeScript-First
Fully typed with excellent IDE support. Catch errors at compile time, not runtime.
Free Forever
No API keys, no payments, no limits on usage. Completely free for all projects.
Zero Config
Works out of the box. Install, import, and start rate limiting in seconds.
Token Bucket
Advanced token bucket algorithm for smooth, continuous rate limiting.
Bring Your Own Redis
Optional Redis URL for full tenant isolation. Use your own Redis or the hosted service.
Dynamic Config
Set limits per request without redeployment. Adjust on the fly.
Get started in seconds
Install via npm
Get the Limitly SDK for your project
$ npm install limitly-sdkCreate rate limiter
Initialize the rate limiting client (recommended: use your own Redis)
$ import { createClient } from 'limitly-sdk';
// Recommended: Use your own Redis for full tenant isolation
const client = createClient({
redisUrl: process.env.REDIS_URL || 'redis://localhost:6379',
serviceId: 'my-app'
});
// Without redisUrl (shares hosted Redis - may collide with other users)
// const client = createClient({ serviceId: 'my-app' });Use in your API
Protect your endpoints with rate limiting
$ // Next.js App Router example
export async function GET(request: Request) {
const userId = request.headers.get('x-user-id') || 'unknown';
const result = await client.checkRateLimit(userId);
if (!result.allowed) {
return Response.json(
{ error: 'Too many requests' },
{ status: 429 }
);
}
// Process your request...
return Response.json({ success: true });
}Why choose Limitly?
See how Limitly compares to other rate limiting solutions
| Feature | express-rate-limit | Upstash | Arcjet | Unkey | Limitly |
|---|---|---|---|---|---|
| TypeScript Support | ❌ | ✅ | ✅ | ✅ | ✅ (TypeScript-first) |
| Type Safety | ❌ | ✅ | ✅ | ✅ | ✅ (Full type exports) |
| IntelliSense | ❌ | ✅ | ✅ | ✅ | ✅ (JSDoc + types) |
| Free | ✅ | ⚠️ (Limited) | ⚠️ (Limited) | ⚠️ (Limited) | ✅ (No limits) |
| Distributed | ❌ | ✅ | ✅ | ✅ | ✅ (Redis) |
| Token Bucket | ❌ | ✅ | ✅ | ✅ | ✅ |
| Dynamic Limits | ❌ | ✅ | ✅ | ✅ | ✅ |
| Service Isolation | ❌ | ✅ | ✅ | ✅ | ✅ |
| Rate Limit Headers | ❌ (manual) | ✅ | ✅ | ✅ | ✅ (automatic) |
| Graceful Degradation | ❌ | ❌ | ❌ | ❌ | ✅ |
| Zero Config | ✅ | ✅ | ✅ | ✅ | ✅ |
| Self-Hosted Option | ✅ | ❌ | ❌ | ❌ | ✅ |
⚠️ Limited free tiers may have usage restrictions or require credit cards
Frequently asked questions
Yes! Limitly is completely free. No API keys, no payments, no usage limits. We provide a free hosted service that you can use immediately.
Limitly works with any Node.js framework: Express, Next.js, Fastify, Hono, and more. It's framework agnostic and works in both Node.js and browser environments.
Limitly uses a centralized service architecture. Your application uses the SDK to make HTTP requests to our hosted rate limiting service, which uses Redis and the token bucket algorithm to track and enforce rate limits.
Token bucket is a rate limiting algorithm that allows bursts of traffic while maintaining an average rate. It's more accurate than fixed window limits and provides smoother rate limiting behavior.
Yes! Each service can have isolated rate limits using service IDs. This prevents cross-site collisions - the same IP across multiple apps gets separate rate limits per service.
Limitly has graceful degradation built-in. If the service is unavailable, the SDK will allow requests to pass through, ensuring your application continues to work even if rate limiting is temporarily unavailable.
Ready to get started?
Join developers using Limitly for rate limiting. Free, fast, and fully type-safe.