# Direct dependencies of the documentation toolchain. THIS is the file to # edit. `docs/requirements.txt` is the generated closure — every transitive # package pinned exactly and hashed — and is what Dockerfile.docs, # lint-docs.yml, deploy-docs.yml and `make docs-build` actually install, with # --require-hashes. # # Regenerate: make docs-requirements # # Ranges are fine here: the compiled closure is what makes a build # reproducible, and a range lets Dependabot propose an upgrade as a reviewable # diff instead of a resolver deciding it during a build (#1297). mkdocs-material>=9,<10 # Pinned exactly, and deliberately BELOW 1.2.3 (#1297). # # 1.2.3 (2026-03-28) is the first mkdocs-redirects release published from the # ProperDocs org rather than github.com/mkdocs/mkdocs-redirects, and there is # no v1.2.3 tag on that canonical repo — its last tag is v1.2.2. Diffed # against 1.2.2, the release changes exactly two things: the version string, # and an `import properdocs.replacement_warning` that prints a migration # notice when the build is driven by the `mkdocs` executable. It carries no # functional change and no fix, yet it declares `properdocs>=1.6.5` — a fork # of MkDocs — as a hard runtime dependency, purely to deliver that notice. # That is how the fork got into our published docs image: an open-ended range # resolved it, transitively, with no review step in between. # # So this ceiling costs nothing. Adopting ProperDocs may well be the right # call later — MkDocs itself has shipped nothing since 1.6.1 (2024-08-30), the # fork is by MkDocs' original author, and mkdocs-material now prints its own # red banner about MkDocs 2.0 removing the plugin system. But that is a # migration to make on purpose, with a diff to read. Read #1297 before # raising this ceiling. mkdocs-redirects==1.2.2