Skip to content

Migrate the documentation build to Zensical - #864

Open
kattni wants to merge 5 commits into
beeware:mainfrom
kattni:tooling/zensical-migration
Open

kattni wants to merge 5 commits into
beeware:mainfrom
kattni:tooling/zensical-migration

Conversation

@kattni

@kattni kattni commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Moves Rubicon's documentation build from MkDocs and Material for MkDocs to Zensical, as part of the BeeWare-wide docs migration. The configuration now uses Zensical's native TOML format instead of MkDocs YAML.

This depends on beeware/beeware-docs-tools#288, which moves the shared docs tooling to Zensical. Until that PR merges, the docs dependency group is temporarily pinned to its branch (kattni/beeware-docs-tools@tooling/zensical-migration), so this PR builds. The pin is reverted to beeware/main once beeware/beeware-docs-tools#288 is merged.

Changes

  • Configuration: docs/config.yml is now docs/zensical.toml, and docs/mkdocs.en.yml is now docs/zensical.en.toml. Both were generated by docs-tools' convert_mkdocs_config, which checked that the TOML configuration is equivalent to what Zensical read from the YAML.
  • Navigation: the literate-nav file docs/en/SUMMARY.md is replaced by the native nav setting in docs/zensical.toml, and the literate-nav plugin is removed.
  • tox: removed the DISABLE_MKDOCS_2_WARNING / NO_MKDOCS_2_WARNING environment variables, and the --source-code=stubs arguments; docs-tools now resolves the mkdocstrings paths (src, stubs) from the repository root.
  • .gitignore: ignores docs/_build.*.toml, the per-language configuration docs-tools writes during a build.
  • AGENTS.md: describes the docs as built with Zensical.
  • Temporary pin: beeware-docs-tools in the docs dependency group, as described above.

There are no content changes to the documentation itself.

Verification

  • tox -r -e docs (installing docs-tools at b3a1e03 from the pinned branch) builds in strict mode with no issues. tox -e docs-lint and tox -e pre-commit pass.
  • Compared with a MkDocs build of main:
    • Article text is identical on 47 of 51 pages. The other 4 are shared contribution-guide pages, where docs-tools now describes nav instead of SUMMARY.md.
    • Navigation: the sidebar, tabs and previous/next links match on all 51 pages.
    • API reference: the pages built from src and stubs are identical, including members that only exist in the stubs (so find_stubs_package is honoured). objects.inv is identical (234 entries), and links to the Python docs via inventories resolve the same.
  • Strict mode fails on a missing page, a missing anchor, an unresolved cross-reference and a bad ::: identifier, so the existing validation settings still apply.

Notes for reviewers

  • Visual differences: these are Zensical theme differences, with docs-tools' default classic variant in use: a compact search box, slightly different inline code styling, and the sidebar no longer repeating the current page's headings.
  • site_url: the converter moved the literal site_url into zensical.toml. As before, it takes precedence over the canonical URL from Read the Docs.
  • Not changed here (existing behaviour): the pymdownx.magiclink settings use repo = "toga". As a result, #40 in the release notes links to a Toga issue, and @property in topics/memory-management.md is rendered as a GitHub user link. This should probably be rubicon-objc; I've left it for a separate change.
  • Translations: Rubicon isn't translated, but in a test with a synthetic locale, po2md collapses the indented options: blocks under ::: directives, and the translated build fails. This happens under both MkDocs and Zensical, so it isn't a regression.
  • Stale reference: .specify/memory/constitution.md still says the docs are built with Sphinx. It's only meant to change through the SpecKit constitution workflow, so I didn't edit it.

PR Checklist:

  • I will abide by the BeeWare Code of Conduct
  • I have read and have followed the CONTRIBUTING.md file
  • This PR was generated or assisted using an AI tool

Assisted-by: Claude Code (Claude Opus 5.5)

Generated with beeware-docs-tools' `convert_mkdocs_config`, which checked
that the TOML configuration is equivalent to what Zensical read from the
YAML files.

- docs/config.yml is now docs/zensical.toml.
- docs/mkdocs.en.yml is now docs/zensical.en.toml.
- The literate-nav navigation in docs/en/SUMMARY.md is now the native
  `nav` setting in docs/zensical.toml, and the literate-nav plugin is
  removed.
- The Material for MkDocs `yaml-language-server` schema comment is
  dropped.
- tox.ini: drop the MkDocs 2.0 warning environment variables, and the
  `--source-code=stubs` arguments; docs-tools now resolves the
  mkdocstrings source paths from the repository root.
- .gitignore: ignore the per-language configuration files that
  docs-tools writes to docs/ during a build.
- AGENTS.md: describe the docs as built with Zensical, configured by
  docs/zensical.toml and docs/zensical.<lang>.toml.
The Zensical build support in beeware-docs-tools isn't merged yet
(beeware/beeware-docs-tools#288). Revert this to beeware/main once it is.
…laude/zensical-migration-8fdf88

# Conflicts:
#	tox.ini
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant