Roboflare
CLI

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 rollouts

Every 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 canary

Snapshot fleet state into a build log:

rf robots list --json | jq '.[] | {id, name, last_seen_at, fleet_id}' > fleet.json

Limits 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.

On this page