docs: replace MkDocs with Zensical (#3073)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Max Isbey <224885523+maxisbey@users.noreply.github.com>
This commit is contained in:
Marcelo Trylesinski 2026-07-10 13:48:46 +02:00 • committed by GitHub
commit 4fc8882c02
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -76,16 +76,29 @@ dev = [
"opentelemetry-sdk>=1.39.1",
]
docs = [
# MkDocs 2.0 is a ground-up rewrite (no plugin system) that is incompatible
# with mkdocs-material and every plugin below; stay on the 1.x line.
"mkdocs>=1.6.1,<2",
"mkdocs-gen-files>=0.5.0",
"mkdocs-glightbox>=0.4.0",
"mkdocs-literate-nav>=0.6.1",
# docs/extra.css overrides Material-internal nav selectors; revisit it on a
# major bump before raising this cap.
"mkdocs-material[imaging]>=9.7.0,<10",
"mkdocstrings-python>=2.0.1",
# Zensical is the Material team's successor to MkDocs; it natively
# re-implements search, glightbox and mkdocstrings but runs no arbitrary
# MkDocs plugins or hooks, so the API reference (formerly gen-files +
# literate-nav) and llms.txt (formerly a hook) are generated by the
# standalone scripts under scripts/docs/. See scripts/docs/build.sh.
# 0.0.48 fixed relative/scoped cross-references for mkdocstrings-python
# (which the mkdocstrings config in mkdocs.yml relies on) but broke
# search; 0.0.50 fixes it. The toolchain is pinned exactly: Zensical is
# pre-1.0 and the build guards key on its rendering behavior, so bumps
# should be deliberate.
"zensical==0.0.50",
# Zensical's mkdocstrings compatibility layer targets the mkdocstrings 1.x /
# mkdocstrings-python 2.0.5+ API (griffe 2 / griffelib); the older
# mkdocstrings 0.30 / python 2.0.1 line renders API pages with an
# unregistered-autorefs KeyError under Zensical.
"mkdocstrings==1.0.4",
"mkdocstrings-python==2.0.5",
# scripts/docs/build_config.py and llms_txt.py read mkdocs.yml directly.
"pyyaml>=6.0.2",
# gen_ref_pages.py imports griffe directly. griffelib is not a typo: it is
# griffe's successor distribution (same author) and still imports as
# `griffe`; the old `griffe` distribution is the incompatible 1.x line.
"griffelib==2.1.0",
]
codegen = ["datamodel-code-generator==0.57.0"]