Duyetbot Agent
Reference

Rate Limiting

Middleware config. IP-based in-memory limits. Headers + 429 responses.

TL;DR: Use createRateLimiter({limit:100, window:60000}). IP-keyed. In-memory store. Upgrade D1/KV for prod.

Table of Contents

Config Table

Tune limits per route.

ParamDefaultExamplePurpose
limit-100Requests/window
window-60000msSliding window
keyGenIPcustom(c)Identifier

From packages/hono-middleware/src/middleware/rate-limit.ts.

How It Works

In-memory Map. Resets on window expiry.

// packages/hono-middleware/src/middleware/rate-limit.ts
const store = new Map();  // key -> {count, resetAt}
 
const key = keyGenerator(c);  // cf-connecting-ip
entry.count++;
if (entry.count > limit) 429;

Imperative: Set headers always.

Headers

Standard rate limit headers.

HeaderValue Example
X-RateLimit-Limit100
X-RateLimit-Remaining99
X-RateLimit-Reset1738280000

Caveats

In-memory only. Worker restart resets.

Upgrade paths:

  • Durable Objects: Per-session limits
  • KV/D1: Persistent counters

Test: bun test --filter rate-limit.

Reset Quiz

Q: Entry expires when?

A: now > resetAt ✅
B: count > limit
C: Manual clear

Run clearRateLimitStore() in tests. Spam requests. See 429!

On this page