Skip to content

Zenvara

Orchestration you can reason about. One platform for ETL, service integration, and AI workflows — compiled, validated, and self-hosted.

Zenvara serves three jobs organisations usually buy three platforms for. You describe the work in a small YAML file; Zenvara compiles it to a typed graph, runs it on schedule, logs every step, and rolls it back if something breaks partway through.

Move data between systems

Read from one place, shape it, write to another. Relational joins, change detection, and SQL-like filtering are first-class — ETL without the glue code.

Call any service

HTTP/OpenAPI, SOAP/WSDL, GraphQL, SFTP, S3, Kafka, and every major SQL and NoSQL database — each one a typed, audited, retryable step.

Run AI as a pipeline step

Claude, ChatGPT, and Gemini are native operators with typed inputs and outputs — not plugins. An LLM call composes like a database query.

Reason about every run

Compiled YAML catches reference and type errors before invocation. Every write operator carries a compensating action, so failed runs self-roll-back.

Pull yesterday’s orders from Postgres, ask Claude to summarise them, email the result — three operators, three steps, one file:

status: active
environment: prod
input:
date: !str
steps:
- $orders:
invoke: postgresql.query
on: warehouse
with:
Query: "SELECT id, customer, total FROM orders WHERE order_date = '${date}'"
- $summary:
invoke: claude.call
with:
Prompt: "Summarise these orders in two paragraphs:\n${orders.rows}"
- $email:
invoke: email.send
on: smtp
with:
From: noreply@example.com
To: [accounting@example.com]
Subject: "Daily order summary for ${date}"
Body: "${summary.content}"

References between steps — ${orders.rows}, ${summary.content} — are checked at compile time, before the flow ever runs. The same file runs against dev, staging, or production by changing the environment at invocation; nothing in the flow names a host or a credential.