Navigate the timeline of a pre-recorded data source (e.g. a local or remote .bag file) using the playback bar controls.

Format the current timestamp display, seek back and forth at increments of 100ms, loop playback, and configure playback speed.

playback bar

Note: The playback bar is hidden when Studio is connected to live data.

Message ordering

Data streamed into Foxglove Studio typically have several types of timestamps:

  • Receive time (live connections) or log_time (MCAP)
    • Timestamp at which a message was received by the recording service
    • Can vary if the recording service is running on the robot vs an external client
  • Header stamp (ROS 1 and ROS 2)
    • Timestamp from the message's header.stamp field, set to a custom value by user.
    • Can vary with clock skew when working with distributed systems
  • Publish time (ROS 2) or publish_time (MCAP)
    • Timestamp at which a message was published
    • Can vary with clock skew when working with distributed systems

Both Foxglove Studio and the Foxglove WebSocket protocol play messages in receive time, or log_time, order.

Recorded data

Though all Foxglove Studio panels order messages by receive time, some – like the Plot and State Transitions panels – can be configured to order messages by header stamp as well.

Live data

To get accurate measurements of time between messages (e.g. for a control signal), have your Foxglove WebSocket server override your messages' receive time by sending custom Time messages.

Message latching

By default, ROS 1 .bag files, MCAP files, and Foxglove Data Platform streams will play back using message latching. This means that when seeking within your data, every panel in the layout will automatically display the last data it saw for that topic – even if that data is infrequently published or was not published at that exact moment in time. For Foxglove Data Platform streams, visualizing them in Studio will load the last seen messages for each subscribed topic – even if those messages are from before your current data segment's start time.

Loading data

Foxglove Studio optimizes the way it loads data in order to streamline pausing, seeking, and stepping through complex robotics data.

Message "lookback"

When seeking to an arbitrary point in your loaded data, it's unlikely that every topic you are visualizing has a message at exactly the time you jumped to. The vast majority of your topics will have messages sometime before or after that exact seek point.

To ensure that your layout still displays something reasonable, Studio performs a “lookback” on your data. Essentially, it looks for the most recent message on each subscribed topic. This ensures that even when seeking to an arbitrary point in your data, Studio will still display reasonable data for all the panels in your layout – even if their messages occurred at different times.

Latched topics

When seeking to a given timestamp, Studio fetches the last message on all subscribed topics – even if they occurred multiple minutes before your seek location. This allows panels to accurately display data from infrequently published topics (like a map, for example), even while seeking around to multiple points in your data at random.


While most Studio panels – like the Raw Messages and Image panels – display just the most recent message for a given topic, others like the Plot and Map panels benefit from visualizing messages across the data's entire time range. Seeing a complete view of one's data makes spotting anomalies, summarizing robot behavior, and recognizing trends and patterns much easier. Preloading data allows these panels to access all their historical data throughout playback.

Even panels that visualize their most recently seen data can benefit from preloading. For example, the 3D panel preloads its transform messages to accurately position its markers. Robots often have many coordinate frames (e.g. joints of a robot arm, cameras on a self-driving car), each with their own markers. To render markers from different frames in a single 3D scene, the panel needs to use transforms to calculate the position of these visual elements in a common coordinate space. Since transforms accumulate and update over time, looking at just the latest message would result in an incompletely or incorrectly rendered scene. By preloading all transforms, the 3D panel can accurately position its markers, regardless of where and how often you decide to seek in your data.

User interactions

Creating events

Navigate to the Foxglove console’s “Recordings” page and select a data recording to “View in Studio”.

The Foxglove Studio window that opens with your Data Platform data source will display a bookmark icon on the playback bar.

Event icon

Seek to a point of interest in your data, then click that bookmark icon to add an event to your data at that point on the timeline.

Create event

These events will also persist to your Foxglove console account's “Events” page.

Viewing events

Open the Data source sidebar and select the “Events” tab to see a list of all events associated with the current data source.

When streaming data from Foxglove Data Platform, Foxglove Studio’s playback bar will display events using blue bars. Hovering on a blue bar will display its metadata in a tooltip.

Event tooltip

If the Data source sidebar is open to your list of events, hovering on an event will also highlight the corresponding event metadata in that sidebar pane.

Event hover

Searching events

Open the Data source sidebar and click on the “Events” tab to see all your events. The search input field at the top of the tab uses the same query syntax supported in Foxglove Data Platform. Type in some queries to filter events by metadata keys and values and find events of interest.


  • Space – Pause or play
  • Shift + – Seek backward 10ms
  • Shift + – Seek forward 10ms
  • – Seek backward 100ms
  • – Seek forward 100ms
  • Alt + – Seek backward 500ms
  • Alt + – Seek forward 500ms