Apps View
Overview
Apps let you create clean form interfaces for your networks. Present a form to end users — they fill in fields, submit, and the form values are injected as global variables that the network reads. Users never need to see or understand the underlying workflow.
Navigate to the Apps panel in the sidebar (⌘+G → P).

Live NodeFox product capture from the live NodeFox application: the Apps workspace for building end-user forms over existing NodeFox networks.

Live NodeFox product capture from the live NodeFox application: add-app configuration flow with network selection and field mapping setup.
Creating an app
- Click Create App and give it a name.
- Select the target network.
- Add fields — each field maps to a global variable name.
- Configure field types, labels, placeholders, defaults, validation, and help text.
The app is ready for end users to run the workflow by filling out the form.
The most important implementation detail is mapping clarity. Field names should reflect business intent, while variable names should match what the target network expects at runtime. Teams that keep this mapping explicit avoid a common failure mode where the app UI looks correct but the workflow receives the wrong values.
App-level configuration surfaces
| Setting | Description |
|---|---|
| App Name | Display name shown to users for this form-driven workflow entrypoint. |
| Target Network | The network executed when a user submits the app form. |
| Fields | Ordered set of form inputs, each mapped to a global variable name consumed by the target network. |
Network-side setup requirement
Apps submit values into global variables. The target network should read those values explicitly:
- Add
Globalnodes (Get) near the network entry. - Match variable names exactly to app field variable names.
- Route global outputs into downstream nodes with explicit slot contracts.
- Ensure the network entry path is eligible/ready for execution on submit.
Field types
Text input
| Type | Description |
|---|---|
line | Single-line text input |
paragraph | Multi-line text area |
email | Email address with validation |
url | URL with validation |
number | Numeric input. Supports min, max, and step configuration. |
password | Masked text input |
Selection
| Type | Description |
|---|---|
select | Dropdown menu. Configure options list. |
radio | Radio button group. Configure options list. |
checkbox | Single checkbox toggle (true/false) |
checkboxes | Multiple checkbox selection. Configure options list. |
toggle | On/off switch |
Date & time
| Type | Description |
|---|---|
date | Date picker |
time | Time picker |
datetime | Combined date and time picker |
Advanced
| Type | Description |
|---|---|
range | Slider input. Configure min, max, step. |
color | Color picker |
file | Single file upload. Configure accepted file types. |
files | Multiple file upload |
json | JSON editor input |
tags | Tag/chip input. Configure delimiter. |
list | Dynamic list builder |
Field configuration
| Field | Description |
|---|---|
| Variable Name | The global variable name that receives this field's value when the form is submitted |
| Label | Display label shown above the field |
| Field Type | The input type |
| Default Value | Pre-populated value |
| Placeholder | Hint text shown when the field is empty |
| Optional | Whether the field may be left empty on submit |
| Help Text | Explanatory text shown below the field |
| Config | Type-specific options: options list for selects, min/max for numbers, accept patterns for files, delimiter for tags |
Type-specific Config reference
| Field Type | Common config settings |
|---|---|
number | min, max, step |
range | min, max, step |
select / radio / checkboxes | options list |
file / files | accepted file types/patterns |
tags | delimiter/parse behavior |
json | JSON shape expectations used by the target network |
list | item-entry behavior for dynamic lists |
How it works
When a user submits the form:
- Each field value is written to a global variable with the configured name.
- The target network runs.
- The network reads those global variables via Global nodes at the start of the workflow.
- Results are produced as usual — file downloads, UI artifacts in the chat, API calls, etc.
Apps View operations checklist
Use this checklist when promoting an app for real users:
- Validate variable-name mappings with at least one test submit.
- Confirm optional fields are handled safely in-network (no hidden null assumptions).
- Place Decision/activation controls before high-impact writes.
- Confirm output behavior (files, chat UI artifacts, API actions) matches user expectations.
- Verify failure branches return clear user-visible outcomes, not silent stalls.
UI Artifacts
Code nodes can build live-updating dashboards directly in the chat panel. This is especially useful in App workflows where you want to show progress or results to the end user.
The UI system follows a Skeleton + Pulse model: define a layout once with UI.render(), then stream data updates to individual components via UI.update() without re-rendering the whole structure.
// Stamp the layout skeleton
await UI.render(
UI.Dashboard({ columns: 2 }, [
UI.Card({ title: 'Progress' }, [
UI.ProgressBar({ id: 'prog', value: 0 }),
]),
UI.Card({ title: 'Status' }, [
UI.StatusBadge({ id: 'status', status: 'running', label: 'Processing...' }),
]),
])
);
// Push updates as the workflow progresses
await UI.update('prog', { value: 50, label: 'Halfway done...' });
await UI.update('status', { status: 'success', label: 'Complete' });
Layout components
| Component | Props | Description |
|---|---|---|
Dashboard | columns, gap | CSS grid container |
Card | title, icon | Bordered panel with optional header |
Tabs | tabs[{label, id}] | Tabbed container |
Row | gap, align | Horizontal flex container |
Collapsible | title, open | Expandable/collapsible section |
Widget components
| Component | Description |
|---|---|
ProgressBar | Animated progress indicator |
StatusBadge | Color-coded status indicator |
Chart | Charting — line, bar, area, scatter, pie, donut, radar |
DataTable | Interactive table with sorting and filtering |
LogStream | Scrolling log output |
Terminal | Terminal-style output |
StatCard | Key metric display with optional trend |
Gauge | Circular gauge visualization |
Timeline | Chronological event display |
Heatmap | Grid-based heatmap |
KanbanBoard | Kanban-style board with draggable cards |
TreeView | Hierarchical tree visualization |
CodeBlock | Syntax-highlighted code display |
DiffViewer | Side-by-side or inline diff comparison |
Countdown | Countdown timer |
ObjectExplorer | Interactive JSON/object inspector |
Metric | Single metric display |
ThinkingBlock | Collapsible thinking/reasoning display |
ProcessIndicator | Multi-step process tracker |
Interactive components
| Component | Description |
|---|---|
Button | Clickable button — triggers a callback in the Code node |
TextInput | Text entry field |
Select | Dropdown selector |
Checkbox | Toggle checkbox |
ActionPanel | Group of action buttons |
Append operations
For components that accumulate data over time, use these special keys with UI.update():
| Key | Effect | Used by |
|---|---|---|
appendLine | Pushes {text, type} onto lines[] | LogStream, Terminal |
appendRow | Pushes an object onto rows[] | DataTable |
appendPoint | Pushes {x, y} onto points[] | Chart |
appendEvent | Pushes an event onto events[] | Timeline |
appendNode | Pushes a node onto nodes[] | TreeView |
appendCard | Pushes {column, card} into a kanban column | KanbanBoard |