Skip to content

OutputField

One column written to the output file — captured from the labeler, copied from the input, or derived by the app.

Every variant shares the keys below. Which further keys are legal depends on type.

Key Type Required Notes
type one of 9 values — see below yes Selects which shape the rest of this object takes. Every other key is validated against the variant named here.
name string yes The column name in the data file. Letters, digits, _ and -, with optional inner spaces; . [ ] * and edge whitespace are excluded. min length 1, matches ^[A-Za-z0-9_-][A-Za-z0-9_ -]*[A-Za-z0-9_-]$|^[A-Za-z0-9_-]$
display string | FieldDisplay no
fill Fill no Where this field’s value comes from. Defaults to { "kind": "user" }.
required boolean no Whether a record counts as complete without this field. Defaults by fill: something a person is asked for is required, something the app derives is not.
shortcut string no Chord that moves focus to this field’s widget, e.g. "mod+1". Unique across the whole config, and not one of the chords the app or OS reserves. matches ^(?:(?:mod|ctrl|alt|shift|meta)\+)*[A-Za-z0-9]$

A string.

Key Type Required Notes
widget "text" | "textarea" no How the field renders. Defaults to text. Only a field a person fills may name a widget.
minLength integer no Shortest accepted value, in characters. ≥ 0
maxLength integer no Longest accepted value, in characters. ≥ 0
pattern string no JavaScript regular expression the value must match. Compiled when the config loads, so a malformed pattern fails at load rather than at render.

A whole number.

Key Type Required Notes
widget "number" | "slider" no How the field renders. Defaults to number. Only a field a person fills may name a widget.
min number no Smallest accepted value, inclusive.
max number no Largest accepted value, inclusive.
step number no Increment for the number and slider widgets. A hint only, never a validity constraint — three slider clicks legitimately produce 0.30000000000000004. > 0

A number, whole or fractional.

Key Type Required Notes
widget "number" | "slider" no How the field renders. Defaults to number. Only a field a person fills may name a widget.
min number no Smallest accepted value, inclusive.
max number no Largest accepted value, inclusive.
step number no Increment for the number and slider widgets. A hint only, never a validity constraint. > 0

true / false.

Key Type Required Notes
widget "checkbox" no How the field renders. Defaults to checkbox. Only a field a person fills may name a widget.

A date; ISO-8601 on the wire.

Key Type Required Notes
widget "date" no How the field renders. Defaults to date. Only a field a person fills may name a widget.

One of a fixed set of choices.

Key Type Required Notes
widget "select" | "radio" no How the field renders. Defaults to select. Only a field a person fills may name a widget.
choices array of Choice yes The permitted values, in the order they are offered. at least 1 item

A record with named fields.

Key Type Required Notes
fields array of NestedField yes The object’s own named members. Unlike a column name, these are JSON keys from the source payload, so colons, slashes and unicode are all allowed. at least 1 item
table TableView no How an object’s fields group into displayed columns. Lives on the object type beside the fields its columns name, so it nests to any depth and covers map<_, object> as well as arrays.

A list of items.

Key Type Required Notes
widget "checkboxes" no How the field renders. Defaults to checkboxes. Only a field a person fills may name a widget.
items ValueType yes The type of every element. An array of enum is how a multi-select is declared.

A dictionary of keysvalues.

Key Type Required Notes
keys ValueType no The type of each key. Defaults to text when omitted.
values ValueType yes The type of each value.