Tiny, Portable State
Serialized state is a compact JSON journal of results — no closure snapshots, no opaque heap dumps. Store it anywhere.
Write long-running orchestration in JavaScript. Suspend, serialize, and resume — potentially days later, in a different process.
var workflow = new WorkflowEngine();
workflow.RegisterSuspendFunction("sleep", args => DurationParser.Parse(args[0]));
workflow.RegisterStepFunction("fetchOrder", args => orderService.GetOrder((string)args[0]!));
workflow.RegisterSuspendFunction("getApproval");
var script = """
async function processOrder(orderId) {
const order = await fetchOrder(orderId); // journaled step
await sleep('3d'); // suspends for 3 days
const approved = await getApproval('manager', orderId);
return approved ? 'shipped' : 'cancelled';
}
""";
var result = workflow.RunWorkflow(script, "processOrder", "ORD-001");
// result.Status == Suspended, result.Suspension.ResumeAt == 3 days from now
var json = result.State!.Serialize(); // persist anywhere
// ... 3 days later, in a different process
var resumed = workflow.ResumeWorkflow(script, json);