NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4395 most downloaded on PyPI
Flask/Marshmallow-based REST API framework
Last release 6 months ago
22 Mar 2026
Ships fairly regularly
a new release about every 3 months
Most releases are documented
notes for 39 of 51 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
51 releases · first in 2019
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Document webargs's DelimitedList (409).
Features:
Support apispec 6.0.0 (408).
Document webargs's DelimitedList (409).
Backwards-incompatible: Rework ETag feature. Drop the "ETag computed with API response data using another schema" case and allow decorating a whole MethodView at once rather than decorating each method. (394)
Other changes:
Backwards-incompatible: Drop apispec < 6.0.0 (408).
Backwards-incompatible: Drop marshmallow < 3.18.0 (410).
Use g rather than _app_ctx_stack.top. The latter is deprecated in Flask 2.2 (392).
Features:
Use g rather than _app_ctx_stack.top. The latter is deprecated in Flask 2.2 (392).
Use standard json rather than flask.json to generate ETag data. Our use of flask.json is broken in Flask 2.2. Also always sort keys when serializing data for ETag computation (this reverts 305). ETag is now insensitive to payload dict order. (393)
Bug fixes:
Import MethodView from flask rather than MethodViewType` which is removed in Flask 2.2 (387). Thanks 0x78f1935 for the contribution.
Add format argument to flask openapi print and flask openapi write commands to provide a YAML output (367). Thanks derlikh-smart for the contribution.
Features:
Add format argument to flask openapi print and flask openapi write commands to provide a YAML output (367). Thanks derlikh-smart for the contribution.
Support nested blueprints documentation (341). Thanks Cnoor0171 for the PR.
Features:
Support nested blueprints documentation (341). Thanks Cnoor0171 for the PR.
Add content_type argument to response and alt_response, to document a response content type that differs from the default one. It can be used to docum
Features:
Add content_type argument to response and alt_response, to document a response content type that differs from the default one. It can be used to document a file response. (330).
Add parameter argument to register_blueprint to document path parameters in url_prefix (313).
Features:
Add parameter argument to register_blueprint to document path parameters in url_prefix (313).
Don't force sort_keys=True in _generate_etag to respect JSON_SORT_KEYS app setting (305).
Bug fixes:
Fix automatic documentation of responses with a status code implying an empty body response to reflect that the body is empty (318).
Other changes:
Officially support Python 3.10 (308).
Drop support for Python 3.6 (306).
Drop PyPy from CI tests (307).
*Backwards-incompatible*: Modify alt_response signature. The second positional is now a response reference as string. If none is provided, then the re
Features:
Backwards-incompatible: Modify alt_response signature. The second positional is now a response reference as string. If none is provided, then the response dic is built using keyword arguments. The schema is optional and can be a reference as string. (283)
Allow alt_response to define a success response, so that other processings applying to this response are correctly documented (284).
Other changes:
Format code using black with pre-commit (282).
Use dependabot to update dependencies (286 and 288).
Specify apispec[marshmallow] rather than apispec in install_requires in setup.py (287).
Fix method order in spec for view functions (281).
Bug fixes:
Fix method order in spec for view functions (281).
Add tags parameter to Blueprint.route and Blueprint.add_url_rule (275).
Features:
Add tags parameter to Blueprint.route and Blueprint.add_url_rule (275).
Bug fixes:
When registering a MethodView, if methods are specified with the methods argument, only document those methods (274).
*Backwards-incompatible*: Lazy-register components (default responses, ETag and pagination headers) so that they only appear in the spec if they are u
Features:
Backwards-incompatible: Lazy-register components (default responses, ETag and pagination headers) so that they only appear in the spec if they are used. Remove ResponseReferencesPlugin. Rename PAGINATION_HEADER_FIELD_NAME to PAGINATION_HEADER_NAME. (268)
Override Blueprint.add_url_rule to allow the use of add_url_rule, not only the route decorated form (272).
Other changes:
Backwards-incompatible: Drop apispec < 5.1.0 (265)
Replace missing with load_default in PaginationParametersSchema. The latter is deprecated in marshmallow 3.13.0. (265)
Features:
Support Blueprint registration with custom names (a feature introduced in Flask 2.0.1) (266).
Replace missing with load_default in PaginationParametersSchema. The latter is deprecated in marshmallow 3.13.0. (265)
Other changes:
Backwards-incompatible: Drop marshmallow < 3.13.0 (265)
Backwards-incompatible: Support apispec 5. Drop apispec < 5.0.0 (265)
Quote RapiDoc parameters (262). Thanks TimDiekmann for the PR.
Bug fixes:
Quote RapiDoc parameters (262). Thanks TimDiekmann for the PR.
Document ETag headers in OpenAPI spec (254). Thanks TimDiekmann for the PR.
Bug fixes:
Document ETag headers in OpenAPI spec (254). Thanks TimDiekmann for the PR.
Use click.echo for spec output commands (255). Thanks greyli for the PR.
Support RapiDoc interface to expose the API spec (248).
Features:
Support RapiDoc interface to expose the API spec (248).
Support Flask 2 and Werkzeug 2 (243).
Features:
Support Flask 2 and Werkzeug 2 (243).
Other changes:
Backwards-incompatible: Drop Flask < 2 and Werkzeug < 2 (243).
Backwards-incompatible: Remove feature setting basePath from APPLICATION_ROOT (242).
*Backwards-incompatible*: Support webargs 8. Drop support for webargs 7. The main change is about management of unknown fields in requests. unknown de
Other changes:
Backwards-incompatible: Support webargs 8. Drop support for webargs 7. The main change is about management of unknown fields in requests. unknown defaults to None for body locations. (239)
*Backwards-incompatible*: In @response decorator, rename code argument to status_code and make it positional (193 and 159).
Features:
Backwards-incompatible: In @response decorator, rename code argument to status_code and make it positional (193 and 159).
Add Blueprint.alt_response decorator to document alternative responses (159).
Pass Api instance to _prepare_*_doc callbacks (222).
Features:
Pass Api instance to _prepare_*_doc callbacks (222).
Allow the user to opt-out of the feature adding a default error to each response and allow customization of the default error name (222).
Backwards-incompatible: Only add referenced default responses to the spec, using ResponseReferencesPlugin. (208) Thanks lindycoder for the pull-request.
Bug fixes:
Document error response even if @response decorator is not used (222).
Don't pass field metadata as kwargs (deprecated in marshmallow 3.10.0) (205).
Bug fixes:
Don't pass field metadata as kwargs (deprecated in marshmallow 3.10.0) (205).
Other changes:
Backwards-incompatible: Require marshmallow >= 3.10.0 (205).
*Backwards-incompatible*: Use warnings.warn rather than log warnings in application log (194).
Features:
Backwards-incompatible: Use warnings.warn rather than log warnings in application log (194).
Other changes:
Backwards-incompatible: Support webargs 7. Drop support for webargs 6. The main change is about management of unknown fields in requests. Users should refer to webargs documentation, sections Upgrading to 7.0 and Setting unknown. (203)
Officially support Python 3.9 (195).
Features:
Officially support Python 3.9 (195).
Other changes:
Bound dependencies versions in setup.py (202).
*Backwards-incompatible*: Rework Werkzeug converters documentation to make it more extensible and document converter parameters (182).
Features:
Backwards-incompatible: Rework Werkzeug converters documentation to make it more extensible and document converter parameters (182).
Backwards-incompatible: Don't document int format as "int32" and float format as "float", as those are platform-dependent (188).
Document Werkzeug's AnyConverter (191).
Other changes:
Backwards-incompatible: Drop support for marshmallow 2.
Backwards-incompatible: Drop support for apispec 3.
Fix bug introduced in 0.24.0 preventing setting a status code or header when returning a Response object. (178). Thanks @marksantcroos for reporting.
Bug fixes:
Response object. (:pr:178).
Thanks :user:@marksantcroos for reporting.Bug fixes:
Fix bug introduced in 0.24.0 preventing setting a status code or header when returning a Response object. (178). Thanks marksantcroos for reporting.
*Backwards-incompatible*: Add OPENAPI_SWAGGER_UI_CONFIG to allow passing a dict of Swagger UI configuration parameters. Remove OPENAPI_SWAGGER_UI_SUPP
Features:
OPENAPI_SWAGGER_UI_CONFIG to allow passing
a dict of Swagger UI configuration parameters. Remove
OPENAPI_SWAGGER_UI_SUPPORTED_SUBMIT_METHODS: the same can be achieved by
passing supportedSubmitMethods in OPENAPI_SWAGGER_UI_CONFIG. Remove
layout and deepLinking default overrides. Those can be passed in
OPENAPI_SWAGGER_UI_CONFIG as well. (:pr:171).
Thanks :user:joshua-harrison-2011 for the pull-request.*Backwards-incompatible*: Make API title and version mandatory parameters. Before this change, the version would default to "1" and the title would be
Features:
Backwards-incompatible: Make API title and version mandatory parameters.
Before this change, the version would default to "1" and the title would
be app.name. Those two parameters can be passed at init or as application
configuration parameters TITLE and API_VERSION. Also rename
OpenAPIVersionNotSpecified as MissingAPIParameterError. (:pr:169).
Thanks :user:playpauseandstop for the help on this.
Backwards-incompatible: Rework pagination documentation to allow more
customization. This change will break code overriding
PAGINATION_HEADER_DOC, _make_pagination_header or
_prepare_pagination_doc (:pr:153).
Add flask openapi print and flask openapi write commands (154).
Features:
flask openapi print and flask openapi write commands (:pr:154).Other changes:
Use HTTPStatus phrase, not name, in response description (158).
Bug fixes:
phrase, not name, in response description (:pr:158).Deep-copy the documentation information for each method of a resource. This fixes a crash when a view function serves several methods, due to apispec
Bug fixes:
147)
Thanks :user:DrChrisLevy for reporting.*Backwards-incompatible*: Drop support for webargs < 6.0.0 (132).
Features:
132).Other changes:
132).Features:
Support webargs 6.0.0 (132).
Other changes:
Backwards-incompatible: Drop support for webargs < 6.0.0. Marshmallow 3 code with stacked @arguments using the same location must ensure the arguments schema have Meta.unknown=EXCLUDE. This also applies to @arguments with query location stacked with @paginate. Also, validation error messages are namespaced under the location. See the upgrading guide in webargs documentation for more details and a comprehensive list of changes. (132)
*Backwards-incompatible*: Use HTTPStatus name rather than phrase to name error components. This fixes an issue due to phrase containing spaces not bei
Bug fixes:
HTTPStatus name rather than phrase
to name error components. This fixes an issue due to phrase containing
spaces not being URL-encoded. Also change DefaultError into
DEFAULT_ERROR for consistency. This change will break code referencing
one of those errors. (:issue:136).
Thanks :user:michelle-avery for reporting.Other changes:
OPENAPI_REDOC_VERSION and
OPENAPI_SWAGGER_UI_VERSION. Remove hardcoded CDNs. Users should modify
their code to use OPENAPI_REDOC_URL and OPENAPI_SWAGGER_UI_URL
instead. The docs provide examples of CDN URLs. (:issue:134).Fix utils.deepupdate for the case where the original value is a string or integer and the updated value is a dict (129). Thanks maj-skymedia for repor
Bug fixes:
utils.deepupdate for the case where the original value is a string or
integer and the updated value is a dict (:issue:129).
Thanks :user:maj-skymedia for reporting.Fix a regression introduced in 0.19.0. With marshmallow 2, the response would contain two 'X-Pagination' headers: the correct header and an empty one.
Bug fixes:
'X-Pagination' headers: the correct header and an empty one.
(:pr:128)*Backwards-incompatible*: Refactor automatic documentation generation. At import time, each decorator stores information under its own namespace in th
Features:
Backwards-incompatible: Refactor automatic documentation generation. At
import time, each decorator stores information under its own namespace in
the view function's _apidoc attribute. Then at app init time, the
information is used to generate the docs. This allows access to init time
parameters, such as OpenAPI version or application parameters like feature
toggle flags, when generating the doc. Custom decorators storing doc in
_apidoc must adapt by storing doc under their own name (e.g.:
_apidoc['custom']), creating a doc preparation callback (e.g.:
_prepare_custom_doc and appending this callback to
Blueprint._prepare_doc_cbks. (:pr:123).
Define all possible HTTP responses as response components and automatically
document "error" responses: "Default Error" when @response is used,
response returned by @arguments on client input error, and responses for
304, 412 and 428 when @etag is used. Also document pagination header.
(:pr:125).
Document error response in @paginate decorator (:pr:126).
Bug fixes:
'page' and 'page_size' arguments passed in any other location are
ignored by @paginate decorator. (:pr:127)Restrict webargs to <6.0.0 in setup.py due to breaking changes introduced in webargs 6 (117).
Other changes:
117).check_etag logs a warning if method is not PUT, PATCH or DELETE (116).
Features:
check_etag logs a warning if method is not PUT, PATCH or DELETE
(:pr:116).Bug fixes:
115).Add default description to responses (113). Thanks nonnib for the pull-request.
Features:
113).
Thanks :user:nonnib for the pull-request.Official Python 3.8 support (108).
Features:
108).Fix passing spec_kwargs in Api.__init__ and app in Api.init_app (103).
Bug fixes:
spec_kwargs in Api.__init__ and app in
Api.init_app (:issue:103).Rename to flask-smorest (42).
Rename to flask-smorest (:issue:42).
Your coding agent can read these notes before it upgrades. Set up the MCP server →