I got tired of spending 30-60 minutes setting up the same Python project boilerplate every time: pyproject.toml, GitHub Actions, pre-commit, MkDocs, Dockerfile. So I built a Copier template that does it in one command.
What it sets up:
- uv for package management (10-100x faster than pip)
- ruff for linting + formatting (replaces flake8, black, isort)
- ty for type checking (Astral's Rust-based type checker)
- pytest + hatch for multi-version matrix testing
- prek for git hooks (Rust-based pre-commit alternative)
- MkDocs with Material theme + mkdocstrings
- GitHub Actions CI/CD with release automation
- Docker multi-stage build with non-root user
- git-cliff for changelog generation from conventional commits
- Typer CLI scaffold
Why Copier over cookiecutter:
Copier supports copier update — you can pull template improvements into existing projects. With cookiecutter you're stuck with a snapshot.
I got tired of spending 30-60 minutes setting up the same Python project boilerplate every time: pyproject.toml, GitHub Actions, pre-commit, MkDocs, Dockerfile. So I built a Copier template that does it in one command.
What it sets up:
- uv for package management (10-100x faster than pip)
- ruff for linting + formatting (replaces flake8, black, isort)
- ty for type checking (Astral's Rust-based type checker)
- pytest + hatch for multi-version matrix testing
- prek for git hooks (Rust-based pre-commit alternative)
- MkDocs with Material theme + mkdocstrings
- GitHub Actions CI/CD with release automation
- Docker multi-stage build with non-root user
- git-cliff for changelog generation from conventional commits
- Typer CLI scaffold
Why Copier over cookiecutter:
Copier supports copier update — you can pull template improvements into existing projects. With cookiecutter you're stuck with a snapshot.
Try it: uvx copier copy --trust gh:ritwiktiwari/copier-astral my-project
Repo: https://github.com/ritwiktiwari/copier-astral
Docs: https://ritwiktiwari.github.io/copier-astral/
Example output: https://github.com/ritwiktiwari/copier-astral-example