Extensions are modular add-ons you apply on top of a template to layer in additional features — Docker packaging, Postgres, observability, auth, CI, and more.
An extension is a self-contained package that adds files, dependencies, and scripts to a scaffolded project. Extensions are composable: you can apply multiple compatible extensions in a single command and they are merged intelligently.
Each extension declares which template types it is compatible with (e.g. fastapi-backend, django-backend, cli-app), so the CLI only shows you relevant options for your chosen template.
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons fastapi-docker postgres github-setupExtensions are organized into 8 categories covering the most common project needs.
When the CLI applies an extension it performs a deep merge of the extension's files and pyproject.toml fields into the scaffolded project:
.template are processed as EJS templates before being written.pyproject.toml (runtime and dev groups).incompatibleWith slugs so the CLI prevents conflicting combinations (e.g. two different test runners).Extensions live in the extensions/ directory of the cpa-templates repository:
extensions/
└── your-extension-name/
├── files/ # Files merged into the project tree
├── pyproject/ # Optional dependency fragments for merge
├── extension.json # Extension metadata and compatibility
└── README.mduvx create-awesome-python-app --list-addonsOr browse the full catalogue on the Extensions page, where you can filter by template type and category.