NodeFox logoNodeFox

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).

NodeFox Apps View in NodeFox

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

NodeFox Apps create/configure panel in NodeFox

Live NodeFox product capture from the live NodeFox application: add-app configuration flow with network selection and field mapping setup.

Creating an app

  1. Click Create App and give it a name.
  2. Select the target network.
  3. Add fields — each field maps to a global variable name.
  4. 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

SettingDescription
App NameDisplay name shown to users for this form-driven workflow entrypoint.
Target NetworkThe network executed when a user submits the app form.
FieldsOrdered 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:

  1. Add Global nodes (Get) near the network entry.
  2. Match variable names exactly to app field variable names.
  3. Route global outputs into downstream nodes with explicit slot contracts.
  4. Ensure the network entry path is eligible/ready for execution on submit.

Field types

Text input

TypeDescription
lineSingle-line text input
paragraphMulti-line text area
emailEmail address with validation
urlURL with validation
numberNumeric input. Supports min, max, and step configuration.
passwordMasked text input

Selection

TypeDescription
selectDropdown menu. Configure options list.
radioRadio button group. Configure options list.
checkboxSingle checkbox toggle (true/false)
checkboxesMultiple checkbox selection. Configure options list.
toggleOn/off switch

Date & time

TypeDescription
dateDate picker
timeTime picker
datetimeCombined date and time picker

Advanced

TypeDescription
rangeSlider input. Configure min, max, step.
colorColor picker
fileSingle file upload. Configure accepted file types.
filesMultiple file upload
jsonJSON editor input
tagsTag/chip input. Configure delimiter.
listDynamic list builder

Field configuration

FieldDescription
Variable NameThe global variable name that receives this field's value when the form is submitted
LabelDisplay label shown above the field
Field TypeThe input type
Default ValuePre-populated value
PlaceholderHint text shown when the field is empty
OptionalWhether the field may be left empty on submit
Help TextExplanatory text shown below the field
ConfigType-specific options: options list for selects, min/max for numbers, accept patterns for files, delimiter for tags

Type-specific Config reference

Field TypeCommon config settings
numbermin, max, step
rangemin, max, step
select / radio / checkboxesoptions list
file / filesaccepted file types/patterns
tagsdelimiter/parse behavior
jsonJSON shape expectations used by the target network
listitem-entry behavior for dynamic lists

How it works

When a user submits the form:

  1. Each field value is written to a global variable with the configured name.
  2. The target network runs.
  3. The network reads those global variables via Global nodes at the start of the workflow.
  4. 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:

  1. Validate variable-name mappings with at least one test submit.
  2. Confirm optional fields are handled safely in-network (no hidden null assumptions).
  3. Place Decision/activation controls before high-impact writes.
  4. Confirm output behavior (files, chat UI artifacts, API actions) matches user expectations.
  5. 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

ComponentPropsDescription
Dashboardcolumns, gapCSS grid container
Cardtitle, iconBordered panel with optional header
Tabstabs[{label, id}]Tabbed container
Rowgap, alignHorizontal flex container
Collapsibletitle, openExpandable/collapsible section

Widget components

ComponentDescription
ProgressBarAnimated progress indicator
StatusBadgeColor-coded status indicator
ChartCharting — line, bar, area, scatter, pie, donut, radar
DataTableInteractive table with sorting and filtering
LogStreamScrolling log output
TerminalTerminal-style output
StatCardKey metric display with optional trend
GaugeCircular gauge visualization
TimelineChronological event display
HeatmapGrid-based heatmap
KanbanBoardKanban-style board with draggable cards
TreeViewHierarchical tree visualization
CodeBlockSyntax-highlighted code display
DiffViewerSide-by-side or inline diff comparison
CountdownCountdown timer
ObjectExplorerInteractive JSON/object inspector
MetricSingle metric display
ThinkingBlockCollapsible thinking/reasoning display
ProcessIndicatorMulti-step process tracker

Interactive components

ComponentDescription
ButtonClickable button — triggers a callback in the Code node
TextInputText entry field
SelectDropdown selector
CheckboxToggle checkbox
ActionPanelGroup of action buttons

Append operations

For components that accumulate data over time, use these special keys with UI.update():

KeyEffectUsed by
appendLinePushes {text, type} onto lines[]LogStream, Terminal
appendRowPushes an object onto rows[]DataTable
appendPointPushes {x, y} onto points[]Chart
appendEventPushes an event onto events[]Timeline
appendNodePushes a node onto nodes[]TreeView
appendCardPushes {column, card} into a kanban columnKanbanBoard