Coming from Temporal or LangGraph
For developers who know Temporal or LangGraph and want to find their footing in Dwarf quickly.
From Temporal
| Temporal | Dwarf | Notes |
|---|---|---|
| Workflow definition | Graph | A declarative graph of tasks and transitions instead of imperative code, so nothing is replayed and there are no determinism constraints. |
| Workflow execution | Flow | |
| Activity | Task | A plain function, reached by URL through your host. |
| Worker | Your application, with the engine embedded | There is no separate Temporal Service to run. |
| Task queue | Your host | The host decides how each task URL is reached. |
| Retry policy | f.Retry | Called by the task, which decides what is retryable. |
| Timer | f.Sleep | |
| Signal | Resume | Delivers input to a task waiting in f.Interrupt. |
| Query | Snapshot | Reads a flow’s status and state. |
| Child workflow | Subgraph | |
| Continue-as-new | Continue | Starts a new flow from a completed flow’s final state. Your application keeps the chain of flow keys. |
| Versioning and patching | Frozen graphs | Each flow keeps the graph it started with. See Graph Evolution. |
| Visibility and search attributes | ListOpen and ListClosed | Filter by status, workflow, task, fairness key, time and free text. Closed flows are listed from the archive, kept for the retention. |
| Task queue priority and fairness | Priority and fairness keys |
The main shift is where orchestration logic lives. In Temporal it is code that the server replays; in Dwarf it is a graph, with loops, conditions, fan-out and computed jumps, and anything more complex goes in a task, which is plain code. See Building Graphs.
From LangGraph
| LangGraph | Dwarf | Notes |
|---|---|---|
StateGraph | Graph | |
| Node | Task | Can run in Python behind your host. See Tasks in Other Languages. |
Edge, START, END | Transition, entry point, workflow.End | |
| Conditional edge | when or switch transitions | |
Send | forEach fan-out | |
| State reducers | Reducers | Declared per field with SetReducer. |
| Checkpointer | Built in | Every step is persisted to the SQL database. |
thread_id | A chain of flows linked by Continue | There is no thread id: each turn is a flow, and your application keeps the chain by continuing the key the last Continue returned. |
interrupt() and resume | f.Interrupt and Resume | |
| Subgraph | Subgraph | |
| Time travel from a checkpoint | Fork |
The programming models are close, so porting a graph is mostly a mechanical translation. The difference is at runtime: Dwarf recovers crashed steps on its own, spreads one flow’s parallel branches across replicas, and needs no separate server to run in production. See How Dwarf Works.
Next: About.