Extensions
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.
What is an extension?
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 python-docker python-postgres github-setupExtension categories
Extensions are organized into 8 categories covering the most common project needs.
- · python-docker
- · python-postgres
- · python-sqlalchemy
- · python-redis
- · python-sentry
- · python-auth-jwt
- · github-setup
- · python-devcontainer
- · python-sqlalchemy
- · python-redis
- · python-auth-jwt
- · github-setup
- · python-devcontainer
How extensions work
When the CLI applies an extension it performs a deep merge of the extension's files and pyproject.toml fields into the scaffolded project:
- Files — source files from the extension are copied or appended to the project. Filenames ending in
.templateare processed as EJS templates before being written. - Dependencies — extension dependency lists are merged into the project's
pyproject.toml(runtime and dev groups). - Scripts — any task scripts or Makefile targets defined by the extension are merged with existing project tooling.
- Incompatibilities — extensions declare
incompatibleWithslugs so the CLI prevents conflicting combinations (e.g. two different test runners).
Extension file structure
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.mdListing available extensions
uvx create-awesome-python-app --list-addonsOr browse the full catalogue on the Extensions page, where you can filter by template type and category.