# Changelog All notable changes to fastapi-traffic will be documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.3.1] - 2026-03-19 ### Changed - Updated documentation version references to match release version - Synchronized docs/changelog.rst with CHANGELOG.md ## [0.3.0] - 2026-03-17 ### Added - Expanded example scripts with improved docstrings and usage patterns - New `00_basic_usage.py` example for getting started quickly ### Changed - Refactored Redis backend connection handling for improved reliability - Updated algorithm implementations with cleaner type annotations - Improved config loader validation with stricter Pydantic schemas - Enhanced decorator and middleware error handling - Reorganized examples directory structure (removed legacy `basic_usage.py`) ### Fixed - Redis backend connection pool management edge cases - Type annotation inconsistencies across core modules ## [0.2.1] - 2026-03-12 ### Fixed - Test assertion bug in `test_load_rate_limit_config_from_env_missing_limit` test case within `test_config_loader.py`. ## [0.2.0] - 2026-02-04 ### Added - **Configuration Loader** - Load rate limiting configuration from external files: - `ConfigLoader` class for loading `RateLimitConfig` and `GlobalConfig` - Support for `.env` files with `FASTAPI_TRAFFIC_*` prefixed variables - Support for JSON configuration files - Environment variable loading with `load_rate_limit_config_from_env()` and `load_global_config_from_env()` - Auto-detection of file format with `load_rate_limit_config()` and `load_global_config()` - Custom environment variable prefix support - Type validation and comprehensive error handling - 47 new tests for configuration loading - Example `11_config_loader.py` demonstrating all configuration loading patterns - `get_stats()` method to `MemoryBackend` for consistency with `RedisBackend` - Comprehensive test suite with 134 tests covering: - All five rate limiting algorithms with timing and concurrency tests - Backend tests for Memory and SQLite with edge cases - Decorator and middleware integration tests - Exception handling and configuration validation - End-to-end integration tests with FastAPI apps - `httpx` and `pytest-asyncio` as dev dependencies for testing ### Changed - Improved documentation in README.md and DEVELOPMENT.md - Added `asyncio_default_fixture_loop_scope` config for pytest-asyncio compatibility ## [0.1.0] - 2025-01-09 Initial release. ### Added - Core rate limiting with `@rate_limit` decorator - Five algorithms: Token Bucket, Sliding Window, Fixed Window, Leaky Bucket, Sliding Window Counter - Three storage backends: Memory (default), SQLite (persistent), Redis (distributed) - Middleware support for global rate limiting via `RateLimitMiddleware` - Dependency injection support with `RateLimitDependency` - Custom key extractors for flexible rate limit grouping (by IP, API key, user, etc.) - Configurable exemptions with `exempt_when` callback - Rate limit headers (`X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`) - `RateLimitExceeded` exception with `retry_after` and `limit_info` - Full async support throughout - Strict type hints (pyright/mypy compatible) - Redis backend with Lua scripts for atomic operations - SQLite backend with WAL mode and connection pooling - Memory backend with LRU eviction and TTL cleanup