Skip to main content

ros2_tui

Crates.io PyPI License: MIT Test Release

A powerful Terminal User Interface (TUI) for monitoring and managing ROS2 topics and parameters in real-time.

Prerequisites

  • ROS2 installed and sourced
  • ros2 topic and ros2 param commands available in your shell

Installation

From pypi

pip install ros2-tui

From crates.io

cargo install ros2_tui

From Source

git clone https://github.com/TillBeemelmanns/ros2_tui.git
cd ros2_tui
cargo build --release

The binaries topics and params will be available at target/release/.

Try it in Docker (no local ROS2 needed)

A self-contained ROS2 Humble environment with dummy publishers and parameters is provided for quickly trying the TUIs:

./docker/run.sh topics   # build the image and launch the topics TUI
./docker/run.sh params   # launch the params TUI
./docker/run.sh shell    # drop into a ROS2 shell with the binaries on PATH

The container starts the ros2_tui_test dummy publishers automatically, so both TUIs come up populated with topics and parameters.

Topics TUI (topics)

Highlights

  • 📊 Real-time Hz/Delay monitoring backed by streaming ros2 topic hz / delay
  • 🌳 Namespace-aware topic tree with collapsible groups and instant search
  • 🎯 Watch-only metrics so large graphs stay responsive and low overhead
  • 🎨 Status indicators, Bollinger-band charts, and debug logging for on-call triage

Usage

# Start monitoring with default settings
topics

# Custom refresh rate (topics list updates every 5 seconds by default)
topics --refresh 10

Toggling a row with Enter starts Hz/Delay measurement. Unwatched topics stay lightweight, ensuring responsive navigation even with hundreds of topics.

Navigation & Controls

  • / or j/k move between topics; / or h/l collapse and expand namespaces
  • Enter toggles watching on the focused topic or expands/collapses a group
  • Tab toggles the current group; c collapses/expands all groups at once
  • s toggles simulation time when measuring delay metrics
  • F4 opens live search with auto-expansion; Space, r, or F5 refresh immediately
  • q, Esc, or Ctrl+C quit; --verbose writes detailed logs to topics_debug.log

Command-Line Options

  • --refresh <SECONDS> – Topic list refresh cadence (default: 5)
  • --detail-refresh <SECONDS> – Legacy detail polling interval (still accepted)
  • --no-initial-fetch – Skip the initial ros2 topic list call
  • --help, --version – Standard metadata flags

Architecture Highlights

  • Background workers keep ros2 topic list -v, ros2 topic hz, and ros2 topic delay streaming without blocking the UI
  • Crossbeam channels drive a non-blocking event loop that renders at ~5 FPS and processes input instantly
  • Watched topics maintain FIFO histories (including std dev) to power Bollinger-band charts and statistical readouts
  • Selective monitoring conserves system resources by spawning measurement processes only when needed

Params TUI (params)

Highlights

  • 🧭 Node/namespace browser that mirrors ros2 param list hierarchies
  • 🔄 Live value polling keeps displayed values fresh without manual refreshes
  • ✏️ In-terminal editing with type validation plus YAML dump/load workflows
  • 🧰 Built-in search, success/error banners, and contextual help overlays

Usage

# Parameter dashboard with 5 second refresh
params

# Faster poll rate for parameters
params --refresh 2

The app groups dotted parameter names into expandable namespaces so large graphs stay navigable. Value edits, dumps, and loads run through the ROS2 CLI and report their outcome inline.

Navigation & Controls

  • / or j/k move through nodes and parameters; / or h/l collapse/expand namespaces
  • ? opens the help overlay; F4 enters search mode with persistent filtering
  • Space, r, or F5 refresh on demand; Esc exits dialogs, cancels search, or quits

Parameter Actions

  • s edits the selected parameter (array values are normalised for ROS2 compatibility)
  • d dumps the current node to YAML via ros2 param dump
  • Ctrl+l loads YAML into the active node using ros2 param load
  • Inline success/error banners acknowledge operations and fade automatically

Command-Line Options

  • --refresh <SECONDS> – Parameter polling cadence (default: 5)
  • --no-initial-fetch – Skip the initial ros2 param list scan
  • --verbose / -v – Emit detailed logs to params_debug.log
  • --help, --version – Standard metadata flags

Architecture Highlights

  • A primary watcher repeatedly shells out to ros2 param list, building a ParamTree that mirrors node hierarchies
  • A secondary watcher streams value lookups to populate the table without blocking the UI thread
  • Dump/load/edit workflows wrap the ROS2 CLI while scheduling delayed refreshes to reflect state changes
  • All ROS2 interaction happens on background threads, keeping the Crossterm-driven interface responsive under load

Development

Building

cargo build --release

Testing

cargo test
cargo check

Before Pushing

Check formatting

cargo fmt --all -- --check

Lint code

cargo clippy --all-targets --all-features -- -D warnings

