Open Source RoboticsRobots, software & learning

BehaviorTree.CPP

Software

C++17 behavior-tree execution framework with XML trees, custom nodes and plugin loading. [1] [2] [3]

Installation & first result →Official websiteGetting started

For
Robotics developers evaluating the selected source workflow [1] [2] [3]
Source rights
Named licenses are documented by part. Review licenses
Unknowns
operating system, compute requirements not fully established. Review gaps

Source researched · Not tested by us
Sources checked · Research details

Licenses & related hardware

Requirements · Research details and dates

On this page

Overview

BehaviorTree.CPP is a C++17 behavior-tree framework for composing actions and conditions, loading XML trees and registering custom nodes or plugins. The reviewed README describes asynchronous actions, dataflow and logging/profiling facilities. It is useful for organizing robot decision logic, but its tree engine does not itself implement a gripper, navigation transport or durable robot action. [1] [3]

Is this for you?

Known limitations
  • Tutorial uses dummy-node plugin callbacks; successful tutorial output is not physical gripper execution.
  • User nodes must implement real actions, error/status handling and interruption semantics; no upstream build was run.

Editorial source-scope assessment; no installation, execution or compatibility test.

[1] [2] [3] · Editorial assessment

What you need

Dependencies
  • C++17 compiler; Conan route requires CMake>=3.23
  • Conan, ROS2 colcon, straight CMake or pixi build routes have different dependency handling

[1] [2] [3]

Installation & first result

Open the upstream getting-started guide [1] [2] [3]

  • Inspect the pinned source instructions and select the documented configuration.
  • Install only the dependencies for the chosen route; validate against the selected robot or model before hardware integration.

Editorial source-scope assessment; no installation, execution or compatibility test.

[1] [2] [3] · Editorial assessment

Project notes

Pick a build route before adapting the tutorial

The pinned README labels the project 4.9 and requires a C++17 compiler. It lists ROS2 colcon/ament, Conan and straight CMake routes, with pixi also documented. Conan builds require CMake 3.23 or newer. These routes manage dependencies differently; package-manager versions installed today need not equal the inspected source revision. No build was performed. [1]

For the documented Conan route, run from the repository root: conan install . -s build_type=Release --build=missing, then cmake --preset conan-release and cmake --build --preset conan-release. The straight-CMake alternative expects dependencies such as ZeroMQ and SQLite to be installed separately, then uses cmake -S . -B build_release and cmake --build build_release --parallel. Choose one route rather than combining their assumptions. [1]

The library bundles nlohmann/json. The README says that selecting a system copy with -DUSE_VENDORED_JSON=OFF requires version 3.10 or later, and all code linking the public API must use the same version. That compatibility boundary matters when integrating into an existing application. [1]

Read the first tree as a callback example

The inspected examples/t01_build_your_first_tree.cpp registers nodes through BehaviorTreeFactory, creates a tree from XML text and calls tickWhileRunning(). Its sequence names battery, open-gripper, approach-object and close-gripper nodes. Those names describe tutorial callbacks, not observed device actions. [3]

By default, the source loads ../sample_nodes/bin/libdummy_nodes_dyn.so. A compile-time MANUAL_STATIC_LINKING branch instead registers dummy nodes and callbacks individually. The plugin must actually exist at the expected path for that default tutorial route; the source's expected-output comment is not a successful run from this review. Inspect registration names against XML node names before adapting the example. [3]

For a robot integration, replace tutorial callbacks with actual application actions and define their success, failure, running and interruption behavior. A callback returning success cannot establish physical execution or recovery by itself. Neither the sample's dummy plugin nor a tree tick verifies external IPC, motor feedback or persistence. [1] [3]

The repository is MIT licensed; bundled dependencies and separately linked tools retain their own terms. Groot2 is linked as an optional graphical editor, not established here as part of the library's license grant. No dependency installation, compilation, plugin load, tutorial execution, asynchronous cancellation or robot action was tested. [1] [2]

What we checked

Pinned source research only; selected implementation and setup text inspected. No dependency installation, upstream build, API export, robot simulation, hardware commissioning, timing or performance test performed.

Not yet established

  • Requirements: operating system, host computer
  • Version-specific hardware compatibility (ecosystem tags alone do not establish it)

Updates

Upstream last updated
Not established
Latest release
Not established
Profile updated
Nov 1, 2026
Sources last checked
Nov 1, 2026
Next review
Dec 1, 2026
Reviewed revision
a9d6e56

Source files and licenses

Distinct robotics software implementation with inspectable source, declared license and bounded initial workflow.

LayerAvailability / license
softwareavailable · MIT
Repository project notice; bundled/external dependencies and robot/model/CAD/hardware assets retain their separate terms. No whole-tree license audit or hardware rights clearance. [1] [2] [3]
documentationavailable · MIT
Repository project notice; bundled/external dependencies and robot/model/CAD/hardware assets retain their separate terms. No whole-tree license audit or hardware rights clearance. [1] [2] [3]

Software entry; no separate physical design, firmware distribution, training-weight or dataset claim selected.

References

Each source links to the exact revision we read. “Used for” shows where this page relies on it.

Correction guidance · Discussion is not enabled · Profile format 0.7.0-draft.5

Change history