Upstash Ratelimit is a library you run against Redis you pay for. Brume Limit is a service you call. The migration removes a dependency (your Redis) rather than swapping one client for another.
@upstash/ratelimit library.@upstash/redis client (for this use case).prefix, analytics wiring, and multi-region replication config.Brume runs the dedicated Redis for you. Counters, windows, and fail-open behavior are the gateway's problem, not yours.
| Upstash | Brume Limit | Notes |
|---|---|---|
Ratelimit.fixedWindow(...) | Rule with algorithm: fixed_window | Algorithm is a rule field |
Ratelimit.slidingWindow(...) | sliding_window_counter | Also offers sliding_window_log for exactness |
Ratelimit.tokenBucket(...) | token_bucket with burst / refill_rate | Burst control on the rule |
prefix | Rule namespace | Namespaces group counters |
| Per-command Redis billing | Flat-rate tiers | No metering |
analytics: true | Built-in per-identifier analytics | Dashboard, no extra flag |
rate_limit scope.Ratelimit.slidingWindow(100, '60s') becomes a rule with limit: 100, window_seconds: 60, algorithm: sliding_window_counter.ratelimit.limit(id) becomes limit.limit(namespace, id).degraded: true, and the SDK's timeout.fallback / onError let you choose deny-instead.