Workflow Chain Engine: Free Self-Hosted Workflow Automation

Updated July 2026
Workflow Chain Engine is our open source workflow automation engine that you host yourself. Draw a flow in the browser, call an API, branch on the answer, loop over a list, end in success or fail, then trigger it from a webhook, a schedule, your own code, or a button. It is one small PHP application with one SQLite file, it runs on almost any hosting including cheap shared hosting, and every run leaves a step-by-step log you can actually read. The code is free on GitHub under the MIT license.

What Workflow Chain Engine Is

Workflow automation is the glue work of running anything online: a form submission needs to reach the CRM, an order needs a fulfillment call and a confirmation text, a daily report needs collecting and posting. Workflow Chain Engine gives that glue a home on your own server. You draw the logic once in a visual editor, and from then on the engine runs it every time the trigger fires, with every step recorded.

The engine's superpower is where it runs. The whole system is one small PHP application with a single SQLite file, no framework, no build step, and no dependency install, so it is at home on a three dollar shared host, a VPS, or a Docker container. The editor library ships inside the project, so the entire tool works on your server with nothing loaded from anyone else's. Your workflows, your credentials, and your run history all live in one folder you control and can back up by copying it.

Integration works the way the web works: any service with an HTTP API is one node away. Fill in the URL, the fields, and the headers, and the engine talks to your CRM, your payment provider, your chat webhook, your own apps, and every one of our open source engines, all in the same flow.

The project is written and maintained by Paul Crinigan of AI Apps API, and the full source lives at github.com/AIAppsAPI/Workflow-Chain-Engine.

The Visual Flow Editor

Flows are drawn, not written. Double click the canvas to add a node, pick its type, fill in its fields, and drag connections between the output and input dots. Conditions show True and False outputs, switches grow an output per case, loops show an Each Item and a Done output, so the shape of the logic is visible at a glance. Everything saves automatically as you work, and a Run Now button with inputs for your variables means the loop from "changed a node" to "watched it run" is a few seconds long.

The Six Node Types

HTTP Request is the workhorse: GET, form POST, or JSON POST to any URL, with per-node headers for API keys and a capture feature that pulls values out of the JSON response into variables. Capture total={data.total} to walk an exact path, or status={status} to find the first matching field anywhere in the response, and captured arrays feed straight into loops.

If Condition branches on a variable: equals, greater, less, contains, and length checks, with True and False paths. Comparisons understand numbers when both sides are numeric.

Switch matches a variable against any number of cases, each with its own path, plus a default path for everything else. One inbound "order type" field fans out to the right handler.

Set Variable assigns a value, and since placeholders resolve inside it, it doubles as string building: Order {orderID} for {customer}.

For Each Loop runs a chain of nodes once per item in a list, a captured JSON array or comma separated text, with {loopItem} and {loopIndex} available inside the loop body. When the last item finishes, the Done path continues the flow.

Success End and Fail End stop the run with a status and a message, and the message resolves variables too, so the caller gets back "Processed Acme, total 42" instead of a bare acknowledgement. Every field on all six is documented in the node reference.

Variables: How Data Moves Through a Flow

Each workflow declares its variables by name, customer, email, total, and they thread the whole system together. Whatever the trigger sends fills them at the start of a run, any node field can use {customer} style placeholders, HTTP nodes capture response values back into them, and the run history shows their final values when the flow ends. One flat, visible pool of data per run, which keeps even a branching flow easy to reason about, and the variables and capture guide covers the whole life cycle including the response capture syntax.

Four Ways to Trigger a Flow

Webhooks. Every workflow gets its own webhook URL secured by its own long random key, shown on the settings page and regenerable at any time. POST anything to it, the fields become variables, and the response carries the run's real result. Point a form, a store, a payment provider, or any service that can send a webhook at it.

The API. Your own code triggers a run with one authenticated POST, passing variables in the body and getting the outcome back in the response. There is also a listing endpoint that returns every workflow with its variables, which makes the engine discoverable from other systems.

Schedules. Set "run every X minutes" on any workflow. The Docker image runs the scheduler automatically, and on ordinary hosting it is one crontab line pointing at the included runner.

Run Now. A button in the admin with an input box for each declared variable, perfect for testing while you build and for flows a human kicks off on purpose. Each trigger's exact request shape is documented in triggers and webhooks.

A Run History You Can Read

Every run is recorded: trigger, status, duration, step count, and a step-by-step log of what each node did. The HTTP node logs the URL, the response status, and a response excerpt. The condition node logs the comparison it made and which way it went. The loop logs how many items it walked. The final variables are stored alongside. When a flow misbehaves at 2am, the history page tells you exactly which step did what with which data, and the fix is usually obvious in one read. The run history and debugging guide turns that read into a routine.

Loop Protection Built In

Every run has a step budget, 500 node executions by default and adjustable in the config. Each node spends one step, and a run that reaches the budget stops itself with a clear error naming the problem. That one rule makes every loop safe: the For Each node, a condition wired back to an earlier node for repeat-until behavior, any shape you can draw. Build boldly, the engine guarantees the flow ends.

Quick Start

Requires PHP 8.1 or newer with the pdo_sqlite and curl extensions, standard almost everywhere. Copy the sample config, set your API key and admin password, and either run PHP's built-in server for local work, docker compose up --build for Docker, or upload to shared hosting and point a docroot at the public/ folder. Then log into the admin, create a workflow, declare its variables, and draw your first flow. The getting started guide walks the whole path from install to a wired-up trigger.

Use Cases to Steal

Lead intake. Webhook from your form, an HTTP node enriches the lead, an If node checks the score, one branch posts to your CRM and the other adds them to a nurture list.

Daily digest. A scheduled flow GETs a stats API, loops over the rows, and posts a formatted summary to your team chat's webhook.

Order routing. Webhook from your store, a Switch on order type, each case calling a different fulfillment API, and a Fail path that alerts a human when data looks wrong.

Predict, then act. Send incoming text to our ML Prediction Engine as one HTTP node, capture the predicted label, and branch on it: spam gets dropped, billing goes to billing, an anomaly pages someone. Machine learning becomes one step in a flow you drew.

Glue between your engines. Our SMS Campaign Engine and Email Campaign Engine both have full APIs, so a single flow can score a new signup, subscribe them to the right drip series, and send the welcome text, three nodes, one webhook, all on your own servers. This is the same thinking as our broader AI automation work: systems that act on their own, with you setting the rules.

Documentation and Guides

Setup and Reference

Building Flows

The GitHub README is the fastest technical overview, and issues and contributions are welcome there.

Security Notes

Set the API key and admin password to long random strings before exposing the server, and serve over HTTPS in production. Webhook keys are per-workflow secrets, regenerate one any time and the old URL stops working instantly. Workflows run with your server's network access and node fields can hold API tokens, so give admin access the way you would give out those tokens, and back up the data folder like anything else you value.

Key Takeaway

Workflow Chain Engine puts visual workflow automation on your own server: a drag-and-drop editor, six node types that cover API calls, branching, and loops, four triggers from webhooks to schedules, a step-by-step run history, and built-in loop protection. One PHP app, one SQLite file, runs on almost any hosting, MIT licensed on GitHub.