Below are the latest versions for our APIs and tools.

Item Downloads Links

1. Requires Java 8 update 60 or higher to be installed. Some Linux distributions may additionally require OpenJFX.

Windows (Win32 / Win64)
Linux (x86-64 / ARM)
macOS (64-bit)

1. .tar.gz file preserves symlinks for macOS/Linux shared libraries


Windows (Win32 / Win64)
Linux (x86-64 / ARM)
macOS (64-bit)

1. .tar.gz file preserves symlinks for macOS/Linux shared libraries
2. Unzip corresponding API archive into this folder before building


Below is a list of datasheets. Additional drawings and CAD models can be found in the accessory section, or on our public GrabCAD repository.

Part Numbers Description Links



X5/8-Series Actuators


I/O Board


Scope GUI Changelog

RC 0.8

Revision Changes


  • Monitoring

    • Changed sliders to show feedback when disabled

    • Changed sliders to save/load state when switching between modules

    • Added slider targets that allow setting specific values

  • Gains

    • Added a button that loads default gains

    • Added another send button that additionally persists

    • Added highlighting when gain input is different from set value

  • Info

    • Removed Connectivity section

  • General

    • Various minor display changes

    • Fixed some Linux specific rendering issues

RC 0.7

Revision Changes


  • General

    • Added multi-select

    • Various cosmetic changes (e.g. fixed cut-off …​ in Linux)

    • Limited info slider range to 1-100 Hz

  • Monitoring

    • All charts: added optional fixed time windows that force the displayed time range to remain constant regardless of the number of points or their incoming frequency

    • Latency chart: fixed a bug that caused points to be displayed on the edges when zooming

    • Reduced aggressiveness of point skipping

    • Removed max limit (was 20 rad/s) from velocity slider

    • Changed plotting windows to cascade rather than being stacked

  • Gains

    • Changed number of zeros of D and I term to better hint at expected values

    • Added ability to save and load group-gains

  • Update Dialog

    • Removed stale modules from update search

    • Changed table to immediately refresh when opened

    • Added minor indicator if updates are available

RC 0.6

Revision Changes


  • General

    • Renamed torque to effort to better accommodate non-rotary joints

    • Added ability to automatically update multiple modules

    • Added ability to select individual ip addresses for lookup

    • Replaced auto-sort with manual sort to avoid resetting the selection when new devices join the network

    • Reduced size to better fit on Laptop displays

    • Various cosmetic changes

  • Monitoring

    • Added "hw-type | serial" to plot title

    • Added manual scaling options to better support demos and HighDPI displays

    • Reduced rate that arrow keys move sliders to 20% of the original rate

    • Improved performance of latency chart

    • Changed overload behavior to skip points instead of introducing lag

  • Gains

    • Added ability to save and load gains to and from XML files

  • Device

    • Added fields that allow setting non-zero position/torque reference points

RC 0.5

Revision Changes


  • General

    • Added display toggle between human readable names and hardware type and serial number

    • Added a button to refresh network interfaces to reduce the need for restarts

  • Gains

    • Changed gain validation to allow +/- inf values for min/max target/output and I-Clamp

RC 0.4

Revision Changes Bugfixes


Added selector for M-Stop strategy


  • Fixed an SSL certificate issue related to firmware updates


  • Changed name of Main GUI to "Scope"

  • Added auto-update

  • Added standalone binaries for mac, linux, windows

  • Removed all "unsafe" buttons from the device tab

  • Added scrollbars to all tabs to avoid issues with low resolution screens

RC 0.3

Revision Changes Bugfixes


  • Removed deprecated debug buttons

MATLAB API Changelog

Revision upgrades with the same release version are backwards compatible. Changes that break backwards compatibility are highlighted in bold.

Release 1.2

Revision Changes


  • General

    • Improved help documentation

  • HebiUtils

    • Added plotLog and plotTrajectory methods for plotting

    • Added convertGroupLogsUI to load one or more logs via a GUI dialog

    • Added info and gains to return arguments in convertGroupLog

  • HebiLookup

    • Added a pause to clearModuleList to rebuild the module table before returning

  • HebiGroup

    • Added raw format option to stopLog to avoid costly conversions. This is useful for rolling log-files (e.g. create a new file once an hour) inside a control loop.

    • Added getInfo and getGains to log groups created with HebiUtils.createGroupFromLog

  • HebiKinematics

    • Added support for 'X8-16'

    • Added 'Frame' to frame strings, e.g., 'Output' becomes 'OutputFrame' (backwards compatible)

  • HebiTrajectoryGenerator

    • Removed internal dependency on HebiKinematics. HebiKinematics is now only required for certain parts of the API such as executeTrajectory with effort compensation.

    • Improved newLinearMove

  • Bugfixes

    • Fixed a bug that caused HebiUtils.saveGains to create invalid gain files on certain non-English locale settings (e.g. German)