Release Safety Check

Configure Git once so the bundled pre-push hook runs before release pushes:

git config core.hooksPath .githooks

When you push a tag such as v0.3.0, the hook calls scripts/check-release-version.sh and verifies the tag matches the Cargo.toml version. The push is rejected if they diverge, keeping release tags in sync with the crate metadata.

Comparison with Other Tools

Tool Language Dependencies Features Performance
topics Rust ros2 CLI only TUI, Real-time metrics ⚡ Fast
params Rust ros2 CLI only TUI, Parameter management ⚡ Fast
rqt_topic Python Full ROS2 + Qt GUI, Rich features 🐌 Heavy
ros2 topic Python Full ROS2 CLI only 🚀 Fast but limited

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Inspired by turm - A TUI for the Slurm Workload Manager
  • Built with ratatui - A Rust library for building rich terminal interfaces

Roadmap

  • Topic filtering and search (F4 search mode)
  • Hierarchical topic grouping with collapsible groups
  • Add topic message preview/echo functionality
  • services app
  • actions app

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ros2_tui-0.1.6-py3-none-musllinux_1_2_x86_64.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ros2_tui-0.1.6-py3-none-musllinux_1_2_i686.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

ros2_tui-0.1.6-py3-none-musllinux_1_2_armv7l.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

ros2_tui-0.1.6-py3-none-musllinux_1_2_aarch64.whl (3.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ros2_tui-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ros2_tui-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ros2_tui-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ros2_tui-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ros2_tui-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ros2_tui-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

File details

Details for the file ros2_tui-0.1.6-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7f0ca93c1c3fc602fc69e38e9bf3d07909c37ba10fea990579b08c9b75703721
MD5 0db0f1a993494134e984804292548297
BLAKE2b-256 f06a1c2938d313ec0cee5626e6a3e41babc89aef58e63f4a959a4f2be5de32c6

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d29f8b9d9b5c43736383990a2037c4855b984e6fa09af630e28d08a26b266972
MD5 6e225f4481860c16b92163ec58f0be6a
BLAKE2b-256 af8667b642ea46f8cb429b6e7b7f73a87292565d314f599ee76f10d3a9538e7c

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 bdd485bd2079d2ca6c6674a17f6ff0d255de60396e547a75469439a9f3162f04
MD5 77f3ff06afeabff22b5fefc85fba9ac7
BLAKE2b-256 b372301d7fb31a92d2a8b745e34c909d6148d3d49a46c5e4686cf9f1a2706bd2

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7e6c1fe62a980a1ab92b8900ef3a38d42162a2b4fe83743be0e8923991fcf248
MD5 b39105fc60a1b4d3e1a4397a4b595aaf
BLAKE2b-256 2fd5005fc689fba3ce9774681a2194a2de09c7a4dbbc8a584b348cee04d6a178

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 80f4df45837e9a4babaf610c3bf8adff08dd3895c8dd27cd1ca26679a1d56cfb
MD5 be6fa9533f0768a1456d77bbe5635804
BLAKE2b-256 c02be861b9d41ec17aed78c6b941179212fae7308100a757e13727cf7305b838

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fbc2c0816f674597daec05c271e0a7b41d0a26e732dfdffb286ac3ae40c85a88
MD5 e7d361922a8b9651457857354357ba11
BLAKE2b-256 013331be3bf9ca50387f96f8344abb05a84cffbba855d6a7997601f93824185a

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 394a3d3e5492e0cba9170aeffb780a0da4d970a83be8856b0a4269f4c5b800ca
MD5 cae0434635b7f6b82201ebcb50ffc943
BLAKE2b-256 724bbe418792df39623b85553e9b90f98f93c3d2621be82ac8b611b1e8fe3768

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7550c84de3966f7cdf94f538e953480f29a85db6f0f7d8fb68a87bdee5e88432
MD5 efb2a5878d6aa24b9df0c533476069eb
BLAKE2b-256 c6752d4ad848ca5c9dfa612d91337dddab05992aa7b0ab0d57d0f8ed2f3d729b

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 cbd6fc53839ec6813acdb1708756b4c006cfb589fd8742bc8473d394d4323f2f
MD5 8c2df38839f3fe775831c41c86c75101
BLAKE2b-256 dacb7ed90d9d16ea6c78ff9d71e095a627b727442a7f23c639622be9dd5ecaa2

See more details on using hashes here.

File details

Details for the file ros2_tui-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc042e391146ed41e7bb294aad73f552476f8617fc08775e3585588127d1a422
MD5 46b197796a40673441dbdd7bc9e3f75a
BLAKE2b-256 7457d537da5d99795ed396898fae72eed06e3c5c4ea4234f3f5f3d13210486be

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.7

10 files

This release

0.1.6 This release

10 files

0.1.5

10 files

0.1.4

10 files

0.1.3

10 files

0.1.2

10 files

0.1.0

10 files

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