BAGEL: Zero-install browser-based 3D visualizer for ROS bags
Scrub multi-gigabyte ROS logs instantly in your browser, no cloud uploads.
BAGEL (BAG ExpLoration) is a fully client-side, open-source web application that lets you inspect, scrub, and visualize ROS 1 and ROS 2 bag files directly in your browser — with zero installation, configuration, or cloud uploads. It supports multiple formats: `.mcap` (Humble/Jazzy), `.db3` (SQLite), and legacy `.bag` files. The 3D panel, built on Three.js, decodes and renders `PointCloud2`, `LaserScan`, `PoseStamped`, `OccupancyGrid`, and `MarkerArray` with proper TF handling, action semantics (ADD, MODIFY, DELETEALL), and lifetime fade-outs. Remote URL streaming via HTTP Range lets you scrub through multi-gigabyte logs in under a second by fetching only the needed chunks. Custom schema injection for `.db3` files uses `@foxglove/rosmsg` validation and local storage, enabling decoding of proprietary message types.
The frontend is built with React 19, TypeScript, and Vite, offloading heavy parsing to Web Workers. It leverages `@mcap/core`, `@foxglove/rosbag`, and `sql.js` (WebAssembly) for in-memory database queries. Compressed ROS1 chunks are handled via `seek-bzip` and `lz4js` in workers, keeping the UI responsive. The time-series panel uses uPlot for instant graphing of any numerical primitive. The author welcomes community feedback on performance, missing primitive types, and UX enhancements. The project is on GitHub and available as a live demo at https://bagel-ros2.vercel.app.
- Supports dragging and dropping ROS2 .mcap, .db3, and legacy .bag files with zero installation.
- Remote URL streaming via HTTP Range opens multi-gigabyte logs in under a second by fetching only the needed chunks.
- Custom schema injection for .db3 files allows decoding proprietary message formats using @foxglove/rosmsg and local storage.
Why It Matters
Enables quick field log triage and sharing with non-ROS collaborators without setting up a full ROS environment.