Release 1.1

Revision Changes


  • HebiKinematics

    • General performance improvements across the board

    • Increased default max iterations for IK from 75 to 150

  • HebiTrajectoryGenerator

    • Significantly improved performance of 'UnconstrainedQp' algorithm. It is now feasible to use for large number of waypoints. 'MinJerkMove' can now be considered deprecated.

  • Bugfixes

    • Setting control strategy was changed to not accept non-integer values

    • Fixed a network lookup failure that occurred when certain VPN programs were active

    • Fixed getJacobianEndEffector to be calculated at the output rather than at the center of mass of the end effector

    • Fixed a bug that caused 'ReferenceEffort' to be ignored when it was the only command that got sent.

Release 1.0

Revision Changes


  • General

    • Renamed torque to effort to better accommodate non-rotary joints. Existing code can be upgraded by running search and replace as follows,

      • torque → effort (case-sensitive)

      • Torque → Effort (case-sensitive)

      • TorLim → EffLim (not case-sensitive)

  • HebiUtils

    • Added ability for saving and loading gains to and from xml files

RC 1.0

Revision Changes


  • HebiLookup

    • Added getters for lookup addresses and frequency

  • HebiGroup

    • Added better error message when log conversion fails due to memory constraints

  • HebiKinematics

    • Improved AddBody help documentation

    • Improved TipAxis objective for IK

    • Improved IK to keep results to within one rotation of the initial condition


  • HebiGroup

    • Renamed set() to send()

    • Added 'Inf/infinity' as valid input to min/max output/target and I-clamp gains

    • Added 'motorPosition' to full feedback

    • Fixed a bug that occurred on some machines when reading log files

    • Added support for reading partially written log files

    • Added setting encoder and position reference points

  • HebiTrajectoryGenerator

    • Changed the default algorithm to 'UnconstrainedQp'

  • HebiKinematics

    • Made naming more consistent

    • Added 'X5-LightBracket' and 'X5-HeavyBracket' w/ various mount options to available module types

    • Reverted direction of the gravity vector for 'getGravCompTorques' (breaks backwards compatibility!!!)

    • Made SO3 objective more stable

  • HebiPoseFilter

    • Overhauled API to make it more usable

  • General

    • Made 'hebi_load()' callable to simplify pre-loading libraries

RC 0.7

Revision Changes


  • HebiLookup

    • Added methods to create a group from serial numbers

    • Switched display of mac addresses to serial numbers

  • HebiGroup

    • Added group.stopLog('LogFormat', 'raw') to stop logging without doing any expensive conversion. This is useful for cases where logging needs to be stopped without halting execution

    • Fixed a bug introduced in rev1732 that prevented gtroups of >30 modules from logging


  • HebiGroup

    • Internal changes to the way logging is done (fully backwards compatible)

    • Added info messages, e.g., gains, names, etc., to log files. Support for reading logged info messages will be added at a future date.

  • HebiKinematics

    • Added an objective to IK that tries to keep the joint angles within +/- pi of the initial condition. This fixes an issue where IK resulted in jumps over multiple rotations on slight variations of the initial conditions.


  • HebiGroup

    • Internal improvements related to converting logs

    • Changed 'Hdr' log format to record each module separately

  • HebiKinematics

    • Added new joint types including X8-3 and X8-9

  • HebiPoseFilter (not a supported API)

    • Fixed a bug that caused the filter to initialize with NaN under some rare conditions


  • HebiTrajectory

    • added getWaypointTime() to get access the times when waypoints are hit.

    • removed the restriction that 'time' needs to start at zero for 'UnconstrainedQp' trajectories.

  • HebiKinematics

    • Fixed a bug that prohibited the calculation of forward kinematics for chains without any joints. The empty matrix "[]" is now a valid position argument.

  • HebiLookup

    • made initOnce() public for cases where the loading of additional Java libraries resets the Java classpath without reinitializing the backing MATLAB class.


  • HebiTrajectoryGenerator

    • Removed requirement for defined end positions when a user supplies a fully defined time vector (UnconstrainedQp algorithm only)


  • HebiKinematics

    • Added ability to set a payload for calculating compensatory torques

  • HebiTrajectoryGenerator

    • Added trajectory implementation that supports velocity and acceleration constraints ('unconstrainedQp')

    • Added speedFactor to allow users to slow down trajectories

    • Overhauled TrajectoryGenerator API

