@jfungus/ratelimit-nuxt
v0.0.2
Published
Nuxt module for @jfungus/ratelimit - rate limiting with Nuxt's useStorage
Maintainers
Readme
@jfungus/ratelimit-nuxt
Rate limiting module for Nuxt 3. Automatically integrates with Nuxt's useStorage() for distributed deployments.
Installation
npm install @jfungus/ratelimit-nuxtUsage
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
limit: 100, // 100 requests
windowMs: 60 * 1000, // 1 minute
},
});That's it! Rate limiting is automatically applied to all server routes.
Options
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
// Enable/disable the module
enabled: true,
// Max requests per window
limit: 100,
// Window size in milliseconds
windowMs: 60 * 1000, // 1 minute
// Rate limiting algorithm
algorithm: "sliding-window", // or "fixed-window"
// Routes to apply rate limiting (default: all API routes)
routes: ["/api/**"],
// Storage key prefix
storageKey: "ratelimit",
// Response status code when rate limited
statusCode: 429,
// Response message when rate limited
message: "Too Many Requests",
},
});How It Works
This module:
- Registers a Nitro plugin that adds rate limiting middleware
- Uses Nuxt's built-in
useStorage()for storing rate limit data - Automatically works with any storage driver configured in your Nuxt app
Distributed Storage
Nuxt's useStorage() supports multiple backends. Configure your preferred storage in nuxt.config.ts:
Redis
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
limit: 100,
windowMs: 60 * 1000, // 1 minute
},
nitro: {
storage: {
ratelimit: {
driver: "redis",
url: "redis://localhost:6379",
},
},
},
});Vercel KV
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
limit: 100,
windowMs: 60 * 1000, // 1 minute
},
nitro: {
storage: {
ratelimit: {
driver: "vercelKV",
},
},
},
});Cloudflare KV
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["@jfungus/ratelimit-nuxt"],
rateLimit: {
limit: 100,
windowMs: 60 * 1000, // 1 minute
},
nitro: {
storage: {
ratelimit: {
driver: "cloudflareKVBinding",
binding: "RATELIMIT_KV",
},
},
},
});Documentation
License
MIT
