Skip to content

@jfungus/ratelimit-nuxt

Rate limiting module for Nuxt 3 - the intuitive Vue.js meta-framework.

Installation

Terminal window
npm install @jfungus/ratelimit-nuxt

Basic Usage

nuxt.config.ts
export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
limit: 100,
windowMs: 60 * 1000, // 1 minute
},
});

That’s it! Rate limiting is now applied to all server routes.

Options

OptionTypeDefaultDescription
enabledbooleantrueEnable rate limiting
limitnumber100Max requests per window
windowMsnumber60000Window duration in ms
algorithm'fixed-window' | 'sliding-window''sliding-window'Algorithm
storagestring'memory'Storage driver key
skipstring[]['/_nuxt/**', '/__nuxt_error']Routes to skip
includestring[]-Only rate limit these routes

API Routes Only

export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
include: ["/api/**"],
limit: 100,
windowMs: 60 * 1000, // 1 minute
},
});

With Redis

export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
storage: "redis",
},
nitro: {
storage: {
redis: {
driver: "redis",
url: process.env.REDIS_URL,
},
},
},
});

With Cloudflare KV

export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
storage: "cloudflare",
},
nitro: {
storage: {
cloudflare: {
driver: "cloudflare-kv-binding",
binding: "RATE_LIMIT_KV",
},
},
},
});

Access Rate Limit Info

server/api/data.ts
export default defineEventHandler((event) => {
const info = event.context.rateLimit;
// { limit: 100, remaining: 99, reset: 1234567890 }
return { data: "hello" };
});

Disable for Development

export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
enabled: process.env.NODE_ENV === "production",
},
});