Developer documentation
Visual App Builder & Device Workflows
Build 6 includes a plugin-powered graph builder that can assemble UI, logic, API, file, navigation, and native-device steps, preview the connected flow, and export it as a CommonJS plugin.
What is new in build 6
Component catalogue
| Category | Components |
|---|---|
| Inputs | form, input, textarea, checkbox, dropdown, colorPicker, keyValue |
| Layout | card, panel, section, accordion, row, column, tabs, divider, spacer |
| Display | welcome, text, selectableText, repeater, success, webview, debugConsole |
| Actions | button, iconButton, modal, message, openUrl, filePicker |
| Logic and data | decision, api, stateStore, ruleEvaluator, strategyAction |
| Interactive UI | counterDisplay, buttonGrid, resetAction |
| Device and advanced | camera, nativeAction |
Graph node and edge data
var graph = {
nodes: [
{
id: "check_system",
componentType: "nativeAction",
label: "System information",
x: 240,
y: 36,
settings: {
operation: "systemInfo",
buttonText: "Run system check",
outputName: "systemInfo"
}
}
],
edges: [
{ from: "intro", to: "check_system", output: "Continue", label: "Continue" }
]
};
Node IDs must be unique. componentType must exist in the catalogue. Coordinates are canvas positions. Edges refer to the source node’s named output; decision and API nodes can route through different outputs.
Use the graph primitives in your own plugin
api.ui.append(app, "mainPanel", {
type: "flowCanvas",
id: "deploymentFlow",
height: 540,
nodes: nodes,
edges: edges,
selectedId: selectedId,
dropCommand: "deployment.drop",
selectCommand: "deployment.select",
moveCommand: "deployment.move",
connectCommand: "deployment.connect",
emptyText: "Drag a step here"
});
Each command receives the canvas event data in ctx.payload. Persist durable graph changes in plugin data, normalize unknown input before rendering, and keep node IDs stable so Inspect and Recorder can target the generated UI.
Permissions and generated output
The bundled Visual App Builder declares ui.transform, plugin.storage, request.modify, requests.send, and platform.run. A generated plugin should keep only the capabilities required by its nodes. Review exported source and platform operations before enabling it.
The visual builder is implemented with the same public plugin runtime used by other bundled plugins. Internal uiRobot automation is QA-only and is not part of an exported customer plugin.