Install runtz CLI
Install the runtz CLI and run your first scan.
Install runtz CLI
The runtz CLI is a single static Go binary. The install script detects your
architecture, downloads the binary and puts it on your PATH.
Installs to /usr/local/bin:
curl -fsSL https://runtz.dev/install.sh | bashVerify the installation:
runtz versionruntz 1.0.0-rc1 (linux/amd64)Linux and macOS are supported on amd64 and arm64; Windows on amd64.
Script options
Both scripts accept the same overrides, passed as environment variables.
# Install a specific release
RUNTZ_VERSION=v1.0.0-rc1 curl -fsSL https://runtz.dev/install.sh | bash
# Install to a custom directory (no sudo needed if writable)
RUNTZ_INSTALL_DIR=$HOME/.local/bin curl -fsSL https://runtz.dev/install.sh | bashManual install
Download the binary for your platform from the GitHub releases page, then:
chmod +x runtz_linux_amd64
sudo mv runtz_linux_amd64 /usr/local/bin/runtz
runtz versionDocker image
The CLI is also published as a container image — the entrypoint is the
runtz binary:
docker run --rm runtzdev/runtz-cli:latest versionThis is the recommended way to run runtz in pipelines — see the CI/CD guides for ready-to-use pipeline examples (GitHub Actions, GitLab, Jenkins, Azure DevOps, Bitbucket and CircleCI).
Commands
| Command | Scan |
|---|---|
runtz sca (REPO_PATH | FILE_PATH) | Dependency vulnerabilities from package manifests |
runtz sast (REPO_PATH | FILE_PATH) | Static source code findings |
runtz host | Packages installed on a Linux host/rootfs |
runtz container IMAGE | Packages inside a container image |
runtz k8s | Kubernetes cluster or manifest posture |
runtz login | Store a platform token so scans no longer need --token |
runtz logout | Remove the stored token |
runtz whoami | Show the workspace and source of the current token |
runtz update | Update the CLI to the latest release |
runtz version | Print the CLI version |
Updating
The CLI updates itself in place, verifying the download's SHA-256 against the release checksums before replacing the binary:
runtz update # prompts before replacing the binary
runtz update --yes # no prompt (automation)
runtz update --check # only report if a newer version exists (exit 3 if so)Authentication
Every scan authenticates with a workspace token generated in the platform
(rtz_live_...); the token resolves your workspace automatically. For
interactive use, log in once — runtz login verifies the token and stores it
in ~/.config/runtz/config.json (permissions 0600), and scan commands stop
needing --token:
runtz login # paste the token at a hidden prompt
runtz whoami # workspace + where the current token comes from
runtz logout # remove the stored tokenIn CI/CD, skip login and pass the token from a secret on each run. The token
is resolved in this order — an explicit flag or environment variable always
beats the stored login:
--tokenflagRUNTZ_TOKENenvironment variableruntz loginstored token
--endpoint defaults to the runtz SaaS engine (https://engine.runtz.dev).
Self-hosted deployments pass their own endpoint — runtz login --endpoint
stores it alongside the token — or set RUNTZ_ENDPOINT.
First scan
Log in, then scan from the root of any repository:
runtz login
runtz sca ./Expected output:
Parsed package.json (npm): 42 dependencies
Checking 42 dependencies against the GitHub Advisory Database...
Sending SCA scan to Runtz...
SCA scan completed and sent to Runtz Platform.
Project: frontend
Manifests: 1
Dependencies: 42
Vulnerabilities: 3CI/CD severity gates
Every scan command can fail the pipeline when it finds too many issues at a
given severity. The thresholds are optional; 0 (the default) leaves the gate
off.
# Fail the build on a single critical, or on 5+ highs:
runtz sca ./ \
--token "$RUNTZ_TOKEN" \
--critical-threshold 1 \
--high-threshold 5Available on every scan: --critical-threshold N, --high-threshold N,
--medium-threshold N, --low-threshold N (or the env vars
RUNTZ_CRITICAL_THRESHOLD, RUNTZ_HIGH_THRESHOLD, RUNTZ_MEDIUM_THRESHOLD,
RUNTZ_LOW_THRESHOLD).
The scan results are always sent to the platform before the gate is evaluated, so a failed gate still records the scan.
Exit codes: 0 success · 1 execution error · 2 usage error ·
3 a severity gate tripped (or runtz update --check found an update).
See the Scans section for what each scan type covers and every available flag.