Skip to content

Workflow orchestration

On the Flow canvas, you design visual pipelines that move data from source to outcome. The workflow engine runs them on the server: when a run executes, nodes whose inputs or configuration changed re-run, while independent branches execute in parallel. You reuse work through templates and subgraphs, and every run can leave audit and lineage metadata for compliance review. See Compliance evidence for data lineage and Data for connectors, storage, and file formats.

A workflow is a directed graph of nodes connected by edges. Each node performs one step and passes typed dataset ports downstream.

You start a run from the canvas Run control. You can also enable Auto run changes in the workflow menu so Flow schedules a run when the canvas is stale. Your browser tab for an open workflow is {workflow name} | Workflows | Fontana AI (the Graph or Simple view query is not in the tab). When a run executes, the engine:

  • Reacts to change - each node hashes its configuration, incoming edges, and input data. Nodes whose hash matches the last successful run reuse prior output; others re-run. Frozen nodes keep their last output until you unfreeze them. If a node hash cannot be calculated, the run fails with an error for that node instead of treating the node as up to date.
  • Runs in parallel - independent branches execute concurrently where the graph allows
  • Executes server-side - large files, PDF parsing, connector fetch, and PyAirbyte jobs run on the workflow engine
  • Persists run-scoped data - uploads, Arrow datasets, exports, and audit sidecars survive pod restarts within your workspace boundary

From the workflow menu, Auto run changes schedules a run when the workflow is stale relative to the last comparable completed run, instead of leaving the Stale badge. Stale covers graph and file-input changes, and cell or header edits that change results. Expanding or collapsing operation badges does not mark the workflow stale.

When the last completed run has no comparable fingerprint (for example a run stored before the current fingerprint format), the Run control shows Unknown freshness. Unknown does not Auto-run. You run once to establish a baseline; later Stale and Auto-run compare against that run.

Opening a workflow or refreshing the page does not schedule a run for load-only fingerprint churn. A genuine edit during that short settle window still shows Stale, or schedules a run when Auto-run is on.

Validations

Apply schema, business-rule, and tolerance checks as deterministic steps; failures route to owners with full context attached.

Transformations

Reshape, normalise, and map payloads between source formats and target schemas with versioned transformation logic.

Compute

Run grouping, filtering, aggregations, enrichment, and other compute steps on governed datasets inside the workflow boundary.

When you open a node for editing, the editor tabs include JSON (after Data, or after the primary tab when there is no Data, and before Ports / Settings). The tab shows the full workflow-config object for that node. Valid edits apply when the editor loses focus; invalid JSON or changes to id / type keep your draft and show an error. Marker stroke nodes stay canvas-only and do not include this tab. Escape closes dismissible layers one at a time, most recently opened first. Escape closes the editor when its fields are empty after trim. If a field in the editor still has text, Escape does not close the editor and does not clear your draft, even after a menu on top has already closed. Open menus, dialogs, and Monaco suggest or find keep Escape until they close.

Open the bottom omni toolbar Preferences control to adjust canvas display. Among fit view, lock, layout direction (LR / TB), and full vs data-only mode, you can switch node corner radius with an icon-only split control (rounded or square). The choice is stored on the workflow display config and applies to standard workflow node cards. The omni dock is canvas tools and Preferences only. You add nodes and operations from the right-hand tools rail, Quick add on a selected node, and My Components.

Select a graph node and drag the bottom-right corner to change both width and height. Flow saves that size with the workflow, so leave, re-enter, and refresh restore it. The card stays at least as tall as its content, and you cannot shrink below the designed minimum width for that node type. Historical run canvases stay read-only. Panel nodes keep their own edge resizer for width and height.

The right-hand tools rail (Overview, Nodes, Operations, Errors, My Components, and related panels) docks as a column that takes width from the canvas. The graph and other workflow views shrink; the run toolbar recenters in the remaining space. The panel keeps rounded-left card chrome and a left-edge resize handle. Keyboard N toggles Nodes and O toggles Operations when you are not typing in a field. Overview is the inspector: with nothing selected it shows the mini map, workflow info, stats, and node list; a selected node shows that node’s data; a selected edge shows that connection (title Edge, merge strategy, payload counts, and an Enabled switch); a selected data-grid cell shows that cell’s lineage. Canvas Audit log lives on the Errors rail (severity totals under the title). Header Graph / Simple / Analysis menus do not open a main-window Audit view; a leftover ?view=audit URL opens Simple and the Audit log rail. Save a panel to My Components with a name dialog (default My component). Escape closes dismissible layers one at a time, most recently opened first. Escape closes the panel when draft fields are empty after trim, including an empty search box. Committed chrome such as the workflow name does not keep the panel open. A typed draft still blocks Escape and is not cleared, even after a menu on top of it. Open menus, dialogs, and Monaco suggest or find keep Escape until they close. Auto run changes lives in the workflow menu; Run on the header is a single button.

Common input and API tiles (File Input, Email Import, REST and GraphQL inputs and APIs, Data Connector, Email Export, Save File, Subgrid, Template, AI, Query) drop as square icon-led faces: large centered type icon and title under it. Extra status copy appears on hover. Source actions such as File Input Change/Clear, Email Import pause, Subgrid Auto Select, REST Fetch, and Data Connector Change/Clear live on the selection toolbar when the node is selected, so the default tile stays quiet.

The sidebar under Workflows → Nodes documents each node type. Representative families:

The Operations node exposes column-level transforms (strings, dates, decimals, conditionals, lookups) plus dataset-wide Query, Group, and Sort. You combine visual operation stacks in the UI or use natural-language compile (Governed AI) to generate row-wise operations from plain English. Query, Sort, and Group are not NL-composable; you add them on the Operation node.

The sidebar catalogues Transformations, Validations, and Conditions you attach to Operations nodes. Use them to enforce data quality before data leaves a pipeline branch.

Configure On error on operations and nodes to raise error or raise exception. Exceptions persist for the workflow and appear on the Exception Management board. See Exception management.

PDF and office documents uploaded to File Input are parsed server-side via Docling on the platform cluster (shared document-parse service for all workspaces). Optional AI structuring enriches results for review in the UI.

  • Save workflows as templates and share them within teams or the community catalog
  • Encapsulate reusable fragments as subgraphs and graft them onto larger pipelines
  • Security - platform security controls and SOC 2 summary
  • Compliance evidence - atomic data lineage and workflow file store
  • Data - File Input, PyAirbyte connectors, Arrow storage, REST triggers, exports
  • Governed AI - AI transforms and natural-language operation compile
  • Observability - run telemetry; canvas port audit items vs security audit ledger