[A-Z][A-Z0-9_]*. The
KEEL_ prefix is reserved for the metadata Keel injects into every run.
Required, optional, and defaults
Variables are required unlessrequired: false. A default satisfies a
required variable without any input, and pre-fills the form.
The form makes the distinction visible at a glance:
- A red asterisk marks fields that need input — required, with no default.
- optional marks fields with
required: false. - Fields with a default show neither; the default applies when left blank.
${NAME:-} in steps. Booleans are the
exception: an unset boolean resolves to false.
Types
The type decides the form control and the validation:
Details for each are in the variable types reference.
Validation
validation adds constraints beyond the type: a regular expression the whole
value must match (with a custom message), numeric bounds, and length
bounds. The form shows the constraints under the field before you type, so
nobody has to guess the format, and the same rules run again on save and on
deploy. See the validation reference.
Secrets
secret: true marks a value as sensitive. Secrets are encrypted at rest
(AES-256-GCM), rendered as password fields that never echo the saved value,
masked as ••• wherever they appear in run logs, and never printed by
keel deploy. A saved secret can be left blank on the form to keep it, or
overwritten with a new value. Secrets cannot have defaults, and boolean and
select variables cannot be secret. The secrets guide
follows a value from form to log.
Deploy-time variables
Most variables are configuration — set once per target and reused. A variable withdeploy_time: true is asked for every time a deploy starts,
in a modal, and applies to that run only. Use it for choices that change per
run: an image tag, a plan-versus-apply switch, a destroy confirmation. See
Deploy-time and conditional variables.
Conditional variables
when: gates a variable on another variable’s value. While the condition
does not hold, the variable is inactive: disabled in the form (re-enabled
live as values change), never required, and not exported into the run.
Conditions chain and are validated for cycles and impossible comparisons.
See the conditions reference.
Layout
With many variables,groups, row, and flex organize the form into
collapsible sections and side-by-side fields. Without them, the form is one
variable per line in document order. See Organize large forms.
Documentation
label, description (Markdown), placeholder, and the manifest block’s
why and how are what the person filling in the form — or reading the
generated manifest — actually sees. Write them for that person. See
Variable manifests.