---
title: "Components"
description: "Key Svelte components exported by FlowDrop."
source: https://flowdrop.io/docs/editor/reference/components
site: FlowDrop documentation
---
# Components
Browse every component interactively — props, states, and variants — in the FlowDrop Storybook.
## Editor components
### `App`
Full-featured application wrapper with sidebar, editor, navbar, and config panel.
```svelte
```
| Prop | Type | Default | Description |
| ---------------- | ---------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `workflow` | `Workflow` | — | Initial workflow to load |
| `nodes` | `NodeMetadata[]` | — | Available node types (overrides API fetch) |
| `endpointConfig` | `EndpointConfig` | — | API endpoint configuration |
| `authProvider` | `AuthProvider` | — | Authentication provider |
| `height` | `string \| number` | `'100vh'`| Editor height |
| `width` | `string \| number` | `'100%'` | Editor width |
| `showNavbar` | `boolean` | `false` | Show the top navbar |
| `disableSidebar` | `boolean` | `false` | Hide the node sidebar |
| `mode` | `'edit' \| 'readonly' \| 'locked'` | `'edit'` | Interaction mode; `'readonly'`/`'locked'` disable all canvas editing |
| `showSettings` | `boolean` | `true` | Show settings gear in navbar |
| `showStatus` | `boolean` | `true` | Show the "Connected" status indicator in the navbar |
| `navbarTitle` | `string` | — | Custom title in navbar |
| `navbarActions` | `NavbarAction[]` | — | Custom action buttons in navbar |
| `pipelineId` | `string` | — | Pipeline ID for execution status display |
| `theme` | `FlowDropTheme \| FlowDropThemeName` | — | Visual theme — named built-in (`'default'`/`'minimal'`) or a custom theme object |
| `on*` handlers | see below | — | Flat lifecycle callbacks: `onBeforeSave`, `onAfterSave`, `onSaveError`, `onApiError`, `onWorkflowLoad`, `onBeforeSwap`, `onAfterSwap` |
| `features` | `FlowDropFeatures` | — | Feature flags |
| `instance` | `FlowDropInstance` | — | Per-instance state container; defaults to context, then the page-default instance |
The `` component takes flat `on*` event props. The grouped `eventHandlers` object is the **mount** API only — see [Event Handlers](/editor/reference/event-handlers).
### `WorkflowEditor`
Core canvas component using SvelteFlow. Renders nodes and edges with drag-and-drop, zoom, pan, and minimap. It reads its nodes, edges, and dimensions from the instance state container rather than from props.
```svelte
```
| Prop | Type | Default | Description |
| ------------------- | ---------------------------------- | -------- | ---------------------------------------------------------------------------------- |
| `endpointConfig` | `EndpointConfig` | — | API configuration |
| `mode` | `'edit' \| 'readonly' \| 'locked'` | `'edit'` | Interaction mode; `'readonly'`/`'locked'` disable all canvas editing |
| `openConfigSidebar` | `(node: WorkflowNode) => void` | — | Callback invoked when a node is clicked to open its config panel |
| `pipelineId` | `string` | — | Pipeline ID for fetching node execution status |
| `refreshTrigger` | `number` | `0` | Increment to force a re-fetch of node execution status from the server |
| `consoleOpen` | `boolean` | — | Whether the bottom console panel is open |
| `onToggleConsole` | `() => void` | — | Callback to toggle the console panel |
| `instance` | `FlowDropInstance` | — | Per-instance state container; defaults to context, then the page-default instance |
### `NodeSidebar`
Left sidebar displaying available node types organized by category.
```svelte
```
| Prop | Type | Default | Description |
| ------------------ | ---------------- | ------- | --------------------------------------------- |
| `nodes` | `NodeMetadata[]` | `[]` | Node types to display |
| `selectedCategory` | `NodeCategory` | — | Pre-select a category filter |
| `activeFormat` | `WorkflowFormat` | — | Filter nodes by workflow format compatibility |
### `UniversalNode`
Dynamic node wrapper that resolves and renders the correct node component based on type. Automatically injects `NodeStatusOverlay`. Used internally by the editor.
## Node components
All node components accept `NodeComponentProps` from the registry:
| Component | Type | Description |
| ----------------------- | -------------- | ------------------------------------------------ |
| `WorkflowNodeComponent` | `workflowNode` | Full-featured node with input/output port lists |
| `SimpleNode` | `simple` | Compact layout with header, icon, description |
| `SquareNode` | `square` | Minimal icon-only square design |
| `ToolNode` | `tool` | Agent tool node with badge indicator |
| `GatewayNode` | `gateway` | Conditional branching with multiple output ports |
| `TerminalNode` | `terminal` | Circular start/end node |
| `NotesNode` | `note` | Sticky note with markdown content |
See [Node Types](/editor/node-types) for visual examples.
## Form components
### `SchemaForm`
Renders a form from JSON Schema definition.
```svelte
{
/* handle change */
}}
/>
```
### `ConfigForm`
Configuration form with support for dynamic schemas, template variables, and external edit links.
| Prop | Type | Default | Description |
| ------------------ | ------------------------- | ------- | -------------------------------------------- |
| `node` | `WorkflowNode` | — | Node to configure (derives schema/values) |
| `schema` | `ConfigSchema` | — | Direct JSON Schema (alternative to `node`) |
| `uiSchema` | `UISchemaElement` | — | Layout definition for the form |
| `values` | `Record` | — | Configuration values |
| `showUIExtensions` | `boolean` | `false` | Show UI extension fields |
| `workflowId` | `string` | — | For dynamic schema and variable API requests |
| `workflowNodes` | `WorkflowNode[]` | — | All nodes (for template variable resolution) |
| `workflowEdges` | `WorkflowEdge[]` | — | All edges (for template variable resolution) |
| `authProvider` | `AuthProvider` | — | Auth for API requests |
| `onChange` | `function` | — | Called on any field change |
| `onSave` | `function` | — | Called when form is saved |
| `onCancel` | `function` | — | Called when form is cancelled |
### `ConfigPanel`
Generic panel wrapper for displaying details and a configuration form.
| Prop | Type | Default | Description |
| ------------- | -------------- | ------- | --------------------- |
| `title` | `string` | — | Panel title |
| `id` | `string` | — | Entity identifier |
| `description` | `string` | — | Description text |
| `details` | `DetailItem[]` | — | Key-value detail rows |
| `configTitle` | `string` | — | Config section title |
| `onClose` | `function` | — | Close callback |
| `children` | `Snippet` | — | Slot for form content |
### Field components
| Component | Schema Match | Description |
| -------------------- | ------------------------------ | ----------------------------------------------------- |
| `FormTextField` | `type: "string"` | Text input |
| `FormTextarea` | `format: "multiline"` | Multi-line text |
| `FormNumberField` | `type: "number"` / `"integer"` | Number input |
| `FormToggle` | `type: "boolean"` | Toggle switch |
| `FormSelect` | `enum` or `oneOf` | Select dropdown |
| `FormCheckboxGroup` | `enum` + `multiple: true` | Checkbox group |
| `FormRangeField` | `format: "range"` | Range slider |
| `FormArray` | `type: "array"` | Dynamic array editor |
| `FormCodeEditor` | `format: "json"` | JSON/code editor (requires `form/code`) |
| `FormTemplateEditor` | `format: "template"` | Template editor with variables (requires `form/code`) |
| `FormMarkdownEditor` | `format: "markdown"` | Markdown editor (requires `form/markdown`) |
## Display components
### `MarkdownDisplay`
Renders markdown content using the `marked` library.
```svelte
```
## Playground components
### `Playground`
Full interactive playground with chat interface and session management.
| Prop | Type | Default | Description |
| ------------------ | ------------------ | -------------- | ---------------------------------- |
| `workflowId` | `string` | — | Workflow to test (required) |
| `workflow` | `Workflow` | — | Pre-loaded workflow data |
| `mode` | `PlaygroundMode` | `'standalone'` | `'standalone'` or `'embedded'` |
| `initialSessionId` | `string` | — | Resume a previous session |
| `endpointConfig` | `EndpointConfig` | — | API configuration |
| `config` | `PlaygroundConfig` | — | Playground options |
| `onClose` | `function` | — | Close callback (for embedded mode) |
| `instance` | `FlowDropInstance` | — | Per-instance state container; defaults to context, then the page-default instance |
### Interrupt components
| Component | Interrupt Type | Description |
| -------------------- | -------------- | ----------------------------------------- |
| `InterruptBubble` | All | Container that renders the correct prompt |
| `ConfirmationPrompt` | `confirmation` | Yes/No approval |
| `ChoicePrompt` | `choice` | Selection from options |
| `TextInputPrompt` | `text_input` | Text entry |
| `FormPrompt` | `form` | JSON Schema form |
| `ReviewPrompt` | `review` | Field change review with diffs |
## Settings components
### `ThemeToggle`
Button to cycle through light/dark/auto themes.
```svelte
```
### `SettingsPanel`
Tabbed settings interface for managing user preferences across categories (theme, editor, UI, behavior, API). Can be embedded anywhere in your layout.
```svelte
{
/* handle change */
}}
onClose={() => {
/* handle close */
}}
/>
```
| Prop | Type | Default | Description |
| ------------------ | -------------------- | -------------- | ------------------------------------------------------------------------------------ |
| `categories` | `SettingsCategory[]` | All categories | Which tabs to display. Options: `"theme"`, `"editor"`, `"ui"`, `"behavior"`, `"api"` |
| `showSyncButton` | `boolean` | `true` | Show the "Sync to Cloud" button in the footer |
| `showResetButton` | `boolean` | `true` | Show the reset/reset-all buttons in the footer |
| `onSettingsChange` | `function` | — | Called when any setting changes with `(category, values)` |
| `onClose` | `function` | — | Close callback (also renders a "Close" button in the footer) |
| `class` | `string` | — | Custom CSS class |
### `SettingsModal`
Modal dialog wrapper around `SettingsPanel`. Provides backdrop, close-on-escape, and open/close animations.
```svelte
```
| Prop | Type | Default | Description |
| ------------------ | -------------------- | -------------- | ------------------------------------ |
| `open` | `boolean` | `false` | Whether the modal is open (bindable) |
| `categories` | `SettingsCategory[]` | All categories | Which tabs to display |
| `showSyncButton` | `boolean` | `true` | Show the "Sync to Cloud" button |
| `showResetButton` | `boolean` | `true` | Show the reset buttons |
| `onClose` | `function` | — | Called when the modal is closed |
| `onSettingsChange` | `function` | — | Called when any setting changes |
| `class` | `string` | — | Custom CSS class for the modal |
#### Hiding features
To hide the cloud sync button (e.g. for self-hosted deployments):
```svelte
```
To show only specific settings categories:
```svelte
```
#### Vanilla JS / `mountFlowDropApp`
When using the vanilla JS mount API, pass settings modal options via `FlowDropMountOptions`:
```javascript
import { mountFlowDropApp, createEndpointConfig } from '@flowdrop/flowdrop';
const app = await mountFlowDropApp(document.getElementById('editor'), {
endpointConfig: createEndpointConfig('/api/flowdrop'),
showSettings: true,
// Customize the settings modal
settingsCategories: ['theme', 'editor', 'ui'], // hide Behavior & API tabs
showSettingsSyncButton: false, // hide "Sync to Cloud"
showSettingsResetButton: true // show reset (default)
});
```
| Option | Type | Default | Description |
| ------------------------- | -------------------- | -------------- | ------------------------------------------- |
| `showSettings` | `boolean` | `true` | Show the settings gear icon in the navbar |
| `settingsCategories` | `SettingsCategory[]` | All categories | Which tabs to display in the settings modal |
| `showSettingsSyncButton` | `boolean` | `true` | Show the "Sync to Cloud" button |
| `showSettingsResetButton` | `boolean` | `true` | Show the reset buttons |
## Status components
| Component | Description |
| ------------------- | ----------------------------------------------------------------------- |
| `NodeStatusOverlay` | Displays execution status on nodes (pending, running, completed, error) |
| `StatusIcon` | Color-coded status icon |
| `PipelineStatus` | Full pipeline execution view with logs sidebar |
## Component hierarchy
```text
App
├── Navbar (Logo, workflow name, save/export, custom actions)
├── NodeSidebar (search, category groups, draggable node cards)
├── WorkflowEditor (SvelteFlow canvas)
│ └── UniversalNode
│ ├── NodeStatusOverlay
│ └── [Node Component] (WorkflowNode, SimpleNode, etc.)
└── ConfigSidebar
└── ConfigForm (JSON Schema form with template variables)
```