Skip to content

Pipeline Views

The pipeline viewer displays real-time execution state for a running workflow. It sits inside the playground and offers three view modes: Graph, Kanban, and Table.

Every node in a running pipeline is assigned one of these statuses by the backend:

StatusMeaning
idleJob created; dependencies not yet met
pendingReady to run; waiting in queue
runningCurrently executing
pausedExecution paused (e.g. rate limit, wait step)
interruptedWaiting for human input (human-in-the-loop)
completedFinished successfully
skippedNot executed — workflow completed/branched before this node ran
failedExecution failed
cancelledExplicitly cancelled

The kanban board groups nodes into columns by status. By default it uses a 4-column layout:

ColumnStatusesLogic
Pendingidle, pendingNot yet started
In Progressrunning, paused, interruptedActively in flight
Donecompleted, skippedTerminal success
Failedfailed, cancelledTerminal failure

When a column maps multiple statuses, each card displays a status pill showing the node’s exact status. This makes it easy to distinguish, for example, a paused node from a running one inside the same “In Progress” column.

Your backend can override the column layout per pipeline by returning a kanban_config object in the GET /pipelines/:id response. If this field is absent the frontend falls back to the 4-column default above.

{
"status": "running",
"node_statuses": { ... },
"job_status_summary": { ... },
"kanban_config": {
"columns": [
{
"key": "pending",
"label": "Pending",
"statuses": ["idle", "pending"],
"icon": "mdi:clock-outline",
"color": "var(--fd-muted-foreground)"
},
{
"key": "in_progress",
"label": "In Progress",
"statuses": ["running", "paused", "interrupted"],
"icon": "mdi:play-circle-outline",
"color": "var(--fd-warning)"
},
{
"key": "done",
"label": "Done",
"statuses": ["completed", "skipped"],
"icon": "mdi:check-circle",
"color": "var(--fd-success)"
},
{
"key": "failed",
"label": "Failed",
"statuses": ["failed", "cancelled"],
"icon": "mdi:alert-circle",
"color": "var(--fd-error)"
}
]
}
}
FieldTypeRequiredDescription
keystringUnique column identifier
labelstringColumn heading shown in the UI
statusesstring[]One or more node statuses that belong to this column
iconstringIconify icon name, e.g. mdi:check-circle
colorstringCSS color for the column accent — any valid CSS value, including var(--fd-success)

The status pill on a card is shown automatically when a column’s statuses array has more than one entry. Single-status columns are assumed to be self-explanatory and show no pill.

Example: 3-column layout for a simple approval workflow

Section titled “Example: 3-column layout for a simple approval workflow”
"kanban_config": {
"columns": [
{
"key": "waiting",
"label": "Waiting",
"statuses": ["idle", "pending", "interrupted"],
"icon": "mdi:clock-outline",
"color": "var(--fd-muted-foreground)"
},
{
"key": "active",
"label": "Active",
"statuses": ["running", "paused"],
"icon": "mdi:play-circle-outline",
"color": "var(--fd-warning)"
},
{
"key": "terminal",
"label": "Terminal",
"statuses": ["completed", "skipped", "failed", "cancelled"],
"icon": "mdi:flag-checkered",
"color": "var(--fd-foreground)"
}
]
}

The table view lists all nodes sorted by activity (running nodes first), with expandable rows showing execution details — last executed time, duration, and error message.

Register additional views alongside the built-in three by passing a pipelineViews array. Each entry needs a unique key, a toggle button icon and label, and a Svelte component that receives PipelineViewProps.

MyTimelineView.svelte
<script lang="ts">
import type { PipelineViewProps } from '@flowdrop/flowdrop/playground';
let { pipelineId, workflow, endpointConfig, refreshTrigger }: PipelineViewProps = $props();
</script>
<div>Timeline for pipeline {pipelineId}</div>
import { mountPlaygroundStudio, createEndpointConfig } from '@flowdrop/flowdrop/playground';
import MyTimelineView from './MyTimelineView.svelte';
await mountPlaygroundStudio(container, {
workflowId: 'wf-123',
endpointConfig: createEndpointConfig('/api/flowdrop'),
pipelineViews: [
{
key: 'timeline',
label: 'Timeline',
icon: 'mdi:chart-timeline-variant',
component: MyTimelineView
}
]
});
<script lang="ts">
import { PlaygroundStudio } from '@flowdrop/flowdrop/playground';
import MyTimelineView from './MyTimelineView.svelte';
const extraViews = [
{ key: 'timeline', label: 'Timeline', icon: 'mdi:chart-timeline-variant', component: MyTimelineView }
];
</script>
<PlaygroundStudio workflowId="wf-123" extraPipelineViews={extraViews} />
FieldTypeDescription
keystringUnique identifier — must not clash with graph, kanban, or table
labelstringTooltip text on the toggle button
iconstringIconify icon name
componentComponent<PipelineViewProps>Svelte component that receives the view props

The selected view key persists in localStorage under fd-pipeline-view-mode, so switching to a custom view and reloading restores it automatically.

The graph view renders the workflow canvas in read-only mode with colour-coded node overlays:

Overlay colourStatuses
Blue (running)running, paused, interrupted
Green (completed)completed, skipped
Red (error)failed, cancelled
Amber (pending)pending, idle