Documentation generation system for Terraform/OpenTofu providers
Project description
🍽️📖 Plating
Documentation generation system for Terraform/OpenTofu providers
Plating is a powerful documentation system that brings culinary elegance to technical documentation. Just as a chef carefully plates a dish, Plating helps you present your Terraform provider documentation beautifully.
✨ Key Features
- 🎯 Automatic Documentation Generation - Generate comprehensive docs from your provider code
- ✨ Smart Component Adorning - Automatically create documentation templates for undocumented components
- 🍽️ Beautiful Plating - Render documentation with examples, schemas, and rich formatting
- 🔍 Component Discovery - Automatically find and document resources, data sources, and functions
- 📝 Jinja2 Templates - Flexible templating with custom functions and filters
- 🔄 Schema Integration - Extract and format provider schemas automatically
- 🎯 Capability-First Organization - Group documentation by feature (Math, Utilities, Lens) instead of just type
- 📍 Smart Navigation - Auto-generated mkdocs.yml with capability-first structure
- 📚 Guide Support - Built-in support for provider guides and tutorials
Quick Start
- Install:
uv tool install plating - Read the Documentation
- Try
plating adornto create documentation templates
Installation
Note: Plating is in pre-release. Some APIs may change during the pre-release series.
Version Info: The version
0.3.0is a pre-release identifier indicating active development. Expect the API and features to evolve. Some APIs may change during the pre-release series.
# Install from PyPI
uv tool install plating
Quick Install from Git
# Install directly from GitHub
uv tool install git+https://github.com/provide-io/plating.git
Documentation
Development
Quick Start
# Set up environment
uv sync
# Run common tasks
we run test # Run tests
we run lint # Check code
we run format # Format code
we tasks # See all available commands
See CLAUDE.md for detailed development instructions and architecture information.
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
📜 License
Apache 2.0
📦 Prerequisites
Important: This project uses
uvfor Python environment and package management.
Install UV
Visit UV Documentation for more information.
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# Update UV to latest version
uv self update
📚 Usage Examples
1. Adorn Your Components
First, create .plating bundles for your undocumented components:
# Adorn all missing components
plating adorn
# Adorn only resources
plating adorn --component-type resource
2. Customize Templates
Edit the generated templates in .plating/docs/:
---
page_title: "Resource: my_resource"
---
# my_resource
{{ "{{ example('basic') }}" }}
## Schema
{{ "{{ schema() }}" }}
3. Generate Documentation
Render your documentation:
# Generate docs in ./docs directory
plating plate
# Custom output directory
plating plate --output-dir ./documentation
📂 Bundle Structure
Each component has a .plating bundle containing documentation templates, examples, and optional test fixtures. See Authoring Bundles Guide for complete bundle structure and template function reference.
🎯 Capability-First Organization
Organize documentation by capability (subcategory) instead of just by component type. Add a subcategory field to your template frontmatter, and Plating automatically groups components by capability in the navigation.
See Capabilities Guide for standard subcategories, custom categories, and guide support.
🔍 Validation
Validate your generated documentation:
# Validate all documentation
plating validate
# Validate in custom directory
plating validate --output-dir ./documentation
🛡️ Foundation Integration
Plating is built on provide.foundation patterns for enterprise-grade reliability:
- 🔄 Automatic Retries: Built-in retry policies with exponential backoff for I/O operations
- 📊 Metrics & Observability: Integrated performance tracking and operation metrics
- ⚡ Circuit Breakers: Prevents cascading failures in distributed systems
- 📝 Structured Logging: Foundation logger integration with contextual information
- 🚀 Async-First Design: High-performance async operations throughout
🔧 Advanced Usage
Filter to Specific Package
By default, Plating searches all installed packages for components. You can filter to a specific package:
plating adorn --package-name pyvider.components
plating plate --package-name pyvider.components
Generate Executable Examples
Generate standalone executable Terraform examples alongside documentation:
plating plate --generate-examples
Customize example output directories:
plating plate --generate-examples \
--examples-dir examples/ \
--grouped-examples-dir examples/integration/
🔧 Configuration
Configure Plating in your pyproject.toml:
[tool.plating]
# Provider name (auto-detected if not specified)
provider_name = "my_provider"
Note: Currently only provider_name can be configured in pyproject.toml. Other options like output_dir and component_types must be passed as CLI flags:
plating plate --output-dir docs --component-type resource
🏗️ Architecture
Plating follows a modular architecture:
- PlatingBundle - Represents documentation bundles
- PlatingPlater - Renders documentation
- PlatingAdorner - Creates documentation templates
- PlatingDiscovery - Finds components and bundles
- SchemaProcessor - Extracts provider schemas
🙏 Acknowledgments
Built with ❤️ using:
- attrs - Python classes without boilerplate
- Jinja2 - Powerful templating
- pyvider - Terraform provider framework
- click - Command line interface
- rich - Beautiful terminal output
Plating - Making documentation as delightful as a well-plated dish 🍽️
Copyright (c) provide.io LLC.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plating-0.3.22.tar.gz.
File metadata
- Download URL: plating-0.3.22.tar.gz
- Upload date:
- Size: 105.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
456ac26aede1635f92d205d2fc5deabf651bd3e95ae173c896d5b9f8214e41ac
|
|
| MD5 |
696ae79e6ad8f0558caae816ccf72188
|
|
| BLAKE2b-256 |
d4c165895d7147251aa3f58861be60a4ddd66611018cff52ab536e8ce65b7d7f
|
Provenance
The following attestation bundles were made for plating-0.3.22.tar.gz:
Publisher:
release.yml on provide-io/plating
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plating-0.3.22.tar.gz -
Subject digest:
456ac26aede1635f92d205d2fc5deabf651bd3e95ae173c896d5b9f8214e41ac - Sigstore transparency entry: 1202672277
- Sigstore integration time:
-
Permalink:
provide-io/plating@18a2eb8af82321784c349bf1964ac7de8c193085 -
Branch / Tag:
refs/tags/v0.3.22 - Owner: https://github.com/provide-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@18a2eb8af82321784c349bf1964ac7de8c193085 -
Trigger Event:
release
-
Statement type:
File details
Details for the file plating-0.3.22-py3-none-any.whl.
File metadata
- Download URL: plating-0.3.22-py3-none-any.whl
- Upload date:
- Size: 103.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6239480f58aca36eb4242e1c2b66e5c51f69e11405a1f774151bce5dcb5af1b
|
|
| MD5 |
dc8030b79b99caccbd79d38be0ec4fee
|
|
| BLAKE2b-256 |
f7b9a574252c18e287963d392a6969cd7af882aaeb63a6da62b26b82eafd5903
|
Provenance
The following attestation bundles were made for plating-0.3.22-py3-none-any.whl:
Publisher:
release.yml on provide-io/plating
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plating-0.3.22-py3-none-any.whl -
Subject digest:
a6239480f58aca36eb4242e1c2b66e5c51f69e11405a1f774151bce5dcb5af1b - Sigstore transparency entry: 1202672279
- Sigstore integration time:
-
Permalink:
provide-io/plating@18a2eb8af82321784c349bf1964ac7de8c193085 -
Branch / Tag:
refs/tags/v0.3.22 - Owner: https://github.com/provide-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@18a2eb8af82321784c349bf1964ac7de8c193085 -
Trigger Event:
release
-
Statement type: