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.5-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.5-py3-none-musllinux_1_2_i686.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

ros2_tui-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ros2_tui-0.1.5-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.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ros2_tui-0.1.5-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.5-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.5-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.5-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eae4f1ef57f673b6efa379e0a97c238ef94efba41fd0e3242f40274166f5f692
MD5 feb6f4592afa1f3e08dc665468f2f3ea
BLAKE2b-256 44d6f22c9e430419c61fd9371df9ebf6425d185a195816d81185828d5d727fb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 28dc4e39dfd8f773b3607cfa6d90a4551d033e8dc901e58b1d514826b77705bd
MD5 a62d72ef750b3fbdfdf539fd482cf805
BLAKE2b-256 435969d47a37db515431a4dcc76a3e653b6dd32204a789fb8748cb4142beacc6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 09e50f197d619da2969df966a941f70d9dc3d14c315bc436313381349e853eb2
MD5 a8f9e07315799c9d7e426b239a75aab9
BLAKE2b-256 1692ea20cb9ca2f930856f7fc032bea491eb62bd9ec007d80e3b5ae844c071ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5f474c3fca261fca43bd57f3492ceac81b5046ab93fe7d60a370cbac2e0a0740
MD5 622f96084f27dfc27caee27eab253650
BLAKE2b-256 319772a66d81437a9adf58a65da2f3d1c17831eb7466d4ad4ffaa5797acaaf31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63ca9da2d18f0b6dc8160b95b83e66874e27b96cc8fe31f537630daeca459a20
MD5 7316dec8782fafbd8296d8cf7aac6455
BLAKE2b-256 70652c1d52b5ba50833f772ea23e86e39d699009d72fcf7f9cdf355b74190eba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 039de398769adf079ee1a2a6c67ebf462407226a250b8b7aa53b051a6ea4140c
MD5 c5410eaf0e1f41b893191271e1759caa
BLAKE2b-256 98750d063d9f18f57a397ab88ba4a88e2bcfcea853778d5014b57e9982e80aa6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 c59936651ce905845278a5f6539f771245785bfde19e455bcacff265b16f6cd4
MD5 70c804af33624ed9a309679d2978dd65
BLAKE2b-256 49a4e4ec73634dedf7556ada2bc30495af92d17c811744c739b96c320cdd73b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d5c67099d34d10e3c2975d31b265dd0a9f4e29277fefd97015935270a5b89af8
MD5 5a4197cd8f79949d8a4c08a65dee9551
BLAKE2b-256 24787bbae623e1fa187e0cd342dabca9828bba07dd04ea78a67952c2c319a3c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 bb3abcb7b9451fdcb850a73f088facf85be1b90335c97e9edd6d9014fb5ad3e9
MD5 f19cde6dfeb93eb48cd627d0f09013d6
BLAKE2b-256 2e3477fcef3f42a1758e669cb6db379f680dc3e4f7a61566d3ed9ef9ae3973d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ros2_tui-0.1.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 63000053cf7bb940b0d3273143969ae71cda0bf0c67e29fa048a71f4246a849d
MD5 f63ad8c5398db36f2b323506100033a8
BLAKE2b-256 332eda4f55d92c7ad985a97fe49d1378cb2c5b5778b59545ad77d31e2826ead2

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.7

10 files

0.1.6

10 files

This release

0.1.5 This release

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