glimit

Package Version Hex Docs test

A simple, framework-agnostic, in-memory rate limiter for Gleam. πŸ’«

Features

Usage

A very minimalistic example of how to use glimit would be the following snippet:

import glimit

let limiter =
  glimit.new()
  |> glimit.per_second(2)
  |> glimit.identifier(fn(x) { x })
  |> glimit.on_limit_exceeded(fn(_) { "Stop!" })

let func =
  fn(_) { "OK" }
  |> glimit.apply(limiter)

func("πŸš€") // "OK"
func("πŸ’«") // "OK"
func("πŸ’«") // "OK"
func("πŸ’«") // "Stop!"
func("πŸš€") // "OK"
func("πŸš€") // "Stop!"

More practical examples can be found in the examples/ directory, such as Wisp and Mist server examples.

Constraints

While the in-memory rate limiter is simple and easy to use, it does have an important constraint: it is scoped to the BEAM VM cluster it runs in. This means that if your application is running across multiple BEAM VM clusters, the rate limiter will not be shared between them.

Performance

Each rate limiter registry is a single OTP actor. Operations like get_or_create, get_all, and remove are serialized through it, so the registry itself is the throughput bottleneck β€” individual rate limiter actors run concurrently.

Documentation

Further documentation can be found at https://hexdocs.pm/glimit/glimit.html.

Contributing

Contributions like PR’s, bug reports or suggestions are more than welcome! β™₯️

✨ Search Document