Training for and with Rhiza — the living template system for software projects.
The companion website (rendered, searchable) is at https://jebel-quant.github.io/rhiza-education/.
Developers who are comfortable with Python, git, and basic CI/CD, and want to adopt Rhiza in a new or existing project.
The curriculum teaches Rhiza through Python, which is where the template is most complete. Since template v1.3.0 Rhiza is multi-language: core is language-neutral and a language layer — python-core, rust-core, or go-core — supplies the build and test targets on top of it. Everything about config, bundles, syncing, and the update lifecycle applies unchanged whichever layer you pick; only the toolchain behind the install and test tasks differs. Hosted CI has not shipped for Rust and Go yet, so those get local-first profiles.
The curriculum is current for rhiza v1.8.0 and rhiza-claude v0.14.0. Two changes land in this edition: a Python project may now derive its version from the git tag instead of writing it down (Lesson 3), and /rhiza:release opens its PR, waits for the merge and tags in a single run rather than asking you to invoke it twice (Lesson 11). rhiza-task also grew update and test-lowest, which put the template sync and the dependency-floor gate inside the task graph (Lessons 8 and 11). If you are coming from material written against v1.3.x, the change to read first is still v1.4.0, which retired the synced make layer in favour of the pinned rhiza-task CLI; Lessons 5, 10 and 11 cover it.
| # | Lesson | What you'll learn |
|---|---|---|
| — | Preamble — The Repo Zoo Problem | What goes wrong at scale, why template systems can't fix it, and when Rhiza was born |
| 1 | CI/CD Concepts | Pipelines, jobs, triggers, GitHub Actions, matrix builds — the vocabulary the curriculum assumes |
| 2 | uv and uvx | The package manager and tool runner that underpins the Rhiza ecosystem |
| 3 | Python Project Conventions | src layout, PEP 621 pyproject.toml, and tests/ structure |
| 4 | Why Rhiza? | The problem with one-shot scaffolding and how Rhiza solves it |
| 5 | Core Concepts | The key abstractions: template repos, syncing, and the sync loop |
| 6 | Getting Started | Install Rhiza, initialise a project, and run your first sync |
| 7 | Configuring Your Template | Anatomy of template.yml, bundles, include/exclude patterns |
| 8 | The Sync Lifecycle | How automated sync PRs work and how to review them |
| 9 | Renovate | How Renovate keeps your ref: pin current and why it is essential at scale |
| 10 | Customising Safely | local.mk, [tool.rhiza-task], local-setup.sh and exclude: — extend a project without fighting the sync |
| 11 | The Rhiza Ecosystem | rhiza-claude, rhiza-task, pytest-rhiza, rhiza-hooks, and rhiza-brainbug |
| 12 | Further Reading | Direct links to every doc file across the Rhiza repos, organised by topic |
Work through the lessons in order — each one builds on the last.
| # | Appendix | What you'll learn |
|---|---|---|
| A1 | GitLab Users | What changes when your project lives on GitLab instead of GitHub |
| A2 | Projects Using Rhiza | Real repos using Rhiza — from Stanford's CVXGRP to Janus Henderson — with annotated template.yml files |
| A3 | Contributors | The people who built Rhiza and its ecosystem, with profiles and contribution counts |
Work through the appendices that apply to your setup — each is self-contained.