Live introspection engine

See what your
autonomy is thinking.

A high-performance, web-based visualizer for BehaviorTree.CPP v4. Stream live tree state via ZeroMQ, drag-and-drop XML editing, and color-coded node status. No heavy desktop GUIs required.

>60 Hz updates MIT licensed BT.CPP v4
Built on BehaviorTree.CPP v4 ZeroMQ

What it does

Architected for speed

Drop the heavy Qt-based tools. BTViz is web-native, light, and mirrors the performance of your C++ autonomy stack.

Zero-latency ZMQ streaming

Connect directly to a running BehaviorTree.CPP instance. Updates stream at >60 Hz without browser stutter.

btviz ~ zmq
[14:32:01] Attached tcp://localhost:1668
[14:32:01] RECV: TreeLayout nodes=42
[14:32:02] TICK: NavigateToPose → RUNNING
[14:32:02] TICK: IsBatteryOK → SUCCESS
>60 Hz
tick throughput

Real-time UI sync with the C++ runtime. Smooth on Chromium, Firefox, WebKit.

Live XML editor

Bidirectional editing. Drag nodes in the canvas, watch the XML update. Import/export .btproj files.

<Sequence>
  <Action ID="OpenGripper"/>
  <Fallback>
    <Condition ID="IsAtTable"/>
    <!-- ... -->
  </Fallback>
</Sequence>

Status color coding

Instantly recognize node state with neon color coding. Glowing animations for RUNNING and FAILURE states.

SUCCESS
FAILURE
RUNNING

Auto-layout

Trees auto-arrange automatically. Collapse subtrees, search nodes, pan/zoom the canvas — smooth drag-and-drop.

Download

Get the desktop app

One installer per platform.

Desktop app requires Python 3.10+ on PATH. See the Install section for prerequisites.

Install

Up and running in seconds

Get up and running with the native desktop app.

1

Install Python 3.10+ on PATH

The desktop app spawns the BTViz backend natively. macOS and most Linux distros already include Python 3; on Windows install from python.org.

# Verify
python3 --version
2

Download and run the installer

Pick your platform from the Download section. On launch BTViz starts the backend on localhost:6060 and opens the visualizer.

3

Connect to your BT.CPP runtime

In the app, enter the ZMQ host and port (default localhost:1668) and click Connect. The tree appears and nodes color in real time.

No BT.CPP runtime yet? Run python test/mock_bt_publisher.py from the repo to stream a simulated tree on ports 1667/1668.

Reference

ZMQ protocol

BTViz uses two ZMQ sockets: REP on port - 1 for the tree XML, and PUB on port for binary status transitions.

Socket Port Format Description
REP target − 1 (1667) string (XML) Request/reply for full tree XML definition on connect.
PUB target (1668) binary, 12 B Continuous status transitions: timestamp_us (8B) + node_uid (2B) + prev_status (1B) + new_status (1B).
REP/S target − 1 string (XML) Stateful mode — supports reconfigurable trees (Refresh action).
STATUS CODES   0 = IDLE  ·  1 = RUNNING  ·  2 = SUCCESS  ·  3 = FAILURE  ·  4 = SKIPPED. Configure host and port via BT_ZMQ_HOST and BT_ZMQ_PORT.