@jfungus/ratelimit-nuxt
Rate limiting module for Nuxt 3 - the intuitive Vue.js meta-framework.
Installation
npm install @jfungus/ratelimit-nuxtBasic Usage
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
| Option | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Enable rate limiting |
limit | number | 100 | Max requests per window |
windowMs | number | 60000 | Window duration in ms |
algorithm | 'fixed-window' | 'sliding-window' | 'sliding-window' | Algorithm |
storage | string | 'memory' | Storage driver key |
skip | string[] | ['/_nuxt/**', '/__nuxt_error'] | Routes to skip |
include | string[] | - | 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
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", },});Related
- Nuxt Documentation
- @jfungus/ratelimit-h3 - For custom H3 middleware
- Stores - Storage options