Skip to main content

HEX FLOW CORE

      


📖 Overview

What is hex_flow_core

hex_flow_core is the Python core library for the HEXFELLOW hex-flow framework. It provides Zenoh-based publish/subscribe node abstractions and launch configuration utilities, enabling multi-node orchestration for HEXFELLOW robots, sensors, and simulators.

What problem it solves

  • Pub/Sub communication: Nodes publish and subscribe to topics over Eclipse Zenoh, supporting high-throughput binary payloads (images, commands, sensor data).
  • Topic remapping: Each node can remap logical topic names to actual Zenoh keys via environment variables, enabling flexible deployment without code changes.
  • Launch orchestration: LaunchConfig and NodeConfig generate YAML launch files consumed by hexflow run, managing multiple nodes, build steps, environment variables, and router settings from a single Python script.

Target users

  • Engineers integrating HEXFELLOW robots into their systems.
  • Researchers running experiments with HEXFELLOW robots.

📦 Installation

Requirements

  • Python >= 3.10
  • OS: Ubuntu (tested on 22.04)
  • Core dependencies:
    • eclipse-zenoh >= 1.9.0
    • envlog == 1.0.0
    • hex_util_runtime >= 0.0.0, < 0.1.0
    • pyyaml >= 6.0

Install hex-flow-cli

For Ubuntu or any Debian-based system, install Zenoh and hex-flow CLI:

sudo apt update
sudo apt install -y curl gpg

curl -L https://download.eclipse.org/zenoh/debian-repo/zenoh-public-key | sudo gpg --dearmor --yes --output /etc/apt/keyrings/zenoh-public-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/zenoh-public-key.gpg] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list > /dev/null
sudo apt update
sudo apt install -y zenoh

curl -fsSL https://raw.githubusercontent.com/hexfellow/hex-flow/main/install.sh | sh

For other systems, please install zenohd yourself, then run the install script.

Install hex-flow-core from PyPI

You can install hex-flow-core from PyPI:

uv pip install hex_flow_core

Install hex-flow-core from source

We provide a venv.sh script to create a virtual environment with all dependencies installed. However, you need to install uv first. For uv installation, please refer to uv official installation guide.

curl -LsSf https://astral.sh/uv/install.sh | sh

Then you can use our venv.sh to create a virtual environment with all dependencies installed:

git clone https://github.com/hexfellow/hex_flow_core.git
cd hex_flow_core
./venv.sh

📑 API

NodeCallback

Low-level base class wrapping a Zenoh session with publisher/subscriber management, topic remapping, and structured logging.

from hex_flow_core import NodeCallback

node = NodeCallback("my_node")
node.start()

node.create_pub("my/topic")
node.pub("my/topic", b"hello")

node.create_sub("other/topic", lambda sample: print(sample.payload.to_bytes()))

while node.is_working():
    time.sleep(1)

node.stop()

Environment variables read at init:

Variable Description Default
HEX_FLOW_NODE_NAME Overrides the name argument constructor arg
HEX_FLOW_REMAP JSON dict mapping logical topics to actual Zenoh keys {}
RUST_LOG Log level passed to envlog "info"

Node

Higher-level subclass of NodeCallback that automatically buffers received messages in bounded deques, providing a polling-style get() interface.

from hex_flow_core import Node

node = Node("my_node")
node.start()

node.create_sub("sensor/data", maxlen=20)

data = node.get("sensor/data", latest=True)
if data is not None:
    print(f"received {len(data)} bytes")

node.stop()

NodeConfig

Describes a single node for launch: name, build/run commands, required/hidden flags, topic remaps, and environment variables.

Parameter Type Default Description
name str "" Node identifier used in logs and launch files
run_cmd str "" Command to run the node
build_cmd str "" Build command executed before running (empty = skip)
required bool True If True, the launcher marks the node as critical
hidden bool False If True, hides the node from default UI displays / logs
remap_dict dict[str, str] {} Topic remapping: logical key → actual Zenoh key
env_dict dict[str, str] {} Environment variables injected into the node process
from hex_flow_core import NodeConfig

cfg = NodeConfig(
    name="cam_publisher",
    run_cmd="python cam_pub.py",
    build_cmd="pip install -e .",
    required=True,
    hidden=False,
    remap_dict={"camera/rgb": "robot_a/camera/rgb"},
    env_dict={"RUST_LOG": "debug"},
)

LaunchConfig

Aggregates multiple NodeConfig entries and exports a YAML launch file for hexflow run.

from hex_flow_core import LaunchConfig, NodeConfig

launch = LaunchConfig(
    local_only=True,
    enable_tui=False,
    log_to_file=True,
    save_path="/tmp/my.launch.yml",
)

launch.set_node("cam", NodeConfig(run_cmd="python cam.py"))
launch.set_node("ctrl", NodeConfig(run_cmd="python ctrl.py"))

path = launch.export()
print(path)  # /tmp/my.launch.yml

The exported YAML can be used with:

hexflow run /tmp/my.launch.yml

💡 Example

Examples are only available for users who install hex-flow-core from source code. Follow the steps below to run the examples:

git clone https://github.com/hexfellow/hex_flow_core.git
cd hex_flow_core

./venv.sh
source .venv/bin/activate

hexflow run examples/test.launch.py

This launches 8 command publishers (~1000 Hz each), 6 image publishers (~50 Hz each), and 1 subscriber that validates payloads and logs throughput.

Note: Examples require numpy (pip install numpy).

📄 License

Apache License 2.0. See LICENSE.

🌟 Star History

Star History Chart

👥 Contributors

Metadata

Release files for hex-flow-core 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hex-flow-core 0.0.1
File Size Uploaded
hex_flow_core-0.0.1.tar.gz 14.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hex-flow-core 0.0.1
File Interpreter ABI Platform
hex_flow_core-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.0 kB

Release files / hex_flow_core-0.0.1.tar.gz

Download URL hex_flow_core-0.0.1.tar.gz
Size 14.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c526f4e8e5d1d9a763f6f30f6ac741ce228b4818e81a2be6f5ced60a0f8f4804
BLAKE2b-256 checksum
How to use checksums
2568c5d5124711af536eb9210cfc8b205be0f79f4935489a5a2e84ce605cd702
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / hex_flow_core-0.0.1-py3-none-any.whl

Download URL hex_flow_core-0.0.1-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
65b441ef41dd71bba7c1d8842fc3fd1f8471567ed17ca81a8a1452f55a937f49
BLAKE2b-256 checksum
How to use checksums
d4e46169338ef367f45c5c5c37e663f5655180c41577fe66c75cb292f6ada27f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page