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.
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: activeenvironment: 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.