Getting started
Install
From source (requires Go 1.25 or newer):
sh
go install github.com/clintmod/rite/cmd/rite@latestBinary releases, Homebrew, and Linux packages are on the roadmap — see the releases page.
Your first Ritefile
sh
mkdir hello && cd hello
rite --init # writes Ritefile.ymlThe generated file:
yaml
version: '3'
vars:
GREETING: Hello, world!
tasks:
default:
desc: Print a greeting message
cmds:
- echo "{{.GREETING}}"
silent: trueRun it:
sh
rite # runs the default task → Hello, world!Core commands
| Command | What it does |
|---|---|
rite <task> | Run a task |
rite | Run default |
rite --list | Show tasks with descriptions |
rite --list-all | Show all tasks, including undescribed |
rite --init | Create a starter Ritefile.yml |
rite --migrate Taskfile.yml | Convert a go-task Taskfile to a Ritefile (warnings to stderr) |
rite --watch <task> | Rerun on file changes |
Passing variables
Three ways, in precedence order (highest wins):
sh
FOO=bar rite build # 1. Shell env — tier 1
rite build FOO=bar # 2. CLI arg — tier 2
# 3. rite build --set FOO=bar # explicit flag form of #2For variables declared inside a Ritefile, see the precedence model for all eight tiers.
A more interesting example
yaml
version: '3'
vars:
IMAGE: myapp
TAG: "{{.RITE_VERSION}}"
tasks:
build:
desc: Build the container image
cmds:
- docker build -t ${IMAGE}:${TAG} .
push:
desc: Push the image
deps: [build]
cmds:
- docker push ${IMAGE}:${TAG}Note both ${VAR} and {{.VAR}} reference variables. They're interchangeable — both resolve against the same set with identical precedence. See syntax for the full rules.
Next
- Variable precedence — the eight-tier model, one table.
- Syntax reference — what goes where in a Ritefile.
- Migration from go-task — what's different and why.