These instructions assume Ubuntu.
sudo apt-get update
sudo apt-get install -y -V \
build-essential \
ffmpeg \
git \
python3-dev \
software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt-get update
sudo apt-get install -y -V libopenarm-can-devcurl -LsSf https://astral.sh/uv/install.sh | shgit clone https://github.com/enactic/openarm-online-runner.gitcd openarm-online-runner
uv syncThe runner reads settings from a .env file in the working directory.
Copy .env.example and edit it:
cp .env.example .env
editor .envTo read a different file, set the ENV_FILE environment variable to
its path.
uv run dora build dataflow.yaml --uvuv run openarm-online-runnerBesides evaluation jobs, the runner polls the OpenArm Online API for
WebRTC offers queued by Web browsers. Each offer says what kind of
client made it: keyboard or webxr. The runner serves the offer with
the dataflow configured for its kind:
DEFAULT_KEYBOARD_TELEOPERATION_DATAFLOW_FILE or
DEFAULT_WEBXR_TELEOPERATION_DATAFLOW_FILE, overridable per task with
KEYBOARD_TELEOPERATION_DATAFLOW_FILE_${TASK_ID} /
WEBXR_TELEOPERATION_DATAFLOW_FILE_${TASK_ID}. Both are unset by
default: an offer whose kind has no dataflow configured for the task is
left pending. The sample dataflows under
dataflows/teleoperation/ are good starting
points.
The dataflow must contain a teleoperation node —
dora-openarm-keyboard
for keyboard, dora-openarm-webxr for webxr — running in
WebRTC-only mode: the runner hands the browser's offer SDP to the
dataflow via the OFFER environment variable and listens on
ANSWER_HOST/ANSWER_PORT for the answer SDP the node writes back. The
answer is posted to the API server, the browser applies it to establish
the WebRTC connection, and teleoperation starts. The session ends when
the dataflow exits (e.g. via a quitter node honoring the TIMEOUT
environment variable) or after TELEOPERATE_TIMEOUT seconds.
Build the teleoperation dataflows like the evaluation one:
uv run dora build dataflows/teleoperation/keyboard/mujoco/dataflow.yaml --uv
uv run dora build dataflows/teleoperation/webxr/mujoco/dataflow.yaml --uvsystemd/openarm-online-runner-generate-service.sh \
| sudo tee /etc/systemd/system/openarm-online-runner.service
sudo systemctl daemon-reload
sudo systemctl enable --now openarm-online-runnerCheck logs:
journalctl -u openarm-online-runnerLicensed under the Apache License 2.0. See LICENSE for details.
Copyright 2026 Enactic, Inc.
All participation in the OpenArm project is governed by our Code of Conduct.