# FlowDrop

**Workflow Orchestration for Drupal**

FlowDrop is the workflow orchestration module for Drupal. It gives you everything you need to **create, manage, run, and track** flows — and more capabilities are added as the orchestration story grows. Visual, code-free, and fully integrated with the entities, users, and content you already have.

Where simple event-driven automation hides data flow behind keywords/configs, FlowDrop makes every connection explicit: typed ports, visible edges, traceable executions. The graph *is* the specification, the execution engine, and the audit trail in one.

- **Project page**: https://www.drupal.org/project/flowdrop
- **Issue queue**: https://www.drupal.org/project/issues/flowdrop
- **Documentation**: See the [`docs/`](docs/index.md) directory or the project page

## Requirements

- Drupal 11.2+
- PHP 8.2+

## Installation

```bash
composer require drupal/flowdrop
drush en flowdrop
```

See [docs/getting-started/installation.md](docs/getting-started/installation.md) for full setup instructions.

## What FlowDrop Does

FlowDrop covers the full lifecycle of workflow orchestration:

### Create & Edit

A drag-and-drop visual editor with typed ports, color-coded data types, and visible edges. 25+ built-in nodes for data processing, control flow, entity operations, HTTP, and AI. Branching gateways, loops, and nested workflows built in.

### Manage

Workflows are standard Drupal **configuration entities** — exportable to YAML, versionable in git, and deployable across dev/stage/prod with `drush cex/cim`. Node Types let site builders configure pre-set node variants without touching code.

### Run

Three execution modes for any workload:

- **Synchronous** — immediate, in-request execution
- **Asynchronous** — queue-based background processing
- **StateGraph** — checkpointed, resumable execution for chat, loops, and human-in-the-loop

Event-driven **triggers** start flows automatically on entity changes, user events, or cron. **Human-in-the-loop** nodes pause execution for confirmations, choices, or free-text input.

### Track

Every run produces a **pipeline** record with one **job** per node — what ran, what data went in, what came out, how long it took, what failed. Real-time monitoring and per-node inspection in the admin UI.

## Modules

| Module | Description |
|--------|-------------|
| `flowdrop` | Core module — workflow entity, node processors, REST API |
| `flowdrop_orchestration` | Orchestration plugin system, contracts, and helper services powering workflow execution |
| `flowdrop_node_type` | Config entity for defining and configuring available workflow node plugins |
| `flowdrop_node_category` | Config entity for grouping node types into logical sections in the editor palette |
| `flowdrop_node_processor` | Built-in node processor plugin library |
| `flowdrop_workflow` | Workflow management and REST API endpoints |
| `flowdrop_workflow_executor` | Workflow execution engine (sync, async, stateful) |
| `flowdrop_runtime` | Runtime execution engine — queue-based processing and real-time execution monitoring |
| `flowdrop_pipeline` | Pipeline entity tracking the execution state of a complete workflow run |
| `flowdrop_job` | Async job queue integration |
| `flowdrop_session` | Session and message management for interactive workflow execution |
| `flowdrop_trigger` | Event-driven workflow triggers |
| `flowdrop_stategraph` | Stateful orchestration via LangGraph-style state graphs |
| `flowdrop_interrupt` | Human-in-the-loop interrupt handling |
| `flowdrop_playground` | Interactive workflow playground UI |
| `flowdrop_ui_components` | Svelte-based UI components (editor, form fields) |
| `flowdrop_orchestration_connector` | External orchestrator integration |

## Development

```bash
# Install dependencies
ddev composer install

# Run tests
ddev phpunit

# Check coding standards
ddev phpcs
```

See [docs/development/](docs/development/) for developer guides including how to create custom node processors and triggers.

## License

GPL-2.0-or-later. See [core/LICENSE.txt](core/LICENSE.txt).
