--- title: "What is a workflow?" description: "Understand the core mental model behind FlowDrop before writing any code." source: https://flowdrop.io/docs/concepts/what-is-a-workflow site: FlowDrop documentation --- # What is a workflow? FlowDrop is a **visual workflow editor** — a UI component that lets users build directed graphs of processing steps by dragging, connecting, and configuring nodes on a canvas. Before diving into code, it's important to understand the mental model. ## The four primitives Every workflow in FlowDrop is built from four core concepts: ### Nodes A **node** is a single step in the workflow. It represents an action, decision, or data transformation — for example, "Send an HTTP request", "Run an LLM prompt", or "Route based on condition". Each node has: - A **type** that determines its visual appearance (default, simple, square, tool, gateway, terminal, idea, note) - **Metadata** describing its name, icon, category, and capabilities - **Configuration** — user-editable settings defined by a JSON Schema ### Edges An **edge** is a connection between two nodes. It defines the flow of data or control from one step to the next. Edges have **categories** that determine their visual style and semantic meaning: - **data** — standard data flow (default) - **trigger** — event-based activation - **tool** — tool invocation from an agent - **loopback** — feedback loops ### Ports A **port** is a typed connection point on a node. Nodes have **input ports** (receiving data) and **output ports** (sending data). Ports represent the **runtime data** that flows between nodes during execution — the actual payloads that one node passes to the next. Each port has a **data type** (e.g., `string`, `json`, `file`, `trigger`). FlowDrop enforces **type-safe connections** — you can only connect ports with compatible data types. For example, an LLM node might have: - An input port of type `string` that receives the user's prompt - An output port of type `json` that emits the model's response Ports are **unique to each connection** — every edge carries its own data between a specific pair of nodes. ### Config **Configuration** is different from ports. While ports carry runtime data that varies with each execution, config holds **shared settings** that apply consistently across all runs of the workflow. Config values are defined by a [JSON Schema](/editor/config-schema) and edited through a form UI when users click on a node. They control _how_ a node behaves rather than _what_ data it processes. For example, the same LLM node might have config fields for: - **Model name** — which LLM to use - **Temperature** — how creative the responses should be - **Max tokens** — the response length limit These values don't change from request to request — they're decisions the workflow author makes once, and every execution of the workflow uses them. **Ports vs. config — a quick rule of thumb.** **Ports** = "What data flows through at runtime?" (dynamic, per-execution) **Config** = "How is this node set up?" (static, set once by the workflow author) ## How it all fits together **Ports carry runtime data; config holds settings.** Each node has typed **ports** for runtime data and **config** for workflow-level settings. An **edge** connects an output port to an input port, defining data flow. Config values stay the same across executions; port data changes every time. A workflow is a **graph**: nodes are the vertices, edges are the connections, ports define where connections attach, and config controls what each node does. ## What FlowDrop does (and doesn't do) FlowDrop is a **frontend editor**. It handles: - Visual canvas with drag-and-drop, zoom, pan - Node palette and sidebar for discovery - Connection drawing with type-safe port validation - Configuration forms generated from JSON Schema - Workflow serialization to JSON - Undo/redo, auto-save drafts, import/export FlowDrop does **not** handle: - **Execution** — It doesn't run your workflows. You need your own backend execution engine. - **Storage** — It calls your REST API to persist workflows. You provide the database. - **Business logic** — Node behavior is defined by your backend, not by FlowDrop. Think of it this way: > **FlowDrop owns the UI. You own the logic.** FlowDrop gives users a beautiful way to _design_ workflows. Your backend gives those workflows _meaning_. ## The frontend–backend contract FlowDrop communicates with your backend through a REST API. The contract is simple: 1. **Your backend tells FlowDrop what nodes exist** — by serving node metadata (name, ports, config schema) 2. **Users build workflows visually** — FlowDrop handles all the UI 3. **FlowDrop sends the workflow JSON to your backend** — for storage and execution ``` ┌──────────────┐ REST ┌──────────────┐ │ FlowDrop │───API────▶│ Your Backend │ └──────────────┘ └──────────────┘ ``` For a detailed breakdown of this architecture, see [Architecture Overview](/concepts/architecture-overview). ## When to use FlowDrop FlowDrop is a good fit when you need: - A **visual, no-code interface** for building multi-step processes - **AI agent workflows** with branching, tool use, and human-in-the-loop - **Data pipelines** with configurable transformations - **Automation builders** where non-technical users define business logic - **Any application** where users need to compose processing steps visually ## Next steps - [Architecture Overview](/concepts/architecture-overview) — how all the pieces fit together - [Installation](/start/quickstart) — get FlowDrop into your project - [Tutorial](/tutorials/01-embedding-the-editor) — build your first workflow editor step by step