Shareable links
Build and share deep links with your teammates to open Foxglove with specific layouts, data sources, and timeline views.
To open Foxglove using a specific layout or data source, construct a "deep link" URL using the format:
https://app.foxglove.dev/~/view?param1=value1¶m2=value2
Supported query parameters are documented below, or you can copy any URL while you are using the app.
Web vs. desktop
By default, links will open in the browser. You can open the desktop app instead using the openIn parameter:
| parameter | type | required | description |
|---|---|---|---|
openIn | string | web (default)desktop |
openIn=desktop opens in the Foxglove app. If it is not installed, it presents a landing page that prompts the user to download the app or open the link in the browser. This is the preferred approach to open the Foxglove app.
In the web app, you can instead select Open in desktop app in the data source menu to open the current view in the Foxglove app at the current playback time. This option is not available for local files.
The foxglove:// URL scheme also opens in the Foxglove app. This fails silently if the Foxglove app is not installed.
| prefix | example |
|---|---|
https://app.foxglove.dev/~/view | https://app.foxglove.dev/~/view?ds=foxglove-websocket&ds.url=ws://localhost:8765&openIn=desktop |
foxglove://open | foxglove://open?ds=foxglove-websocket&ds.url=ws://localhost:8765 |
Layouts
To load a saved layout (personal or team):
| parameter | type | required | description |
|---|---|---|---|
layoutId | string | ✓ | Foxglove's ID for a remotely saved layout |
To get a URL with the correct layoutId param, open the web app and click your desired layout in the "Layouts" menu.
Timestamp
| parameter | type | required | description |
|---|---|---|---|
time | timestamp (RFC3339) | Timestamp to seek to (for non-live data sources) |
Data sources
To specify your data source, use the ds parameter as documented according to your desired data source below.
For example, a Rosbridge connection may look like the following:
https://app.foxglove.dev/~/view?ds=rosbridge-websocket&ds.url=ws%3A%2F%2Flocalhost%3A9090&layoutId=2644147b-f205-456c-ace9-69466aaac0b7
Foxglove WebSocket
| parameter | type | required | description |
|---|---|---|---|
ds | string | ✓ | foxglove-websocket |
ds.url | string | ✓ | WebSocket URL (i.e. ws://localhost:8765) |
Rosbridge
| parameter | type | required | description |
|---|---|---|---|
ds | string | ✓ | rosbridge-websocket |
ds.url | string | ✓ | WebSocket URL (i.e. ws://localhost:9090) |
ROS 1 Native
(Supported on desktop only)
| parameter | type | required | description |
|---|---|---|---|
ds | string | ✓ | ros1-socket |
ds.url | string | ✓ | ROS Master URI |
Foxglove
| parameter | type | required | description |
|---|---|---|---|
ds | string | ✓ | foxglove-stream |
ds.deviceId | string | See below* | The device id in Foxglove |
ds.deviceName | string | See below* | User assigned device name |
ds.start | timestamp (RFC3339) | Start of data playback range | |
ds.end | timestamp (RFC3339) | End of data playback range | |
ds.recordingId | string | See below* | ID of the recording to open |
ds.recordingKey | string | See below* | Key of the recording to open |
ds.eventId | string | See below* | ID of the event to open |
ds.sessionId | string | See below* | ID of the session to open |
ds.sessionKey | string | See below* | Key of the session to open |
ds.merge | string | Set to true to open multiple recordings as one source. Requires two or more ds.recordingId values. See Multiple recordings, sessions, or events. | |
ds.compare | string | Set to true to open multiple recordings, sessions, or events in comparison mode. Requires two or more ds.recordingId, ds.sessionId, or ds.eventId values. | |
ds.compareStart | number | Comparison only. Start offset, in seconds, for each source. Provide one value per source, in the same order as the IDs. |
One of ds.deviceId, ds.deviceName, ds.recordingId, ds.recordingKey, ds.eventId, ds.sessionId, or ds.sessionKey is required. If multiple are provided, Foxglove uses the first one in this order: ds.recordingId, ds.recordingKey, ds.deviceId, ds.deviceName, ds.eventId, ds.sessionId, ds.sessionKey.
Multiple recordings, sessions, or events
To open more than one source at once, repeat the ID parameter and set ds.merge or ds.compare.
Merge recordings to play them back as one source on a single timeline, as if they were one file. Merge supports recordings only:
https://app.foxglove.dev/~/view?ds=foxglove-stream&ds.recordingId=<recording-1>&ds.recordingId=<recording-2>&ds.merge=true
Compare recordings, sessions, or events to keep each source distinct on a shared timeline. See Comparison mode for details and plan availability. Use ds.compareStart to set each source's start offset in seconds:
https://app.foxglove.dev/~/view?ds=foxglove-stream&ds.sessionId=<session-1>&ds.sessionId=<session-2>&ds.compare=true&ds.compareStart=0&ds.compareStart=12.5
If both ds.merge=true and ds.compare=true are set with multiple ds.recordingId values, Foxglove merges the recordings.
Remote files
| parameter | type | required | description |
|---|---|---|---|
ds | string | ✓ | remote-file |
ds.url | string | ✓ | URL to .bag or .mcap file(s). Use multiple parameter entries to specify multiple files. (i.e. ds.url="…"&ds.url="…") |
ds.includeCredentials | string | Set to true to send browser cookies with each request for the files, for files behind a cookie-based access gateway. |
Remote data loader
| parameter | type | required | description |
|---|---|---|---|
ds | string | ✓ | remote-data-loader |
ds.dataLoaderUrl | string | ✓ | URL of your remote data loader deployment (for example https://loader.example/). |
ds.manifestParams | string | Encoded manifest query parameters (application/x-www-form-urlencoded, without a leading ?). Example: ds.manifestParams=recording%3Dfirst-recording. When present, sibling ds.* keys are ignored. | |
ds.* | string | Legacy. Sibling manifest parameters when ds.manifestParams is omitted (for example ds.recording=…). Prefer ds.manifestParams. | |
ds.compare | string | Set to true to compare multiple sources. Requires two or more ds.manifestParams values. |
Timeline
To share links to the timeline view, use the format:
https://app.foxglove.dev/~/timeline?param1=value1¶m2=value2
Time range
Set the time range displayed on the timeline. Defaults to the last 7 days if omitted.
| parameter | type | required | description |
|---|---|---|---|
start | timestamp (RFC3339) | Start of the displayed time range | |
end | timestamp (RFC3339) | End of the displayed time range |
Device filter
Filter which devices are shown on the timeline.
| parameter | type | required | description |
|---|---|---|---|
deviceFilter | string | Filter displayed devices by name or ID |
Device selection
Highlight a time range on a specific device. These parameters are applied on load and then removed from the URL.
| parameter | type | required | description |
|---|---|---|---|
selectedDevice | string | Device ID or name | |
selectedStart | timestamp (RFC3339) | Start of the selected range | |
selectedEnd | timestamp (RFC3339) | End of the selected range |