docs(adr): reject a Django bootstrapper - #182
Merged
Merged
Conversation
Django's observability is owned by settings.py, which runs before any object a bootstrapper could be handed, so the construct-and-hand-over contract has no natural expression there.
lesnik512
force-pushed
the
docs/reject-grpc-and-django-bootstrappers
branch
from
September 7, 2026 04:43
3e80e15 to
e78195f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A 2026-09-07 survey assessed a dozen candidate frameworks against the five already supported. One survived — Taskiq, filed as #178. Django is the one rejection worth a record: it is the largest Python web framework, so its absence reads as an oversight rather than a decision, and the reason it does not fit is not visible from the code.
Design
Every bootstrapper keeps one contract — the user constructs the application, passes it in, and gets the same object back. Django's observability is conventionally owned by
settings.py, which runs before any object a bootstrapper could be handed. ADR-0001 is the calibration: FastMCP was the hardest framework to fit and still had an application object to attach to.The alternative that would fit — attaching to a constructed
ASGIHandler, outsideMIDDLEWARE— is recorded as rejected, and is what the revisit trigger names.Non-goals
.github/workflows/_checks.ymlalready installs an explicit extras allowlist on the free-threaded leg and excludesorjson,otlandpyroscope, so agrpcextra would be a fourth entry in a mechanism that already exists — the same status the pyroscope instrument has today underpyroscopeextra cannot install on free-threaded CPython #171. gRPC is assessed-but-not-scheduled, filed as an issue.Verification
--offline: no external URLs in the file.docs/adr/is excluded from the published nav, somkdocs --strictis unaffected.