Skip to main content

Foxglove 3.5.0

🔑 Call the API with personal access tokens​

Members on Pro, Enterprise, and Academic plans can create personal access tokens to call the Foxglove API as themselves, limited to the capabilities they choose. Open Settings → Personal access tokens to create one, then send it as a bearer token. Read more about Personal access tokens.

curl https://api.foxglove.dev/v1/devices \
-H "Authorization: Bearer $FOXGLOVE_PERSONAL_ACCESS_TOKEN"

🔍 Search by pasted IDs and names, and export results​

Paste a recording, event, or device ID, or a recording name, into the Search bar, and the suggestions include a matching query, such as @event.id == evt_…, along with Search with AI to run the text as an AI search. When a structured search returns no results, Fix my query opens the agent to diagnose it. Select results in the List or Gallery view and click Export CSV to download them. Read more about Building a query and Exporting results as CSV.

📜 Browse logs without moving playback​

For recordings and files, the Log panel loads messages around the part of the log you're viewing, so topics with bursts and long gaps stay browsable. Scroll to browse the log, including past the current time, without seeking the other panels. Click Follow playback, seek, or start playback to follow the current time again. Read more about Timestamp navigation.

New & Improved
  • Dashboard: Open local file(s) and Open connection sit in the page header, and Upload local file, Compare local files, and Explore example data are in the ⋮ menu. Admins invite members from Settings → Members
  • Playback bar: the Show on timeline menu hides events on the playback timeline, or shows only the event types you pick
  • Agent sidebar: the agent creates, updates, and deletes events on a device. If you previously chose Always allow for event editing, approve Update events again
  • Agent sidebar: the agent lists events and reads event type properties and allowed values without an open visualization
  • Agent sidebar, Slack, and MCP: replies link devices, recordings, sessions, and other Foxglove objects to their pages
  • Slack: requests that don't name a Project use the oldest Project you can access instead of asking which one to use
  • Data source menu: Open in desktop app opens the current recording, session, or remote file in the desktop app at the current playback time — see Web vs. desktop
  • Data source menu: Copy link copies a working link for remote files, is disabled with an explanation for files opened from signed URLs, and is hidden for local files
  • Timeline: Coverage details has a Search in this range button that opens Search for the device and time range. On the Search page, it narrows the current search to the range selected on the results timeline
  • Recordings and Events: URLs and recording, event, and device IDs in metadata values are links, including inside longer values
  • Events: event types are marked with a solid diamond in the type's color, matching instant events on the timeline
  • State Transitions: a Label position setting shows series labels in a column to the left or right of their rows — see Label position
  • Stack panel: the mouse wheel scrolls an overflowing Stack. Click a nested panel to zoom it with the wheel, and move the pointer out of it to scroll the Stack again
  • Table panel: expanded rows and nested cells stay open after switching tabs or reloading the layout
  • Audio panel: audio keeps its original pitch at any playback speed. Turn off Preserve pitch to resample instead — see Playback speed
  • Topic Graph: nodes, topics, and services are compact labeled pills in theme colors
  • Panel settings: clicking Add in a settings group expands the group and scrolls to the new item
  • Navigation: Recordings, Sessions, Events, Devices, and Layouts show the page name as a heading at the top of the page instead of in the web app bar
  • Filters: filter controls share one filter icon, and search fields and their empty states say Search instead of Filter
  • Desktop: on Linux, the Debian package recommends video acceleration (VA-API) drivers
Performance
  • MCAP: indexed files opened locally or from a URL load and seek faster
  • Playback: resumes sooner after seeking in recordings stored in Foxglove
  • Playback: reading and seeking compressed recordings repeats less decompression work
  • Playback: removing topics keeps the buffered messages of the topics that remain
  • Web app: recordings start loading sooner, especially on slower networks
  • WebSocket and Remote Access: connections that advertise many topics sharing a schema connect faster
  • Recordings: filtering by a recent data date range is faster
  • User Scripts: switching layouts no longer recompiles unchanged scripts, and their outputs stay visible during the switch
