A Copier template for bootstrapping Python projects with the same opinionated tooling stack used in my projects.
- uv for package management, Python 3.14 by default
- ruff (pragmatic ruleset, single-line imports, Google docstrings, line length 88)
- ty for type checking
- pytest + pytest-asyncio (auto mode) + pytest-cov, coverage gate 85%
- src/ layout with
tests/at the repo root - Test taxonomy:
tests/unit/,tests/integration/, optionallytests/e2e/andtests/contract/(Pact provider verification) - pre-commit with ruff + ty + hygiene hooks
- GitHub Actions CI: lint, type-check, pytest with coverage
uv run pytest runs unit + integration only. e2e and contract suites are opt-in.
uvx copier copy gh:frac/copier_baseproject ./my-new-project
cd my-new-project
git init -b main
uv sync
uv run pre-commit install
uv run pytestYou'll be prompted for project name, slug, description, Python version, and whether to include Pact / e2e tests.
If the template changes, you can pull updates into a previously-generated project:
uvx copier updateThis uses .copier-answers.yml (committed to the generated project) to know how to re-render.
copier.yml— prompts and configtemplate/— the actual scaffold; everything in here ends up in generated projects- Jinja-rendered files use the
.jinjasuffix template/{% if include_e2e %}tests/e2e{% endif %}/and similar handle conditional inclusion