The CLI is a single Go binary. Install it once on your laptop and once again in CI - and pin both to the same major version so a release on Friday doesn’t ruin your Monday morning.
Install
brew updatebrew install renderUpgrade later with brew upgrade render. Homebrew tracks the latest stable release.
curl -fsSL https://raw.githubusercontent.com/render-oss/cli/main/bin/install.sh | shThe script drops the binary into ~/.render/bin/render. Add that to your PATH if your shell didn’t already pick it up:
export PATH="$HOME/.render/bin:$PATH"Download the latest Windows zip from the GitHub releases page, unzip, and put render.exe somewhere on your PATH (e.g. C:\Users\you\bin\).
WSL users: use the Linux/curl instructions inside the WSL shell instead.
git clone git@github.com:render-oss/cli.gitcd cligo build -o render../render --versionOnly do this if you need an unreleased feature or you’re contributing patches upstream.
Confirm the install:
$render --versionrender version 2.7.0
Anything 2.7.0 or newer is fine for this course. Older versions are missing blueprints validate and the modern -o json defaults.
Pin the version in CI
The install script always grabs the latest release. That’s the right default locally - you want bug fixes - but it’s the wrong default in CI, where you want reproducibility.
Pin to a specific release by downloading the asset directly:
#!/usr/bin/env bashset -euo pipefailRENDER_CLI_VERSION="v2.7.0"OS="linux"ARCH="amd64"
curl -sSfL \ "https://github.com/render-oss/cli/releases/download/${RENDER_CLI_VERSION}/cli_${RENDER_CLI_VERSION#v}_${OS}_${ARCH}.zip" \ -o /tmp/render.zipunzip -q /tmp/render.zip -d /tmp/rendersudo mv "/tmp/render/cli_${RENDER_CLI_VERSION}" /usr/local/bin/renderrender --versionThe exact asset name follows the pattern cli_<version>_<os>_<arch>.zip - visit the releases page and check the artifact list if a new release changes the convention.
Verify the install with a smoke test
Run two read-only commands. If both succeed, you’re done with this step:
$render --versionrender version 2.7.0$render --helpUsage: render [command] Available Commands: blueprints, deploys, logs, login, projects, psql, services, skills, ssh, workspaces, workspace,...
If render --help only shows a subset of those commands, you’ve got a much older release on your PATH - most likely from a previous install - and it’s masking the new one. Run which -a render to find the duplicate and remove it.
Update later
| Method | Update command |
|---|---|
| Homebrew | brew upgrade render |
| Linux/macOS curl install | Re-run the install script |
| Direct download | Replace the binary with the new release |
| CI script | Bump RENDER_CLI_VERSION and open a PR |
The CLI follows semver. Major bumps will be called out in the release notes; minor and patch releases are safe to take as soon as they ship.
Where the install lives
The binary itself is in one place; the config lives somewhere different. You’ll meet the config file in the next step.
| Path | Contents |
|---|---|
/usr/local/bin/render (or ~/.render/bin/render) | The binary |
~/.render/cli.yaml | Your CLI token, default workspace, and output preferences |
$RENDER_CLI_CONFIG_PATH | Override the config file location (handy for per-project configs) |
Keep the binary on PATH; keep the config out of git.
What you learned
- Install via Homebrew, the curl installer, a direct download, or `go build` - same binary either way
- Pin the CLI version in CI by downloading a specific release asset from GitHub
- Major-bump the pin in its own reviewable PR; let patch versions float for bug fixes
- Config lives in `~/.render/cli.yaml` (or `$RENDER_CLI_CONFIG_PATH`); the binary lives on `PATH`