API
  • Recordings: concurrent imports that share a session key no longer fail with a false device-mismatch error
  • Recordings: index-in-place recordings stay available after their object moves to another bucket path
  • Webhooks: notifications wait until the resources they reference can be read through the API, so follow-up calls made right after a notification find them
  • Pending imports and import errors: completed and failed imports are kept for 30 days, in Import errors and in the API
  • Site bucket notifications: Pro organizations can create notification tokens for their bring-your-own-storage sites instead of getting a Forbidden error
  • Primary Sites: ap-northeast-2 is available as an AWS bring-your-own-storage region
Fixes
  • Playback: pausing a cloud recording keeps its data stream, so resuming doesn't buffer again
  • Playback: device-stream links stay at the linked time instead of jumping back to the start of the range
  • Playback: timestamps in the America/Vancouver time zone show UTC-7 after British Columbia moves to permanent UTC-7 on November 1, 2026
  • Plot: messages whose timestamp has a fractional sec or nsec value no longer blank or freeze the panel
  • Plot: empty or whitespace-only strings are treated as missing instead of 0, including in functions such as .@abs
  • Plot: live series keep their most recent points when samples arrive out of order after reaching the point limit
  • Plot: lines keep their shape when you hide or show a dynamic series
  • Plot: in comparison mode, XY series that use the panel's x-axis expression draw their data, and points no longer shift when a value can't be plotted
  • Plot: series after the seventh continue the color cycle instead of all being blue
  • Plot: CSV exports keep topics that contain a comma, quote, or newline in one column, and topics starting with =, +, @, or - no longer run as spreadsheet formulas
  • Plot: CSV export finishes in XY plots when a latest-message series has no data
  • Plot: CSV export writes negative timestamps correctly
  • Plot and State Transitions: hovering or clicking in the chart margins no longer shows a tooltip or seeks outside the visible time range
  • FoxQL: expressions that end in a function, such as .@abs, flag fields that don't exist
  • User Scripts: switching data sources or leaving the page while scripts compile no longer freezes the browser tab
  • User Scripts: scripts that import from "ros" compile when the data source has protobuf, FlatBuffers, JSON Schema, or OMG IDL topics
  • Agent sidebar: events the agent creates from message timestamps land at the right time, and the agent avoids duplicating existing events
  • Comparison mode: the events bar no longer shows a source's events from outside its recording when comparing or merging recordings of different lengths
  • Comparison mode: long recording names in the header keep their leading characters
  • 3D panel: transparent voxel cubes are drawn back to front, and clicking selects the nearer point cloud
  • 3D panel: opaque scene entity lines are hidden behind closer geometry instead of darkened by translucent objects
  • 3D panel: automatic color ranges work for point clouds whose color field contains NaN or infinite values
  • 3D and Image panels: the selected-voxel highlight lines up with the voxel grid's own timestamp, including in comparison mode
  • Raw Messages: the first Next click no longer takes several seconds
  • Raw Messages: Previous steps back from the displayed message instead of seeking back onto it
  • Topic Graph: node labels are no longer cut off on first load, and the view re-fits when the graph changes
  • Markdown panel: the data source selector appears in comparison mode
  • Navigation: sidebars keep their scroll position when you move between pages
  • Remote Access: sessions close when the device or its token is removed from an organization that no longer has remote access
  • Remote Access: Reconnect is disabled after the connected device is deleted
  • Timeline: the Foxglove CLI export command in Coverage details works with Foxglove CLI v2
  • Devices: the overflow button on the device details page matches the height of the other header buttons
  • Desktop: double-clicking a .foxe file installs the extension instead of showing an error
  • Desktop: Chromium --disable-features values passed at startup are kept
  • Desktop: on Linux, the Debian package no longer makes Foxglove the default app for unknown binary files and ZIP archives

Downloads: Linux: deb amd64 arm64, snap amd64 | Windows: x64 arm64 | Mac: Apple Silicon Intel

Edge Site v0.1.1

The edge controller no longer trusts certificates issued by compromised eMudhra certificate authorities.

Security
  • The edge controller no longer trusts certificates issued by compromised eMudhra certificate authorities.

Docs: About | Install | Upgrade

Foxlet v1.7.1

Foxlet​