RC 0.6

Revision Changes


  • Added Trajectories to the API

    • Note that RC 0.6 is fully backwards compatible with RC 0.5, but we felt that trajectories was a large enough addon to increase the version number.

  • Bugfixes

    • Fixed logging to stop automatically if the disk is full

RC 0.5

Revision Changes


  • changed HdrHistogram conversion to combine all output files into a single file with multiple tags

  • minor performance improvements

  • Bugfixes

    • Fixed a networking issue that caused a "wall of errors" when cables were disconnected on macOS and Linux


  • HebiLookup

    • the display was changed to make it more obvious when modules become stale

  • HebiGroup API

    • getInfo() now returns a table that behaves consistently for any number of modules. Added 'pcRxTime' and removed 'distal/proximal' ids.

    • changed 'Min/Max-PositionLimit' in set() to a single 'PositionLimit' parameter that is consistent withHebiKinematics.addBody()

    • getNextFeedback() now throws an exception on timeout instead of returning empty. Log-replay groups continue to return empty when the end of a log file is reached.

    • added an optional 'Timeout' parameter to getNextFeedback for setting custom timeouts

  • HebiKinematics General

    • improved display to match HebiGroup and HebiLookup

    • added convenience overloads for getJacobianEndEffector and getForwardKinematicsEndEffector. This should simplify auto-complete.

  • HebiKinematics Bodies

    • added required 'twist' parameter to 'X5Link'. The previous default value was 'pi'.

    • 'CoM' was changed to be a 3x1 vector instead of a transform. The vector describes the location of the CoM in the body’s input frame.

    • 'FieldableGripper' is now considered a link and instead of a DoF

    • added getBodyInfo() and getJointInfo()

    • added support for overriding 'mass' on any body

    • added support for overriding position, velocity and torque limits on joints. Position limits get used by IK.

    • changed the default position limits for X5 modules to be +/- Inf

    • deprecated 'X5Joint' and added 'X5-1', 'X5-4' and 'X5-9'

  • HebiKinematics IK

    • added 'nan' inputs to 'xyz' objective to ignore not applicable dimensions

    • added a warning message in case IK doesn’t converge within max number of iterations

RC 0.4

Revision Changes


  • Added support for logical vectors in reset/boot commands

  • Changed logical inputs to only allow 0 or 1 values to avoid ambiguity


  • Changed default naming of logs to use absolute wall-clock time

  • Minor performance improvements


  • Added getBaseFrame() to kinematics


  • Added basic support for I/O Board (commands, feedback, logging struct)

  • Minor performance improvements


  • Added support for high-res position

  • Added support for setting position limits (virtual hard stop)

  • Minor performance improvements


  • Changed getJacobian() output to 6xNxM matrices to be consistent with getForwardKinematics()

  • Changed getAccelCompTorques name to getDynamicCompTorques

RC 0.3

Revision Changes


  • Internal performance improvements

  • Bugfixes

    • Log files now always get closed properly when disposing groups


  • Added getAccelCompTorques to HebiKinematics


  • Added command lifetime safety feature to mitigate risks on unexpected interruptions (requires firmware upgrade to work)


  • Cleaned up auto-complete

  • Changed display of empty groups to be more appropriate


  • Added GenericLink to HebiKinematics

  • Bugfixes

    • Modified group creation such that each module must be unique


  • Improved display for HebiLookup and HebiGroup


  • Extensive API rework

C API Changelog

After v1.0 release, major version number changes indicate backwards incompatible changes, while minor version number changes are backwards compatible, both in API and ABI. Before v1.0, changes that break backwards compatibility are highlighted in bold.


Features Changes/Fixes
  • Added a signal handler that can be enabled to catch debug output in the event of API crashes.

  • Added masses and inertias to RobotModel (previously kinematics)

  • Can retrieve filename on "startLog" call

  • Add "set reference position" and "set reference effort" to command object

  • Modules are sorted by name when creating a group by family

  • Formatting tweaks to hebi.h

  • All arguments to API are explicit integer types (uint32_t, size_t, etc) instead of int/long

  • Const added to pointer types as necessary in API calls

  • Various small function signature changes

  • Kinematics API significantly refactored and changed to RobotModel

  • IK functions changed to allow future support of tree kinematics

  • RobotModel API exclusively uses double precious numbers now.


Features Changes/Fixes
  • Add UInt64 fields

  • Disabled AVX instruction generation for Linux x86_64 library

  • Mac Address functions signatures changed to be compatible with FFIs


