Type-driven dependency injection for Python. Wireup is battle-tested in production, thread-safe, no-GIL (PEP 703) ready, and fail-fast by design: if the container starts, it works.
[](https://github.com/maldoinc/wireup) [](https://github.com/maldoinc/wireup) [](https://pypi.org/project/wireup/) [](https://pypi.org/project/wireup/)Quick Start · Docs · Benchmarks · Migrate to Wireup
## Why Wireup?
๐ Define Once, Use AnywhereReuse the same application code in APIs, CLIs, workers, and scripts without rewriting your wiring. |
โ Correct by DefaultIf the container starts, your dependency graph is valid. Wireup checks for missing or misconfigured dependencies to avoid surprises at runtime. See What Wireup Validates |
๐ Framework-ReadyNative integrations for FastAPI, Django, Flask, Starlette, Celery, Click, Typer, and more. |
โก Zero-Overhead HandlersResolve singleton constructor dependencies once at startup in FastAPI and AIOHTTP class-based handlers, not per request. |
๐งฉ Advanced WiringGo beyond simple constructor injection with reusable bundles, explicit scope context sharing, collection injection, and more using plain Python. |
๐งช Easy to testOverride dependencies with context managers, keep tests isolated, and restore the original graph automatically. |
Dense dependency graph resolved per request in FastAPI + Uvicorn
(Requests per second, higher is better. Manual Wiring represents the upper bound.)
Full methodology and reproducibility: benchmarks.