Skip to content

Exec Components

Exec popovers are component trees. Raw protocol applets send them in popover messages, and SDK applets serialize helper objects to the same protocol tree.

Use this page when you need exact component names, fields, defaults, enum values, and emitted events.

Component Node Shape

Every component node has a type and a data object:

json
{"type":"tile","data":{"id":"refresh","primary":"Refresh"}}

The component names below are the names accepted by the current protocol. section, button, link_button, grid, picture, and progress are not exec protocol components.

Common Fields

Most components accept these fields inside data:

FieldDefaultMeaning
visibleunsetHide the component when set to false.
tooltipunsetHover text.
css_classes[]Extra CSS classes.
styles{}Inline style properties accepted by the renderer. Prefer CSS classes for reusable styling.

Enums

NameValuesDefault
Badge kinddefault, success, warning, error, accentdefault
Status dot statusneutral, success, warning, error, accentneutral
Pager appearancedots, numbersdots
Popover sizesmall, medium, large, widemedium
Mouse button in eventsleft, middle, right, othernone
Event sourcestatus, popovernone
Event typeclick, toggle, change, scroll, open, closenone

Layout Components

ComponentFieldsDefaultsNotes
popover_shellsize, children, footer, footer_visiblesize = "medium", children = [], footer = [], footer_visible = falseFull popover layout with optional footer.
rowchildren[]Horizontal layout.
columnchildren[]Vertical layout. Most applets use this as their root body.
containerchildren[]Generic grouped container.
boxed_listchildren[]Native list-style group.
button_rowchildren[]Row of compact controls.
scrollchildrequiredScroll wrapper around one child.
circle_boxcolor""Circular color swatch or status marker.
separatorcommon fields onlynoneDivider.

Example:

text
popover {"root":{"type":"popover_shell","data":{"size":"medium","children":[{"type":"hero","data":{"title":"System","subtitle":"Live status","icon":"utilities-system-monitor-symbolic"}},{"type":"tile","data":{"id":"refresh","primary":"Refresh","secondary":"Run now","left_icon":"view-refresh-symbolic"}}]}}}

Text And Display Components

ComponentFieldsDefaultsNotes
labellabel, xalign, wrapxalign unset, wrap unsetText label. label is required.
headerlabelnoneSection heading.
heroid, title, subtitle, icon, icon_size, toggle, toggle_sensitive, separator, trailingsubtitle = ""; others unsetPopover header. Emits toggle when it has id and toggle is used.
badgelabel, kindkind = "default"Small semantic label.
status_dotstatusneutralSmall state dot.
panel_indicatorid, icon, label, active, checked, needs_attention, extrabooleans false; others unsetPanel-like indicator inside a popover. Emits click when it has id.
empty_statetitle, subtitlesubtitle unsetEmpty or unavailable state.
spinnerspinningtrueActivity indicator.
meterid, icon, label, value, min, max, step, text, interactivelabel = "", value = 0, min = 0, max = 1, step = 0.01, interactive = falseRead-only by default. Emits change when interactive = true and it has id.
key_value_gridrows[]Key/value facts. Each row has key and value.

Example:

text
popover {"root":{"type":"column","data":{"children":[{"type":"header","data":{"label":"Network"}},{"type":"key_value_grid","data":{"rows":[{"key":"IPv4","value":"10.0.0.42"}]}},{"type":"badge","data":{"label":"Connected","kind":"success"}}]}}}

Tiles And Controls

ComponentFieldsDefaultsEvents
tileid, primary, secondary, left_icon, left, rightoptional fields unsetEmits click when it has id.
segmented_tileid, primary, secondary, left_icon, left, right, child, expandedexpanded = false; optional fields unsetEmits toggle on expand or collapse when it has id; emits click for its main row when it has id.
switch_tileid, primary, secondary, left_icon, left, activeactive = false; optional fields unsetEmits toggle. id is required.
expander_tileid, primary, secondary, left_icon, left, child, expandedexpanded = false; optional fields unsetEmits toggle when it has id.
slider_tileid, label, left_icon, left, value, min, max, step, page, digits, snap_stepvalue = 0, min = 0, max = 1, step = 0.01, page = 0.1, digits = 0; optional fields unsetEmits debounced change values. id is required.
choice_tileid, primary, secondary, left_icon, left, selectedselected = false; optional fields unsetEmits click when it has id.
choice_listid, active, choicesactive unset, choices = []Emits change with the selected choice id. id is required.

choice_list.choices entries use id, primary, optional secondary, and optional icon.

Example:

text
popover {"root":{"type":"column","data":{"children":[{"type":"switch_tile","data":{"id":"vpn","primary":"VPN","secondary":"Disconnected","left_icon":"network-vpn-symbolic","active":false}},{"type":"slider_tile","data":{"id":"brightness","label":"Brightness","left_icon":"display-brightness-symbolic","value":0.6,"min":0.0,"max":1.0,"step":0.05}},{"type":"choice_list","data":{"id":"profile","active":"balanced","choices":[{"id":"balanced","primary":"Balanced","secondary":"Recommended"},{"id":"performance","primary":"Performance"}]}}]}}}

Pager Components

ComponentFieldsDefaultsEvents
pager_itemid, label, appearance, active, inactive, occupied, urgentlabel = "", appearance = "dots", booleans falseEmits click. id is numeric and required.
pager_stripid, placeholder, itemsid unset, placeholder = false, items = []Emits change when it has id.

Use pager components for workspace or page indicators.

Calendar Components

ComponentFieldsDefaultsEvents
calendarid, selected_date, event_daysid unset, event_days = []Emits change when it has id.
date_heroweekday, datenoneDate popover header.
eventsdate, events, loadingevents = [], loading = falseCalendar event list.

events.events entries use id, title, start, optional end, optional location, and all_day = false.

Weather And Clock Components

ComponentFieldsDefaultsNotes
weather_forecast_listitems[]Forecast rows.
weather_hourly_stripitems[]Hourly forecast strip.
world_clockrows[]Timezone rows.

weather_forecast_list.items entries use day_name, icon, condition, temperatures, and is_today = false.

weather_hourly_strip.items entries use time, icon, and temperature.

world_clock.rows entries use name, timezone, time, offset, and optional day_label.

Battery And Privacy Components

ComponentFieldsDefaultsNotes
battery_heroicon, percentage, fraction, statenoneBattery popover header.
camera_indicatoractivefalseCamera privacy indicator.
mic_indicatoractivefalseMicrophone privacy indicator.
muted_indicatoractivefalseMuted audio indicator.
location_indicatoractivefalseLocation privacy indicator.
screencast_indicatoractive, timer_textactive = false, timer_text unsetScreencast indicator with optional timer text.

Events

Interactive components send event lines back to the applet:

EventComponentsPayload detail
clicktile, choice_tile, panel_indicator, pager_item, status items with idOptional button.
togglehero, switch_tile, expander_tile, segmented_tileactive contains the new boolean state.
changemeter, slider_tile, choice_list, pager_strip, calendarvalue contains the new number, string, item id, or date.
scrollStatus items with iddelta_y contains the scroll amount.
open, closePopover lifecycleid = "popover".

Raw protocol applets must set id on components that should emit events. SDKs can generate private ids for widget-local callbacks; those generated ids are an SDK convenience, not a field you need to write by hand.

See Also

PageUse it for
Line ProtocolRaw protocol commands, message shapes, and events.
Exec SDKSDK helper classes for these components.
Exec AppletApplet package config and runtime behavior.