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.

Screenshots

Topic overview Topic search Topic details
Namespace-aware topic tree with live publisher/subscriber counts, Hz, and delay. Fuzzy search to instantly filter topics across the graph. Per-topic detail view with Hz/delay history charts and live message echo.

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 environment (Humble by default) 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

ROS_DISTRO=lyrical ./docker/run.sh topics   # use another distro, e.g. Lyrical

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
  • d opens the detail view, where Tab switches between the info and echo panes; 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 (ours) Rust ros2 CLI only TUI, Real-time metrics ⚡ Fast & Easy
params (ours) Rust ros2 CLI only TUI, Parameter management ⚡ Fast & Easy
rqt_topic Python Full ROS2 + Qt GUI, Rich features 🐌 Heavy
ros2 topic Python Full ROS2 CLI only 🚀 Fast but cumbersome

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

Planned features, improvements, and fixes are tracked in ROADMAP.md.

Metadata

Release files for ros2-tui 0.1.10

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

Built distributions (wheels)

Table of built distributions (wheels) for ros2-tui 0.1.10
File Actions
ros2_tui-0.1.10-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details for ros2_tui-0.1.10-py3-none-musllinux_1_2_x86_64.whl
ros2_tui-0.1.10-py3-none-musllinux_1_2_i686.whl Python 3 none Linux musl 1.2+ x86-32 Details for ros2_tui-0.1.10-py3-none-musllinux_1_2_i686.whl
ros2_tui-0.1.10-py3-none-musllinux_1_2_armv7l.whl Python 3 none Linux musl 1.2+ ARMv7l Details for ros2_tui-0.1.10-py3-none-musllinux_1_2_armv7l.whl
ros2_tui-0.1.10-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details for ros2_tui-0.1.10-py3-none-musllinux_1_2_aarch64.whl
ros2_tui-0.1.10-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for ros2_tui-0.1.10-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
ros2_tui-0.1.10-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl Python 3 none Linux glibc 2.17+ IBM System/390x Details for ros2_tui-0.1.10-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl
ros2_tui-0.1.10-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl Python 3 none Linux glibc 2.17+ PowerPC 64-le Details for ros2_tui-0.1.10-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl
ros2_tui-0.1.10-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details for ros2_tui-0.1.10-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl
ros2_tui-0.1.10-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details for ros2_tui-0.1.10-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
ros2_tui-0.1.10-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for ros2_tui-0.1.10-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Total release size: 31.5 MB

Release files / ros2_tui-0.1.10-py3-none-musllinux_1_2_x86_64.whl

Download URL ros2_tui-0.1.10-py3-none-musllinux_1_2_x86_64.whl
Size 3.1 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
0332379e8f208054a0f9a3957fcd6810bc55dd6c38be955e46d7ad05ca66e4c2
BLAKE2b-256 checksum
How to use checksums
0ba70f41261e8e701aa0cd2283d35c45e3f6c203e8168a03c7c1e8c6dbaeadbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-musllinux_1_2_i686.whl

Download URL ros2_tui-0.1.10-py3-none-musllinux_1_2_i686.whl
Size 3.1 MB
Tags Linux musl 1.2+ x86-32 Python 3
SHA-256 checksum
How to use checksums
3da5f83bdf67c72e12257f214750aae63f0352654a92fd86ddaebcb41b294d19
BLAKE2b-256 checksum
How to use checksums
2418e63aaea765de0883262902724b40aa4116b0d8b9dfc43e8743759c2980c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-musllinux_1_2_armv7l.whl

Download URL ros2_tui-0.1.10-py3-none-musllinux_1_2_armv7l.whl
Size 2.9 MB
Tags Linux musl 1.2+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
7b543554d1f1e3aa524b1ed10b19383a4b1aeb9e75a382b072e98e32264e66eb
BLAKE2b-256 checksum
How to use checksums
5b11c14036191e1c20fbe476aac74e2f6f51de45637ea4d2fe1bdcafaf030b42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-musllinux_1_2_aarch64.whl

Download URL ros2_tui-0.1.10-py3-none-musllinux_1_2_aarch64.whl
Size 3.0 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
7a0c696973b105f6f1ca79b0227c3fc19f31c7eeb4b51b53ce18ccd077595ad7
BLAKE2b-256 checksum
How to use checksums
2a3b828071fccaae07571a35bf1f3397132facaa89300e1f2efb03131639567c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL ros2_tui-0.1.10-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 3.0 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
1c9320ccee6eb85dabbacf119d7fa5313d3f487a300062ec2e989cd48ea0cd16
BLAKE2b-256 checksum
How to use checksums
0e6606185512b59e77ce71f4263264c88ac55c2f4faf7b4cd45efc5d429b94d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl

Download URL ros2_tui-0.1.10-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl
Size 3.0 MB
Tags Linux glibc 2.17+ IBM System/390x Python 3
SHA-256 checksum
How to use checksums
a86530bfce4b26f0d373fe87e9f0b44ef467a88f7f0c9620ecc034dc7aaf588d
BLAKE2b-256 checksum
How to use checksums
642fa9503862e485ec01bb6fa73e17495d44b6ea8cbedb3230731599dfa8ead3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl

Download URL ros2_tui-0.1.10-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl
Size 4.4 MB
Tags Linux glibc 2.17+ PowerPC 64-le Python 3
SHA-256 checksum
How to use checksums
7726b0472c5c5961d7761358e97b423d73710878a6636bce3babcea403c74942
BLAKE2b-256 checksum
How to use checksums
7e676a1df0785815c724e6724b6275a826e020ffe5588cccec09bf9fa38cef99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl

Download URL ros2_tui-0.1.10-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl
Size 3.2 MB
Tags Linux glibc 2.17+ x86-32 Python 3
SHA-256 checksum
How to use checksums
a394001f82af8726556f3ca4e70f56da954394880b19fc53066a78cde11a7864
BLAKE2b-256 checksum
How to use checksums
916ed3739387375c37ea04bd762ff572c27923a45afda3a4e7c957fd22a98d72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.whl

Download URL ros2_tui-0.1.10-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
Size 2.8 MB
Tags Linux glibc 2.17+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
052c471cb7dfd584fe118d316e3703510a86034f6dc5fa9eba53b925fe07f289
BLAKE2b-256 checksum
How to use checksums
7ef9472eae736b5c50cb489254a25243a687b0f26e749bc2faf59faaf3d1b0a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Release files / ros2_tui-0.1.10-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL ros2_tui-0.1.10-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 2.9 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
d9435f4f2e1b0294cfcc85b994010a7eb417e8f536271732c35b15d23726edf6
BLAKE2b-256 checksum
How to use checksums
ee325c4aa27a825f01cf4a7dfd5647acb85330f0ef5369d6dbbf39e3b5359251
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Security for ros2-tui 0.1.10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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