Browser-based RViz2 using XPRA HTML5. Works on Windows/macOS/Linux without X11 or VNC clients.
Run locally:
docker compose -f docker-compose.run-without-config.yml upRunning post-workflow:
docker compose -f docker-compose.run-without-config-pull.yml upCopy files to your project:
cp -r rviz-xpra/ /your/project/
cp docker-compose.prod_xpra.yml /your/project/Edit docker-compose.prod_xpra.yml:
- Service name — change
your_ros_serviceto your service name - RViz config path — update volume mount to your config directory:
volumes: - fleet_rviz_config:/your/path/to/rviz/config
- Config filename — change
your_config.rvizin the command:--start-child='rviz2 -d /fleet_config/your_config.rviz' - ROS settings — match your
ROS_DOMAIN_IDandnetwork_mode
Run:
docker compose -f docker-compose.prod.yml -f docker-compose.prod_xpra.yml upAccess: http://localhost:14500/
- Config persists in
rviz_configvolume - XPRA exits when RViz closes
- Uses named volume to share config between containers
- Port 14500 ignored if using
network_mode: host
Credits: This documentation and code were developed with assistance from Anthropic's Claude Sonnet 4.5 model via GitHub Copilot.