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