Skip to main content

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 sources_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.
  • Variant-gated source selection: sphinx-mounts is also the Sphinx-side reader for the shared ubproject.toml keys that decide which files are in the build for the current variant — [[source.variant_sources]], which narrows a file set by glob, and if on a [[source.mounts]] entry, which gates a whole mounted bundle. A project with no mounts at all can install it purely for the first, to have sphinx-build narrow its document set the way ubCode already does.
  • 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:

[[source.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.

  • 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.

Metadata

Release files for sphinx-mounts 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sphinx-mounts 0.2.0
File Size Uploaded
sphinx_mounts-0.2.0.tar.gz 98.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sphinx-mounts 0.2.0
File Interpreter ABI Platform
sphinx_mounts-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 198.6 kB

Release files / sphinx_mounts-0.2.0.tar.gz

Download URL sphinx_mounts-0.2.0.tar.gz
Size 98.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7c19e867b463bccbff35281e2c6c20dfaa75d4fa88eef6abe97c9c371df6914b
BLAKE2b-256 checksum
How to use checksums
ed0685e09e90824dbf9b81c4f60fe156855d13249c1f1f7b208452b75d8fdc34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / sphinx_mounts-0.2.0-py3-none-any.whl

Download URL sphinx_mounts-0.2.0-py3-none-any.whl
Size 100.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9e43cba60834bb648a7d3f0f43bb3fbbf9743e69933a89081a90a30d6d42d230
BLAKE2b-256 checksum
How to use checksums
c44cc92fe023dec5204dae85690fc110b47d0c6a0fe9e57c2f8b8d82228ef168
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page