name: copier-astral - Python Project Template with Astral Toolchain
description: copier-astral is an opinionated Copier template for bootstrapping Python projects using Astral's modern toolchain. It provides batteries-included project scaffolding with linting (ruff), type...
license: MIT
metadata:
topic: copier-astral
category: developer-tools
layer: "1"
language: python
stack: python-cli
source_url: https://ritwiktiwari.github.io/copier-astral/
github: ritwiktiwari/copier-astral
version: "v1.1"
verified: "2026-01-31"
next_review: "2026-04-30"
Overview
copier-astral is an opinionated Copier template for bootstrapping Python projects using Astral's modern toolchain. It provides batteries-included project scaffolding with linting (ruff), type checking (ty), package management (uv), testing (pytest + hatch), documentation (MkDocs), CLI framework (Typer), and CI/CD (GitHub Actions) pre-configured and ready to use.
Core Value Proposition: Generate production-ready Python project structure in seconds with modern Astral tooling (uv, ruff, ty) instead of legacy pip/flake8/mypy, eliminating hours of boilerplate configuration.
Problem Addressed
| Problem |
How copier-astral Solves It |
| Setting up Python projects requires extensive boilerplate |
Single command generates complete project with all tooling configured |
| Legacy tooling (pip, flake8, mypy) is slow and fragmented |
Uses Astral's unified toolchain: uv (10-100x faster), ruff (replaces flake8/black/isort), ty (fast type checker) |
| Inconsistent project structures across teams |
Enforces standardized layout with best practices baked in |
| CI/CD setup is repetitive and error-prone |
Pre-configured GitHub Actions for testing, linting, publishing |
| Documentation setup is tedious |
MkDocs with Material theme and mkdocstrings ready to deploy |
| Multi-Python version testing is complex |
Hatch envs with matrix testing across Python 3.10-3.13 |
| Project updates don't flow back to generated code |
Copier update mechanism allows syncing template improvements |
Key Statistics (as of January 31, 2026)
| Metric |
Value |
| GitHub Stars |
6 |
| Forks |
0 |
| Open Issues |
3 |
| Primary Language |
Jinja |
| Created |
January 28, 2026 |
| Latest Release |
v1.1 (January 31, 2026) |
| License |
MIT |
| Repository Size |
1,539 KB |
Key Features
1. Astral Toolchain Integration
| Tool |
Purpose |
Benefit |
| uv |
Package management, venv, dependencies |
10-100x faster than pip |
| ty |
Type checking |
Astral's new fast type checker |
| ruff |
Linting + formatting |
Replaces flake8, black, isort in single tool |
2. Testing Infrastructure
- pytest: Industry-standard test framework
- hatch: Multi-version testing with matrix envs
- pytest-cov: Coverage reporting with Codecov integration
- Matrix testing: Python 3.10, 3.11, 3.12, 3.13 support
3. Documentation
- MkDocs: Static site generator
- Material theme: Modern, responsive documentation
- mkdocstrings: Auto-generate API docs from docstrings
- GitHub Pages: Automatic deployment via Actions
4. CLI Support (Optional)
- Typer: Modern CLI framework with type hints
- Pre-configured entry point in pyproject.toml
- Help text and command structure ready
5. CI/CD Workflows
- Test workflow: Runs on PR and push to main
- Lint workflow: Ruff + ty checks
- Docs workflow: Build and deploy to GitHub Pages
- Release workflow: Automatic PyPI publishing on tag
- Codecov integration: Coverage badge and reports
6. Containerization (Optional)
- Dockerfile: Multi-stage build for minimal image size
- Docker Compose: Development environment setup
- Production-ready container configuration
7. Code Quality
- pre-commit hooks: Enforced formatting and linting
- Ruff configuration: Comprehensive rule set in pyproject.toml
- Type annotations: Strict typing enforced by ty
8. Template Options
| Option |
Type |
Default |
Description |
project_name |
string |
- |
Human-readable project name |
project_description |
string |
"A Python package" |
Short description |
project_slug |
string |
derived |
Python package name |
python_version |
choice |
3.12 |
Minimum Python (3.10-3.13) |
python_versions_matrix |
string |
"3.10,3.11,3.12,3.13" |
CI matrix versions |
include_cli |
bool |
true |
Include Typer CLI |
include_github_actions |
bool |
true |
Include CI/CD workflows |
include_docker |
bool |
true |
Include Dockerfile |
include_docs |
bool |
true |
Include MkDocs |
include_precommit |
bool |
true |
Include pre-commit hooks |
include_codecov |
bool |
true |
Include Codecov |
include_pypi_publish |
bool |
true |
Include PyPI publishing |
license |
choice |
MIT |
MIT, Apache-2.0, GPL-3.0, BSD-3-Clause, ISC, Proprietary |
Technical Architecture
copier copy --trust gh:ritwiktiwari/copier-astral my-project
│
▼
┌─────────────────────────────────────────────────────────┐
│ Copier Template Engine │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Interactive Prompts │ │
│ │ - Project metadata (name, author, license) │ │
│ │ - Feature toggles (CLI, Docker, docs) │ │
│ │ - Python version selection │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Jinja2 Template Processing │ │
│ │ - copier-template-extensions for slug/git info │ │
│ │ - Conditional file inclusion based on options │ │
│ │ - Variable substitution in all files │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Generated Project Structure │
│ │
│ my-project/ │
│ ├── src/my_project/ │
│ │ ├── __init__.py │
│ │ ├── main.py │
│ │ └── cli.py (if include_cli) │
│ ├── tests/ │
│ │ └── test_main.py │
│ ├── docs/ (if include_docs) │
│ ├── .github/workflows/ (if include_github_actions) │
│ ├── Dockerfile (if include_docker) │
│ ├── pyproject.toml │
│ ├── Makefile │
│ └── .pre-commit-config.yaml (if include_precommit) │
└─────────────────────────────────────────────────────────┘
Installation & Usage
Prerequisites
# Install Copier
pip install copier
# Install required extension for custom Jinja2 filters
pip install copier-template-extensions
Generate a Project
# From GitHub (recommended)
copier copy --trust gh:ritwiktiwari/copier-astral my-project
# From local clone
copier copy --trust /path/to/copier-astral my-project
Note: The --trust flag is required because the template uses custom Jinja2 extensions for auto-detecting git user info and generating slugified package names.
Post-Generation Setup
cd my-project
# Initialize git and install dependencies
git init -b main
make install
# Activate virtual environment
source .venv/bin/activate
# Install pre-commit hooks (if enabled)
pre-commit install
uv run pre-commit run -a
# Verify everything works
make verify
make test
Development Commands
| Command |
Description |
make install |
Install all dependencies |
make verify |
Run all checks (lint, format, type-check) |
make fix |
Auto-fix lint and format issues |
make test |
Run tests |
make test-cov |
Run tests with coverage |
make test-matrix |
Run tests across all Python versions |
make docs |
Build documentation |
make docs-serve |
Serve documentation locally |
Releasing
# Create version tag (triggers PyPI publish workflow)
git tag v0.1.0
git push --tags
Updating Existing Projects
# Sync with latest template improvements
copier update --trust
Generated Project Structure
my-project/
├── src/
│ └── my_project/
│ ├── __init__.py # Package version
│ ├── main.py # Core module
│ └── cli.py # Typer CLI (optional)
├── tests/
│ └── test_main.py # Test examples
├── docs/ # MkDocs (optional)
│ ├── index.md
│ └── api.md
├── .github/
│ └── workflows/ # CI/CD (optional)
│ ├── test.yml
│ ├── lint.yml
│ ├── docs.yml
│ └── release.yml
├── .pre-commit-config.yaml # Pre-commit hooks (optional)
├── Dockerfile # Container (optional)
├── docker-compose.yml # Dev environment (optional)
├── pyproject.toml # Project config (uv, ruff, hatch)
├── Makefile # Dev commands
├── LICENSE
└── README.md
Relevance to Claude Code Development
Direct Applications
- Plugin Scaffolding: Use as base template for generating new Claude Code plugins with consistent structure
- Skill Development: Bootstrap Python-based skills with proper testing and type checking
- MCP Server Templates: Foundation for creating MCP servers with Astral tooling
- Agent Infrastructure: Scaffold agent implementations with production-ready CI/CD
Patterns Worth Adopting
- Astral Toolchain: uv + ruff + ty combination is significantly faster than legacy pip + flake8 + mypy
- Makefile Abstraction: Simple
make verify, make test commands abstract complex uv/hatch invocations
- Copier Update Mechanism: Template improvements can propagate to existing projects via
copier update
- Feature Toggles: Conditional file generation based on boolean options is clean for customization
- Matrix Testing: Hatch envs for multi-Python testing without Docker complexity
- Single Source of Truth: pyproject.toml contains all tool configurations (ruff, pytest, hatch, etc.)
Integration Opportunities
- claude-code-plugin-template: Fork/adapt for Claude Code plugin-specific scaffolding
- mcp-server-template: Specialize for MCP server projects with FastMCP defaults
- skill-template: Create skill-specific variant with SKILL.md and references/ structure
- Pre-commit Integration: This repo already uses prek - could sync ruff configurations
Key Insight
copier-astral demonstrates the modern Python tooling stack that Claude Code-related projects should adopt. The Astral toolchain (uv, ruff, ty) provides 10-100x performance improvements over legacy tools while maintaining compatibility. The Copier template mechanism allows project structure standardization with the ability to propagate improvements to existing projects - a pattern applicable to Claude Code plugin/skill templates.
References
- Documentation Site: https://ritwiktiwari.github.io/copier-astral/ (accessed 2026-01-31)
- GitHub Repository: https://github.com/ritwiktiwari/copier-astral (accessed 2026-01-31)
- User Guide: https://ritwiktiwari.github.io/copier-astral/guide/ (accessed 2026-01-31)
- Template Options: https://ritwiktiwari.github.io/copier-astral/options/ (accessed 2026-01-31)
- Copier Documentation: https://copier.readthedocs.io/ (accessed 2026-01-31)
- uv Documentation: https://docs.astral.sh/uv/ (accessed 2026-01-31)
- ruff Documentation: https://docs.astral.sh/ruff/ (accessed 2026-01-31)
- ty Documentation: https://docs.astral.sh/ty/ (accessed 2026-01-31)
- Typer Documentation: https://typer.tiangolo.com/ (accessed 2026-01-31)
- MkDocs Material: https://squidfunk.github.io/mkdocs-material/ (accessed 2026-01-31)
Related Tools
| Tool |
Relationship |
| cookiecutter |
Original Python project template tool (Copier is successor) |
| copier |
Template engine this project uses |
| python-project-template |
Alternative Copier template without Astral tooling |
| cruft |
Cookiecutter with update capability (similar to Copier) |
| hatch |
Python project manager used for multi-version testing |