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.8

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.8
File Actions
ros2_tui-0.1.8-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details for ros2_tui-0.1.8-py3-none-musllinux_1_2_x86_64.whl
ros2_tui-0.1.8-py3-none-musllinux_1_2_i686.whl Python 3 none Linux musl 1.2+ x86-32 Details for ros2_tui-0.1.8-py3-none-musllinux_1_2_i686.whl
ros2_tui-0.1.8-py3-none-musllinux_1_2_armv7l.whl Python 3 none Linux musl 1.2+ ARMv7l Details for ros2_tui-0.1.8-py3-none-musllinux_1_2_armv7l.whl
ros2_tui-0.1.8-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details for ros2_tui-0.1.8-py3-none-musllinux_1_2_aarch64.whl
ros2_tui-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for ros2_tui-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ros2_tui-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl Python 3 none Linux glibc 2.17+ IBM System/390x Details for ros2_tui-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
ros2_tui-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl Python 3 none Linux glibc 2.17+ PowerPC 64-le Details for ros2_tui-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
ros2_tui-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details for ros2_tui-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
ros2_tui-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details for ros2_tui-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
ros2_tui-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for ros2_tui-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ros2_tui-0.1.8-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.8-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
ros2_tui-0.1.8-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.8-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl
ros2_tui-0.1.8-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.8-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl
ros2_tui-0.1.8-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details for ros2_tui-0.1.8-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl
ros2_tui-0.1.8-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details for ros2_tui-0.1.8-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
ros2_tui-0.1.8-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for ros2_tui-0.1.8-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Total release size: 50.4 MB

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

Download URL ros2_tui-0.1.8-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
d192131ce6d14e5fc6f2e664b63544fdd8a017f509a262e6306acf948c744697
BLAKE2b-256 checksum
How to use checksums
19d83bdd6b0961fe9046e4488e9fde588fe3cebbfdc38ccbd58986c6060bca06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
458894a74c4f9c6b683e43849c04d021fff69833bba9bc5fe33a7f46f996630d
BLAKE2b-256 checksum
How to use checksums
fc68c5d4d34de2fc30da907061b17dfa340ac9e7fba8ca05901eb35437ef264e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
6ddce5e83f8d53cac1b77d9caf870fb6d7ba3072c64f268236cb77e5e2cb657f
BLAKE2b-256 checksum
How to use checksums
8556bb9c0c16d7051a34f0fda97fc74b207a5e00a87b64eca67aac934422f87e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
dc666273090d1a0a860f49317cf76f53b010bbcaf7d0404d1b0eadfd752e0533
BLAKE2b-256 checksum
How to use checksums
3b497921608419b2bac040f0523860a966ce17c13e8643b7769d69bc4311acf7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

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

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

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

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

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

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

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

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

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

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

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

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

Download URL ros2_tui-0.1.8-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
a0fe5c6ea84c05e8b99be1e68c3b18b06306ba9e000d257556997ecdd85fec10
BLAKE2b-256 checksum
How to use checksums
54dc9477e00c45309f86e498d3b32f2b0165e7f1b23674ddc1d163a4829b5004
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
ce1e840f93cbec9c6ae4b6a2ff525ca526fd94571e7da933c7aa9a6ed3cb01b5
BLAKE2b-256 checksum
How to use checksums
80f94310109a6e7b6d4f19e653a6eaaf529ce56ccda7f2f45af2f7c73ef1e08c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
ae3404e819bb1b3bcc9f2e9593b3599a76575c93c1123ad751bc3d016fbdf94e
BLAKE2b-256 checksum
How to use checksums
fcc82d2f724244f26ed750675e4dc2af45c26ff5cbadc0059326da597555f9e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
9cf007f37958cc4b6fb16cff6b8da279141204f19f0f4bbcb6e98142e57f7767
BLAKE2b-256 checksum
How to use checksums
4fd52d1c140c2db2901043d38e5d4c22ccd1cdc8b233dc47faf1f7df44802d12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
aacb9c0ea0bd85cb9d23d29b92c73dbe17743aa9bc6861473869f6f6f3c40d4d
BLAKE2b-256 checksum
How to use checksums
d9663aa0cde14bd7b02057a4da458220e7271e8aadd14a1bc8575df9b5128e3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

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

Download URL ros2_tui-0.1.8-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
bb4bd4d4cb30a105e9184917b19be0de6d7e9f7e9fb6c23c56ac33fa3876bf3f
BLAKE2b-256 checksum
How to use checksums
5e0f33b4d9fca6b4a07da9626d64559a102482f816399c4cd73f7bd3fd784caf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.16.0

Security for ros2-tui 0.1.8

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