"Swagger for everything Swagger doesn't cover."
Full docs, screenshots, and the source live on GitHub — this page is a plain-markdown version of the same README, since PyPI's renderer doesn't support the layout GitHub does.
Auto-generated, interactive documentation — and a live test console — for AsyncAPI specs: WebSocket, SSE, MQTT, or any other async protocol your Django project describes with one. Install it, point it at a spec file, and get a browsable page with a sidebar of channels, a payload schema reference, and a "Try it out" console that authorizes, connects, and lets you trigger a real server-side effect to watch a frame arrive — all without leaving the page.
Supports both AsyncAPI dialects (2.x and 3.0) through one normalizer, so a spec written either way renders through the exact same templates.
Screenshots
Index — one card per registered spec:
Detail — docs + a live test console:
See it in action (animated): browsing the index and authorizing + connecting.
Features
- Auto-generated docs — point it at an AsyncAPI YAML file, get a full docs page. Nothing to write by hand, nothing to keep in sync manually.
- Both AsyncAPI dialects — 2.x and 3.0 render through the exact same templates via one normalizer, so a spec written either way just works.
- A real test console — authorize, connect, and trigger a server-side action to watch a live frame arrive, without leaving the page.
- Secure by default — every access denial is a
404, never a403or login redirect, so an unauthorized visitor can't even confirm a spec exists. - Multi-tenancy hooks — two extension points (
TenantResolver,TenantSpecFilter) for projects that already have real tenant isolation to plug in.
Install
1. Install the package
pip install django-asyncdocs
2. Register it and point it at a spec
# settings.py
INSTALLED_APPS = [..., "asyncdocs"]
ASYNC_DOCS = {
"SPECS": {
"my-channel": {
"path": BASE_DIR / "apps" / "ws" / "asyncapi.yaml",
"login_url": "/api/v1/auth/login/",
"actions": {"send_test": "myproject.docs_actions.send_test"},
},
},
}
3. Mount the URLs
# urls.py
from django.urls import include, path
urlpatterns = [..., path("asyncdocs/", include("asyncdocs.urls"))]
Never written an AsyncAPI spec before, or don't have one yet? Start at writing-your-first-spec.md — it builds one from nothing.
Already have a spec?
getting-started.md
covers the rest (staff login, the ENABLED gate, verifying it without a
browser).
Documentation
- Getting started
- Writing your first AsyncAPI spec
- Configuration reference
- Writing test actions
- Security
- Multi-tenancy
- FAQ / troubleshooting
How it works
AsyncAPI 2.x vs 3.0, briefly. One normalizer per dialect produces the
exact same flat shape regardless of which one a spec is written in — the
dialect is recorded once (asyncapi_version) and shown as a badge; nothing
downstream branches on it.
Security, briefly. Every access denial (failed staff check, IP
allowlist, unknown or tenant-filtered slug) is a 404, never a 403 or a
login redirect — so a response never confirms a spec exists to someone who
can't see it. The console's token lives in a JS variable for the tab only,
never localStorage/sessionStorage/a URL, always masked on screen.
Multi-tenancy, briefly. Ships no working isolation — every staff user
sees every spec by default, correct for a single-tenant project. Two hooks
(TenantResolver, TenantSpecFilter) let a project that already has real
tenant isolation plug it in later as a settings change.
Full details for all three: see the docs.
License
MIT — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_asyncdocs-0.1.0.tar.gz.
File metadata
- Download URL: django_asyncdocs-0.1.0.tar.gz
- Upload date:
- Size: 33.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f734e08e0f8942d78b3e22e86b57003e9a312e293f63dd327a7733a95a85f0d6
|
|
| MD5 |
3281efd5261e2e81e9ae03eb02f3687c
|
|
| BLAKE2b-256 |
691a20f3836e0f97b4586d224091317a4d1fc40193cccc65ddd56d0118c89cf0
|
File details
Details for the file django_asyncdocs-0.1.0-py3-none-any.whl.
File metadata
- Download URL: django_asyncdocs-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30a8d654e6f0a328f71c0976df9253005160f597077ab8d441a18db178157578
|
|
| MD5 |
f4ace7b3fb630f539d34d290c71f9e67
|
|
| BLAKE2b-256 |
d98852a69c89b71ef8f69fb7eb7d5a1fc20294784e9361eebd61afa3dcd78308
|