Rate limiting

Hedwig supports per-domain rate limiting using a token bucket algorithm.

All workers share one set of domain token buckets, so configured limits apply process-wide rather than once per worker.

Domain-specific limits

[server.rate_limits]
enabled = true

[server.rate_limits.domain_limits]
"gmail.com" = 30
"outlook.com" = 25
"internal.com" = 200

When default_limit is omitted, only domains listed under domain_limits are rate limited. All other domains are unrestricted.

Setting default_limit = 0 has the same effect as omitting it. A zero domain-specific limit also leaves that domain unrestricted.

Default limit for unconfigured domains

[server.rate_limits]
enabled = true
default_limit = 60  # emails per minute for unconfigured domains

[server.rate_limits.domain_limits]
"gmail.com" = 30    # overrides the default

Benefits:

  • Prevents being rate-limited by destination servers
  • Maintains sender reputation
  • Non-blocking workers continue other tasks