This release stops trusting compromised eMudhra certificate authorities, and fixes retention for recordings indexed by Foxlet before v1.3.0 and recordings with no device name.

Security
  • Foxlet no longer trusts certificates issued by compromised eMudhra certificate authorities.
Fixed
  • Retention now deletes files left behind for recordings indexed by Foxlet before v1.3.0. See Delete recording files.
  • Deletion no longer fails when a recording has a device ID but no device name.

Docs: About, Install | Debian Packages: amd64, arm64 | Binary Files: amd64, arm64

Primary Site v0.0.109

This release improves import reliability on index-in-place sites, fixes playback and export failures, speeds up file deletion, and stops trusting certificates from compromised eMudhra certificate authorities.

Changed
  • queryService.deployment.enableBetaStreamExecutor no longer has any effect. All playback uses the faster streaming mode enabled by default in v0.0.108, and you can no longer switch back to the previous mode. You can remove the setting from your values.yaml.
  • The time_to_first_byte_ms and stream_duration_ms query service metrics now measure the whole request, including authorization and request setup. Expect higher values after upgrading, and adjust any dashboards or alerts built on these metrics. See Query service metrics.
Fixed
  • On index-in-place sites, files that cannot be indexed because of a permanent problem, such as a corrupt or unsupported file, are now quarantined. Previously they were retried indefinitely. See Quarantined files.
  • On index-in-place sites, quarantined files can now be downloaded. Previously the download failed.
  • Deleting a file from an index-in-place bucket now removes its recording from Foxglove even when the site cannot list the bucket. Previously, AWS buckets without s3:ListBucket permission kept deleted recordings visible indefinitely.
  • Playback no longer fails for JSON messages that contain null values in an array.
  • Exporting a recording as a ROS 1 bag no longer produces a file the Foxglove CLI rejects.
  • When an inbox listener pod is stopped, such as during an upgrade or scale-down, it now finishes the imports it is processing before it exits.
Performance
  • Deleting recordings and cleaning up temporary files is faster on sites with many files.
Security
  • Primary site services no longer trust certificates issued by compromised eMudhra certificate authorities.

Docs: About | Install | Upgrade

Remote Data Loader v0.0.12

Stream timing metrics now include the whole request, and the remote data loader no longer trusts certificates from compromised eMudhra certificate authorities.

Changed
  • The time_to_first_byte_ms and stream duration_ms metrics now measure the whole request, including authorization and the manifest request. Expect higher values after upgrading, and adjust any dashboards or alerts built on these metrics.
Security
  • The remote data loader no longer trusts certificates issued by compromised eMudhra certificate authorities. This applies to connections to your manifest endpoint and data sources.

Docs: About | Development | Deploy

Foxlet v1.7.0

Foxlet​

This release keeps auto-import recordings, and recordings requested for import, on the device until they upload.

New & Improved
  • Added the recordings_retained_pending_upload and recordings_retained_pending_upload_bytes Prometheus metrics, which count recordings that Foxlet keeps past the retention period because their upload has not succeeded.
Fixed
  • Auto-delete local files after age no longer deletes an auto-import recording, or a recording requested for import, before its upload succeeds. Previously, a device that was offline for longer than the retention period could delete these recordings before uploading them. See Delete recording files.
  • Foxlet now exits, instead of retrying an upload every second, when Foxglove rejects the upload because the device's recording state is out of date. See Error: "terminating due to invalid agent epoch".

Docs: About, Install | Debian Packages: amd64, arm64 | Binary Files: amd64, arm64

Foxglove 3.4.0

📈 Sync XY plots to a time window​

An XY plot with Sync with other plots on now follows the time window of the plots it is synced with. Points inside the window stay at full opacity and the rest dim, so zooming a timestamp plot shows you which part of a path happened in that interval. Every point stays on screen, and the path doesn't rescale as the window moves. Read more about the Plot panel.

🔎 Search list pages by name or ID​

Recordings, Sessions, Devices, and Device events have a search box above the list. Type to match a name or key, or switch the box to ID to find one exact record. The Filter menu has its own search that finds filter values and applies them in one click. Press F to open it. Read more about Filtering.

⌨️ Find any keyboard shortcut from the app​

