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.
Unreleased¶
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 removalNarrowed broad
except Exceptionto specific exceptions in response model serialization and websocket chat exampleImproved 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 failurePydantic auto-serialization:
response_modelstrips extra fields from responsesServer-Sent Events:
@resp.ssefor real-time streamingresp.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 generationBuilt-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 handlingLifespan context manager support
uuidandpathroute convertorsPEP 561
py.typedmarkerPydantic support for OpenAPI schema generation
Changed¶
Dependencies flattened:
pip install respondergets everythingCore 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 contentGraphQL text query missing
awaitStreaming 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,whitenoiseMoved
apispecandmarshmallowtoopenapioptional extraReplaced
rfc3986with stdliburllib.parseReplaced
requests-toolbeltmultipart decoder withpython-multipartReplaced deprecated
starlette.middleware.wsgiwitha2wsgiSwitched from WhiteNoise to ServeStatic
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 Windowsuvicorn:
--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!