NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1726 most downloaded on PyPI
Production-ready community-driven modern Stripe-like API versioning in FastAPI
Last release 14 days ago
20 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
3 years old
143 releases · first in 2023
One column per quarter.
Bump js-yaml from 4.3.1 to 4.3.2 in the npm_and_yarn group across 1 directory by @dependabot [bot] in #409
Full Changelog: 7.3.0...7.4.0
Fix dependency update checks for ty and AnyIO deprecations by @zmievsa in #406
Full Changelog: 7.2.0...7.3.0
classmethod binding of @field_serializer decorators during model generation. Previously, such serializers were re-registered as instance methods, shifting their arguments by one and raising PydanticSerializationError on every serialization.Deprecate changelog generation by @zmievsa in #402
GET /changelog endpoint, Cadwyn.generate_changelog(), cadwyn.hidden(), and the changelog_url and include_changelog_url_in_schema constructor arguments. The feature remains available for backwards compatibility.Clarify contributor setup commands by @zmievsa in #387
Full Changelog: 7.1.1...7.1.2
what, when, and expected convention and documented test organization (#397)Bump starlette from 1.2.1 to 1.3.1 in the uv group across 1 directory by @dependabot [bot] in #380
Full Changelog: 7.1.0...7.1.1
Improve documentation 19 by @Shigerman in #377
Full Changelog: 7.0.0...7.1.0
Breaking change if you relied on lifespan running multiple times: Fix duplicated lifecycle callbacks in Cadwyn routers by @zmievsa in #375
Full Changelog: 6.2.2...7.0.0
Cadwyn.mount() routes, including StaticFiles, returning 404 instead of being served as unversioned routes (#374)Support disabling separate input and output schemas by @kouk in #369
Full Changelog: 6.2.1...6.2.2
Bump requests from 2.32.5 to 2.33.0 in the uv group across 1 directory by @dependabot [bot] in #362
response_model not being respected on routes. Fixes #365 by @kouk in #366openapi_tags to only include tags used by served routes (#368)Full Changelog: 6.2.0...6.2.1
openapi_tags to only include tags used by served routes (#368)response_model not being respected on routes (#365)Add support for overriding static assets for swagger/redoc
Full Changelog: 6.1.1...6.2.0
swagger_js_url, swagger_css_url, swagger_favicon_url, redoc_js_url, and redoc_favicon_url parameters to Cadwyn for customizing docs static asset URLs (#361)Fix compatibility with starlette==1.0.0
Full Changelog: 6.1.0...6.1.1
TemplateResponse(name, context) calling conventionAdd request.form data migration support by @zmievsa in #359
Full Changelog: 6.0.4...6.1.0
form property to RequestInfo for reading and modifying multipart/form-encoded fields (strings and file uploads) inside convert_request_to_next_version_for handlers (#359)RouterPathParamsModifiedError when renaming path-versioned endpoints (#357)Resolve '__getitem__' requires a 'typing.Union' error by @ulgens in https://github.com/zmievsa/cadwyn/pull/336
'__getitem__' requires a 'typing.Union' error by @ulgens in https://github.com/zmievsa/cadwyn/pull/336Full Changelog: https://github.com/zmievsa/cadwyn/compare/6.0.3...6.0.4
Depend leading to RecursionError in generate_versioned_routers by @Shigerman (#329)'__getitem__' requires a 'typing.Union' error by @ulgens (#336)http.cookies changes by @ulgens (#338)Tolerate FastAPI 0.128+ utils removal, restrict fastapi >= 0.128.6 by @shahar1 in https://github.com/zmievsa/cadwyn/pull/327
Full Changelog: https://github.com/zmievsa/cadwyn/compare/6.0.2...6.0.3
Bump urllib3 from 2.6.2 to 2.6.3 in the uv group across 1 directory by @dependabot[bot] in https://github.com/zmievsa/cadwyn/pull/323
...has no attribute '__annotations__' error by @ulgens in https://github.com/zmievsa/cadwyn/pull/334Full Changelog: https://github.com/zmievsa/cadwyn/compare/6.0.1...6.0.2
...has no attribute '__annotations__' error by @ulgens (#334)Improve documentation 12 by @Shigerman in https://github.com/zmievsa/cadwyn/pull/318
Full Changelog: https://github.com/zmievsa/cadwyn/compare/6.0.0...6.0.1
from __future__ import annotations. Note that this introduces another problem in python 3.9 in the same case that is currently not yet solved (#321)Add support for fastapi>=0.128.0 by @zmievsa in https://github.com/zmievsa/cadwyn/pull/317
Full Changelog: https://github.com/zmievsa/cadwyn/compare/6.0.0.rc1...6.0.0
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.6.2...6.0.0.rc1
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.6.2...6.0.0.rc1
improve documentation-9 by @Shigerman in https://github.com/zmievsa/cadwyn/pull/307
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.6.1...5.6.2
_prepare_response_content may return Pydantic model instances instead of dicts, breaking response migrations (#314)Add support for generics by @EgorOnishchuk in https://github.com/zmievsa/cadwyn/pull/303
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.6.0...5.6.1
improve documentation-8 by @Shigerman in https://github.com/zmievsa/cadwyn/pull/299
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.5.0...5.6.0
Fix the OpenAPI schema bug in airflow
Fix the OpenAPI schema bug in airflow
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.5.0...5.5.1
Fix the rest of the issues from fastapi==0.119.0
Fix the rest of the issues from fastapi==0.119.0
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.4.5...5.5.0
Fix the OpenAPI schema bug in airflow
Fix the OpenAPI schema bug in airflow
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.4.5...5.4.6
Fix GenerateJsonSchema getting removed in latest fastapi release
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.4.4...5.4.5
Add support for classvars by @zmievsa in https://github.com/zmievsa/cadwyn/pull/292
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.4.3...5.4.4
Fix reported vulnerability by @zmievsa in https://github.com/zmievsa/cadwyn/pull/290
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.4.2...5.4.3
/docs and /redoc endpoints where the version parameter was not properly sanitized, allowing potential cross-site scripting attacksimprove text in docs by @Shigerman in https://github.com/zmievsa/cadwyn/pull/285
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.4.1...5.4.2
improve_text_in_readme by @Shigerman in https://github.com/zmievsa/cadwyn/pull/276
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.3.3...5.4.1
Add project favicon to docs by @c4chula in https://github.com/zmievsa/cadwyn/pull/275
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.3.2...5.3.3
Add support for pydantic_settings.BaseSettings in dependencies by @zmievsa (#250) Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.3.1...5.
pydantic_settings.BaseSettings in dependencies by @zmievsa (#250)
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.3.1...5.3.2Fix invalid content-length header with custom exception handlers (#273) by @zmievsa
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.3.0...5.3.1
Add the ability to customize the title and description of the api version parameter by @zmievsa in https://github.com/zmievsa/cadwyn/pull/274
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.2.2...5.3.0
api_version_title and api_version_description arguments to Cadwyn to allow customizing the API version parameter in the OpenAPI schemaFix invalid route path used in by path migrations by @zmievsa in https://github.com/zmievsa/cadwyn/pull/271
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.2.1...5.2.2
/docs return 404 after adding api_version_default_value #268 by @zmievsa in https://github.com/zmievsa/cadwyn/pull/269
/docs return 404 after adding api_version_default_value #268 by @zmievsa in https://github.com/zmievsa/cadwyn/pull/269Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.2.0...5.2.1
Fix two remaining uses of the old-style of declaring version changes by @ashb in https://github.com/zmievsa/cadwyn/pull/266
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.1.4...5.2.0
a bug where a custom HTTP exception was not being copied correctly so its unique properties are ignored
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.1.3...5.1.4
__doc__ attribute is now copied from the original enum to the generated enum
__doc__ attribute is now copied from the original enum to the generated enumpydantic.JsonValue and other typing_extensions.TypeAliasType instances)Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.1.2...5.1.3
Fix generator dependencies not being converted correctly and add cadwyn.current_dependency_solver by @zmievsa in https://github.com/zmievsa/cadwyn/pul
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.1.1...5.1.2
cadwyn.current_dependency_solver function to check whether cadwyn or FastAPI is currently solving dependencies. It can be used as a dependency for versioned endpoints like so: current_dependency_solver: Annotated[Literal["fastapi", "cadwyn"], Depends(current_dependency_solver)]. If your dependency has side effects, you would likely want to only run it once per request. If you want to run it once we migrated the request to the latest version, you should only run it when current_dependency_solver is "cadwyn". If you want your dependency to run at the very beginning of handling the request, you should only run it when current_dependency_solver is "fastapi".Copy field annotations when building versioned models with future annotations by @ashb in https://github.com/zmievsa/cadwyn/pull/257
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.1.0...5.1.1
Fix coverage by @zmievsa in https://github.com/zmievsa/cadwyn/pull/253
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.0.0...5.1.0
Fix coverage by @zmievsa in https://github.com/zmievsa/cadwyn/pull/253
Full Changelog: https://github.com/zmievsa/cadwyn/compare/5.0.0...5.1.0a1
## What's Changed * #251 add support for string versions and versions as URL path prefixes by @zmievsa in https://github.com/zmievsa/cadwyn/pull/252 F
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.6.0...5.0.0
api_version_location argument of cadwyn.Cadwyn.api_version_format argument of cadwyn.Cadwyn.VersionPickingMiddleware class that you can pass to the versioning_middleware_class argument of cadwyn.Cadwyn.api_version_default_value argument to cadwyn.Cadwyn to set a default version for unversioned requests. It can be a string or an async callable that returns a string.cadwyn.Version, cadwyn.VersionBundle, and cadwyn.VersionBundle.api_version_var now store versions as strings instead of dates. Date types can still be passed to cadwyn.Version but there is no guarantee that they will be supported in the future. However, ISO dates with a string type are guaranteed to be supported.api_version_header_name argument is now deprecated in favor of api_version_parameter_namecadwyn.Cadwyn.add_header_versioned_routers method is now deprecated in favor of cadwyn.Cadwyn.generate_and_include_versioned_routers. It will be removed in version 6.0.0## What's Changed * #251 : add support for string versions and versions as URL path prefixes by @zmievsa in https://github.com/zmievsa/cadwyn/pull/252
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.6.0...5.0.0a1
Fix: Route params (query or post) with future annotations gives "not fully defined" error #246 by @zmievsa in https://github.com/zmievsa/cadwyn/pull/2
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.5.0...4.6.0
schema.had() and schema.didnt_have(): field_title_generator, fail_fast, coerce_numbers_to_str, union_mode, allow_mutation, pattern, discriminatorfrom __future__ import annotations in the file with your routes)Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.5.0...4.6.0-alpha.1
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.5.0...4.6.0-alpha.1
Add check usage argument to converters by @zmievsa in https://github.com/zmievsa/cadwyn/pull/245
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.4.5...4.5.0
check_usage argument to request/response by schema converters. Cadwyn always checks whether a schema mentioned in a converter applies to one or more endpoints to guarantee that the converter will apply to at least one endpoint. Sometimes, however, you do not need this validation. For example, when you use these converters for converting webhook bodies. Setting check_usage=False makes it possible to skip the validationConfigure pytest to ignore known DeprecationWarnings by @kurtmckee in https://github.com/zmievsa/cadwyn/pull/233
actions/(upload|download)-artifact to v4 by @kurtmckee in https://github.com/zmievsa/cadwyn/pull/235actions/download-artifact@v4 by @kurtmckee in https://github.com/zmievsa/cadwyn/pull/238DeprecationWarnings by @kurtmckee in https://github.com/zmievsa/cadwyn/pull/233Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.4.3...4.4.5
Update packages by @zmievsa in https://github.com/zmievsa/cadwyn/pull/228
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.4.2...4.4.3
Fix dependency overrides for class instances by @zmievsa in https://github.com/zmievsa/cadwyn/pull/227
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.4.1...4.4.2
Add python 3.13 to CI and pypi by @zmievsa in https://github.com/zmievsa/cadwyn/pull/225
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.4.0...4.4.1
Separate tutorial tests in CI by @zmievsa in https://github.com/zmievsa/cadwyn/pull/222
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.3.1...4.4.0
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.3.0...4.3.1
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.3.0...4.3.1
[Dependencies] migrate from poetry to uv by @bastienpo in https://github.com/zmievsa/cadwyn/pull/219
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.2.4...4.3.0
standard extras group to mirror FastAPI (Contributed by @bastienpo)Add doctests by @zmievsa in https://github.com/zmievsa/cadwyn/pull/211
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.2.3...4.2.4
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.2.2...4.2.3
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.2.2...4.2.3
embed_body_fields in solve_dependencies and create_model_field in FastAPI. FastAPI has made a breaking change for these interfaces which is why we had to fix itAdd summary to generated openapi spec by @OD-tpeko in https://github.com/zmievsa/cadwyn/pull/208
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.2.1...4.2.2
summary field (Contributed by @OD-tpeko)Support root path in version dashboard docs by @OD-tpeko in https://github.com/zmievsa/cadwyn/pull/206
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.2.0...4.2.1
Add changelogs by @zmievsa in https://github.com/zmievsa/cadwyn/pull/205
Full Changelog: https://github.com/zmievsa/cadwyn/compare/4.1.0...4.2.0
Cadwyn.generate_changelog method and GET /changelog endpoint.VersionBundle passed to Cadwyn which means that all versions mentioned in the version bundle will already be available for routing even without the use of generate_and_include_versioned_routersFix quickstart tutorial link by @Kilo59 in https://github.com/zmievsa/cadwyn/pull/204
quickstart tutorial link by @Kilo59 in https://github.com/zmievsa/cadwyn/pull/204cadwyn.generate_versioned_models that allow you to generate pydantic models and enums even without a FastAPI appFull Changelog: https://github.com/zmievsa/cadwyn/compare/4.0.0...4.1.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →