mirror of
https://github.com/kennethreitz/responder.git
synced 2026-06-05 06:46:14 +00:00
2f5e46e233
Add configurable GZip compression via `gzip` parameter on API(). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
14 KiB
14 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
v3.6.1 - 2026-04-12
Added
- Configurable GZip compression via
gzipparameter onAPI()(defaults toTrue)
v3.6.0 - 2026-03-24
Added
- Built-in structured logging with per-request context (
enable_logging=True)api.log— always-available logger, enriched with request context when logging is enabled- Automatic access logging with timing:
GET /path → 200 (1.2ms) - Request ID generation/forwarding via
X-Request-IDheader contextvars-based request context (ID, method, path, client IP) on every log recordresponder.ext.loggingmodule:get_logger(),RequestContext,RequestContextFilter
- CLAUDE.md project guide and
/releasecommand - Version number in docs sidebar
Changed
- Comprehensive documentation improvements across all pages
- Deployment: health checks, Docker Compose, Caddy, Procfile, production checklist
- API reference: usage examples for every class
- Feature tour: Pydantic validation, content negotiation, structured logging sections
- Tutorials: modernized SQLAlchemy to
mapped_column(), fixed deprecateddatetime.utcnow(), WebSocketWebSocketDisconnecthandling, role-based auth, auth strategy guide - Testing: rate limiting and WSGI mount examples
- Middleware: pure ASGI middleware example
- Quickstart: links to all tutorials
- Sandbox: full rewrite with project layout
- Docker example uses
uvinstead of pip - Backlog updated: removed implemented features, replaced HTTP/2 server push with dependency injection
Removed
uv.lock— this is a library, not an application
v3.5.0 - 2026-03-24
Added
- CI validation for Python 3.14, 3.14 free-threaded, and PyPy 3.11
- Marimo notebook mounting docs and example
- Type annotations for
routes.py
Changed
- Replaced deprecated
asyncio.iscoroutinefunctionwithinspect.iscoroutinefunctionahead of Python 3.16 removal - Narrowed broad
except Exceptionto specific exceptions in response model serialization and websocket chat example - Improved GraphQL API interface with expanded test coverage
- Code formatting cleanup via pyproject-fmt and ruff
- Dropped Python 3.9 from CI
Fixed
- WSGI mount returning 400 when requesting the exact mount root path
- Werkzeug 3.1.7 compatibility for trusted host validation in tests
future.resultbare property access in background task test (now properly callsfuture.result())- OpenAPI template packaging and static file serving
- RST title underline warning breaking docs CI
Removed
- Read the Docs configuration (docs hosted on GitHub Pages)
v3.4.0 - 2026-03-22
Changed
- Upgraded to Starlette 1.0
- Added comprehensive docstrings across the codebase
- Expanded API reference documentation
v3.3.0 - 2026-03-22
Added
- Full documentation rewrite: tutorials for REST APIs, SQLAlchemy, Flask migration
- Auth, WebSocket, middleware, and configuration guides
- Testing docs with prose, examples, and tips
- GitHub Pages deployment for docs
Changed
- Reworked homepage prose
- Rewrote CLI and API reference docs
v3.2.0 - 2026-03-22
Added
- Pydantic auto-validation:
request_modelvalidates input, returns 422 on failure - Pydantic auto-serialization:
response_modelstrips extra fields from responses - Server-Sent Events:
@resp.ssefor real-time streaming resp.stream_file()for streaming large files without loading into memory@api.after_request()hooksapi.group("/prefix")for route groups and API versioningapi.graphql("/path", schema=schema)one-liner GraphQL setupapi = responder.API(request_id=True)for automatic request ID generation- Built-in rate limiter:
RateLimiter(requests=100, period=60).install(api) - MessagePack format support:
await req.media("msgpack") req.is_json,req.path_params,req.clientpropertiesapi.exception_handler()decorator for custom error handling- Lifespan context manager support
uuidandpathroute convertors- PEP 561
py.typedmarker - Pydantic support for OpenAPI schema generation
Changed
- Dependencies flattened:
pip install respondergets everything - Core deps reduced to starlette + uvicorn
- TestClient lazy-loaded (no httpx import in production)
- Before-request hooks can short-circuit by setting status code
- Removed poethepoet task runner
Fixed
- Multipart parser losing headers when parts have multiple headers
url_for()with typed route params ({id:int})resp.bodyencoding crash on bytes content- GraphQL text query missing
await - Streaming responses not sending Content-Type headers
- Python 3.9 compatibility for union type syntax
v3.0.0 - 2026-03-22
Added
- Platform: Added support for Python 3.10 - Python 3.13
- CLI:
responder runnow also accepts a filesystem path on its<target>argument, enabling usage on single-file applications. - CLI:
responder runnow also accepts URLs.
Changed
- Platform: Minimum Python version is now 3.9 (dropped 3.6, 3.7, 3.8)
- Dependencies: Dramatically reduced core dependency count (10 → 5)
- Removed
requests,requests-toolbelt,rfc3986,whitenoise - Moved
apispecandmarshmallowtoopenapioptional extra - Replaced
rfc3986with stdliburllib.parse - Replaced
requests-toolbeltmultipart decoder withpython-multipart - Replaced deprecated
starlette.middleware.wsgiwitha2wsgi - Switched from WhiteNoise to ServeStatic
- Removed
- Dependencies: Pinned
starlette[full]>=0.40(was unpinned) - GraphQL: Upgraded to
graphene>=3andgraphql-core>=3.1(fromgraphene<3andgraphql-server-core, which is unmaintained) - GraphQL: Updated GraphiQL UI from 0.12.0 (2018) to 3.0.6 with React 18
- Extensions: All of CLI-, GraphQL-, and OpenAPI-Support modules are
extensions now, found within the
responder.extmodule namespace. - Packaging: Migrated from
setup.pyto declarativepyproject.toml
Removed
- Platform: Removed support for EOL Python 3.6, 3.7, 3.8
- Status codes: Removed deprecated
resume_incompleteandresumealiases for HTTP 308 (marked for removal in 3.0) - CLI:
responder run --buildceased to exist
Fixed
- Routing: Fixed dispatching
static_route=Noneon Windows - uvicorn:
--debugnow maps to uvicorn'slog_level = "debug" - Tests: Fixed deprecated httpx TestClient usage
v2.0.5 - 2019-12-15
Added
- Update requirements to support python 3.8
v2.0.4 - 2019-11-19
Fixed
- Fix static app resolving
v2.0.3 - 2019-09-20
Fixed
- Fix template conflicts
v2.0.2 - 2019-09-20
Fixed
- Fix template conflicts
v2.0.1 - 2019-09-20
Fixed
- Fix template import
v2.0.0 - 2019-09-19
Changed
- Refactor Router and Schema
v1.3.2 - 2019-08-15
Added
- ASGI 3 support
- CI tests for python 3.8-dev
- Now requests have
statea mapping object
Deprecated
- ASGI 2
v1.3.1 - 2019-04-28
Added
- Route params Converters
- Add search for documentation pages
Changed
- Bump dependencies
v1.3.0 - 2019-02-22
Fixed
- Versioning issue
- Multiple cookies.
- Whitenoise returns not found.
- Other bugfixes.
Added
- Stream support via
resp.stream. - Cookie directives via
resp.set_cookie. - Add
resp.htmlto send HTML. - Other improvements.
v1.1.3 - 2019-01-12
Changed
- Refactor
_route_for
Fixed
- Resolve startup/shutdwown events
v1.2.0 - 2018-12-29
Added
- Documentations
Changed
- Use Starlette's LifeSpan middleware
- Update denpendencies
Fixed
- Fix route.is_class_based
- Fix test_500
- Typos
v1.1.2 - 2018-11-11
Fixed
- Minor fixes for Open API
- Typos
v1.1.1 - 2018-10-29
Changed
- Run sync views in a threadpoolexecutor.
v1.1.0 - 2018-10-27
Added
- Support for
before_request.
v1.0.5- 2018-10-27
Fixed
- Fix sessions.
v1.0.4 - 2018-10-27
Fixed
- Potential bufix for cookies.
v1.0.3 - 2018-10-27
Fixed
- Bugfix for redirects.
v1.0.2 - 2018-10-27
Changed
- Improvement for static file hosting.
v1.0.1 - 2018-10-26
Changed
- Improve cors configuration settings.
v1.0.0 - 2018-10-26
Changed
- Move GraphQL support into a built-in plugin.
v0.3.3 - 2018-10-25
Added
- CORS support
Changed
- Improved exceptions.
v0.3.2 - 2018-10-25
Changed
- Subtle improvements.
v0.3.1 - 2018-10-24
Fixed
- Packaging fix.
v0.3.0 - 2018-10-24
Changed
- Interactive Documentation endpoint.
- Minor improvements.
v0.2.3 - 2018-10-24
Changed
- Overall improvements.
v0.2.2 - 2018-10-23
Added
- Show traceback info when background tasks raise exceptions.
v0.2.1 - 2018-10-23
Added
- api.requests.
v0.2.0 - 2018-10-22
Added
- WebSocket support.
v0.1.6 - 2018-10-20
Added
- 500 support.
v0.1.5 - 2018-10-20
Added
- File upload support
Changed
- Improvements to sequential media reading.
v0.1.4 - 2018-10-19
Fixed
- Stability.
v0.1.3 - 2018-10-18
Added
- Sessions support.
v0.1.2 - 2018-10-18
Added
- Cookies support.
v0.1.1 - 2018-10-17
Changed
- Default routes.
v0.1.0 - 2018-10-17
Added
- Prototype of static application support.
v0.0.10 - 2018-10-17
Fixed
- Bugfix for async class-based views.
v0.0.9 - 2018-10-17
Fixed
- Bugfix for async class-based views.
v0.0.8 - 2018-10-17
Added
- GraphiQL Support.
Changed
- Improvement to route selection.
v0.0.7 - 2018-10-16
Changed
- Immutable Request object.
v0.0.6 - 2018-10-16
Added
- Ability to mount WSGI apps.
- Supply content-type when serving up the schema.
v0.0.5 - 2018-10-15
Added
- OpenAPI Schema support.
- Safe load/dump yaml.
v0.0.4 - 2018-10-15
Added
- Asynchronous support for data uploads.
Fixed
- Bug fixes.
v0.0.3 - 2018-10-13
Fixed
- Bug fixes.
v0.0.2 - 2018-10-13
Changed
- Switch to ASGI/Starlette.
v0.0.1 - 2018-10-12
Added
- Conception!