django-smart-ratelimit: Flexible, high-performance rate-limiting for Django

Hi everyone!

I’m excited to share django-smart-ratelimit v0.3.2—a lightweight, context-aware rate-limiting library for Django apps.

Key features:

  • :white_check_mark: Per-view, per-user (or API key) and global limits
  • :high_voltage: Blazing speed via atomic Redis Lua scripts
  • :stopwatch: Fixed-window & sliding-window algorithms
  • :electric_plug: Pluggable backends: Redis, database, in-memory
  • :puzzle_piece: Decorator + middleware APIs
  • :bar_chart: Standard RateLimit headers (Limit/Remaining/Reset)

Getting started is easy:

pip install django-smart-ratelimit
from smart_ratelimit.decorators import ratelimit

@ratelimit(key='user', rate='100/h', block=True)
def my_view(request):
    return HttpResponse("Hello, rate-limited Django!")

:link: PyPI: https://pypi.org/project/django-smart-ratelimit/
:link: GitHub & full roadmap: https://github.com/YasserShkeir/django-smart-ratelimit

I’d love to hear:

  • Your use cases or integration tips
  • Any issues you encounter or features you’d like to see
  • Performance feedback in real-world workloads

Thanks for checking it out—looking forward to your thoughts and contributions!
— Yasser Shkeir

3 Likes

Hello Django Community,

Released Django Smart Ratelimit v0.4.1 with two major features:

:fire: MongoDB Backend

  • TTL collections for automatic cleanup
  • High-performance rate limiting
  • Perfect for microservices

:bullseye: JWT-Based Rate Limiting

  • Rate limit by user roles/subscription tiers
  • API key management
  • Multi-tenant support

Example:

@rate_limit(
    key=jwt_role_key,
    rate='1000/h',
    algorithm='sliding_window',
    skip_if=lambda req: req.user.is_staff
)
def protected_api(request):
    return JsonResponse({'data': 'success'})

Installation: pip install django-smart-ratelimit[mongodb,jwt]

Backward compatible with existing v0.3.0 configurations.

Repository: GitHub - YasserShkeir/django-smart-ratelimit

Questions welcome!

Hello Django Community! :waving_hand:

I’m thrilled to announce the release of Django Smart Ratelimit v0.7.2, featuring significant improvements for production Django applications.

:new_button: Major New Features:

1. Token Bucket Algorithm The most requested feature is finally here! Unlike traditional fixed-window rate limiting, the token bucket algorithm provides intelligent burst handling:

@rate_limit(
    key='user',
    rate='100/h',  # Base rate
    algorithm='token_bucket',
    algorithm_config={
        'bucket_size': 200,  # Allow bursts up to 200 requests
        'refill_rate': 2.0,  # Refill 2 tokens per second
    }
)
def api_endpoint(request):
    return JsonResponse({'data': 'protected'})

2. Complete Type Safety

  • Full mypy compliance with strict type checking
  • Enhanced IDE support and developer experience
  • Safer code with better error detection

3. Security Hardening

  • Bandit security scanning integration
  • All security vulnerabilities resolved
  • Production-ready security standards

4. Enhanced Compatibility

  • Python 3.13 support
  • Django 5.1 compatibility
  • Backward compatible with existing code

:shield: Why Choose Django Smart Ratelimit:

  • Reliability: automatic failover
  • Performance: Sub-millisecond response times with Redis Lua scripts
  • Flexibility: 3 algorithms (token_bucket, sliding_window, fixed_window)
  • Scalability: 4 backend options (Redis, Database, Memory, Multi-Backend)
  • Integration: Native Django REST Framework support
  • Monitoring: Built-in health checks and metrics

:books: Resources:

Thank you for being part of the Django community, and I look forward to hearing how this helps your projects! :rocket:

Wow that is really impressive. I used to create a dynamic global dictionary to store individual IPs and tract their rate of hits on API or Pages.

This would save me a lot of time.

1 Like

I’m pleased to announce the release of django‑smart‑ratelimit v0.8.0

What’s New in v0.8.0

  • Circuit Breaker Pattern: automatic failure detection and recovery across Memory, Redis, Database, MongoDB & multi‑backend setups

  • Exponential Backoff: adaptive retry delays on consecutive failures

  • Built‑in by Default: zero‑config protection with sensible defaults

  • Full Customization: override globally or per‑backend, or disable if needed

  • No Breaking Changes: fully backward compatible

Highlights

Install
pip install django‑smart‑ratelimit==0.8.0

Resources
• GitHub Repo → https://github.com/YasserShkeir/django-smart-ratelimit
• Discussions & Support → https://github.com/YasserShkeir/django-smart-ratelimit/discussions

I welcome your feedback, use‑cases, and any issues you encounter. Thanks for trying it out!

— Yasser Shkeir