UTL-X is an open-source, format-agnostic functional transformation language. Write your transformation once — run it on XML, JSON, CSV, YAML, and OData.
%utlx 1.0 input xml ← change to json, csv, yaml output json --- { invoice: { id: "INV-" + $input.Order.@id, date: $input.Order.@date, customer: { name: $input.Order.Customer.Name, email: $input.Order.Customer.Email }, items: $input.Order.Items.Item |> map(item => { sku: item.@sku, qty: parseNumber(item.@quantity), total: parseNumber(item.@quantity) * parseNumber(item.@price) }), total: sum($input.Order.Items.Item |> map(i => parseNumber(i.@qty) * parseNumber(i.@price))) } }
From a one-liner in your terminal to a production pipeline handling millions of messages — UTL-X scales with you.
-e '.name' -rcat data.xml | utlxUTLXe communicates via piped I/O over Protobuf. Any language with a Protobuf implementation — which is essentially all of them — can integrate natively. Your code stays in your language. UTLXe handles the transformation.
Native binaries for all platforms — no JVM required.
Everything DataWeave does — without the MuleSoft contract. Everything jq does — for all formats, not just JSON.
| Feature | UTL-X | DataWeave | XSLT | jq |
|---|---|---|---|---|
| Format agnostic (XML, JSON, CSV, YAML, OData) | ✓ | ✓ | XML only | JSON only |
| Open source | ✓ AGPL-3.0 | ✗ | ✓ | ✓ |
| Native binary (<100ms startup) | ✓ | ✗ | ~ | ✓ |
| Functional programming (map, filter, reduce) | ✓ | ✓ | ✗ | ✓ |
| Strong type system | ✓ | ✓ | ✗ | ✗ |
| 650+ stdlib functions | ✓ | ~ | ~ | Limited |
| Production engine with Kafka / Dapr | ✓ | ✓ | ✗ | ✗ |
| Schema transformation (XSD ↔ Avro ↔ Protobuf) | ✓ | Partial | ✗ | ✗ |
| No vendor lock-in | ✓ | MuleSoft only | ✓ | ✓ |
Join the open-source alternative to DataWeave. Free to use, free to fork, free forever.