Coming from Temporal or LangGraph

For developers who know Temporal or LangGraph and want to find their footing in Dwarf quickly.

From Temporal

TemporalDwarfNotes
Workflow definitionGraphA declarative graph of tasks and transitions instead of imperative code, so nothing is replayed and there are no determinism constraints.
Workflow executionFlow
ActivityTaskA plain function, reached by URL through your host.
WorkerYour application, with the engine embeddedThere is no separate Temporal Service to run.
Task queueYour hostThe host decides how each task URL is reached.
Retry policyf.RetryCalled by the task, which decides what is retryable.
Timerf.Sleep
SignalResumeDelivers input to a task waiting in f.Interrupt.
QuerySnapshotReads a flow’s status and state.
Child workflowSubgraph
Continue-as-newContinueStarts a new flow from a completed flow’s final state. Your application keeps the chain of flow keys.
Versioning and patchingFrozen graphsEach flow keeps the graph it started with. See Graph Evolution.
Visibility and search attributesListOpen and ListClosedFilter 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 fairnessPriority 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

LangGraphDwarfNotes
StateGraphGraph
NodeTaskCan run in Python behind your host. See Tasks in Other Languages.
Edge, START, ENDTransition, entry point, workflow.End
Conditional edgewhen or switch transitions
SendforEach fan-out
State reducersReducersDeclared per field with SetReducer.
CheckpointerBuilt inEvery step is persisted to the SQL database.
thread_idA chain of flows linked by ContinueThere 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 resumef.Interrupt and Resume
SubgraphSubgraph
Time travel from a checkpointFork

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.