Skip to main content
Any string in a node’s config can contain a placeholder written ${...}. The server resolves placeholders just before the node runs, from message data, an allow-list of settings, or a secret store. This keeps secrets out of stored workflow definitions and lets one definition adapt to its input.
The placeholder syntax is pre-beta and may change before v0.1.0.

Sources

A placeholder that cannot be resolved against the message returns an empty value. If a node’s configuration cannot be resolved at all, that message fails like any other plugin failure, so retries and error routing apply.
The option names depend on the plugin; see External I/O.

Interpolation and types

  • When a value is exactly one placeholder, such as "${payload.count}", the type is preserved: a number stays a number.
  • When a placeholder is part of a longer string, such as "Build ${payload.build}", the result is text.
  • To force a type, add a suffix: ${payload.secs:int}. Supported suffixes are int (or integer), long, double (or float), bool (or boolean) and string.
Write numeric options as typed placeholders so the server can read them. An option whose value is unknown until a message arrives, such as a timeout, is re-timed when the first message comes in; see Time limits.

Environment and system values

Workflows can read only a short list of server values, because a server holds more than secrets: Names that look like secrets (containing PASSWORD, PASSWD, SECRET, TOKEN, CREDENTIAL, PRIVATE or KEY) stay blocked even if you list them. Use the secret store for those. Reading a name that is not allowed fails the message with a clear error.

Secrets

Write a secret as decrypted:name. The default secret provider reads the environment variable YUKTA_SECRET_<NAME> (the name is upper-cased), so secret values never appear in a stored definition, in versions or in logs of the definition.
A secret that is not found fails the message.

Expressions

Several plugins take an expression instead of a plain value: branch cases, filter predicates, mapper projections and loop exit conditions. Expressions read the message through payload and metadata:
Expressions can call only a short list of safe methods. Scripts in the mapper plugin run with a time limit and a statement limit. See Transform and Routing and flow control for the syntax each node accepts, and Security for the limits.