Getting Started with Plating¶
Beta Software - Active Development
๐ค AI-Generated Content
This documentation was generated with AI assistance and is still being audited. Some, or potentially a lot, of this information may be inaccurate. Learn more.
**Plating is in active beta development.** The API and features are functional but may evolve as the project matures toward v1.0.
โ
**Currently Working:**
- PSPF documentation generation
- Template-based doc system (Jinja2)
- Component discovery via foundation.hub
- CLI commands (adorn, plate, validate)
- Async-first architecture
โ ๏ธ **Known Limitations:**
- Not yet available on PyPI
- API may change before v1.0
- Some advanced features experimental
๐ **Roadmap:**
- PyPI publication (coming soon)
- Enhanced template functions
- Additional component types
**Current Version:** v0.0.1026 (Beta)
**Target v1.0 Release:** Q2 2026
What is Plating?¶
Plating is a modern, async-first documentation generation system for Terraform/OpenTofu providers. Just as a chef carefully plates a dish, Plating helps you present your provider documentation beautifully and professionally.
Key Features:
- ๐ฏ Automatic Generation - Create comprehensive docs from provider code
- โจ Smart Templates - Automatically generate documentation templates
- ๐ฝ๏ธ Beautiful Output - Terraform Registry-compliant markdown
- ๐ Component Discovery - Find resources, data sources, and functions automatically
- โก Foundation Integration - Built-in retry policies, metrics, circuit breakers
- ๐ Async-First - High-performance parallel processing
Prerequisites¶
Before installing Plating, ensure you have:
- Python 3.11+ - Required for modern async features
- UV - Recommended package manager (or pip)
- Git - For source installation
Install UV (Recommended)¶
UV is a fast Python package manager. Install it with:
For more information, visit UV Documentation.
Installation¶
Beta Installation
Plating is currently in beta and must be installed from source. PyPI publication is coming soon.
From Source (Recommended for Beta)¶
# Clone the repository
git clone https://github.com/provide-io/plating.git
cd plating
# Install with UV
uv sync
# Activate virtual environment
source .venv/bin/activate # macOS/Linux
# or
.venv\Scripts\activate # Windows
# Verify installation
plating --help
From GitHub (Direct)¶
# Install directly from GitHub (using UV)
uv add git+https://github.com/provide-io/plating.git
# Or using pip
pip install git+https://github.com/provide-io/plating.git
Coming Soon: PyPI¶
Quick Start¶
Plating follows a simple three-step workflow: Adorn โ Plate โ Validate
Step 1: Adorn Components¶
Create documentation templates for components that don't have them:
# Adorn all missing components
plating adorn --provider-name my_provider
# Adorn only specific component types
plating adorn --component-type resource
Output:
๐จ Adorning 5 component types...
๐ฆ Processing 10 resource(s)...
โ
Generated 8 templates
๐ฆ Processed 10 components
This creates .plating bundles with template files for each component.
Step 2: Customize Templates (Optional)¶
Edit the generated templates in your .plating/docs/ directories:
---
page_title: "Resource: my_resource"
---
# my_resource
{{ example('basic') }}
## Schema
{{ schema() }}
## Import
Resources can be imported using:
```bash
terraform import my_resource.example resource_id
### Step 3: Plate Documentation
Transform templates into Terraform Registry-compliant documentation:
```bash
# Generate documentation
plating plate --output-dir docs/
# Generate with validation
plating plate --output-dir docs/ --validate
Output:
๐ฝ๏ธ Plating documentation...
โ
Generated 10 files in 0.52s
๐ฆ Processed 10 bundles
๐ Generated files:
โข docs/resources/example_resource.md
โข docs/data-sources/example_data.md
โข docs/functions/example_function.md
... and 7 more
Step 4: Validate (Optional)¶
Validate your generated documentation:
Output:
๐ Validation results:
โข Total files: 10
โข Passed: 10
โข Failed: 0
โข Duration: 0.23s
โ
All validations passed
Your First Documentation¶
Let's walk through a complete example:
1. Set Up Your Provider Project¶
2. Generate Templates¶
# Adorn resources and data sources
plating adorn \
--provider-name my_provider \
--component-type resource \
--component-type data_source
3. Add Examples¶
Edit a generated bundle, e.g., my_resource.plating/examples/basic.tf:
resource "my_resource" "example" {
name = "example"
description = "Example resource configuration"
settings {
enabled = true
timeout = 30
}
tags = {
Environment = "production"
ManagedBy = "terraform"
}
}
4. Generate Documentation¶
5. Review Output¶
Check the generated documentation in docs/resources/my_resource.md:
# my_resource
Manages a my_resource resource.
## Example Usage
```hcl
resource "my_resource" "example" {
name = "example"
description = "Example resource configuration"
...
}
Schema¶
Required¶
name(String) Name of the resource
Optional¶
description(String) Descriptionsettings(Block) Configuration settingstags(Map of String) Resource tags--- ## Python API Usage For programmatic usage, use the Python API: ```python import asyncio from pathlib import Path from plating import Plating, PlatingContext from plating.types import ComponentType async def generate_provider_docs(): """Generate documentation for a Terraform provider.""" # Initialize context context = PlatingContext( provider_name="my_provider", log_level="INFO", no_color=False ) # Create API instance api = Plating(context, package_name="pyvider.components") # Step 1: Adorn components (create templates) adorn_result = await api.adorn( component_types=[ ComponentType.RESOURCE, ComponentType.DATA_SOURCE ] ) print(f"โ Generated {adorn_result.templates_generated} templates") # Step 2: Plate documentation (with validation) plate_result = await api.plate( output_dir=Path("docs"), validate_markdown=True # Automatic validation ) print(f"๐ Generated {plate_result.files_generated} files") return plate_result.success # Run the async function if __name__ == "__main__": success = asyncio.run(generate_provider_docs()) exit(0 if success else 1)
Bundle Structure¶
Each component gets a .plating bundle directory:
my_resource.plating/
โโโ docs/
โ โโโ my_resource.tmpl.md # Main documentation template
โ โโโ _partial.md # Reusable partials (optional)
โโโ examples/
โ โโโ basic.tf # Basic usage example
โ โโโ advanced.tf # Advanced example (optional)
โ โโโ full_stack/ # Grouped examples (optional)
โ โโโ main.tf # Entry point for grouped examples
โโโ fixtures/ # Test fixtures (optional)
โโโ data.json # Test data files
Notes:
- .tf files for Terraform configurations
- .py files for Python API examples
- Subdirectories must contain main.tf as entry point
Template Functions¶
Plating provides powerful Jinja2 template functions:
| Function | Description | Example |
|---|---|---|
schema() |
Render component schema as markdown table | {{ schema() }} |
example('name') |
Include example file in code block | {{ example('basic') }} |
include('file') |
Include static partial file | {{ include('_intro.md') }} |
render('file') |
Render dynamic template with context | {{ render('_advanced.md') }} |
Example Template:
# my_resource
{{ include('_description.md') }}
## Example Usage
{{ example('basic') }}
{{ example('advanced') }}
## Schema
{{ schema() }}
## Additional Information
{{ render('_details.tmpl.md') }}
Common Commands¶
# Adorn specific component types
plating adorn --component-type resource --component-type data_source
# Filter to specific package
plating adorn --package-name pyvider.aws
# Generate with validation and force overwrite
plating plate --validate --force
# Show registry statistics
plating stats
# Validate specific directory
plating validate --output-dir ./documentation
Pre-Release Limitations¶
As a beta project, be aware of these current limitations:
Not Available Yet¶
- PyPI Distribution - Must install from source
- Windows Full Support - Some features may be experimental on Windows
- Plugin System - Custom template functions (planned)
- Multi-Provider Support - Batch processing multiple providers (planned)
Known Issues¶
- Template Hot-Reload - Requires re-running
plating plateto see changes - Error Messages - Some errors may lack detailed context
- Performance - Large providers (100+ resources) may take 5-10 seconds
Workarounds¶
Issue: Templates not updating
Issue: Missing components
Issue: Validation failures
Troubleshooting¶
Installation Issues¶
Problem: UV not found
# Install UV first
curl -LsSf https://astral.sh/uv/install.sh | sh
# Reload shell
source ~/.bashrc # or ~/.zshrc
Problem: Python version too old
Runtime Issues¶
Problem: No components found
- Ensure your provider package is installed in the same environment
- Use
--package-nameto specify the package explicitly - Check that components are registered with foundation.hub
Problem: Templates not rendering
- Verify
.platingbundle structure - Check template syntax (must be valid Jinja2)
- Use
--log-level DEBUGfor detailed error messages
For more troubleshooting, see Troubleshooting Guide.
Next Steps¶
Now that you're set up, explore:
- Authoring Bundles - Create custom documentation templates
- Examples - Complete working examples
- CLI Reference - All command-line options
- API Reference - Python API documentation
- Registry Pattern - Component discovery system
Part of the provide.io Ecosystem¶
Plating is part of a larger ecosystem of Python and Terraform tools.
Understand how plating integrates with: - provide-foundation - Core reliability patterns - pyvider - Terraform provider framework - flavorpack - Application packaging - provide-testkit - Testing utilities
Getting Help¶
- Troubleshooting Guide - Common issues and solutions
- GitHub Issues - Report bugs or request features
- Discussions - Community support
Found a bug? Please report it with:
- Plating version (plating --version)
- Python version (python --version)
- Operating system
- Complete error output
Ready to start? Jump to Authoring Bundles to learn how to create custom documentation templates!