Schema & keys

Tungsten uses one ordinary JSON format for the editor and your application.

JSON
{
  "schemaVersion": "sprout",
  "form": [
    {
      "type": "text",
      "key": "name",
      "view": {
        "label": "Your name"
      },
      "validators": [
        {
          "kind": "required"
        }
      ]
    }
  ]
}

Common scalar settings

PropertyContract
typeRegistered field type; field_type is a legacy alias.
keyUnique canonical key. Nonempty dot-separated ASCII letters, digits, underscores and hyphens.
viewLabel plus optional description, placeholder and renderer-specific presentation metadata.
current_valueSchema default in the field’s domain: scalar/null, select string array, or file-reference object. Repeater defaults are arrays of items.
validatorsArray of type-owned validators. Duplicate kinds, unknown properties and conflicting bounds are rejected.
rulesOrdered conditions and actions that act on this field.
bindingsOptional value/options source references; requests are defined separately in dataSources.
hiddenInitial visibility, false by default. Hidden values are retained and submitted but do not block validation.
errorsInitial 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.

JSON
{
  "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.