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

One ai connector with typed inputs and outputs — not a plugin. The model vendor is a connection field, so an LLM call composes like a database query and switches provider without a flow rewrite.

Reason about every run

Compiled YAML catches reference and type errors before the flow ever runs. Every write connector carries a compensating action, so failed runs self-roll-back.

Pull yesterday’s orders from Postgres, ask the configured AI provider to summarise them, email the result — three connectors, three steps, one file:

Terminal window
status: active
using:
- environment/prod
- zenvara/postgresql
- zenvara/ai
- zenvara/email
input:
date: !str
output:
report: !str
steps:
- $orders:
invoke: postgresql.query
on: warehouse
with:
Query: "SELECT id, customer, total FROM orders WHERE order_date = '${date}'"
- $summary:
invoke: ai.call
on: ai
with:
Prompt: "Summarise these orders in two paragraphs:\n${orders.rows}"
- $email:
invoke: email.send
on: smtp
with:
Subject: "Daily order summary for ${date}"
Body: "${summary.content}"
- return:
report: "${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 run time; nothing in the flow names a host or a credential.

Last updated: