Develop with Kotlin
Application code depends on one module, orchestration-api. It contains the whole port:
| Type | Role |
|---|---|
Orchestrator | start work, get a RunHandle back; run, start, handle |
Runner | the worker side: register handlers and flows for a queue, start() |
TaskType, TaskHandler, TaskContext | one unit of work |
FlowType, FlowDefinition, FlowScope | a durable program |
RunOptions, TaskOptions, RetryPolicy | budgets and policies |
RunHandle, FlowHandle, RunStatus, RunState | what you hold after starting |
Two engines implement it:
orchestration-engine: the orchestrator, over the wire. Production.orchestration-memory: the same port in-process, no server. Tests, and the proof that the port is engine-neutral.
Both pass the same 40-test contract, shipped as test fixtures of the api module.