Reshape data in the pipeline — no glue code.

Every action can reshape what it returns with an ordered post_transforms pipeline — extract, rename, filter, aggregate, hash, encrypt — declaratively, before the data reaches the next step or the client. No mapping layer, no function in the middle to maintain.

An ordered pipeline, not a mapping layer

post_transforms is an ordered list of functions that run in sequence on an action's result — each step's output feeds the next. Pull a nested value out, keep only the fields you want, filter rows on a condition, group and aggregate — all as readable config you can review in a pull request.

Enrich and secure inline

Transforms aren't only for shaping. The same pipeline can hash or encrypt a field, generate a password, or sign a JWT — so sensitive data is protected before it's ever stored or returned, without a separate service in the path.

Composes with flow control

Transforms shape the data; flow control decides what runs. Branch on an assertion, gate a step on whether earlier ones succeeded, retry with backoff, and keep durable state between runs — the automation those transforms feed into. Together they're a full pipeline in one declarative config.

Reviewable, traced, no code

Because a transform is config rather than code, it's diffable in a pull request and it ships the same OpenTelemetry traces and Prometheus metrics as everything else — so you can see exactly what each step did to the data, rather than guessing inside a black-box mapping function.

Frequently asked questions