CLI overview
The rf command-line tool — what it is, how it's organized, and how to script with it.
rf is a single-binary Rust CLI that wraps the Roboflare control plane.
Every dashboard mutation has a CLI equivalent, and every CLI call is a
plain HTTP request you could make yourself.
Install
See Install the CLI. The short version:
build from source with cargo build --release and copy the binary into
/usr/local/bin/.
Command groups
rf login Set portal token + base URL
rf logout Clear local credentials
rf sites list|create Sites
rf fleets list|create|logs Fleets and aggregated fleet logs
rf keys list|new|revoke Enrollment keys
rf robots list|inspect|logs|timeline Read-only robot operations
rf releases list|push Release artifacts
rf deploy <release> --robot|--fleet Ship a release to a robot or fleet
rf configs list|set|deployments|events Config blobs and rolloutsEvery command supports --json for machine-readable output, which makes
rf safe to pipe into jq, GitHub Actions, or your own automation.
Authentication
rf reads credentials from ~/.config/roboflare/credentials.toml. The
file is created by rf login and contains the portal token plus base
URL:
token = "rf_org_..."
base_url = "https://api.roboflare.com"You can edit it directly to point at a self-hosted control plane.
Scripting patterns
Wait until a robot is online before deploying:
while ! rf robots list --json | jq -e '.[] | select(.id == "'"$ROBOT"'") | .last_seen_at'; do
sleep 2
done
rf deploy "$RELEASE" --fleet "$FLEET"Drive a CI rollout:
rf releases push ./robot-app.tar --tag "$GITHUB_SHA"
release_id=$(rf releases list --json | jq -r '.[0].id')
rf deploy "$release_id" --fleet canarySnapshot fleet state into a build log:
rf robots list --json | jq '.[] | {id, name, last_seen_at, fleet_id}' > fleet.jsonLimits in v0
rf is intentionally narrow. A few flows still need the dashboard or
direct API calls:
- Inviting org users — use the dashboard's user management page or
POST /api/org-users. - Shell and camera streams — the WebSocket endpoints exist
(
/api/robots/<id>/shell/ws,/api/robots/<id>/camera/ws) but the CLI doesn't wrap them yet; use the dashboard.
See the command reference for the full surface.