Templates
Project templates are the starting point for every create-awesome-python-app project. Each template is a complete, production-ready project skeleton for a specific technology stack.
What is a template?
A template provides the initial directory structure, configuration files, and tooling for a new project. When you run create-awesome-python-app, you pick a template and optionally layer extensions on top of it to add functionality like state management, testing, or UI libraries.
uvx create-awesome-python-app@latest my-app --template fastapi-starterEach template ships with an AGENTS.md file that scopes how AI coding assistants interact with the generated repository. Learn more about AGENTS.md →
Available templates
The following templates are maintained in the cpa-templates repository. There are currently 5 templates available.
type: fastapi-backend
View templatetype: cli-app
View templatetype: celery-worker
View templatetype: django-backend
View templatetype: uv-workspace
View templateUsing templates
Interactive mode
Run without arguments and the CLI will prompt you to pick a template and extensions:
uvx create-awesome-python-app my-app --interactiveNon-interactive mode
Pass --template (and optionally --addons) to skip prompts:
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker python-postgresList all templates
uvx create-awesome-python-app --list-templatesTemplate structure
Every template lives in the templates/ directory of the cpa-templates repository and follows this layout:
templates/
└── your-template-name/
├── src/ # Application source (or app/ for Django)
├── tests/ # pytest suite
├── .gitignore
├── pyproject.toml # uv project metadata and dependencies
├── uv.lock # Lockfile (generated)
├── README.md
└── AGENTS.md # AI assistant contractTemplate files can use EJS-style template tags (<%= variable %>) to inject values collected during project creation (e.g. project name, src directory).