This is one of our biggest updates yet: Zelos AI, redesigned sidebars, layout version history, new State and Raw panels, richer Plot readouts, and many more panel controls.
Zelos AI: Open AI Chat with Cmd+I / Ctrl+I. Zelos understands your agents, traces, panels, time range, and cursor. It can find signals, inspect values, summarize ranges, detect crossings, and evaluate checks across live or recorded data. It can also build panels and tabs, control the workspace, and run enabled actions with confirmation. Conversations are saved for later. Zelos AI is rolling out in phases to select users first, then everyone, so it may not appear immediately after updating. Open AI Chat →
All-New Sidebars: Both sides now use a compact moveable app rail. Pin or reorder apps, drag them between sides, and keep your arrangement across restarts. Search works across Explorer, Data, Marketplace, and Settings — even when a sidebar is closed — while All apps holds unpinned and overflowed apps. Learn more →
Layout Version History: Every content-changing save records who saved it and what changed. Name important versions to keep them permanently, or safely restore an earlier version as a new entry without losing your current state. Existing layouts begin recording on their next save. Learn more →
State Panel: See discrete values as colored spans over time. Hover for value and duration, or highlight the same interval across Plot panels and the timeline. Fast transitions turn neutral until you zoom in instead of showing a misleading state. Learn more →
Raw Panel: Inspect events exactly as recorded. Search or filter rows, follow live data, sync with the timeline cursor, copy JSON, and export CSV or JSON. Byte fields render as hex, with alternate formats for numeric columns. Learn more →
Plot Legend Readouts: Show paused-cursor or live values in signal chips. Side legends use a dedicated value column, while measurement mode adds Δt and each signal's delta. Learn more →
Panel Controls and Defaults: Configure Plot interpolation, markers, line styles, area fill, Y-axis lanes, alignment, and axis visibility. Set defaults for every new panel type under Settings → Panels, with independent reset controls. Plot options →Panel defaults →
Settings Redesign: New sidebar navigation and search make settings easier to find. Search names, descriptions, or terms such as "fps" and "telemetry," then jump directly to the highlighted control. Learn more →
Stacked Plot Alignment: Y-axis gutters and side-legend widths now synchronize so plots, cursors, and legend values line up vertically.
Recording Gaps: Plot lines now break across missing data instead of drawing an invented connection.
This release introduces App Extensions, a new extension surface for building rich, custom workflows directly inside the Zelos desktop app. Extensions can now provide full APP tabs for dashboards and purpose-built tools, alongside major improvements to workspace history, panel display controls, layout editing, search, and large-workspace performance.
App Extensions: Installable extensions can now add full workflow UIs to Zelos, not just signals and actions. App extensions open in dedicated APP tabs and can be launched from the app rail, making room for workflows like custom dashboards and extension-specific tools. Learn more →
Developers can create their own app extensions with the new app-extension templates and SDK. Build an app extension →
Workspace History: Undo and redo workspace changes with Cmd+Z / Ctrl+Z and Cmd+Shift+Z / Ctrl+Shift+Z. The command palette shows the next undo/redo action when history is available. Learn more →
Display Format Menu: Right-click panel chips, table cells, or value cells to copy values, copy signal paths, or show values as default, hex, binary, octal, or scientific notation. Learn more →
Multi-Signal Value Panels: Value panels can now show multiple signals in a compact grid, with configurable column count. Learn more →
Plot Legend Placement: Plot legends can be placed at the bottom, left, or right of the chart, with a resize handle for tuning the space between legend and plot. Learn more →
Signal Units: Signal units now appear alongside values across panels, tooltips, chips, and measurement results.
Action Panel Controls: Action panels now support Enter-to-execute, inline execute buttons, configurable request timeouts, and clearer execution states. Learn more →
Analytics Opt-Out: Settings now include a toggle for sharing anonymous usage analytics. Learn more →
Workspace Naming: Default workspaces are now named "Workspace" instead of "Untitled", and empty workspaces no longer clutter Recents.
Live Cursor Behavior: When pausing, scrubbing, or zooming live data, the cursor stays anchored to the right edge of the visible window so paused live inspection matches live-follow behavior.
Layout Drag and Drop: Panel creation and rearranging now have clearer merge-vs-insert previews, ghost placeholders, edge auto-scroll, and cross-tab panel moves. Learn more →
Plot Line Style: New plot panels default to linear lines instead of stepped lines. Existing panel overrides are preserved.
Table Signal Names: Table panels now default to short signal names, with the full-name toggle still available per panel.
Sidebar Search: Signal tree sources expand by default, search jumps to the first match, clearing search restores prior expansion state, and manually closed branches stay closed.
Natural Sorting: Numbered names now sort naturally across lists, so signal_2 appears before signal_10.
Layouts no longer accidentally lock dragged signals to a specific trace or agent, so reusable layouts work more reliably across similar traces and live connections.
Plot colors now stay stable when signals update, table panels re-render, or segment-scoped signals are displayed.
Large numeric values render correctly on plot Y-axis tick labels.
Recorded live data is now flushed more reliably on shutdown.
Missing action status is no longer treated as a passing result.
Linux auto-update is restored with clearer installation errors and timeouts.
Login and loading screens have improved light-mode icon contrast, a clearer "Login with code" button, and fewer title-bar glitches.
Large workspaces with tens of thousands of signals are faster and more stable, especially in the signal tree and multi-signal drag-and-drop flows.
Table column width, order, and pinning now persist across sessions.
This release adds a Command Palette for instant access to any action in the app, along with trace re-export, multi-file open, and automatic segment expansion. It also includes a redesigned plot tooltip, improved measurement tool, and various panel sizing and UI refinements.
Command Palette: Open with Cmd+K / Ctrl+K to quickly search and run any action across the app — playback controls, workspace management, layouts, settings, extensions, and more. Includes keyboard shortcut hints and fuzzy search. Learn more →
Trace Re-Export: Export opened trace files to a new .trz file. Supports time-range selection and merging multiple open traces into a single output.
Segment Auto-Expansion: Overlapping data segments for the same signal now automatically expand into distinct series in plots, tables, and value panels — similar to scoped signals. Non-overlapping segments remain merged.
Multiple File Selection: The open file dialog now supports selecting and opening multiple .trz files at once.
This release introduces a brand-new timeline and playback experience for live and trace workflows. You can now navigate with a shared cursor across any panel, compare traces more easily with ABS/REL modes, and inspect data faster in any workflow.
This release introduces multi-trace and multi-agent support. You can now open multiple trace files simultaneously, connect to multiple live agents, and compare data across them in the same panels.
This release introduces a major redesign of the application with a new Extension Marketplace, improved navigation with redesigned sidebars, and enhanced plot panel capabilities. Key highlights include the ability to browse and install extensions directly from the app, multi-select signals for easier plot creation, and improved user feedback throughout. The layout has been completely reimagined with dedicated sections for connections and layouts, making it easier to manage your workspace.
Agent SDK (zelos_sdk.agent): Connect to a running Zelos Agent from Python and query live or recorded data through one handle — browse the signal catalog, query and downsample time-series into Arrow/pandas, read latest values, watch for live updates, run actions, manage extensions, and open .trz trace files. Read more.
Layout version history:agent.layouts CRUD (list/show/create/update/delete) plus full version history — list a layout's versions, restore a previous version, or label one. Read more.
Typed Check API:agent.check.that(lhs, op, rhs) asserts a predicate against a live signal or .trz trace, with temporal quantifiers such as always/eventually evaluated server-side; agent.check.suite(...) runs a JSON suite of checks in one round-trip. Read more.
zelos_sdk.schemas.Log — a predefined schema for typed log events (zelos.log.v1); pass a schema class directly to add_event(name, schema) instead of a field list. Read more.
TraceSource.log_batch() — log a pyarrow.RecordBatch or Table directly for zero-copy, high-throughput ingestion.
TraceSource.log_many() — log a list of (time_ns, event_name, data) tuples in a single call, cutting Python↔Rust overhead for high-frequency sources like CAN decoders.
TraceSource(name, strict=True) — opt into strict type coercion; rejects lossy float→int narrowing instead of silently truncating it.
TraceNamespace.drain() — flush every source and block until all queued events reach subscribers, for deterministic teardown ahead of closing a TraceWriter.
Action execution now returns a typed ActionExecuteResult (value + status) with PASS/FAIL/ERROR/DONE states instead of a bare value; the old ActionResult/ExecuteStatus names remain as deprecated aliases.
Action JSON Schema and UI Schema property order now matches @action declaration order end-to-end instead of being alphabetized, so generated forms render fields in the order they were declared.
SignalFrame now resolves columns correctly when the same signal name appears across multiple producers or segments, raising AmbiguousSignal on a genuine tie instead of matching the wrong column.
TraceReader no longer drops a trace's last row when its timestamp has sub-microsecond precision.
TraceWriter now captures every event logged before its with block exits, without needing a sleep before close to avoid losing in-flight data.
TraceSourceCache now stores a Python None as a null value instead of raising an error.