Skip to main content

fastapi-router-variants

Latest Version MIT License Build Status Codecov semantic-release

Declare a route once and get path variants, API versioning and per-version OpenAPI documentation for FastAPI — for free.

fastapi-router-variants wraps APIRouter with a RouterWrapper that expands a single route declaration into every variant it should serve — multiple paths, multiple version prefixes (/v1/..., /v2/...), multiple mount prefixes, with deprecation handled automatically — then builds a separate OpenAPI schema per version and mounts Swagger UI / ReDoc / openapi.json for each of them.

Install

pip install fastapi-router-variants
# or
uv add fastapi-router-variants

Usage

from fastapi import FastAPI

from fastapi_router_variants import RouterDefaults, RouterWrapper


class ApiDefaults(RouterDefaults):
    prefix = "/api"           # mount every route under /api
    version = True            # force versioning on every route
    version_range = (1, 3)    # generate v1, v2, v3
    version_default = 3       # the version served on unversioned doc URLs


RouterWrapper.defaults = ApiDefaults()

router = RouterWrapper()


@router.get("/users/{user_id}")
def get_user(user_id: int) -> dict[str, int]:
    return {"id": user_id}


app = FastAPI()
app.include_router(router.base)

The single get declaration above registers GET /api/v1/users/{user_id}, GET /api/v2/users/{user_id} and GET /api/v3/users/{user_id}.

Path variants and flavors, versioning helpers, routing specs, per-version OpenAPI documents, custom categories and HTTP-error auto-documentation are all covered in the documentation.

Documentation

Full documentation is available at toilal.github.io/fastapi-router-variants. A preview of the in-progress develop branch is published at toilal.github.io/fastapi-router-variants/dev.

Requirements

  • Python ≥ 3.12
  • FastAPI ≥ 0.115

License

MIT © Rémi Alvergnat

CHANGELOG

v0.2.2 (2026-07-25)

Bug Fixes

  • openapi: Clarify WebSocket route rebinding (26360ed)

  • openapi: Document preserved dependency overrides (ce4e7f5)

  • openapi: Isolate flattened routes between apps (62b7161)

  • openapi: Preserve overrides when flattening routers (13b8175)

  • openapi: Remove project-specific changelog entry (36d8fc8)

  • openapi: Remove project-specific implementation notes (e2150fc)

v0.2.1 (2026-07-20)

Bug Fixes

  • Flatten lazily-mounted routers to avoid FastAPI >=0.139 memory regression (#15, 21db307)

v0.2.0 (2026-07-05)

Features

v0.1.0 (2026-07-05)

  • Initial Release

Changelog entries are generated automatically by python-semantic-release from Conventional Commits on release.

Release files for fastapi-router-variants 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-router-variants 0.2.2
File Size Uploaded
fastapi_router_variants-0.2.2.tar.gz 155.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-router-variants 0.2.2
File Interpreter ABI Platform
fastapi_router_variants-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 181.3 kB

Release files / fastapi_router_variants-0.2.2.tar.gz

Download URL fastapi_router_variants-0.2.2.tar.gz
Size 155.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8c77f372ed3f31bdaec68c5f141fa40ece15641adacf5a8bd333c1bffd11c05a
BLAKE2b-256 checksum
How to use checksums
580589453b61878c682e19c9d4250976717cc10d2a594f9ffe5b39dab7ecbd16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / fastapi_router_variants-0.2.2-py3-none-any.whl

Download URL fastapi_router_variants-0.2.2-py3-none-any.whl
Size 25.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f5c06095fb4d91b57d52614c7cb9e9a5547b012ed372e136c59680e6d17bfba9
BLAKE2b-256 checksum
How to use checksums
a47060a1f7d13a14b0b936d39f595500b0f52479a643b401b959682a2e3ec9ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page