Edge Site v0.1.1
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.enableBetaStreamExecutorno 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 yourvalues.yaml.- The
time_to_first_byte_msandstream_duration_msquery 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:ListBucketpermission 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.
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_msand streamduration_msmetrics 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_uploadandrecordings_retained_pending_upload_bytesPrometheus 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
@integralfunction 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
CompressedAudiomessages — 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/embedand@foxglove/embed-reactfile sources take acompare: trueoption 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-notificationscan report that an object was deleted, so bring-your-own-storage removes the recording - Site bucket notifications: accepts
sessionKeyto group recordings into a new or existing session, orsessionIdto 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-notificationsand/endpoints/inbox-notificationshave 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/sessionswith aprojectIdthat does not match the device's project returns an error instead of creating the session in the device's project - Sessions:
POST /v1/sessionsandPATCH /v1/sessions/{keyOrId}reject recordings thatGET /v1/recordingsdoes not return, with the same400as 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, orfile)
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
toStringorconstructor, 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/sessionssucceeds 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_retainedPrometheus 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
RawAudiomessages — 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
NoStreamableRecordingserror
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/embedinstalls cleanly without depending on an unpublished package
Downloads: Linux: deb amd64 arm64, snap amd64 | Windows: x64 arm64 | Mac: Apple Silicon Intel
Foxglove 3.2.0
📊 State Transitions: one row per array index
Display each element of a primitive array as a separate row in the State Transitions panel. Set Array expansion to By index in the series settings. None stays the default, so existing layouts are unchanged. Read more about Expanding an array by index.
📈 Plot legend: hide, delete, and highlight series
Manage series directly from the Plot legend: toggle visibility, open settings from the color swatch, and delete individual, grouped comparison, or dynamic series. Hovering over a plot line highlights its matching legend and tooltip rows, including rows hidden by tooltip truncation. Read more about the Plot legend.
🎥 Play converted video in the 3D panel
The 3D panel can play H.264 (and other compressed video) carried on image topics when a schema converter maps them to foxglove.CompressedVideo. Choose Render as on the topic to project that video into the scene without recording a duplicate topic. Read more about Video.
New & Improved
- Plot panel: expanded array series use shades of the parent color, and the same dynamic value keeps that shade across comparison sources — see Dynamic series
- Use the Command palette to start a local-file comparison or add, switch, remove, and adjust comparison sources by name — see Comparison mode
- Image panel: decodes 12-bit RCCG raw images (
rccg12) — see Supported encodings and Color correction for RCCG images - 3D Maps: Altitude Reference samples ground altitude at the current location, and can align altitude automatically by sampling the map
- Publish panel:
Cmd+Enter(macOS) orCtrl+Enterpublishes from the message editor — see Controls and shortcuts - Topics sidebar: a topic's actions menu opens it in a Raw Messages panel
- Layouts: when Visualize has no layout selected, Generate layout for this data builds a personal layout from the open data source's topics
- Gallery: URLs preserve the selected preview topic, the open state of the details panel, and current page across Recordings, Events, Sessions, and Search. Shared links and the browser's Back button restore that view — see Choose preview topics
- Recordings, Events, and Sessions galleries explain when a card has no preview because of the selected preview topic
- Recordings, Sessions, Events, and Devices: breadcrumbs link back to the originating list or detail page and preserve list filters
- Search: duplicate warnings collapse by message, and warnings identify missing queried fields and schemas or files omitted from results — see Search
- Events: The Created By field shows the user's profile name, or Unnamed user when none is set
- Devices: drop multiple recordings or a folder onto a device's details page to upload them — see Import files
- Foxlet: an import that failed to upload can be retried from the app — see Diagnose and resolve errors
- Bring your own storage: a quarantined import can be retried or downloaded from the app — see Diagnose and resolve errors
- Remote Access: data topics are compressed in transit — see Remote Access
- Sources tab: the left sidebar reports server version information for WebSocket and Remote Access connections
- Embed: a parent page can own the Remote Data Loader connection and issue loader requests itself — see Parent-owned remote data loader transport
- Extension panels can read the live WebSocket data source's host and port from
RenderState.connection— see RenderState - Desktop: update notices appear as small cards in the bottom-right corner instead of a full-width banner
- Japanese and Chinese translations cover previously untranslated UI, including the external MCP server settings
Performance
- Local and remote indexed MCAP files scrub more smoothly
- Remote files load and seek faster
- The Recordings page loads faster for organizations with many recordings
API
- Sites: configure ingest path policies to control which objects bucket notifications import, including index-in-place — see Configure bucket notifications
- Saving an unchanged ingest path policy no longer creates a duplicate revision
Fixes
- Agent sidebar: seek links that target a time outside the current playback range are rejected instead of seeking off-range
- Agent sidebar: a 3D panel no longer reports missing frames while its transforms are still loading
- Agent sidebar: failures show the correct error instead of defaulting to a connection problem, and Retry resumes failed messages, continuations, and tool results
- 3D Maps: tiles continue to load after a Google tile session expires
- 3D panel: compressed Draco point clouds keep updating at high playback speeds
- State Transitions: editing or deleting a series no longer reloads the others
- Log panel: seconds in timestamps no longer pad with leading zeros
- Playback: Left and Right move the eligible event or playback-range endpoint in that direction
- Recordings: organizations with multiple sites can use the Site filter without an edge site or Foxlet
- Recordings: Select all matching recordings now visualizes, compares, or adds to a session every recording the filter matches, not only the current page
- Sessions: bulk delete no longer fails under load, and deleting a session refreshes its recordings
- Sessions: comparison selections stay selected when you change or clear filters
- Search: a large result set no longer raises an application error as gallery cards stream in
- Remote Access: a session no longer reconnects unexpectedly during normal operation
Downloads: Linux: deb amd64 arm64, snap amd64 | Windows: x64 arm64 | Mac: Apple Silicon Intel