Every verb that takes options, outputs or callbacks takes one structure named after it, as uform_text_encode takes a uform_text_encode_t.
Fields open in the same order everywhere: the handle, executor, outcome and completion, then inputs, then outputs and the arena they land in, then knobs, and last progress and stats.
Structures carry no size or version field, so initialize them by designator, which zeroes every field left out, and expect the major version to change whenever one grows.
Name lookups and the _free family stay positional, and a _free of NULL is safe.