Releases: jlevy/simple-modern-uv
v0.3.0
What's Changed
simple-modern-uv v0.3.0 is a significant update focused on first-class AI agent
support. The template now ships an installable agent skill and agent instruction
files, so you (or your coding agent) can create, modernize, or update a Python project
from a single prompt. It also adds license and publishing options as proper template
questions and refreshes the toolchain.
Existing projects upgrade cleanly: a default copier update is a no-op, because every
new question keeps the template's previous behavior as its default.
New Features
Agent skill: use the template from any AI coding agent.
A new Agent Skill (skills/simple-modern-uv/) lets an agent
drive the whole template. Install it into Claude Code, Codex, Cursor, Gemini CLI, and
50+ other agents with one command, then just describe what you want:
npx skills add jlevy/simple-modern-uvThe skill covers three workflows from one prompt:
- New project — scaffold from scratch.
- Upgrade an existing project — convert a Poetry, setuptools/pip, or PDM project to
uv, ruff, BasedPyright, and GitHub Actions. - Update a templated project — pull the latest template changes.
It asks only the decisions that matter (package name, description, license, whether you
publish to PyPI) and applies the conventions silently. Reference guides for migration,
customization, and troubleshooting ship alongside it.
License is now a template question. The new package_license answer offers MIT
(default), Apache-2.0, BSD-3-Clause, AGPL-3.0-or-later, Proprietary, or None
(decide later). It writes the correct LICENSE file and pyproject.toml license
field together; None writes neither.
Publishing is now a template question. The new publish_to_pypi answer (default
yes) controls the publish path. Answer no for a private package or an app: the publish
workflow and publishing docs are omitted and a Private :: Do Not Upload classifier is
added so PyPI rejects an accidental upload.
Change either later without hand-editing files, e.g.
uvx copier@9.15.1 update --data package_license=Apache-2.0 — so future updates stay
consistent.
Agent instruction files in generated projects. Every project now includes an
AGENTS.md (build/test commands and conventions, read natively by
Codex, Cursor, Copilot, Gemini CLI, and others) plus a CLAUDE.md that imports it for
Claude Code, so both stay in sync with no symlinks.
Improvements
- Updated uv to
0.11.17in the generated CI and publish workflows. - Added
[tool.uv] required-version = ">=0.9"so projects fail fast on uv versions
too old for relative-durationUV_EXCLUDE_NEWER. - Bumped dev-dependency floors:
ruff>=0.15.15,basedpyright>=1.39.6. - Pinned
actions/checkoutto the immutablev6.0.2tag (matching the existing
astral-sh/setup-uvpin) for supply-chain hardening. - Agent-first README with an Agent Quick Start section, and a note that the template
also upgrades existing projects. - The template repo now has its own CI that renders the template (across license
and publish variants), runs the full lint/test/build cycle on the render, checks that
a project rendered from the previous release updates cleanly, and validates the skill. - New reference docs: a uv changes timeline
and a refreshed type-checker comparison
(BasedPyright remains the default).
Upgrading
- From any earlier version:
copier updatein a clean working tree. With defaults
it changes nothing about your license or publishing; it brings in the tool-version
bumps,AGENTS.md/CLAUDE.md, and[tool.uv] required-version. - If you previously hand-edited the license or deleted
publish.yml: pass the
matching answer so the update preserves your intent, e.g.
copier update --data publish_to_pypi=false. See the skill's
customize guide. - New-project setup note: run
uv syncafter your first commit. Dynamic
versioning reads git, so syncing before any commit leaves the editable install at
version0.0.0. The README and skill now reflect this order.
Deprecations
uvtemplateis retired. This template no longer uses or recommends the old
interactiveuvx uvtemplatehelper; the agent skill and plaincopierfully replace
it. Projects created withuvtemplatekeep working and keep updating via
copier updatenormally.
Validation: this repo's CI passed all six checks on the release commit be2f938
(template renders across license and publish variants with the full lint/test/build
cycle, an update-path test from v0.2.27, and skill validation), plus a local render
verification on the same commit.
During review, a project rendered from this branch passed the full Python 3.11–3.14
CI matrix (jlevy/test-smu-1).
The downstream simple-modern-uv-template
repo will be updated to this tag next, per updating.md.
Full Changelog: v0.2.27...v0.3.0
v0.2.27
What's Changed
Copier prompts & generation
- Auto-derive
package_modulefrompackage_name, validate it, and reject Python reserved words, so dash-case/CamelCase names don't silently produce a broken module (#21, #22). - Bump
_min_copier_versionto9.5.0for reliable validators and computed defaults. - Create and commit
uv.lockduring initial project setup so CI installs reproducibly with--frozen.
Template payload
- Apply upstream flowmark release/CI improvements to the generated workflows (#23).
- Ignore and clean
.ruff_cache/in the template.gitignore. - Expand
publishing.md,development.md, andinstallation.md; clarify GitHub repo setup.
Template repo tooling & docs
- Add a top-level
Makefileand.flowmarkignoreto auto-format Markdown (incl.*.md.jinja) with pinnedflowmark-rs. - Add a living Python type-checker research/comparison doc.
- Adopt the common-doc-guidelines footer convention across docs (#24).
- Upgrade tbd tooling to v0.2.1.
Downstream validation: jlevy/simple-modern-uv-template CI passed (3.11–3.14) for 2e512fd.
Full Changelog: v0.2.26...v0.2.27
v0.2.26
What's Changed
- Hardened generated CI and publish workflows with
astral-sh/setup-uv@v8.1.0,uv0.11.12, and a 14-dayUV_EXCLUDE_NEWERcutoff. - Made generated CI linting non-mutating by adding
devtools/lint.py --checkandmake lint-check. - Updated vetted generated dev dependency lower bounds for pytest, ruff, codespell, rich, and basedpyright.
- Added supply-chain hardening guidance to the README, generated development docs, and template maintenance docs.
- Added repo-level
tbd/Claude session tooling and pinned helper installs. - Codified the release process so
jlevy/simple-modern-uv-templateexport and CI are the release gate. - Cleaned stale setup docs around
pyproject.tomland initialmainbranch creation.
Validation
- Exported template commit
4beaef8intojlevy/simple-modern-uv-template. - Local downstream checks passed:
uv sync --all-extras,uv run python devtools/lint.py --check,uv run pytest, anduv build. - Downstream GitHub Actions passed: https://github.com/jlevy/simple-modern-uv-template/actions/runs/26349998783
Full Changelog
v0.2.25
What's Changed
- Updated dev dependencies: ruff 0.14.11 to 0.15.1, basedpyright 1.37.1 to 1.38.0, rich 14.2.0 to 14.3.2
- Updated uv to 0.10.2 in CI workflows (from 0.9.25)
- Updated LICENSE year to 2026
- Added updating.md with full 7-step process for template maintenance (check versions, update template, tag, copier update downstream, verify CI, create release)
- Clarified GitHub repo setup in publishing.md and README: uvtemplate handles repo creation automatically; manual users should create an empty repo
- Simplified README "Maintaining This Template" section to link to updating.md
Full Changelog: v0.2.21...v0.2.25
v0.2.24
What's Changed
- Updated dev dependencies: ruff 0.14.11 to 0.15.1, basedpyright 1.37.1 to 1.38.0, rich 14.2.0 to 14.3.2
- Updated uv to 0.10.2 in CI workflows (from 0.9.25)
- Updated LICENSE year to 2026
- Added updating.md with full 7-step process for maintaining template versions, including downstream CI verification and release creation
Full Changelog: v0.2.21...v0.2.24
v0.2.21
What's Changed
- Python 3.14 support - Added to CI matrix and PyPI classifiers
- Updated GitHub Actions - checkout v4 to v6, setup-uv v5 to v7
- Updated dev dependencies: pytest 9.0.2, ruff 0.14.11, basedpyright 1.37.1, rich 14.2.0, pytest-sugar 1.1.1
- Added template maintenance docs - New Maintaining This Template section in README
Full Changelog: v0.2.20...v0.2.21