Schema & keys
Tungsten uses one ordinary JSON format for the editor and your application.
{
"schemaVersion": "sprout",
"form": [
{
"type": "text",
"key": "name",
"view": {
"label": "Your name"
},
"validators": [
{
"kind": "required"
}
]
}
]
}Common scalar settings
| Property | Contract |
|---|---|
type | Registered field type; field_type is a legacy alias. |
key | Unique canonical key. Nonempty dot-separated ASCII letters, digits, underscores and hyphens. |
view | Label plus optional description, placeholder and renderer-specific presentation metadata. |
current_value | Schema default in the field’s domain: scalar/null, select string array, or file-reference object. Repeater defaults are arrays of items. |
validators | Array of type-owned validators. Duplicate kinds, unknown properties and conflicting bounds are rejected. |
rules | Ordered conditions and actions that act on this field. |
bindings | Optional value/options source references; requests are defined separately in dataSources. |
hidden | Initial visibility, false by default. Hidden values are retained and submitted but do not block validation. |
errors | Initial behavior errors; runtime validation errors are derived separately. |
Explicit structure
Groups use subform; repeaters use template. Every declaration inside either uses its full namespace, such as contact.email or people.children.name. Core never silently prefixes keys.
Component keys are unique across fields, groups and repeaters. Structural nesting is limited to 24 levels. A group owns no value; a repeater projects its concrete leaf values as an array.
Bindings and type settings
Type-specific settings live directly on the field: text variant/textarea, boolean variant/options, select multiple/options, date mode/timeZone, and file upload/limits. Core validates these settings for their registered type rather than treating arbitrary JSON as executable behavior.
{
"type": "select",
"key": "region",
"bindings": {
"options": {
"source": "regions",
"params": {
"country": {
"ref": "country"
},
"status": {
"value": "active"
}
}
}
}
}Bindings reference named dataSources passed separately to the form. The schema contains no API credentials or fetch functions. Use value bindings for loaded field values and options bindings for select/radio choices. See Data sources for apply modes, response extraction, and validation.
Portable output
Static fields submit under flat canonical keys. Repeater items contain nested objects and child arrays. Navigation, visibility and errors are not submitted as values.