Skip to content
Brume Limit

Rate limiting, minus the Redis.

Four algorithms, per-identifier overrides, quotas, blocklists, and analytics — behind one HTTP call. No Redis to operate, no Lua to maintain, no per-request metering.

TypeScript
import { createLimitClient } from '@brume/limit'

const limit = createLimitClient({
  apiKey: proces...KEY,
})

export async function handler(req, res) {
  const result = await limit.limit('api', req.user.id)

  if (!result.success) {
    res.setHeader('Retry-After', String(result.retry_after ?? 60))
    return res.status(429).json({ error: 'Too many requests' })
  }

  return handle(req, res)
}
Identifiers
API keyUserIPRoute
Algorithms

Pick the right policy for the job.

Token bucket

Smooth traffic with optional burst capacity. Ideal for APIs that tolerate short spikes.

Fixed window

Simple per-window counter. Predictable reset times and minimal Redis overhead.

Sliding window log

Exact request timestamps within the window. Strictest fairness, higher memory cost.

Sliding window counter

Approximate rolling rate with constant memory. Fast and accurate enough for most gates.

Beyond the rule

The surface your first hour needs.

Per-identifier overrides

Give one user, key, or IP its own limit without a second rule. The override shares the rule counter and inherits whatever you leave unset.

Long-window quotas

Monthly, weekly, and daily caps with billing-cycle-aware resets, enforced alongside the rate rule.

Block & allow lists

IP and key deny/allow lists evaluated before any rule runs. Blocked identifiers never consume capacity.

Per-identifier analytics

Allowed, denied, and remaining per namespace and identifier. Find the client hammering you without adding counters.

Multi-rule evaluation

Evaluate several namespaces in one call. One round-trip instead of one per rule.

Fail-open with visibility

If Redis goes down, checks return success with degraded: true. Availability over correctness, and you can see it happened.

Comparison

Free tier that competes. Pricing that doesn't jump.

ServiceFree tierAlgorithmsPricing model
Brume Limit10,000 checks/dayAll fourFlat rate
Unkey150K verifications/moToken + fixedStep tiers
Upstash~100K checks/moRedis scriptsPer command

Free-tier figures are public-plan estimates as of 2026-08-27. Check each vendor for current limits.

Brume Limit

First check in five minutes.

Create a rule in the dashboard or the API, then call limit.limit from your backend. Free tier included, no credit card required.