Features Changes/Fixes
  • Added serial number field to info messages.

  • Added sender ID field to feedback messages.

  • Updated "lookup" calls involving mac addresses to pass structures by reference instead of value for improved portability.

  • Fixed bug on certain platforms where GetNextFeedback returned success and and empty feedback if no feedback had been received.

  • Fixed XML gain "control strategy" tag parsing

  • Fixed macOS compilation issues.

  • Fixed basic/01_lookup.c example; previously, when parsing lookup entry list, names/families that were longer than previous values would not be displayed.

1.0-rc1 through 1.0-rc4

Features Changes/Fixes
  • requestFeedback has been removed and replaced with getNextFeedback to match the MATLAB convention; see corresponding C++ documentation for more information.

  • Log files: separate arguments are now included for directory and file, to increase log file location customization. Default file name is created from current time if not specified.

  • Added log file parsing support.

  • Improved/generalized IK interface; added new objectives and constraints.

  • Added support for reading gains from and writing gains to an XML file.

  • Added support for an "imitation group" which acts like a Group, but does not have a physical module backing it.

  • Added access to timestamps in the feedback messages (PC RX/TX and hardware RX/TX)

  • New Kinematics body creation helpers (light/heavy bracket)

  • Lookup name/family ordering switched when using hebiGroupCreateFromNames

  • "Torque" renamed "Effort" throughout API

  • Removed hebiLookupPrintTable function; programmatic access now provided via LookupEntryList functions.

  • Renamed platform specific "lib" directories

  • Refactored CMake files

  • All enums now have "Hebi" prepending (e.g., HebiFrameTypeOutput)

  • 'get' functions for feedback/commands/info now return sane defaults instead of undefined behavior if 'has' not set.

  • Significantly faster (e.g., kinematics code has sped up at least 10X).

  • Condensed include files into one file (hebi.h) to simplify integration

  • Renamed a number of functions for consistency.


Features Changes/Fixes
  • Added static keyword to variables and functions in hebi_kinematic_parameters.h


Features Changes/Fixes
  • Added first version of a kinematics API.

  • Updating logging implementation to include output path option and packet loss statistics.

  • Removed the "module" object based on customer feedback

  • Separated out the libraries into platform specific directories (e.g., lib/winx64) to allow a single download for all platforms.

  • Documentation updates


Features Changes/Fixes
  • Easier deployment

    • Simplified CMake file

    • Separated library and examples

    • CMake files now demonstrate hierarchical build

  • Added trajectory API to assist in generation of smooth trajectories for robot motion

  • Added API for programmatically retrieving the current contents of the module lookup object

  • Added I/O pin command and feedback support

  • Added "hebi.h" convenience header file to include the entire HEBI C API

  • Added support for macOS

  • Added separate x86 and x64 libraries for Windows

  • Rename several functions to improve naming consistency

    • Functions with Create always require calling a corresponding Release to free resources

    • Functions with Get return temporary variables that do not need to be freed

    • Functions taking an object of type <TypeName> always start with Hebi<TypeName>

  • Changed GetString calls to take in a buffer instead of return a pointer. Previously, return values could point to invalid memory

CPP API Changelog

Changes that break backwards compatibility are highlighted in bold.


Features Changes/Fixes
  • Initial full release; backwards compatibility will be maintained in future 1.0 releases.

  • Updated to v1.0.0 C API.


Features Changes/Fixes
  • Improved examples and documentation; created basic "tutorial" examples.

  • Updated to v0.16 C API.

  • Added explicit "Eigen" namespace before Vector classes to disambiguate name references during compilation.


Features Changes/Fixes
  • Easier deployment

    • Simplified CMake file

    • Separated library and examples

    • CMake files now demonstrate hierarchical build

  • Added initial version of a kinematics API.

  • Added trajectory API to assist in generation of smooth trajectories for robot motion.

  • Added I/O pin command and feedback support

  • Added API for programmatically retrieving the current contents of the module lookup object

  • Added support for macOS and ARM

  • Added ability to set command lifetime through the C++ API.

  • For commands and feedback, added convenience get and set functions for position, velocity, and torque fields; these function use Eigen double vectors (Eigen::VectorXd).

  • Updated to v0.15 C API.

  • Added path for log directory when logging.

  • Removed the "module" object based on customer feedback.

  • Separated out the libraries into platform specific directories (e.g., lib/winx64) to allow a single download for all platforms.

  • Fixed bug in GetString calls that would sometimes return uninitialized memory.

  • Added a number of "const" versions of getter function to allow better use within const-correct parent structures and classes.

  • Documentation updates.

  • Added dependency on Eigen v3.3.3. Included for convenience with downloaded packages.

  • Added index operator to mac address class.

Firmware Changelog

