The all-in-one modern toolchain, task runner, and developer environment for Go.
rig= Cargo’s clarity and reliability + Bun’s DX + uv's hygiene + Go’s simplicity and no-nonsense ideology
rig is an opinionated project orchestrator: it helps you define tasks, pin dev tools, and compose build profiles via a single rig.toml. It complements the Go toolchain; it does not replace go build, go test, or go mod.
- One manifest:
rig.tomlis the source of truth for project tasks, tools, and build intent. - Project-local tooling: installs pinned tools into
.rig/binto avoid global conflicts. - Reproducible tooling:
rig syncwritesrig.lock(deterministic, schema=0) and uses it to install and verify tools. - Fast parity checks: also writes
.rig/manifest.lock(a hash cache) so commands can quickly detect drift. - Ergonomic DX: dry-runs, task listing, JSON output (where supported), and sensible
inittemplates.
Current installer
curl -fsSL https://raw.githubusercontent.com/divijg19/rig/main/install.sh | shEventual official installer
curl -fsSL https://rig.sh/install | shOn macOS/Linux, the installer installs rig and also creates these optional symlink entrypoints next to it:
rir→rig runric→rig checkrid→rig devris→rig start
Additional entrypoints are supported by invocation name and can be created manually:
ril→rig tools lsrip→rig tools pathriw→rig tools why
On Windows, invoke rig run, rig check, rig dev, etc directly until a PowerShell installer exists.
Go install (single binary only)
# Install the single main binary
go install github.com/divijg19/rig/cmd/rig@latestEnsure $GOPATH/bin is in your system's PATH.
go install does not create aliases. If you want aliases, create symlinks manually:
ln -sf "$(command -v rig)" "$HOME/.local/bin/rir"
ln -sf "$(command -v rig)" "$HOME/.local/bin/ric"
ln -sf "$(command -v rig)" "$HOME/.local/bin/ril"
ln -sf "$(command -v rig)" "$HOME/.local/bin/rip"
ln -sf "$(command -v rig)" "$HOME/.local/bin/riw"
ln -sf "$(command -v rig)" "$HOME/.local/bin/rid"
ln -sf "$(command -v rig)" "$HOME/.local/bin/ris"cd my-go-project
# scaffold a rig.toml
rig init
# install tools declared in [tools] (writes rig.lock + .rig/manifest.lock)
rig sync
# start the dev loop (requires rig.lock)
rig dev
# discover tasks
rig run --list
# run a task
rig run testExample tooling pins:
[tools]
golangci-lint = "1.62.0"
github.com/vektra/mockery/v2 = "v2.46.0"rig run(alias: rir) now requiresrig.lockfor deterministic tool validation and execution. List tasks set in rig.toml quickly withrig run --listorrir --listif you use aliases. Runrig syncto generate the lock file and install tools.rig check(alias:ric) verifiesrig.lockpresence and tool parity. Use it in CI to ensure a clean state before running tasks.rig statuschecks forrig.lockand.rig/binparity and reports the current state of the project environment.rig syncnow writesrig.lock(schema=0) and.rig/manifest.lock(a hash cache) for deterministic tool resolution and fast parity checks.
rig devis now a first-class command (alias:rid). Configure it via[tasks.dev]withcommand+watch.- Alias model is finalized: one binary with invocation-name dispatch. See
rig alias.
- Tool observability commands are available:
rig tools ls,rig tools path <name>,rig tools why <name>,rig tools doctor [name]. - New invocation-name aliases are supported:
ril,rip, andriw. rig doctornow accepts an optional tool name and dispatches to tool diagnostics.rig upgradeperforms a checksum-verified binary self-update with an up-to-date short-circuit.
| Command | Description |
|---|---|
rig init |
Generate a rig.toml (interactive or flags). |
rig run <task> |
Run a task from [tasks]. |
rig dev |
Run the watcher-backed dev loop (alias: rid). |
rig status |
Show current state (read-only). |
rig build |
Compose and run go build using optional profiles. |
rig tools |
Manage tools declared in [tools] (sync/check/outdated). |
rig tools ls |
List locked tools in deterministic order (alias entrypoint: ril). |
rig tools path <name> |
Print absolute path in .rig/bin with lock+checksum validation (alias entrypoint: rip). |
rig tools why <name> |
Show requested/resolved/sha/path provenance for a tool (alias entrypoint: riw). |
rig tools doctor [name] |
Diagnose tool presence, executable bit, and checksum parity. |
rig sync |
Shortcut for rig tools sync. |
rig check |
Verify rig.lock and .rig/bin tool parity (alias: ric). |
rig outdated |
Shortcut for rig tools outdated. |
rig x |
Run a tool ephemerally. |
rig doctor |
Verify local environment and toolchain sanity. |
rig upgrade |
Upgrade the rig binary with asset+SHA verification and safe replacement semantics. |
rig setup |
Convenience installer for [tools] (similar to sync). |
- Scope:
rig upgradeonly replaces the currentrigexecutable. It does not modifyrig.toml,rig.lock, PATH, aliases, or project config. - Version gate: if latest release tag exactly matches current version, it prints up-to-date and does not replace the binary.
- Integrity: downloads both release asset and
.sha256, validates filename and SHA256 before extraction. - Archive contract: requires exactly one binary entry (
rigon Unix,rig.exeon Windows). - Replacement: uses temp-file replacement; on Windows, if the running binary is locked, it returns an actionable message to close running
rigprocesses and retry.
- docs/CONFIGURATION.md:
rig.tomlschema and behavior. - docs/CLI.md: CLI commands, flags, and workflows.
- docs/CHEATSHEET.md: quick reference.
- examples/README.md: copy-pasteable manifests.
- Zig: Introduce
zig ccas a linker or plausible build tool for all cgo and c, c++ code managed throughrig. - Glyph: Integrate
glyph *commands directly into rig.
Made with ❤️ for the Go community, and dedicated to Tarushi, this project's origin.