Workflow engines

Workflow engines orchestrate long-running tasks and data pipelines. They provide retries, scheduling and visibility, but most expect developers to write code and do not generate user interfaces. Here’s how the major engines compare to ContractSpec.

Key differences summary

EngineCore strengthsUI generation?Policy/PII enforcement?Self-host?Primary use
PrefectPython-native; dynamic DAGs adapt to change; annotate code without rewriting; strong observability and audit logsNoNoYesData pipelines and dynamic workflows.
KestraDeclarative YAML; event-driven triggers; mix of code and no-code; write logic in Python/R/Java/Julia/Ruby; deploy anywhereNoNoYesData pipelines and hybrid orchestration.
TemporalDurable execution; workflows never lose state; multi-language SDKs; automatic retriesNoNoYesDurable microservice and business workflows.
AirflowOpen-source; define workflows as Python code; schedule and monitor via UI; extensible via custom operatorsNoNoYesData ETL pipelines.
DagsterData-asset model; local testing and reusable components; built-in data quality and catalog; orchestrates AI/data pipelines across multiple toolsNoNoYesData/AI pipelines with strong observability.
HatchetModern engine focused on performance and durability; tasks and workflows as code; durable functions with guardrails and retriesNoNoYesHigh-throughput background jobs and microservices.
WindmillMulti-language scripts; auto-generates UI; integrated flow editorYes (basic)RBAC & secrets onlyYesScripts into workflows and dashboards.

Why ContractSpec differs

  • Spec-first generation – Instead of writing code, you define typed specs for capabilities, data views and workflows; the compiler outputs both back-end and front-end.
  • Policy engine – Every render and mutate passes through an ABAC/PII policy decision point.
  • Personalisation – Signed OverlaySpecs allow tenant/user-specific UI changes without touching code.
  • Unified runtime – React/React-Native rendering ensures consistent experiences across web and mobile.

Workflow engines are excellent for orchestrating back-end tasks. ContractSpec builds on this by serving complete applications with runtime policy enforcement and user personalisation via TypeScript specs.