Developer documentation

UI Nodes

The app UI is a JSON tree. Plugins add or update nodes with stable IDs so Inspect, Recorder, and other plugins can target them.

Supported node types

TypeMain fieldsUse
row, column, panel, card, sectionid, children, padding, width, flex, background, radiusLayout and grouping.
text, selectableTextid, value, style, color, bindLabels, headings, copied output, response snippets.
button, iconButton, tabButtonid, text, icon, command, action, payloadRun plugin commands or app actions.
input, textareaid, label, value, bind, placeholder, readonlyEditable values and request fields.
dropdownid, items, value, bindMethod pickers and enum-like choices.
checkboxid, label, value, bindBoolean settings.
accordionid, label, expanded, childrenCollapsible plugin sections.
tabsid, tabs, childrenTabbed plugin interfaces.
keyValueEditorid, bind, labelHeader/body style key-value editing.
headersEditor, bodyEditor, responseViewer, requestList, pluginList, pluginBuilderidNative app components exposed as plugin targets.
webviewid, url, htmlEmbedded web content.
colourPicker, colorPicker, colourSlider, colorSliderid, value, label, commandTheme and color tools.
debugConsoleid, titleShows plugin debug logs.
divider, spacer, slot, splitter, hiddenid, sizing fieldsSpacing, extension slots, split panes, hidden data.

Common styling and sizing fields

Sizewidth, height, minWidth, maxWidth, minHeight, maxHeight, flex.
Spacingpadding, margin, gap.
Colorsbackground, foreground, color, borderColor.
Shaperadius, borderRadius, borderWidth.
Textstyle values include heading and muted.
TargetingAlways set id; use targetId only when mirroring an existing app target.

Example card with inspectable fields

api.ui.append(app, "rightPanel", {
  type: "accordion",
  id: "customerToolsAccordion",
  label: "Customer Tools",
  expanded: true,
  children: [
    { type: "input", id: "customerToolsEmail", label: "Email", value: "" },
    { type: "textarea", id: "customerToolsOutput", label: "Output", value: "", readonly: true },
    { type: "button", id: "customerToolsRun", text: "Lookup", command: "customerTools.lookup" }
  ]
});