You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The documentation is a set of Markdown files (README.md plus docs/*.md, around 2,800 lines) read on GitHub. Publish it as a documentation site that needs no infrastructure of our own to maintain.
Decision
Hosting: Read the Docs (free for open source). Builds on every push, gives each pull request a preview build, keeps one build per released version, and includes search and a CDN. The only file to maintain is .readthedocs.yaml.
Generator: Zensical, from the team behind Material for MkDocs. It reads the Markdown we already have, and Read the Docs documents it officially. Material for MkDocs itself enters maintenance mode on 2026-11-05 (fixes only, no new features), so it is not a good choice for a new site. Sphinx would mean rewriting the Markdown in reStructuredText.
API reference: generated from the existing Google-style docstrings with mkdocstrings-python, which Zensical supports.
Plan
zensical.toml with the navigation: home, guides (CACHE_FLOW, SESSION, JWT_CLAIMS, STATE), API reference, development (DEVELOPMENT, CONTRIBUTING), changelog.
docs/index.md as the landing page. The GitHub README.md stays as-is, since PyPI renders it.
A docs dependency group in pyproject.toml, so uv run zensical serve works locally.
.readthedocs.yaml
A CI job that builds the site, so a broken link or page fails the PR before Read the Docs sees it.
Documentation URL in [project.urls] and a link in the README.
Import the repository on readthedocs.org (maintainer, needs the GitHub account).
Open questions
Zensical is still pre-1.0 (0.0.x at the time of writing), so the version should be pinned to a range and upgraded deliberately.
Traditional Chinese: only the README has a translation (docs/README.zh-TW.md). Read the Docs handles translations as a separate linked project. Out of scope for the first version; the file stays where it is.
Summary
The documentation is a set of Markdown files (
README.mdplusdocs/*.md, around 2,800 lines) read on GitHub. Publish it as a documentation site that needs no infrastructure of our own to maintain.Decision
.readthedocs.yaml.mkdocstrings-python, which Zensical supports.Plan
zensical.tomlwith the navigation: home, guides (CACHE_FLOW,SESSION,JWT_CLAIMS,STATE), API reference, development (DEVELOPMENT,CONTRIBUTING), changelog.docs/index.mdas the landing page. The GitHubREADME.mdstays as-is, since PyPI renders it.docsdependency group inpyproject.toml, souv run zensical serveworks locally..readthedocs.yamlDocumentationURL in[project.urls]and a link in the README.Open questions
docs/README.zh-TW.md). Read the Docs handles translations as a separate linked project. Out of scope for the first version; the file stays where it is.