Skip to main content

Mount external sources into a Sphinx build without copying or symlinking

Project description

Sphinx Mounts

Mount external source trees into a Sphinx build without copying or symlinking. Sources stay where they live — for example, a Bazel bazel-bin/ output tree, a sibling repository, or a generated cache directory — and are made visible to Sphinx at a configured docname prefix. RST works out of the box; Markdown works as soon as myst-parser is loaded in the host project; any other format a Sphinx parser extension registers is picked up the same way.

Features

  • No materialization: sources are read directly from their original location. No copy, no symlink, no staging step.
  • Declarative TOML config: the mount mapping lives in ubproject.toml (or any TOML file you name via mounts_from_toml). conf.py only references it.
  • Language-agnostic & toolable: because the config is static TOML, IDE plugins, language servers, indexers, and build-system integrations written in any language can read the same mount mapping that sphinx-build reads — without having to evaluate conf.py.
  • Toctree auto-wiring: an optional attach_to per mount injects the bundle's entry doc into a host toctree at build time, so the host stays buildable when a mount is absent (a developer hasn't run the upstream build, CI hasn't fetched the bundle).
  • Self-contained bundles: each mount is intended to be a self-contained tree of .rst files with relative links only, so it can be reused across host projects. A linter is on the roadmap; the convention is not currently enforced.

Quick Start

pip install sphinx-mounts

Add to your conf.py:

extensions = ["sphinx_mounts"]

Describe your mounts in ubproject.toml next to conf.py:

[[mounts]]
dir = "/abs/path/to/bazel-bin/docs/api-foo"
mount_at = "_generated/api-foo"

Reference mounted documents from your host project just like any other doc:

.. toctree::

   _generated/api-foo/index

Why TOML?

A conf.py is executable Python — only a Python interpreter can read it correctly. A TOML file is static data, parseable by every common language. Putting the mount mapping in ubproject.toml means that any external tool (an IDE extension, a documentation indexer, a CI gate, a non-Python build system) can resolve cross-references without running Sphinx. The same file can also carry sections owned by sibling tools such as Sphinx-Needs ([needs]) and sphinx-codelinks ([codelinks]), keeping the project's documentation configuration in one place.

If TOML isn't an option for your setup, the legacy mounts = [...] list in conf.py is still honored as a fallback — see the docs for details.

Related projects

  • bazel-drives-sphinx — a heavier take on Bazel-driven Sphinx documentation: Bazel rules declare every RST file (and needs.json artifact) as a label, and generated per-project targets invoke sphinx-build on the assembled tree. sphinx-mounts is the lightweight alternative — Bazel drops generated files under bazel-bin/, the extension mounts that directory, and Sphinx reads in place. Pick the former for fine-grained multi-project rule collection and tag-driven variants; pick the latter when "Bazel build, then Sphinx" is enough. See docs/source/bazel.rst for a side-by-side comparison.

Documentation

See docs/source/ for the full configuration reference and the Bazel integration walkthrough. The "Related projects" section in docs/source/index.rst lists sibling tools (Sphinx-Needs, sphinx-codelinks, ubCode, bazel-drives-sphinx) that share the ubproject.toml convention.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sphinx_mounts-0.1.0.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sphinx_mounts-0.1.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file sphinx_mounts-0.1.0.tar.gz.

File metadata

  • Download URL: sphinx_mounts-0.1.0.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sphinx_mounts-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d1818e3a0b7e0b327c6fa265afcf4d43f5bb7147276e69a9b35cd046deeb9439
MD5 babb4a3f1866b76833c34e0fdb3919da
BLAKE2b-256 50433ed3fafb632fd168a62f8b9a1b5edc00e000802961f81dd4e922df946e60

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_mounts-0.1.0.tar.gz:

Publisher: release.yaml on useblocks/sphinx-mounts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sphinx_mounts-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sphinx_mounts-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sphinx_mounts-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aff3450756727d0ca43538ea72b67fddb8b8799c52110f41de8871c59d3d1540
MD5 f33c2744b15df6f6e5a0ec6f69669cab
BLAKE2b-256 5ea21318ed0af240e580d1b3c3f1e33708b8bb4fba91dfc0b3c9754b08ab337a

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_mounts-0.1.0-py3-none-any.whl:

Publisher: release.yaml on useblocks/sphinx-mounts

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page