Skip to main content

sphinx-terraform-ch

A Sphinx extension that auto-generates documentation for Terraform modules directly from HCL source files.

Based on the original sphinx-terraform by Charles Bouchard-Légaré.

This fork (sphinx-terraform-ch) rewrites the extension with a new Sphinx domain, block renderer, and module parser.

Features

  • tfmodule directive: auto-document one or more Terraform modules from a path
  • tf: Sphinx domain: manually document individual Terraform objects with cross-reference support
  • tfreport CLI: generate Markdown documentation from the command line
  • Supports all standard Terraform block types: resource, variable, locals, data, terraform, module, 0.
  • provider, check, import, removed
  • Extracts preceding HCL comments (#, //, /* */) as block descriptions
  • Cross-module cross-referencing via tf:project namespaces

Installation

pip install sphinx-terraform-ch

Or with uv:

uv add sphinx-terraform-ch

Configuration

Add the extension and MyST parser to your conf.py:

extensions = [
    "sphinx_terraform_ch",
    "myst_parser",
]

Usage

tfmodule Directive

The tfmodule directive scans a directory for .tf files and renders documentation for every block found.

.. tfmodule::
   :path: ../terraform/modules
   :submodules_depth: 1
   :ignore: ["\.terraform", "examples"]
   :hide_nocomment:

Options:

Option Description
:path: Path to the Terraform module directory (required)
:submodules_depth: How many directory levels deep to look for submodules (default: 0, meaning the path itself)
:ignore: JSON array of regex patterns — subdirectories whose names match are skipped
:hide_nocomment: Flag. If set, blocks without a preceding comment are omitted from output

Example — document a single module:

.. tfmodule::
   :path: ./terraform

Example — document all submodules one level deep, skipping test directories:

.. tfmodule::
   :path: ./terraform/modules
   :submodules_depth: 1
   :ignore: ["test", "examples"]

Example — only show documented blocks:

.. tfmodule::
   :path: ./terraform
   :hide_nocomment:

tf: Domain Directives

You can manually document Terraform objects using the tf: domain. These support cross-referencing across your Sphinx project.

Supported directives:

.. tf:resource:: aws_instance web

.. tf:variable:: region

.. tf:locals::

.. tf:data:: aws_ami ubuntu

.. tf:module:: vpc

.. tf:provider:: aws

.. tf:terraform::

.. tf:check:: health

.. tf:import::

.. tf:removed::

Cross-reference roles:

Role Object Type
:tf:res: resource
:tf:var: variable
:tf:local: locals
:tf:data: data
:tf:mod: module
:tf:prov: provider
:tf:tf: terraform
:tf:check: check

Example cross-reference:

See :tf:var:`region` and :tf:res:`aws_instance.web`.

tf:project Namespace

When documenting multiple modules, use tf:project to scope cross-references so that names do not collide across modules.

.. tf:project:: projectA

.. tf:variable:: region

See :tf:var:`region` (resolves within projectA).

.. tf:project:: None

The tfmodule directive sets this automatically for each module it renders.


tfreport CLI

tfreport generates Markdown documentation for a Terraform module from the command line.

usage: tfreport [-h] [--level LEVEL] [-v] path

Generate a Terraform documentation report for a module path.

positional arguments:
  path           Path to the Terraform module directory.

options:
  --level LEVEL  Heading level for the generated report (default: 1).
  -v, --verbose  Verbosity controls (repeat for more output: -v, -vv, -vvv).

Example:

tfreport ./terraform/modules/vpc
tfreport ./terraform/modules/vpc --level 2 -v

Output is Markdown printed to stdout, suitable for piping or redirecting into a file.


HCL Comment Support

Comments placed immediately before a block (no blank lines between) are extracted and used as the block description. All HCL comment styles are supported:

# This is a variable for the AWS region.
variable "region" {
  type    = string
  default = "us-east-1"
}

// Multi-word resource description.
resource "aws_instance" "web" {
  ami           = "ami-12345"
  instance_type = "t3.micro"
}

/*
 * This locals block computes derived values.
 */
locals {
  name_prefix = "myapp-${var.env}"
}

License

BSD-2-Clause-Patent. See LICENSE file at root of the directory.

Original work copyright (c) 2022 Charles Bouchard-Légaré.

Release files for sphinx-terraform-ch 2026.5.13.2

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-terraform-ch 2026.5.13.2
File Size Uploaded
sphinx_terraform_ch-2026.5.13.2.tar.gz 12.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sphinx-terraform-ch 2026.5.13.2
File Interpreter ABI Platform
sphinx_terraform_ch-2026.5.13.2-py3-none-any.whl Python 3 none any Details

Total release size: 29.1 kB

Release files / sphinx_terraform_ch-2026.5.13.2.tar.gz

Download URL sphinx_terraform_ch-2026.5.13.2.tar.gz
Size 12.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a2c7833f8fc221919fdfc9793ac220e94299010eefe704cf911aa3724ecbf752
BLAKE2b-256 checksum
How to use checksums
c93543a72c373a4963ca5c57ed5e6140a32b61e245e53d7a7c30bf014568c191
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 May 13, 2026.

Transparency log

Release files / sphinx_terraform_ch-2026.5.13.2-py3-none-any.whl

Download URL sphinx_terraform_ch-2026.5.13.2-py3-none-any.whl
Size 16.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
042448516cecf5207e6a6847837663c4844fc7c673d8dfd7d00f27a9e329d3be
BLAKE2b-256 checksum
How to use checksums
fa775afde4c7d0ad6e1b3e934dee13114a5117db5b5f665e6db8b363b094b4c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 May 13, 2026.

Transparency log
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