Distributed Workflow Orchestration Engine

Reliable workflows,observed in real time.

EventFlow runs multi-step backend jobs as directed acyclic graphs across distributed workers — with retries, dead-letter recovery, immutable versioning, and live execution monitoring. Infrastructure software, not an automation clone.

The Problem

Multi-step jobs don't fit a request.

Long-running work — API calls, waits, branching, transforms, webhooks — outlives the HTTP request/response lifecycle it's often trapped in.

When a step fails, you need to know exactly which one, why, how many times it retried, and whether it was recovered or abandoned.

Tools like Airflow and Temporal are powerful but heavy. Spinning them up to run a five-node job is disproportionate.

EventFlow keeps the serious parts — distributed execution, retries, DLQ, crash recovery, live state — in a small, legible core.

How It Works

From JSON definition to live execution.

Six stages, each with explicit, auditable state. The engine assumes jobs may run more than once and is built around idempotency and recovery.

01

Define

Author a workflow as a JSON DAG. The backend validates nodes, edges, executor types, and rejects cycles.

02

Version

A validated definition is stored as an immutable version, ready to execute repeatedly and reproducibly.

03

Execute

Start an execution. Root nodes become execution records; ready nodes publish to Redis Streams.

04

Distribute

Workers consume jobs through a consumer group, run the matching executor, and transition state in PostgreSQL.

05

Recover

Successful nodes unlock downstream nodes. Failures retry per policy, then dead-letter. Crashed workers are recovered.

06

Observe

Every transition is auditable and streamed live over WebSocket to the dashboard.

Capabilities

Everything a real orchestrator needs.

Distributed execution

Nodes run across multiple worker processes coordinated through Redis Streams consumer groups. Scale out by starting more workers.

Retries & dead-letter recovery

Per-node retry policies with exponential backoff. Exhausted failures move to a dead-letter queue for inspection and manual replay.

Crash recovery

Worker heartbeats and stuck-job claiming mean a killed worker mid-job is recovered by another. At-least-once delivery by design.

Immutable versioning

Every saved workflow becomes an immutable version. Running executions never change when a definition is edited.

Live observability

WebSocket-driven execution detail. Watch node state transitions, logs, and worker activity stream in as the system operates.

Extensible executors

HTTP, delay, condition, transform, and webhook nodes ship built-in. New node types register through a small executor registry — no arbitrary code.

Core Concepts

The vocabulary of the engine.

A small set of primitives composes into reliable, observable automation.

Workflow
Logical automation owned by a client.
Version
Immutable definition used by executions.
Execution
One run of one workflow version.
Node
A single step in the workflow DAG.
Executor
Module responsible for a node type.
Worker
Process consuming jobs and running nodes.
DLQ
Queue for jobs that exhaust retries.
Stream
Redis queue of ready node jobs.

Define a workflow. Watch it run.

Connect your instance with an API key and start orchestrating distributed jobs with full visibility into every node transition.