Field Types & Properties

Every field type the entry sheet supports, and every key its properties column accepts.

Properties Reference — every key, at a glance

This is the complete set of keys the properties column accepts, across every field type. Only include the keys relevant to a field's own ui_smarttable_element — an unrecognized key is simply ignored, and an empty/missing properties value is always valid (the field just uses its plain default rendering).

KeyApplies toAccepts
comma_separatornumber"none", "indian", "international"
number_scalenumber"none", "num_thousands", "num_lakhs", "num_crores", "num_millions", "num_billions", "num_trillions"
num_fraction_digitsnumberInteger — fixed decimal places
formatdate, month, timeA format-token string — see Date & Time Formatting below
display_ascheckboxA label string to show only when TRUE on the display/PDF sheet (e.g. {"display_as": "Verified"} shows "Verified" when checked, blank when unchecked). Only affects Display & Header Sheet rendering of a <pa_ID>/<pa_ID_oN> placeholder — the entry form itself always shows a plain checkbox regardless of this key.
min_rows / max_rowsTable groups only — see the callout belowInteger — minimum/maximum rows for the whole table, set on the group's first column only
table_nameTable groups onlyA label string shown above the table's grid (e.g. {"table_name": "Materials Used"}). Set on the group's first column only, same as min_rows/max_rows — ignored on any other column of the same table_no.
columnWidthAny field used as a table columnA number — percentage of the table's available width for that one column (e.g. {"columnWidth": 20} for 20%). Set per column, unlike min_rows/table_name — every column that should get a specific width needs its own value. If no column in the table sets this, all columns auto-size instead; but the moment any column sets it, every column switches to a fixed width — a column left without columnWidth then falls back to a flat minimum (not a proportional share of the remaining space), so mixing set and unset columns in the same table can look uneven. There's also a hard floor of roughly 80px regardless of how small a percentage computes to.
root_dirtextAn absolute server-side directory path (e.g. {"root_dir": "/mnt/shared/templates"}). Turns the plain text input into a Browse Files button that opens a folder picker rooted at that path — the user navigates the server's directory tree and picks a file or folder, and its full path is stored as the field's text value. This does not upload anything; it only references an existing path already present on the server.
ℹ️ Field types with no properties keys textarea and attachment don't read anything from properties — leave the column empty for these. Attachment limits are their own dedicated column (attachment_max_count) on the entry sheet, not part of properties. A table field's own row/column layout is configured through the row/table/table_no entry-sheet columns, not through properties either — each column of a table is just a regular field (of any type in this list) marked to repeat.

Field Type Reference (ui_smarttable_element)

Every value ui_smarttable_element actually accepts — 12 in total, confirmed against the renderer dictionary itself rather than assumed from naming conventions.

TypeRenders AsOptions / Properties
textSingle-line text inputproperties: optional root_dir (see Properties Reference above) — turns the input into a server-side file/folder picker instead of a plain text box
textareaMulti-line text input
numberNumeric input with min/max validationproperties: {"comma_separator": "indian", "number_scale": "num_lakhs", "num_fraction_digits": 2} — all optional; omit a key to leave that aspect unformatted. Applies wherever the value is shown (entries table, display, print, PDF).
dateDate-only picker (no time component)properties: {"format": "dd/MM/yyyy"} — optional
monthNative month/year picker, no day component (value stored as YYYY-MM) — for a field like "Reporting Month" where a specific day doesn't applyproperties: {"format": "MMM-yyyy"} — optional
timeDespite the name, this renders a full date-and-time picker (<input type="datetime-local">), not a time-only control. There is no separate datetime key — this is it.properties: {"format": "dd/MM/yyyy HH:mm"} — optional
dropdownSingle-select dropdownallowed_data (own column, not properties): Option A, Option B
multi_select_dropdownMulti-select with checkboxesallowed_data: Tag 1, Tag 2, Tag 3
radio_buttonRadio button group (circles)allowed_data: Yes, No, N/A
button_groupThe exact same one-of-many choice as radio_button, rendered as a row of toggle buttons instead of radio circles — purely a visual variant, same allowed_data formatallowed_data: Yes, No, N/A
checkboxBoolean toggleproperties: optional display_as (see Properties Reference above) — affects display/PDF rendering only
attachmentFile upload only (no text input)
💡 When the stored value shouldn't equal the displayed label allowed_data also accepts a JSON array of {"value":..., "label":...} objects instead of a plain comma list — useful when what gets saved (e.g. an internal code) should differ from what the user sees in the option list.
💡 Table fields aren't a ui_smarttable_element value A "table" (Handsontable multi-row grid) isn't one of the 12 types above — it's a group of regular fields (any type in this list, one per column). Every field sharing the same table_no becomes one column of the same table; there's no separate JSON list of columns anywhere. To cap how many rows the table allows or give it a label, put min_rows/max_rows/table_name in the properties of that group's first field only (the one entered first in the sheet, by row order) — the app reads them from there and ignores the same keys on any other column of the same table. To size an individual column, set columnWidth instead — that one's the opposite: it goes on each column that needs a specific width, not just the first. See Entry Sheet — Column Reference for the table/row/table_no columns themselves.
💡 Autofill / Relational Lookups A dropdown/multi-select field's options can also be pulled live from another (relational) smarttable instead of a fixed list — including a linked-field auto-populate behavior. This is not configured in the entry sheet's properties column — it's configured afterward in the app itself, per field, from SmartTable Settings. See Autofill Configuration for the full setup steps.

Number Formatting (properties, for number fields)

KeyDescriptionValues
comma_separatorDigit grouping stylenone, indian (12,34,567), international (1,234,567)
number_scaleScales large numbers down with a unit suffix. Falls back to the next smaller unit if the value doesn't reach the chosen one.none, num_thousands (k), num_lakhs (L), num_crores (Cr), num_millions (M), num_billions (B), num_trillions (T)
num_fraction_digitsFixed number of decimal places to show0, 1, 2, ...
💡 Example {"comma_separator": "indian", "number_scale": "none", "num_fraction_digits": 0} turns 1234567 into 12,34,567. Leave a field's properties empty to show plain numbers as-is.

Date & Time Formatting (properties, for date/month/time fields)

Set a format key to control how the value is displayed — in the entries table, on Display/Print, and in exported PDFs — independent of how it's stored internally.

TokenMeaningExample
yyyy4-digit year2026
MMM3-letter month nameAug
MMMMFull month nameAugust
MM2-digit month08
dd2-digit day26
HH2-digit hour, 24-hour14
hh2-digit hour, 12-hour02
mm2-digit minute05
ss2-digit second09
aAM/PM markerPM
💡 Examples {"format": "MMM-yyyy"} shows Aug-2026. {"format": "dd/MM/yyyy HH:mm"} shows 26/08/2026 14:05. {"format": "hh:mm a"} shows 02:05 PM. Leave properties empty to use the field's default format.