2025-09-15 08:42:41 +02:00
2026-02-17 21:59:50 +01:00

Python CLI Template

A minimal Cookiecutter template for building personal CLI tools with uv, Typer, and strict typing.

Features

  • CLI with Typer
  • uv_build backend and lockfile-first reproducibility
  • Ruff for linting/formatting
  • MyPy strict mode
  • Pytest with coverage
  • Invoke tasks for common operations

Quick Start

  1. Generate a new project:

    cruft create git@git.roxautomation.com:sjev/python-cli-template.git
    

    Or locally:

    cookiecutter /path/to/python-cli-template
    
  2. Post-generation hook runs uv lock to create uv.lock.

  3. Bootstrap the generated project:

    uv sync --frozen --group dev
    uv run invoke lint
    uv run invoke test
    

Template Variables

Variable Description Example
project_name Human-readable project name "My CLI App"
project_slug Repository/directory name "my-cli-app"
package_name Python package name "my_cli_app"
description Short project description "A modern CLI tool"
author_name Author's full name "Your Name"
author_email Author's email "your.email@example.com"
version Initial version "0.1.0"

Python is fixed to 3.12+ by template policy.

Generated Project Structure

your-project/
├── README.md
├── pyproject.toml
├── tasks.py
├── uv.lock
├── src/
│   └── your_package/
│       ├── __init__.py
│       ├── py.typed
│       └── cli.py
└── tests/
    └── test_cli.py

Template Development

To modify this template:

  1. Edit files in {{cookiecutter.project_slug}}/
  2. Update variables in cookiecutter.json
  3. Test changes:
    ./test.sh
    

Requirements

  • Python 3.12+
  • uv
  • cruft or cookiecutter
Description
Cookiecutter template for cli projects
Readme MIT 65 KiB
Languages
Shell 66.2%
Python 33.8%