u/JackMcMurder

▲ 10 r/ROS

Hopefully SUPERFAST Rviz Alternative

# A new ROS2-native, SUPERFAST visualizer written in Rust — `fastviz`

Hi everyone,

I've been hacking on a side project called **fastviz**: a Rust-based 3D visualizer that runs as a native ROS2 node, built on `wgpu` and `egui`. RViz has been the workhorse of the community for many years and isn't going anywhere — fastviz is just an experiment to see how much smoothness and headroom we can get out of a pure-Rust + GPU-native pipeline, and I wanted to share where it's at in case it's useful to others.

It's at a preliminary stage — only a handful of message types are wired up so far — but the core architecture is in place and it already renders things like TurtleBot 4 in Gazebo end-to-end.

**Repo:** https://github.com/ksatyaki/fastviz

---

## The bits I'm most excited about

### 1. It IS a ROS2 node

No bridge, no middleware, no separate process. fastviz subscribes directly to topics via `r2r`, so there's nothing extra to wire up between your robot and the visualizer.

### 2. The render thread never touches ROS2

The `r2r` executor runs on a dedicated thread; the renderer talks to it through an `Arc<RwLock<SceneGraph>>` with brief, write-only handoffs. The UI never blocks on DDS — frames stay smooth even when a noisy topic is flooding the graph.

### 3. GPU-accelerated via `wgpu`

Vulkan on Linux, Metal on macOS, DX12 on Windows, and WebGPU is on the menu too. Same renderer everywhere.

### 4. Revision-cached render passes

A `revision()` counter on the scene graph drives pass-level caching, so an idle scene costs ~zero CPU. Walking away from the visualizer doesn't pin a core.

### 5. GPU-side per-entity transforms for point clouds

The point-cloud pipeline is instanced, per-entity transforms happen on the GPU, and the prepare step is revision-cached with buffer reuse. PointCloud2 streams stay cheap.

### 6. TF tree reimplemented in Rust

No `tf2` C++ dependency — TF maintenance lives in pure Rust alongside the rest of the ingestion layer.

### 7. TOML config as the source of truth

Layouts are declared in a TOML file — diff-friendly, version-controllable, and easy to commit alongside your robot's launch config.

### 8. Polled wildcard topic discovery

Drop `"*"` into a topic list and every matching message type in the ROS graph gets auto-subscribed within about a second. Handy when you're exploring an unfamiliar bag or sim and don't want to enumerate topics by hand.

### 9. Per-topic QoS overrides in config

`reliability`, `durability`, and `depth` are all settable per topic from the same TOML file.

### 10. URDF support with STL / OBJ / DAE meshes

URDF parsing via `urdf-rs`; mesh loading covers STL, OBJ, and Collada. `package://` URIs resolve through `AMENT_PREFIX_PATH`, and `JointState` drives the FK.

### 11. Dev container + release Docker image

The `.devcontainer/` ships an Ubuntu 24.04 + ROS2 Jazzy image with `r2r` build deps, the Vulkan loader, and NVIDIA passthrough already wired up. A root `Dockerfile` also builds a release image you can `docker run`.

---

## What's supported today (early days!)

This is very preliminary — only a few message types are supported right now:

Topic kind Message
`[map]` `nav_msgs/OccupancyGrid`
`[poses]` `geometry_msgs/PoseStamped`
`[pose_arrays]` `geometry_msgs/PoseArray`
`[paths]` `nav_msgs/Path`
`[scans]` `sensor_msgs/LaserScan`
`[points]` `sensor_msgs/PointCloud2`
`[tf]` `tf2_msgs/TFMessage`
`[urdf]` `std_msgs/String` + `JointState`

`MarkerArray`, `Image`, `Imu`, `Odometry`, and friends are on the near-term roadmap. ROS2 Jazzy is the only distro currently tested.

---

## Try it

```sh
git clone https://github.com/ksatyaki/fastviz
cd fastviz
source /opt/ros/jazzy/setup.bash
cargo build --release
cargo run -p app -- --config configs/turtlebot4.toml
```

Or via the dev container — open the folder in VS Code / Cursor and pick "Reopen in Container".

---

## Help wanted

If you give it a spin, I'd genuinely love to hear:

- which message types you'd want supported next,
- what kinds of bags would make good benchmarks,
- any architectural input on plugins, MCAP playback, or multi-window layouts.

Issues, PRs, and "this completely broke on my robot" reports are all very welcome.

Hopefully this can grow into something useful for the community. Thanks for taking a look!

**GitHub:** https://github.com/ksatyaki/fastviz

reddit.com
u/JackMcMurder — 3 days ago