A searchable keyboard shortcuts drawer opens with Shift+? or from the user menu or command palette.

New & Improved
  • Plot: the @integral function plots the running integral of a signal over time
  • Plot and State Transitions: series have a duplicate action
  • Log panel: changing the level or name filter during a search updates the results in place and keeps your current match
  • Audio panel: plays G.726 CompressedAudio messages — see Supported formats
  • Generated layouts: show only the topics the 3D and Image panels can draw
  • Stack panel: resize gaps have a larger drag target, select the panel being resized, and keep consistent inset spacing
  • Comparison mode: dragging a source's offset range near the playback head snaps it to the playhead — see Comparison mode
  • Problems: warns when the Remote Access device's video codec is not supported by the browser
  • Command palette: opens a WebSocket or Remote Access connection in Visualize — see the command palette
  • Remote files: a Send browser cookies with requests option opens files behind a cookie-based access gateway
  • Agent sidebar: the Claude Opus option uses Claude Opus 5.5
  • Agent sidebar: the agent receives visualization instructions, cloud recording schemas, and loaded topic names upfront
  • Agent sidebar: the agent can add and remove comparison sources, switch between compare and merge, set per-source time offsets, and open event or session comparisons
  • Agent sidebar: conversation text is larger in the full-page view
  • Search: the empty results area shows the query reference, and clicking an example inserts its predicate into the query — see Building a query
  • Search: Source Details shows search queries as FoxQL
  • Search: results show Bytes Scanned with a size unit instead of a raw byte count
  • Timeline: coverage fills in for newly indexed recordings without a page refresh
  • Recordings and Timeline: the queued imports banner names the affected sites, and points to internal monitoring only for sites your organization operates
  • Recordings: deleting a selection warns which recordings Foxglove can't delete because it does not own their storage
  • Events: New property stays at the top of the available properties list
  • Extensions: custom panels can show every comparison source through the panel data source picker (experimental)
  • Embed: @foxglove/embed and @foxglove/embed-react file sources take a compare: true option to compare multiple files — see @foxglove/embed
  • API keys: All read and All write controls select capabilities in one click
  • Device authorization: the Authorize button is larger
  • Accessibility: empty-state cards are no longer announced as alerts, and their titles are navigable headings
Performance
  • Plot: large recorded series drawn with lines downsample faster
  • Plot: several series from the same recording sharing a plot reuse cached downsampled data
  • Plot: large series shown as points without lines downsample faster
  • Plot and Map: live playback of large series is faster
  • State Transitions: signals with many distinct values load faster
  • Raw Messages: very long strings without spaces, such as a URDF with inlined base64 meshes, no longer freeze the panel
  • User Scripts: layouts with many scripts load faster
  • Multiple recordings: seeking is faster
API
  • Site bucket notifications: POST /v1/site-bucket-notifications can report that an object was deleted, so bring-your-own-storage removes the recording
  • Site bucket notifications: accepts sessionKey to group recordings into a new or existing session, or sessionId to select an existing one
  • Site bucket notifications: Azure bring-your-own-storage requires the storage account; other site types can omit it
  • Rate limits: /endpoints/indexed-bucket-notifications and /endpoints/inbox-notifications have the same rate limit as /v1/site-bucket-notifications
  • Layouts: basic-seat members cannot create, update, or delete layouts — see Seat types
  • Data stream and export: a request with only a start time or only an end time returns an error instead of exporting the whole recording
  • Sessions: POST /v1/sessions with a projectId that does not match the device's project returns an error instead of creating the session in the device's project
  • Sessions: POST /v1/sessions and PATCH /v1/sessions/{keyOrId} reject recordings that GET /v1/recordings does not return, with the same 400 as a nonexistent recording
  • Recordings: deleting a recording with no imported data returns an error that says so, instead of "not found"
  • Recordings: object locations include the storage scheme (s3, gs, az, https, or file)
