https://github.com/fnichol/limitation
Rate limiting using a fixed window counter for arbitrary keys, backed by Redis.
https://github.com/fnichol/limitation
actix-web middleware proxy-server rate-limiter rate-limiting
Last synced: 2 months ago
JSON representation
Rate limiting using a fixed window counter for arbitrary keys, backed by Redis.
- Host: GitHub
- URL: https://github.com/fnichol/limitation
- Owner: fnichol
- License: mpl-2.0
- Created: 2019-10-18T23:47:45.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-06-14T16:13:55.000Z (about 2 years ago)
- Last Synced: 2025-04-10T09:57:03.921Z (2 months ago)
- Topics: actix-web, middleware, proxy-server, rate-limiter, rate-limiting
- Language: Rust
- Homepage:
- Size: 224 KB
- Stars: 17
- Watchers: 2
- Forks: 3
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Limitation
Rate limiting using a fixed window counter for arbitrary keys, backed by Redis.
| | |
| ------: | ------------------------------------ |
| CI | [![CI Status][badge-ci-overall]][ci] |
| License | [![License][badge-license]][license] |**Table of Contents**
- [Project Layout](#project-layout)
- [CI Status](#ci-status)
- [Build (master branch)](#build-master-branch)
- [Test (master branch)](#test-master-branch)
- [Check (master branch)](#check-master-branch)
- [Code of Conduct](#code-of-conduct)
- [Issues](#issues)
- [Contributing](#contributing)
- [Authors](#authors)
- [License](#license)## Project Layout
The crates included as part of Limitation are:
- [`limitation`]: A library implementing a configurable, asynchronous `Limiter`.
- [`limitation-actix-middleware`]: An [Actix web] middleware for rate limiting
requests keyed on a configurable header.
- [`limitation-example`]: An example command line application to demonstrate the
`Limiter` in isolation.
- [`limitation-proxy`]: A reverse proxy service with configurable rate limiting.The `limitation-proxy` crate is intended for deploying or experimenting with
fronting an API with rate limiting. The `limitation` crate can be used for
standalone projects or integration into other runtimes and frameworks. The
`limitation-actix-middleware` crate is for developers wishing to integrate rate
limiting into Actix web-based applications and services. Finally, the
`limitation-example` crate won't be released to Crates.io but rather serves as
an example.[actix web]: https://crates.io/crates/actix-web
[`limitation`]: limitation
[`limitation-actix-middleware`]: limitation-actix-middleware
[`limitation-example`]: limitation-example
[`limitation-proxy`]: limitation-proxy## CI Status
### Build (master branch)
| Operating System | Stable Rust | Nightly Rust | MSRV |
| ---------------: | ----------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| FreeBSD | [![FreeBSD Stable Build Status][badge-stable_freebsd-build]][ci-master] | [![FreeBSD Nightly Build Status][badge-nightly_freebsd-build]][ci-master] | [![FreeBSD Oldest Build Status][badge-oldest_freebsd-build]][ci-master] |
| Linux | [![Linux Stable Build Status][badge-stable_linux-build]][ci-master] | [![Linux Nightly Build Status][badge-nightly_linux-build]][ci-master] | [![Linux Oldest Build Status][badge-oldest_linux-build]][ci-master] |
| macOS | [![macOS Stable Build Status][badge-stable_macos-build]][ci-master] | [![macOS Nightly Build Status][badge-nightly_macos-build]][ci-master] | [![macOS Oldest Build Status][badge-oldest_macos-build]][ci-master] |
| Windows | [![Windows Stable Build Status][badge-stable_windows-build]][ci-master] | [![Windows Nightly Build Status][badge-nightly_windows-build]][ci-master] | [![Windows Oldest Build Status][badge-oldest_windows-build]][ci-master] |### Test (master branch)
| Operating System | Stable Rust | Nightly Rust | MSRV |
| ---------------: | --------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
| FreeBSD | [![FreeBSD Stable Test Status][badge-stable_freebsd-test]][ci-master] | [![FreeBSD Nightly Test Status][badge-nightly_freebsd-test]][ci-master] | [![FreeBSD Oldest Test Status][badge-oldest_freebsd-test]][ci-master] |
| Linux | [![Linux Stable Test Status][badge-stable_linux-test]][ci-master] | [![Linux Nightly Test Status][badge-nightly_linux-test]][ci-master] | [![Linux Oldest Test Status][badge-oldest_linux-test]][ci-master] |
| macOS | [![macOS Stable Test Status][badge-stable_macos-test]][ci-master] | [![macOS Nightly Test Status][badge-nightly_macos-test]][ci-master] | [![macOS Oldest Test Status][badge-oldest_macos-test]][ci-master] |
| Windows | [![Windows Stable Test Status][badge-stable_windows-test]][ci-master] | [![Windows Nightly Test Status][badge-nightly_windows-test]][ci-master] | [![Windows Oldest Test Status][badge-oldest_windows-test]][ci-master] |### Check (master branch)
| | Status |
| ------ | ------------------------------------------------- |
| Lint | [![Lint Status][badge-check-lint]][ci-master] |
| Format | [![Format Status][badge-check-format]][ci-master] |## Code of Conduct
This project adheres to the Contributor Covenant [code of
conduct][code-of-conduct]. By participating, you are expected to uphold this
code. Please report unacceptable behavior to [email protected].## Issues
If you have any problems with or questions about this project, please contact us
through a [GitHub issue][issues].## Contributing
You are invited to contribute to new features, fixes, or updates, large or
small; we are always thrilled to receive pull requests, and do our best to
process them as fast as we can.Before you start to code, we recommend discussing your plans through a [GitHub
issue][issues], especially for more ambitious contributions. This gives other
contributors a chance to point you in the right direction, give you feedback on
your design, and help you find out if someone else is working on the same thing.## Authors
Created and maintained by [Fletcher Nichol][fnichol] ().
## License
Licensed under the Mozilla Public License Version 2.0 ([LICENSE.txt][license]).
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the MPL-2.0 license, shall be
licensed as above, without any additional terms or conditions.[badge-check-format]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=check&script=format
[badge-check-lint]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=check&script=lint
[badge-ci-overall]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square
[badge-license]:
https://img.shields.io/badge/License-MPL%202.0-blue.svg?style=flat-square
[badge-nightly_freebsd-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_freebsd&script=build
[badge-nightly_freebsd-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_freebsd&script=test
[badge-nightly_linux-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_linux&script=build
[badge-nightly_linux-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_linux&script=test
[badge-nightly_macos-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_macos&script=build
[badge-nightly_macos-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_macos&script=test
[badge-nightly_windows-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_windows&script=build
[badge-nightly_windows-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_nightly_windows&script=test
[badge-oldest_freebsd-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_freebsd&script=build
[badge-oldest_freebsd-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_freebsd&script=test
[badge-oldest_linux-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_linux&script=build
[badge-oldest_linux-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_linux&script=test
[badge-oldest_macos-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_macos&script=build
[badge-oldest_macos-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_macos&script=test
[badge-oldest_windows-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_windows&script=build
[badge-oldest_windows-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_1.35.0_windows&script=test
[badge-stable_freebsd-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_freebsd&script=build
[badge-stable_freebsd-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_freebsd&script=test
[badge-stable_linux-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_linux&script=build
[badge-stable_linux-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_linux&script=test
[badge-stable_macos-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_macos&script=build
[badge-stable_macos-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_macos&script=test
[badge-stable_windows-build]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_windows&script=build
[badge-stable_windows-test]:
https://img.shields.io/cirrus/github/fnichol/limitation.svg?style=flat-square&task=test_stable_windows&script=test
[ci]: https://cirrus-ci.com/github/fnichol/limitation
[ci-master]: https://cirrus-ci.com/github/fnichol/limitation/master
[code-of-conduct]:
https://github.com/fnichol/limitation/blob/master/CODE_OF_CONDUCT.md
[commonmark]: https://commonmark.org/
[fnichol]: https://github.com/fnichol
[github]: https://github.com/fnichol/limitation
[issues]: https://github.com/fnichol/limitation/issues
[license]: https://github.com/fnichol/limitation/blob/master/LICENSE.txt