SaaS.Dev

Field kinds and their controls

Every field type a Noun file takes, with its control in the Admin's list, record page and forms, and its JSON and Markdown renderings.

A field's declared type decides its control on each Admin screen. Each row is one type a Noun file takes, with the Lease field that uses it.

Controls

KindIn LeaseListRecord pageFormsRule
stringresidentNametexttextone-line text boxcontrol-text
textnotesleft outlong text, full widthmulti-line text boxcontrol-long-text, wide-fields
numbermonthlyRentnumbernumbernumber boxcontrol-number
integerunits, on Propertynumbernumbernumber boxcontrol-number
booleannonea check or a crossa check or a crossswitch, never refused as emptycontrol-boolean
datestartsOn, endsOndatedatedate pickercontrol-date
datetimenonethe date onlythe date onlydate picker, which edits the date onlycontrol-date
emailresidentEmail——one-line text boxcontrol-text
urllistingUrl——one-line text boxcontrol-text
moneynone——one-line text boxcontrol-text
A | Bstatustexttextone-line text boxcontrol-text
jsontermsleft outformatted JSON, full widthno inputcontrol-json, wide-fields
a Noun namepropertythe record's name, linkedthe record's name, linkedpicker that searches, never requiredreference-forward
T[]documentsleft outvalues joined by commasleft outlist-columns, form-omits-arrays
any other typenonetexttextone-line text boxcontrol-text

email, url, money and an enum each have a control rule of their own. Those 4 rules wait for code that serves them, so each kind takes control-text. A dash marks a display whose rule is not printable.

A field with no ? is required in both forms (required-input), except a boolean and a reference.

JSON rendering

Each field's kind in the Admin projection, as in /app-projection/leaseclock.json. A field carries kind only where a printable rule sets it.

KindIn the projection
string"kind": "text"
text"kind": "longText", "wide": true
number, integer"kind": "number"
boolean"kind": "boolean"
date, datetime"kind": "date"
email, url, moneyno kind
A | B"kind": "text"
json"kind": "json", "wide": true, "form": false
a Noun name"kind": "reference", "to": "Property", "shows": "name"
T[]"array": true, "form": false

PlanMarkdown rendering

In the design, every screen also renders as Markdown. Its rule, rendering-markdown, waits.

KindRenders as
stringMaya Ortiz
textthe paragraphs as written
number, integer1450
booleanyes or no
date2026-11-30
datetime2026-11-30T17:00:00Z
email<maya@example.com>
url<https://leaseclock.com/listings/14-elm-3b>
money1,450.00 USD
A | B`active`
jsona fenced json block
a Noun name[14 Elm Street](/admin/properties/property_1)
T[]one bullet per value