genroc

Strongly typed open-source durable process orchestrator.

Describe a process as tasks in YAML — HTTP calls, child processes, or TypeScript you write — and genroc runs each instance to completion, surviving worker crashes, restarts and long waits without holding a thread or losing state.

Get started

write it — every expression is checked against the schemas, as you type

run it — for months, through failures, deploys and new versions

A step can be TypeScript. It is bundled and typechecked on apply, against types generated from the task’s own schemas.

  - id: greet
    action:
      type: child
      <<: "$process: ./script-node.genroc.yaml"
      input:
        code: "$import: ./greet.ts"
        input: { who: "$: input.who" }
      result_schema:
        type: object
        properties:
          greeting:
            type: string
// greet.ts
import type { Input, Output } from "./greet.genroc";

export default (input: Input): Output => {
  return {
    greeting: `hello, ${input.who}`
  }
};