X5_8 (C, D, E, and F)

Release Changes Bugfixes


  • Module reports orientation feedback from onboard pose filter.

  • Module now returns "module state" feedback (e.g., joint limit, m-stop, temperature limiting state).

  • DHCP fully supported in app mode; supports new bootloaders which skip the "waiting to boot" phase.

  • Reduce IP renewal problems on routers with short lease times.

  • Allow commands which drive a robot back to "inside" the joint limit range, even if the module booted up "outside" of this zone.

  • Joint limit LED state no longer shown if module is close to joint limit but not actively limiting commanded output.

  • Adjusted performance curves.

  • Encoder resolution no longer reduced at large number of rotations.

  • Reduced packet loss at high command and feedback request load.


  • Initial release of X5-8F firmware.

  • Corrected sign when setting non-zero effort offsets.


  • Ki and Kd gains now have SI units. In particular time-scaling was changed from millieseconds to seconds.

    • Ki gains will be need to be multiplied by 1000 to have same effect as before.

    • Kd gains should be multiplied by .001 to have the same effect as before.

  • Feedforward gain change: 1.0 is now the appropriate default gain value for velocity and effort loops that output PWM.

  • Deadzone is changed to not accumulate integral error. Error outside of deadzone is now shifted to start at zero instead of being a discontinous jump.

  • Additional feedback sensor: motorPosition

  • Direct PWM control strategy now has settable min/max target PWM values.

  • Improved parameters of onboard gyro zero-update

  • Improved internal safety controllers to better protect the modules when running voltages above 24V

  • Improved motor winding thermal estimation

  • Improved stability of software position safety limits

  • Improved performance under high network communications loads

9.811.807 (C/D) 9.834.830 (E)

  • Initial release of X5-8E firmware.

  • Processed network packets more efficiently to improve responsiveness under high load.


  • Improved onboard thermal model by accounting for more secondary electronic effects.

  • Improved control stability of X8 while near velocity limits.


  • Internal calibration procedure updates


  • Internal calibration procedure updates


  • Firmware now supports X8 and X5 modules

  • Added 3-mode M-stop functionality (disabled, 'hold', and 'off' modes)

  • Improved onboard thermal limiting for the motor based on additional experimental data

  • Fixed an issue with the onboard timer that could theoretically lead to occasional very large, inaccurate reported time steps

  • Updated gyro low pass filter

4.0 rev629 (D only)

  • Fixed an issue in the thermal model that could cause a motor to overheat after a reset under continuous load

3.1 rev617 (D only)

  • Fixed an issue in the safety controller that could cause a motor to spin faster in one direction

3.0 rev629 (C) 3.0 rev606 (D)

  • Initial release of X5-8_D firmware.

  • Added auto-voltage scaling so that gains behave the same way under any voltage

  • Improved accelerometer bias (requires calibration)

  • Added a filter to continuously estimate and compensate for the gyro bias

  • Fixed an issue in the thermal model that could cause a motor to overheat after a reset under continuous load

  • Fixed an issue in the safety controller that could cause a motor to spin faster in one direction

2.0 rev519

  • Improved factory calibration for position and torque

1.0 rev480

  • Initial release of X5-8_C firmware.


Release Changes Bugfixes


  • Initial release; duplicate of SEA_D release 2 except for electronics updates


Release Changes Bugfixes


  • Update thermal model

  • Limit LED brightness to ensure safe steady-state performance


  • Initial release


Release Changes Bugfixes


  • Auto gyro-unbiasing in IMU

  • Addition of settable accelerometer bias

  • Gains auto-scaled when supply voltage changes

  • Automatically persist name/family when these values are changed

  • New calibration routine that includes automatic determination and sanity checking of spring constant to help detect early spring failure

  • Added support for "command lifetime" feature

  • Updated default gains

  • Added user-settable torque offset (via GUI "zero torque" button)

  • Fixed an issue in the thermal model that could cause a motor to overheat after a reset under continuous load

  • Improved motor current estimate and IMU filtering settings


Release Changes Bugfixes

1.0 rev552

  • Initial release


Release Changes Bugfixes


  • Added support for new modules (internal)


  • Processed network packets more efficiently to improve responsiveness under high load.


  • Disabled clearing of internal storage via the reset button

  • Updated version number display

  • Added support for new modules (internal)

5.0 rev599

  • Added support for new modules (internal)

  • Fixed an issue that caused IMU calibration to be cleared after a database erase

4.0 rev548

  • Added support for new modules (internal)

3.0 rev514

  • Added "auto-update"

2.0 rev478

  • Added support for new modules (internal)

1.0 rev345

  • Initial release