> For the complete documentation index, see [llms.txt](https://codifi-fdm.gitbook.io/codifi-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codifi-fdm.gitbook.io/codifi-docs/web-app/composition-builder/fields-and-field-types.md).

# Fields & Field Types

A **field** is a single piece of data in an archetype — a text input, a number, a date, a dropdown. Fields are the smallest unit of Composition design; everything else (archetypes, sections, repeaters) is structure around them.

Codifi supports a fixed catalog of field types. Picking the right type matters: the type determines validation, UI rendering, sorting behavior, report formatting, and whether the field can be referenced by Ripple formulas.

***

## Field type catalog

| Type                         | Use for                                            | Notes                                                                                                          |
| ---------------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| **SingleLine Text**          | Names, codes, titles, anything fitting on one line | The only valid type for an archetype's title field. Has a CharLimit — minimum 100 (lower values are rejected). |
| **MultiLine Text**           | Descriptions, narratives, free-form notes          | Cannot be used as a title field.                                                                               |
| **Numeric (Integer)**        | Counts, IDs, year                                  | No decimal points.                                                                                             |
| **Numeric (Decimal)**        | Measurements, percentages, coordinates             | Configure `DecimalCount` to set the precision.                                                                 |
| **Date — SingleDate**        | One-time events                                    | Returns a single ISO date.                                                                                     |
| **Date — DateRange**         | Start/end dates                                    | Returns `{StartDate, EndDate}`. **Required type for Project Details date fields.**                             |
| **Date — with Time**         | When time-of-day matters                           | Optional toggle on SingleDate / DateRange.                                                                     |
| **Dropdown — single-select** | Standard pick-one                                  | Needs `AllowMultiSelect: false`. References a Value List.                                                      |
| **Dropdown — multi-select**  | Pick-many lists                                    | `AllowMultiSelect: true`. Value comes back as a JSON array; in mobile crews see chips.                         |
| **RadioButton**              | Visible pick-one (2–5 options)                     | References a Value List or uses inline options. Shows all options as radio buttons.                            |
| **CheckBox**                 | Boolean pick-many                                  | Use only when each option is independently true/false (not mutually exclusive).                                |
| **Media Upload**             | Inline media attachment                            | Less common than per-archetype media galleries; use galleries by default.                                      |

> **Screenshot placeholder:** *The field-type picker in the Library field editor, showing each type with a one-line description.*

***

## Field settings (the things that trip up new composers)

Each field type has its own set of settings in the editor. The rules below are strict — Codifi won't save a field with an invalid combination.

| Setting                | Applies to              | What to know                                                                                                                                            |
| ---------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Character limit**    | SingleLine Text         | **Minimum 100.** Lower values won't save.                                                                                                               |
| **Decimal places**     | Numeric (Decimal)       | Required. Usually 0, 1, 2, or 3.                                                                                                                        |
| **Allow multi-select** | Dropdown                | Toggle on for multi-select, off for single-select. Default is off.                                                                                      |
| **Required**           | All                     | Whether the field must have a value before the Record is "complete."                                                                                    |
| **Placeholder text**   | Text, Numeric           | Hint text shown in the empty field.                                                                                                                     |
| **Tooltip / Info**     | All                     | Hover or tap explanation shown next to the field label.                                                                                                 |
| **Is title field**     | One field per archetype | Marks this as the archetype's title field. Must also be SingleLine Text.                                                                                |
| **Read-only**          | All                     | When on, end users can't type into the field — used for Ripple-computed values.                                                                         |
| **Value formula**      | All                     | A Ripple formula that auto-fills the field. See [Ripple — Value Formulas](/codifi-docs/cross-platform-features/ripple/value-formulas.md).               |
| **Visibility formula** | All                     | A Ripple formula that shows or hides the field. See [Ripple — Visibility Formulas](/codifi-docs/cross-platform-features/ripple/visibility-formulas.md). |

***

## Naming fields

Every field has two names:

* **`name`** — internal, must be unique across the tenant Library. Prefix with Composition / state code for disambiguation: `TX_HR_Title`, `NE_Stratum_Depth`.
* **`label`** — user-facing, displayed in the form, on chips, in reports. Just the clean human label: "Title," "Depth Below Datum."

Don't combine them. Internal name = how the Library indexes the field; label = what users see.

***

## When fields are shared across archetypes

Just like archetypes, fields are referenced by ID and shared across the Library. Two archetypes that both have a "Date Recorded" field share the *same* field — editing it on one updates it everywhere.

This is fine when the field genuinely means the same thing in both contexts. **Clone the field when:**

* The label or attributes differ between contexts.
* Renaming one would confuse users in the other.
* You'll attach a different Ripple formula in different contexts.

***

## Repeater fields

Most fields hold one value per Record. **Repeaters** are the exception — they hold a list of rows, each row containing the same set of sub-fields. Soil horizons are the classic example:

```
Soil Profile (record)
└── Horizon (repeater)
    ├── Row 1: Top=0, Bottom=20, Texture=Sand
    ├── Row 2: Top=20, Bottom=45, Texture=Loam
    └── Row 3: Top=45, Bottom=80, Texture=Clay
```

Repeaters live as a section inside an archetype. Each row of the repeater is a mini-form with its own field instances. Ripple formulas inside a repeater operate per-row by default.

> **Screenshot placeholder:** *A repeater section in the archetype editor, showing the column-configuration UI.*

> **For crews in the field:** see [Mobile: Repeaters](/codifi-docs/mobile-app/creating-records/understanding-archetypes-and-relationships.md) for the field-side view. The mobile app supports "Duplicate and Edit" for repeater rows — a power move when most rows are minor variations.

***

## Ripple-powered fields

Many fields aren't filled in by users — they're computed by **Ripple**, Codifi's formula engine. Two patterns to know:

**Calculated value (read-only):** Set a value formula (for example, *length × width*) and mark the field as **read-only**. The field auto-fills based on other field values and users can't edit it. Use this for totals, areas, derived metadata.

**Pre-fill from parent, allow override (editable):** Set a value formula that reads from the parent Record (for example, the parent's *project\_name*) and **leave the field editable**. Ripple fills the field only when it's blank, so a user's edit sticks once they type something. Use this for sensible defaults a crew member can adjust.

> The formula editor in the field settings provides building blocks for these patterns — you don't write the underlying expression by hand. See [Ripple — Value Formulas](/codifi-docs/cross-platform-features/ripple/value-formulas.md) for the available operators, and [Real-World Examples](/codifi-docs/cross-platform-features/ripple/examples.md) for common patterns including the pre-fill-from-parent setup.

***

## Common save errors

Field configurations that Codifi won't save:

* **CharLimit below 100 on SingleLine Text.** Use 100 or higher.
* **Dropdown without an AllowMultiSelect setting.** Even if you want single-select, choose the option explicitly.
* **Decimal field without a DecimalCount.** Required even for decimals that behave like integers (DecimalCount: 0).
* **MultiLine Text marked as the title field.** The title field must be SingleLine Text.
* **Project Details with only SingleDate.** Project Details needs a DateRange field — see [Project Details](/codifi-docs/web-app/composition-builder/project-details.md).

When you hit a save error, the editor highlights the field that's blocking save. Fix that one first.

After saving, check the mobile preview to confirm rendering matches your intent before wiring Ripple formulas around the field.

***

## Performance notes

* Compositions with **200+ fields** start to feel slow on mobile devices, especially old iPads. Aim for tighter Compositions with repeaters for bulk data.
* **Multi-select dropdowns with 100+ options** also slow down rendering. Split into multiple cascading dropdowns when the option list is huge.
* **Ripple formula chains** that depend on each other cascade per save — prefer flat dependencies where possible.

***

## Related

* [Archetypes & Relationships](/codifi-docs/web-app/composition-builder/archetypes-and-relationships.md) — what holds these fields
* [Project Details](/codifi-docs/web-app/composition-builder/project-details.md) — the special archetype with stricter field rules
* [The Library](/codifi-docs/web-app/composition-builder/library.md) — how fields are shared and cloned across Compositions
* [Ripple — Operations Reference](/codifi-docs/cross-platform-features/ripple/reference.md) — every operator available for value and visibility formulas
* [Mobile: Capturing Data](/codifi-docs/mobile-app/creating-records/the-record-creation-screen.md) — how crews enter values for these fields in the field
