Rate limiting library for serverless runtimes
See the code[!NOTE] This project is in GA Stage. The Upstash Professional Support fully covers this project. It receives regular updates, and bug fixes. The Upstash team is committed to maintaining and improving its functionality.
It is the only connectionless (HTTP based) rate limiting library and designed for:
npm install @upstash/ratelimit
import { Ratelimit } from "https://cdn.skypack.dev/@upstash/ratelimit@latest";
Create a new redis database on upstash. See here for documentation on how to create a redis instance.
import { Ratelimit } from "@upstash/ratelimit"; // for deno: see above
import { Redis } from "@upstash/redis"; // see below for cloudflare and fastly adapters
// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
analytics: true,
/**
* Optional prefix for the keys used in redis. This is useful if you want to share a redis
* instance with other applications and want to avoid key collisions. The default prefix is
* "@upstash/ratelimit"
*/
prefix: "@upstash/ratelimit",
});
// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
const identifier = "api";
const { success } = await ratelimit.limit(identifier);
if (!success) {
return "Unable to process at this time";
}
doExpensiveCalculation();
return "Here you go!";
For more information on getting started, you can refer to our documentation.
Here's a complete nextjs example
See the documentation for more information details about this package.
The SDK reports its name and version to Upstash as a header on the requests made by the redis client you provide, so we know which SDK versions are in use. No personal data, keys or identifiers are collected.
You can opt out with enableTelemetry: false:
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
enableTelemetry: false,
});
or by setting the UPSTASH_DISABLE_TELEMETRY environment variable. Disabling
telemetry on the redis client itself also disables it here.
Create a new redis database on upstash and copy the url and token.
To run the tests, you will need to set some environment variables. Here is a list of variables to set:
UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKENUS1_UPSTASH_REDIS_REST_URLUS1_UPSTASH_REDIS_REST_TOKENAPN_UPSTASH_REDIS_REST_URLAPN_UPSTASH_REDIS_REST_TOKENEU2_UPSTASH_REDIS_REST_URLEU2_UPSTASH_REDIS_REST_TOKENYou can create a single Upstash Redis and use its URL and token for all four above.
Once you set the environment variables, simply run:
pnpm test
499 followers · starred Mar 2023
3,226 followers · starred Aug 2026
40,758 followers · starred Apr 2023
69 followers · starred Aug 2023
Rate limiting library for serverless runtimes
See the code[!NOTE] This project is in GA Stage. The Upstash Professional Support fully covers this project. It receives regular updates, and bug fixes. The Upstash team is committed to maintaining and improving its functionality.
It is the only connectionless (HTTP based) rate limiting library and designed for:
npm install @upstash/ratelimit
import { Ratelimit } from "https://cdn.skypack.dev/@upstash/ratelimit@latest";
Create a new redis database on upstash. See here for documentation on how to create a redis instance.
import { Ratelimit } from "@upstash/ratelimit"; // for deno: see above
import { Redis } from "@upstash/redis"; // see below for cloudflare and fastly adapters
// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
analytics: true,
/**
* Optional prefix for the keys used in redis. This is useful if you want to share a redis
* instance with other applications and want to avoid key collisions. The default prefix is
* "@upstash/ratelimit"
*/
prefix: "@upstash/ratelimit",
});
// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
const identifier = "api";
const { success } = await ratelimit.limit(identifier);
if (!success) {
return "Unable to process at this time";
}
doExpensiveCalculation();
return "Here you go!";
For more information on getting started, you can refer to our documentation.
Here's a complete nextjs example
See the documentation for more information details about this package.
The SDK reports its name and version to Upstash as a header on the requests made by the redis client you provide, so we know which SDK versions are in use. No personal data, keys or identifiers are collected.
You can opt out with enableTelemetry: false:
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
enableTelemetry: false,
});
or by setting the UPSTASH_DISABLE_TELEMETRY environment variable. Disabling
telemetry on the redis client itself also disables it here.
Create a new redis database on upstash and copy the url and token.
To run the tests, you will need to set some environment variables. Here is a list of variables to set:
UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKENUS1_UPSTASH_REDIS_REST_URLUS1_UPSTASH_REDIS_REST_TOKENAPN_UPSTASH_REDIS_REST_URLAPN_UPSTASH_REDIS_REST_TOKENEU2_UPSTASH_REDIS_REST_URLEU2_UPSTASH_REDIS_REST_TOKENYou can create a single Upstash Redis and use its URL and token for all four above.
Once you set the environment variables, simply run:
pnpm test
499 followers · starred Mar 2023
3,226 followers · starred Aug 2026
40,758 followers · starred Apr 2023
69 followers · starred Aug 2023