Connect a robot

Three ways to start, easiest first. You can switch between them later. No code experience needed for option one.

1
No setup

Try the live demo (30 seconds)

Drive six different robots from your browser. Nothing to install, nothing to configure. Best for getting a feel for what the safety pipeline does.

  • Pick a robot profile (Franka arm, Spot quadruped, Tello drone, Stretch mobile arm, humanoid, TurtleBot).
  • Use the on-screen joystick or one-click primitive buttons to dispatch commands.
  • Watch the trace pane as every action goes through GeofenceGate, ForceCap, ActionSmoothing, RateLimit, and HITL.
  • Hit Emergency Stop to see the runtime go fail-closed in real time.
Open the live demo
2
5 minutes, one command

Run ghostloop locally on your laptop

If you have Python installed, you can run the same control plane on your own machine. Good for hobbyists and anyone who wants to iterate offline before pointing at a real robot.

1.Install ghostloop

pip install 'ghostloop[dashboard]'

Requires Python 3.10 or newer.

2.Start the dashboard

python -m ghostloop.dashboard

Listens on http://localhost:8000 with a sample fleet of three MockBackend robots so you have something to click on right away.

3.Open the UI in your browser

Visit http://localhost:3000 (this UI, but pointed at your local backend instead of the public one).

To run this UI locally: git clone https://github.com/joemunene-by/ghostloop-ui, then GHOSTLOOP_BACKEND_URL=http://localhost:8000 npm run dev.

3
Advanced

Embed ghostloop in your existing robot stack

If you already have a robot project (ROS 2, MuJoCo, PyBullet, your own driver), wrap it with the ghostloop runtime. Every command flows through the safety pipeline and shows up here automatically.

Minimum viable wiring, ~10 lines:

from ghostloop import GhostloopStore, Runtime, MockBackend
from ghostloop.fleet import FleetRegistry, RobotHandle
from ghostloop.dashboard import create_production_app, ProductionConfig

store = GhostloopStore("./ghostloop.db")
fleet = FleetRegistry()
fleet.register(RobotHandle(name="my-robot", backend=MockBackend()))

app, alarms = create_production_app(
    store=store, fleet=fleet,
    config=ProductionConfig(),
)
# uvicorn yourfile:app --host 0.0.0.0 --port 8000

Swap MockBackend for MujocoBackend("franka_panda"), PyBulletBackend("humanoid"), Ros2Backend("/cmd_vel"), or your own. Six backends ship in the box; full list at the project repo.

Common questions

I don't have a robot. Can I still use this?

Yes. Path 1 (the live demo) gives you six simulated robots in your browser. Path 2 starts you with three more on your own machine. You can build, train, and bench against them indefinitely without ever touching hardware.

Is anything I do here permanent?

No. The public demo backend uses an ephemeral SQLite database that resets when the server restarts. Anyone can ack alarms and submit missions; nothing carries over. To keep state, run path 2 or path 3 with your own database.

Do I need to know Python?

For path 1, no. Python is only required for paths 2 and 3 because ghostloop itself is a Python library. If you're starting from zero, the live demo is enough to learn what the runtime does.

What kinds of robots does ghostloop support?

Anything with a Python-callable interface. Out of the box: arms (Franka, UR), quadrupeds (Spot, Anymal), drones (Tello, PX4), mobile bases (TurtleBot, Stretch), humanoids. Backends include MuJoCo, PyBullet, ROS 2, Gymnasium, and a randomized stress-test backend.

What does the safety pipeline actually do?

Every command (called an "Intent") flows through a chain of gates before reaching the robot: GeofenceGate (workspace bounds), ForceCap (max applied force), ActionSmoothing (jerk limits), RateLimit (commands per second), HITL (human-in-the-loop approval for dangerous primitives). If any gate denies, the command never reaches the hardware and the denial is recorded in the trace.