Fixes
  • Log panel: search Next and Previous step through every matching message, including messages that share a timestamp
  • Log panel: search highlights stay in place while new results load
  • Log panel: terminal control characters in a message no longer hide text, overwrite the line prefix, or move the highlight to the wrong row
  • Log panel: every line of a multi-line message is highlighted
  • Log panel: history stays within its size limit after large loads, and the last message keeps its highlight when playback continues past the loaded messages
  • 3D panel: topics named after a built-in JavaScript property, such as toString or constructor, behave like any other topic
  • Raw Messages: View in Search is hidden for local files, comparison mode, and other data Search does not index
  • Plot: exporting XY data as CSV finishes when an enabled series has no data
  • Plot: CSV export keeps rows with CJK and other 3-byte UTF-8 labels intact, and works for plots with a custom x-axis and long expressions
  • Plot: a stray point and flat line no longer appear in timestamp plots after a live source's clock resets to an earlier time
  • Plot: in comparison mode, series expression autocomplete suggests fields from the source the panel is pinned to, or from every loaded source when comparing all
  • Plot: in comparison mode, array index and latest-message XY series show each source's own values, and the legend shows the right x value for latest-message XY series with their own x expression
  • Comparison mode: panel settings no longer revert after saving an organization layout
  • Comparison mode: a source's events no longer appear on the timeline after its recording ends
  • Playback bar: hovering the bar or a panel while the app is busy no longer raises a "Maximum update depth exceeded" crash
  • Playback: the message at the boundary between cached and uncached data is no longer dropped
  • Tabs: panels in a newly selected tab fill in, and buffering continues, without waiting for the next seek
  • Streaming: opening recordings or sessions with very large time spans no longer crashes
  • Agent sidebar: a failed message stays retryable after the chat panel is closed and reopened
  • Agent sidebar: topic and playback tools stay available while a recording is buffering
  • Agent sidebar: layout edits with missing or invalid panel sizes no longer collapse Stack panels
  • Open connection dialog: checkbox focus rings are no longer cut off at the left edge
  • Dropdowns: fields such as the device and session pickers open when clicked instead of only taking focus
  • Tables: selecting text in a row no longer opens the row, so cell text such as IDs, timestamps, and durations can be copied
  • Details panels: in recording, session, event, and search results, only the link text is clickable, not the whole row
  • Recordings: ID, duration, and size no longer overlap when the column is very narrow
  • Recordings: typing in the Filter menu search no longer opens a submenu in the corner of the window
  • Example previews: animations respect the reduced-motion preference
  • Foxglove CLI: basic-seat users can sign in
  • API: import requests stay within projects the member can access
  • API: GET /v1/sessions succeeds for devices whose sessions contain many recordings

Downloads: Linux: deb amd64 arm64, snap amd64 | Windows: x64 arm64 | Mac: Apple Silicon Intel

Foxlet v1.6.0

Foxlet​

This release improves the reliability of recording tracking and auto-delete, and reduces CPU usage.

New & Improved
  • Reduced CPU usage when indexing and submitting recordings.
  • Added the recordings_deletion_retained Prometheus metric, which counts recordings that are pending deletion because Foxlet could not remove the local file.
  • Added startup validation for storage paths. The error message includes the path that failed.
  • Updated the Docker image to Alpine 3.24.2 and OpenSSL 3.5.8.
Fixed
  • Changing only a recording file's metadata (for example, its permissions) no longer causes it to be re-imported as a new recording.
  • Recordings are no longer reported as deleted until their local file is gone. Files that could not be removed are retried periodically instead of being re-imported.
  • Changing or disabling the retention period no longer leaves recordings stuck pending deletion.
  • Recordings are no longer marked as removed after a filesystem scan that was interrupted by I/O errors, or when the file is still on disk but no longer matches the recording filters.
  • Reporting new recordings to Foxglove no longer stalls when every recording in a batch is rejected.
  • Requests to Foxglove are retried when a response is cut off mid-transfer.
  • Foxlet now shuts down promptly during a filesystem scan.

Docs: About, Install | Debian Packages: amd64, arm64 | Binary Files: amd64, arm64

Foxglove 3.3.0

🗂 Expand one panel in a Stack​

Panels inside a Stack have an expand control. Expanding one panel fills the workspace with that panel, and collapsing it restores the stack.

💬 Contact support from the app​

Paid plans can reach Foxglove support from the profile menu or the command palette. Contact support opens a form in the app, and the request goes to the support team.

