Workflow orchestration

Compose multi-step business logic in JSON.

Branch, loop, await and fan out — parallel and sequential, sync and async — without writing orchestration code. Call SQL, REST, tools, agents or other functions, and transform data between steps with Go templates.

Step types: QUERYAPIS AGENTSTOOLSFUNCTIONS
Trigger Query parallel API Call parallel Agent Call sequential Tool sequential ƒ Result
Why eru-functions

Workflows that live in config, not code.

Most business processes are five to fifteen steps with a few branches and a couple of async waits. Writing that as a microservice every time is overkill. eru-functions runs as JSON workflows with parallel, sequential, conditional, loop and async control flow — through one engine.

Call SQL, REST, agents, tools or other functions from any step, and move data between steps with Go templates.

5
step types
4
control-flow modes
nested groups
1
engine, no glue
Core features

Workflows, the JSON way

{ }

JSON defined Step Functions

Steps — QUERY, APIS, AGENTS, TOOLS, FUNCTIONS — composed via nesting into one declarative spec.

Parallel + Sequential

Run independent branches in parallel, chain dependent steps in sequence — both in the same group.

?

Conditional steps

Run a step only when a condition matches. Handle failed consitions as ERROR, STOP or IGNORE.

Async events

Long-running steps can spin off diffrent execution thread on chosen async eventing framework like Kafka, AWS SQS and more.

Loops

Iterate any step based on previous step results — sequentially or in parallel.

Go-template transforms

Reshape request and response between steps by manipulating JSON requests and responses of previous steps.

Field redaction

Remove sensitive information or large data values before they leak into logs or next steps.

Auto generate Functions

An eru-ai Agent can produce workflow JSON based on user's prompt.

🛈

Custom headers, forms, files

Configure additional headers, query params, form data and file attachments for any function step.

Architecture

A FuncGroup, decomposed

A trigger flows into the eru-functions engine, which executes each step — drawing on five step types — then transforms and awaits as needed before emitting a single result.

Trigger http · event · cron FuncGroup engine graph executor Step execution 5 step types Transform / async ReqVars · wait_for Result + trace QUERYeru-ql API_CALL AGENT_CALL TOOL FUNCTION_CALL
Integrations

Wired to the whole platform

eru-ql queries eru-ai agents REST APIs Kafka events AWS SNS/SQS GCP Pub/Sub pg-cron schedules Go templates
Configure, don't code

A FuncGroup in JSON

No orchestration code. Add steps, branches and async waits by editing config.

funcgroup.json
// On new order: look up the company, then WhatsApp the customer
{
  "name": "order_notify_flow",
  "func_steps": {
    "fetch_company": {
      "query_name": "get_company_by_phone",
      "query_params": ["{{.Vars.OrgBody.phone_number}}"]
    },
    "notify_whatsapp": {
      "tool_name": "artfine_wa",
      "tool_action": "send_message",
      "async": true,
      "async_event": "whatsapp_dispatch",
      "condition": "{{ ne .Vars.OrgBody.phone_number \"\" }}",
      "transform_request": "{\"to\":\"{{.Vars.OrgBody.phone_number}}\",\"message\":\"Hello {{.ResVars.fetch_company.Body.entity_data.cn}}\"}"
    }
  }
}
Explore the platform

Pair eru-functions with the rest