Skip to content

Latest commit

 

History

History
54 lines (48 loc) · 8.59 KB

File metadata and controls

54 lines (48 loc) · 8.59 KB

Comparison with Alternatives

Elixir Workflow Engines

Aspect PgFlow Oban Oban Pro Workflow Broadway Gust Handoff Reactor FlowStone Durable Journey
License Open source Open source Paid Open source Open source Open source Open source Open source Open source Open source
Focus Cross-language workflow DAGs, jobs and cron Background jobs with cron DAG workflows for Oban Kafka/SQS data pipelines Airflow-like DAGs with UI Distributed cluster DAGs Saga orchestration+rollback Asset-first ETL pipelines Temporal-style workflows Durable graph workflows
Coordination Database (pgmq) Database (Oban) Database (Oban) In-memory (GenStage) Application (Elixir) Erlang cluster In-process Database (Oban) Database (PostgreSQL) Database (PostgreSQL)
Signal Strategy Polling + LISTEN/NOTIFY Polling + NOTIFY Polling + NOTIFY Demand-based (GenStage) Manual poll Distributed messages In-process Oban-based Polling Polling
Dependencies First-class depends_on Manual enqueue First-class deps Pipeline stages downstream option Explicit args refs Spark DSL argument First-class depends_on Pipeline (sequential) Explicit list in compute
Fan-out/Fan-in Built-in map steps Manual Built-in patterns Partitioned batches Manual task chains Manual DAG build Manual composition Partition-based ForEach with concurrency Manual composition
State Storage PostgreSQL (durable) PostgreSQL (durable) PostgreSQL (durable) In-memory PostgreSQL In-memory In-memory PG/S3/Parquet PostgreSQL (durable) PostgreSQL (durable)
Cross-platform Yes (TS + Elixir) Yes (Elixir + Python) Yes (Elixir + Python) Elixir only Elixir only Elixir only Elixir only Elixir only Elixir only Elixir only
Compensation Retry with backoff Retry with backoff Retry + dep options N/A Retry Max retries Full saga undo Retry (via Oban) Saga rollback + retry Retry with recovery
Scheduling Built-in cron DSL (pg_cron) Built-in Oban.Cron Built-in Oban.Cron N/A Built-in cron N/A N/A Via Oban Built-in cron Built-in tick nodes
Web UI Optional LiveView dashboard Oban.Web (paid) Oban.Web (paid) N/A Included N/A N/A LiveView dashboard N/A CLI introspection + analytics
Resource-aware No No No Demand-based No Yes (cost maps) No No No No
Dynamic steps No N/A Yes (grafting) N/A No No Yes (runtime) No Yes (branching) Yes (conditional logic)

Other Workflow Engines

Aspect PgFlow Temporal Inngest DBOS Trigger.dev Vercel Workflows
License Open source OSS + Cloud OSS + Cloud OSS + Cloud OSS + Cloud Paid hosted
Focus Cross-language workflow DAGs, jobs and cron Durable execution platform Event-driven step functions Lightweight PG workflows Durable serverless tasks AI agent workflows
Coordination Database (pgmq) Temporal Service Inngest engine PostgreSQL checkpoints Durable containers Vercel queues
Signal Strategy Polling + LISTEN/NOTIFY Long polling Webhook / polling Event-driven Webhook Event-driven
Dependencies First-class depends_on Sequential in code Step functions Decorators (@step) triggerAndWait Step isolation
Fan-out/Fan-in Built-in map steps Parallel activities Promise.all() steps DAG depends_on batchTriggerAndWait Parallel steps
State Storage PostgreSQL (durable) Event History Managed persistence PostgreSQL checkpoints Container state Event log + replay
Cross-platform Yes (TS + Elixir) Go, Java, TS, Python TS, Python, Go TS, Python TypeScript TypeScript
Compensation Retry with backoff Full saga rollback Auto-retry + backoff Auto-retry + recovery Auto-retry Deterministic replay
Scheduling Built-in cron DSL (pg_cron) Built-in timers + cron Built-in schedules Cron via Schedule Built-in queueing Sleep (min to months)
Web UI Optional LiveView dashboard Temporal Web UI Included dashboard Included dashboard Included dashboard Vercel dashboard
Resource-aware No Worker scaling Serverless No Serverless Serverless
Dynamic steps No Yes (signals/queries) Yes (branching) Yes (decorators) Yes Yes (hooks)