🔎 Filter list pages with chips​

Recordings, Sessions, Devices, and Events add filters from a Filter menu. Each filter shows up as a removable chip instead of a row of always-visible inputs. You can add, edit, and apply filters from the keyboard. Read more about Filtering.

New & Improved
  • Audio panel: plays G.711 A-law and μ-law RawAudio messages — see Supported formats
  • Plot: hovering a series on the chart highlights that series and its legend row — see the Plot legend
  • Plot: point colors stay close to their series colors and remain distinct from the lines
  • 3D Maps: location fixes with a missing or unknown frame ID can use the 3D panel's display frame
  • 3D Maps: settings hints and warnings spell out location frames, altitude units, and Image panel rectification
  • 3D panel: the 3D Maps discovery hint no longer appears
  • 3D panel: plane-projected images have a Projection distance setting so the image can extend farther from the camera — see Plane projection
  • Topics: a filter term in double quotes matches that exact text — see Topics
  • Agent sidebar: code blocks in replies are syntax highlighted
  • Agent sidebar: the agent can read and refine the current Search, wait for completed results, and explain gaps in search coverage
  • Events: the event type filter shows its options without a dropdown
  • Recordings: filter by recording key, recording ID, or session ID — see Filtering
  • Sessions: filter by session ID
  • Sessions: the detail page shows the session key in the browser tab
  • Recordings, Sessions, Devices, and Events: Shift-click selects a range of items in the list and gallery
  • Desktop: the macOS Quick Look preview shows MCAP metadata
  • Desktop: on Linux, Chromium feature flags you pass on the command line are kept
  • Performance sidebar: topic converter time is reported separately from user script time
  • WebSocket: data sources can load file:// assets
  • MessagePack: topics with an empty schema encoding can be decoded
Performance
  • Topic List, Parameters, and Timeline: filtering updates as you type
API
  • Primary Sites: ingest path policy edits are blocked while a site backfill is running
  • Devices: property history keeps the current interval when a submitted value has not changed
  • Sessions: streaming a session whose recordings no longer have data returns a NoStreamableRecordings error
Fixes
  • 3D panel: POINTS markers stay visible at camera angles where they used to disappear
  • 3D panel: Path geometry from a previous comparison source is cleared when the panel switches sources
  • 3D Maps: the map recovers after an expired tile session, a failed root tileset, or a layout switch during paused playback with a late coordinate frame
  • Map panel: points and accuracy ellipses stay together when a track crosses the antimeridian
  • Raw Messages: control characters and invalid UTF-8 bytes show as escape sequences
  • Timeline: a Search highlight at the edge of the visible window stays on screen
  • Data loaders: Wasm loaders, including ROS 2 DB3 files and extension loaders, release memory and show the loader's error
  • Stack panel: an expanded overlay is no longer cropped when you select a child panel
  • Visualization: interactive markers and other messages from ROS 2 versions newer than Jazzy no longer raise a false schema-changed error
  • Log panel: search highlights stay after filters change and as messages load
  • Plot panel: time and duration values with small nanosecond components show the correct fraction in the legend
  • WebSocket: byte-array parameters keep their bytes when the values are not valid UTF-8
  • Dialogs: multiline inputs keep their focus styling, and long subtitles wrap
  • Recordings, Sessions, Devices, and Events: dropdowns opened from the Filter menu appear above the filter editor
  • Events: deleting an event from the list asks for confirmation
  • Recordings, Sessions, Devices, and Events: a failed list load no longer looks like an empty list
  • Devices: the table header stays pinned while the list scrolls
  • Foxlet: settings controls stay aligned when the auto-delete age value changes length
  • Primary Sites: creating a site shows the error returned by the API
  • Azure bring-your-own-storage: adding a second storage account in the same resource group no longer collides on Event Grid names
  • Azure bring-your-own-storage: attachment downloads work for cross-tenant storage accounts
  • API: device events, imports, and attachment and pending-import downloads stay within projects the member can access
  • Embed: @foxglove/embed installs cleanly without depending on an unpublished package

Downloads: Linux: deb amd64 arm64, snap amd64 | Windows: x64 arm64 | Mac: Apple Silicon Intel