# rostree v1.0.0: explore your ROS 2 dependency graph from the terminal, or in your browser

**URL:** <https://discourse.openrobotics.org/t/rostree-v1-0-0-explore-your-ros-2-dependency-graph-from-the-terminal-or-in-your-browser/57315>\
**Category:** Projects\
**Tags:** ros2\
**Created:** [August 11, 2026, 4:01pm UTC](https://discourse.openrobotics.org/t/rostree-v1-0-0-explore-your-ros-2-dependency-graph-from-the-terminal-or-in-your-browser/57315 "2026-08-11T16:01:51Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![guilyx](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/guilyx/32/25181_2.png) [@guilyx](https://discourse.openrobotics.org/u/guilyx)\
**Post date:** [August 11, 2026, 4:01pm UTC](https://discourse.openrobotics.org/t/rostree-v1-0-0-explore-your-ros-2-dependency-graph-from-the-terminal-or-in-your-browser/57315/1 "2026-08-11T16:01:51Z")

</div>

Hi everyone! I posted an early version of **rostree** on reddit a while back, around 0.2.2… but never here.  
Three releases later it’s at 1.0, and enough has changed that a fresh post seemed more honest than a bump comment.

![img](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/1/f/1f0867ab922b8099ad7a3c16b9f43ddb229d90de.gif)

It answers the questions you actually ask about a workspace: _what does this package pull in, who depends on it, why is this thing in my tree at all, and what changed since my last build._ CLI, TUI, Python API.

```auto
pip install rostree
source /opt/ros/<distro>/setup.bash # and/or your workspace install/setup.bash
rostree # interactive TUI`

```

## **The thing that was actually broken**

A ROS dependency graph is a **DAG, not a tree**. `rcutils` sits under nearly every branch. 0.2.2 expanded every path separately, so a workspace tree produced tens of thousands of duplicate nodes and, past depth 7, effectively didn’t finish.

Now each package is expanded **once, where it first appears**. I installed 0.2.2 from PyPI into a separate venv and ran both against the same workspace on the same machine:

| **depth** | **0.2.2** | **1.0** |
| --- | --- | --- |
| 5 | 1,876 lines / 0.43 s | 276 lines / 0.20 s |
| 6 | 6,258 lines / 1.18 s | 253 lines / 0.18 s |
| 7 | 16,623 lines / 3.04 s | 252 lines / 0.19 s |
| no limit (the default) | 58,002 lines / 10.29 s | 251 lines / 0.21 s |

Package discovery now happens once into an index instead of an `os.walk` per node, and `package.xml` parsing is memoized.

I would love some feedback!

If rostree gets your workspace layout wrong, an issue describing it is genuinely the most useful thing you can send.

Docs: [rostree](https://guilyx.github.io/rostree)  
Repo: [GitHub - guilyx/rostree: explore your ros2 dependency graph in terminal or rendered in many formats · GitHub](https://github.com/guilyx/rostree)  
PyPI: [rostree · PyPI](https://pypi.org/project/rostree/)
