Export your Pydantic settings to documentation with ease!
This package seamlessly integrates with pydantic and pydantic-settings to automatically generate documentation from your settings models.
Create Markdown docs, .env.example
files, and more with minimal configuration.
-
π Documentation Generation
- Markdown with tables and descriptions
- Environment files (
.env.example
) - Support for region injection in existing files
- Customizable output formats
-
π Smart Configuration Handling
- Automatic type detection
- Environment variables validation
- Default values preservation
- Optional/required fields distinction
-
π Flexible Integration
- Command-line interface
- pre-commit hook support
- GitHub Actions compatibility
- Python API for custom solutions
-
π Additional Features
- Email validation support (optional)
- Markdown region injection (optional)
- Multiple output paths for each generator
- Configurable through
pyproject.toml
- Python 3.9 or higher
- pydantic >= 2.7
- pydantic-settings >= 2.3
Optional dependencies (aka extras
):
email
-- for email validation support (email-validator >= 2.2.0
).- Required for
pydantic.EmailStr
type.
- Required for
regions
-- for Markdown region insertion support (text-region-parser >= 0.1.1
).- Required for Markdown generator with
region
option.
- Required for Markdown generator with
Install with optional dependencies:
# Install with all optional dependencies
pip install "pydantic-settings-export[email,regions]" # Install with all extras
# Install with specific optional dependency
pip install "pydantic-settings-export[email]" # Install with email extra
pip install "pydantic-settings-export[regions]" # Install with regions extra
- Install the package:
pip install pydantic-settings-export
- Create your settings model:
from pydantic_settings import BaseSettings class AppSettings(BaseSettings): """Application settings.""" debug: bool = False api_key: str
- Generate documentation:
pydantic-settings-export app.settings:AppSettings
For more detailed usage, see our Getting Started Guide.
Note: The package follows SemVer. GitHub releases/tags use
v
prefix (e.g.v1.0.0
), while PyPI versions don't (e.g.1.0.0
).
Choose your preferred installation method:
# Using pip
pip install pydantic-settings-export
# Using pipx (recommended for CLI usage)
pipx install pydantic-settings-export
# Using uv
uv tool install pydantic-settings-export
The recommended way to use this package is through its CLI or as a pre-commit hook.
The CLI provides a powerful interface for generating documentation:
# Basic usage
pydantic-settings-export your_app.settings:Settings
# Multiple generators
pydantic-settings-export --generator markdown --generator dotenv your_app.settings:Settings
# Help with all options and sub-commands
pydantic-settings-export --help
For complete documentation, including:
- All command options
- Environment variables
- Pre-commit integration
- Troubleshooting guide
See the CLI Documentation
The tool can be used as a pre-commit hook to automatically update documentation:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/jag-k/pydantic-settings-export
# Use a tag version with the `v` prefix (e.g. v1.0.0)
rev: v1.0.0
hooks:
- id: pydantic-settings-export
# Optionally, specify the settings file to trigger the hook only on changes to this file
files: ^app/config/settings\.py$
# Optionally, add extra dependencies
additional_dependencies:
- pydantic-settings-export[email,regions]
NOTE: You can use pre-commit autoupdate
to update the hook to the latest version.
# .github/workflows/docs.yml
name: Update Settings Documentation
on:
push:
# Optionally, specify the settings file to trigger the hook only on changes to this file
paths: [ '**/settings.py' ]
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11" # Minimum required version
- run: pip install pydantic-settings-export
- run: pydantic-settings-export your_app.settings:Settings
While CLI is the recommended way, you can also use the package programmatically:
from pydantic_settings import BaseSettings
from pydantic_settings_export import Exporter
class MySettings(BaseSettings):
"""Application settings."""
debug: bool = False
api_key: str
class Config:
env_prefix = "APP_"
# Create and run exporter
exporter = Exporter()
exporter.run_all(MySettings)
This will generate documentation using all available generators. For custom configuration, see our Wiki.
Basic configuration in pyproject.toml
:
[tool.pydantic_settings_export]
project_dir = "."
default_settings = ["my_app.settings:AppSettings"]
env_file = ".env"
# Generate Markdown docs
[[tool.pydantic_settings_export.generators.markdown]]
paths = ["docs/settings.md"]
# Generate .env example
[[tool.pydantic_settings_export.generators.dotenv]]
paths = [".env.example"]
For advanced configuration options, see our Configuration Guide.
See real-world examples of different output formats:
- .env.example - Full example with comments and sections
- .env.only_optional_mode.example - Example with only optional fields
- Configuration.md - Full configuration documentation with tables and descriptions
- SimpleConfiguration.md - Basic table-only configuration
- InjectedConfiguration.md - Configuration injected into an existing file
Check out our comprehensive documentation:
- π Getting Started Guide
- βοΈ Configuration Options
- π Understanding Parsers
- π¨ Available Generators
- π» CLI Documentation
Managing configuration in Python applications can be challenging:
- Documentation gets outdated
- Environment variables are poorly documented
- Configuration options are scattered
This project solves these problems by:
- Automatically generating documentation from your Pydantic models
- Keeping documentation in sync with code
- Providing multiple output formats for different use cases
This is a personal pet project maintained in my spare time. The development priorities are:
- Bug fixes
- Features from Roadmap:
- Issues with the closest milestone,
- General milestones' issues.
- Issues labeled
bug
orfeature request
. - Features listed in this README.
- New feature proposals
Note: While we strive for quality and responsiveness, resolution timelines can't be guaranteed.
This project uses modern Python development tools:
- π uv - Fast Python package installer and resolver
- π ruff - Fast Python linter and formatter
- π¦ hatch - Modern Python project management
- β pre-commit - Git hooks management
We welcome contributions! Before contributing:
- Create a GitHub Issue as the first step β this is required
- Fork the repository to your own GitHub account
- Create a branch following our naming convention:
- Format:
<domain>/<issue-number>-<short-description>
. - Domains:
fix
orfeature
. - Example:
feature/6-inject-config-to-markdown
.
- Format:
- Make your changes
- Submit a PR with changelog in description
For complete guidelines, see our:
- π Issue Tracker (required first point of contact)
- π§ GitHub email:
30597878+jag-k@users.noreply.github.com
- π¬ Discussions
- π Documentation