Roboflare
Concepts

Configs

Versioned, immutable robot behavior config — separate lifecycle from releases.

Configs are how you change robot behavior without shipping a new build. They live in their own table, deploy through their own pipeline, and the agent applies them to a known on-disk location so robot apps can read them with a plain file watcher.

Why separate from releases

A release is a binary. A config is a payload — speed limits, feature flags, calibration values, fleet-wide on/off switches. Decoupling lets operators flip a flag without queuing a build, and lets the audit log distinguish "the build changed" from "the behavior changed."

Data model

config_blobs ─< config_deployments ─< config_deployment_events
  • config_blobsname, namespace, version, checksum, the JSON payload, and the user who created it. Immutable. You publish a new version rather than mutate an old one.
  • config_deployments — one blob + target (robot | fleet) + required idempotency key.
  • config_deployment_eventsqueued → dispatched → applied | unchanged | failed. unchanged is a real status: the agent recomputes the on-disk file's checksum before writing and skips work when nothing would change.

Namespaces

Each config has a namespace. The agent writes the applied payload to ~/.roboflare/robot-configs/<namespace>.json. Your robot app picks the namespace it cares about. Common patterns:

  • motion — speed limits, accel curves.
  • vision — detection thresholds, model URLs.
  • features — boolean toggles.

A single robot can have many namespaces active at once; each is its own file.

API surface

# Publish a new config blob
POST /api/configs
{
  "name":      "default speed limits",
  "namespace": "motion",
  "payload":   { "max_linear_mps": 1.2, "max_angular_rps": 0.8 }
}

# Deploy it
POST /api/configs/deployments
Idempotency-Key: ...
{
  "config_blob_id": "...",
  "target_kind":    "fleet",
  "target_id":      "..."
}

# Read events
GET /api/configs/deployments/{deploymentId}/events

What the agent does

  1. Receives a config.apply frame over the tunnel with the blob payload and checksum.
  2. Compares the checksum to the existing ~/.roboflare/robot-configs/<namespace>.json — if it matches, reports unchanged.
  3. Atomically writes the new file and reports applied, or reports failed with the error.

Robot apps watch the file with inotify or a poll loop. There is no agent-mediated callback into the application — the file is the API.

On this page