Portal Community

ProcessElementPort Interface

// packages/flow-studio-types/src/node.types.ts
export interface ProcessElementPort {
  portKey: string;          // unique within the node: 'main', 'error', 'true', 'false'
  portType: 'source' | 'target';  // output or input
  label?: string;           // optional label shown on hover
  isMainPort: boolean;      // true = primary data flow port
  isErrorPort: boolean;     // true = red error-route port
  isRequired: boolean;      // if target port: must be connected before saving
  isMultiple: boolean;      // if source: multiple edges allowed; if target: fan-in allowed
  position?: 'top' | 'right' | 'bottom' | 'left';  // handle placement
}

Port Field Reference

FieldEffect
portKeyUsed as the edge's sourceHandle or targetHandle in React Flow; maps to ExpressionContext port names
portTypesource = output (right side by default); target = input (left side)
isMainPortRenders with larger handle; edge from main port carries the primary data
isErrorPortRenders red; used for error-handling connections; data carries the exception
isRequiredCanvas validation warns if this input port has no incoming edge
isMultipleSource: fan-out allowed (multiple edges). Target: fan-in allowed (multiple edges merge)

Typical Port Configurations

// HTTP Request node — one input, two outputs (success + error)
ports: [
  { portKey: 'main',  portType: 'target', isMainPort: true, isErrorPort: false, isRequired: true, isMultiple: false },
  { portKey: 'main',  portType: 'source', isMainPort: true, isErrorPort: false, isRequired: false, isMultiple: false },
  { portKey: 'error', portType: 'source', isMainPort: false, isErrorPort: true, isRequired: false, isMultiple: false }
]

// Merge node — two inputs, one output
ports: [
  { portKey: 'left',  portType: 'target', isMainPort: true, isErrorPort: false, isRequired: true, isMultiple: false },
  { portKey: 'right', portType: 'target', isMainPort: false, isErrorPort: false, isRequired: true, isMultiple: false },
  { portKey: 'main',  portType: 'source', isMainPort: true, isErrorPort: false, isRequired: false, isMultiple: false }
]