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.1.tar.gz (20.1 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.1-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sphinx_mounts-0.1.1.tar.gz
  • Upload date:
  • Size: 20.1 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.1.tar.gz
Algorithm Hash digest
SHA256 89a51e3c177096180ddd0ab624f2d8d141292580fffd9d6926a931a485e2363b
MD5 1834fbc5092c719171f5d86f7a7460be
BLAKE2b-256 ebe1b577f1f2196b6d09bc03f76211afb319dd56e4c2ce831891188836dd4f7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_mounts-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: sphinx_mounts-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 19.4 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 078aedb17f240b369a888957787f91c066f5710ec61a17f6e00506e790d02a83
MD5 3660898645f242f02a0ea44a61c9f6b3
BLAKE2b-256 276149b4df587514ea54cbe97df74c7d72c8179dbe124d09aa393a60b4410460

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphinx_mounts-0.1.1-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