Skip to content

Field settings

Select a field in the builder to edit it in the Field settings panel on the right.

The field settings panel A settings panel for one field: a field key, a label, help text, a required checkbox, a section dropdown, a type-specific Range section with min, max, and decimals, and a Show this field when condition. Numbered markers point at the shared settings, the type-specific options, and the condition. FIELD SETTINGS Field key length_mm Label (English) Length (mm) Help text (optional) Fork length Required RANGE Min Max Decimals SHOW THIS FIELD WHEN Species is trout 1 2 3
Every field has shared settings, type-specific options, and an optional condition that controls when it shows.
  1. Field key: a short snake_case identifier, unique within the survey type. It is how the value is stored, so it is worth keeping stable.
  2. Label: the field’s name, in English (required) and optionally French and Spanish.
  3. Help text (optional): a hint shown beneath the field, in the same languages.
  4. Required: whether the field must be filled in.
  5. Capture tool: the on-device camera tool this field offers during collection (scan a barcode or tag, and more as they arrive), or none. See Choose a capture tool below.
  6. Section: which section the field belongs to, if you use sections.

Below these, the panel shows type-specific options: a range for a number, the choices for a single or multiple choice, the geometry kind for a location, and so on. See Field types for what each type offers.

When you collect with the voice helper (see AI-assisted data collection), a field can offer a camera tool, so you point the camera at the thing itself instead of typing. The Capture tool setting decides which tool a field offers:

  • Barcode / tag scan: read a barcode or QR code, for an id or tag field.
  • Measure: read a length from a photo. It needs a one-time calibration per device first (Settings, Measurement calibration), where you photograph a reference of known length so the app learns the scale.
  • Identify species, Read text (OCR): being added, and will work when they are ready.
  • None: no camera tool, which is the default for most fields.

The builder pre-fills a suggestion from the field, for example a barcode for a “specimen tag” field or none for a notes field. Confirm it or change it. Collection reads this setting as you set it, so it never guesses a tool from the field’s name: a notes or date field shows no scan button unless you ask for one.

A long form reads better in sections. In the builder, open Sections (optional) and choose Add section, then give the section a title (in your languages). Assign a field to a section from its Section setting. Fields with no section render together at the top. Removing a section leaves its fields in place, just ungrouped.

Every field has a Show this field when setting. Leave it on “Always show”, or pick another field and a condition, so the field appears only when that condition is met. For example, show a “number of redds” field only when “species” is a salmon, or show a “mortality cause” field only when “alive” is no.

The form evaluates these conditions live as you enter data, hiding and showing fields as the answers change, and it only validates and saves the fields that are visible.

A Decimal number field can carry a unit of measure, so the crew enters in the unit they work in while the value is stored in one canonical unit. This keeps stored data and exports consistent no matter what unit was typed.

What you configure:

  • The canonical (storage) unit, for example m.
  • The accepted units, each with a conversion factor (one entered unit equals this many canonical units, so 1 fm = 1.8288 m) and an optional offset for affine scales like Fahrenheit.
  • The default entry unit the form opens in.
  • Optional physical minimum and maximum bounds.

On the form the field then shows a value box plus a unit selector. Someone can type a depth in fathoms and CensusIO stores it in metres, and switching the selector re-expresses the same measurement. The value reads back in the entry unit everywhere it is shown.

Numbers are stored plainly (the value alone, no separators) and shown in the reader’s own language. By default a number groups thousands and shows the decimals it needs, so a count reads 1,234 in English and 1 234 in French. The Display section on a Whole number or Decimal number field lets you adjust two things, and both are display only: they never change what is stored.

  • Group thousands. On by default. Turn it off for a field where a separator would be wrong, like a year or a sequence number, so 2026 does not read as 2,026.
  • Least and most decimals. Pad a value to a fixed number of decimal places (a weight that should always read 2.50, not 2.5) and round the shown value to at most that many. This is separate from the Range decimal limit, which only rejects an entry with too many places; padding for display is set here.

An empty number box hints its shape as ### for a whole number or ###.# for one decimal, in the locale’s decimal mark, so a person sees how many decimals it takes before typing.

A Text field can carry an entry mask for a formatted identifier such as a phone number, a permit, or a tag id. Write the shape with 9 for a digit, a for a letter, # for either, and any other character as a literal shown in place. For example (999) 999-9999 shows as (___) ___-____ and accepts ten digits.

What is stored is the filled positions alone (4155551234), so the value stays comparable and exportable no matter how it was typed, and any pattern rule you set still checks that stored value. A half-filled mask is reported as an error, not accepted as a shorter value.

Turn this on for an identifier that no two records should share (a marker, buoy, or tag number). It is available on Text, Whole number, and Decimal number fields.

  • Unique among: choose All records of this type, or Records of the same trip (which uses the type’s Trip field to scope the check; the builder warns if the type has no Trip field).
  • Released when (optional): pick a field and a value at which a record gives its value up, so the value can be reused. For example, an abandoned deployment releases its marker for the next one.

Saving a value another record already holds is blocked in the web app and on import. Records synced from field devices are never blocked (field data is never stranded); instead the Data check flags a value two records ended up holding, for review. On a field device (the desktop and mobile apps), capturing a value that another record on that device already holds shows a warning so the collector notices, but it never blocks the save (the device sees only its own records, so the Data check remains the authority across the whole team).

A point Location field can fill itself from the device’s GPS when the form opens, so a collector at a station does not type coordinates by hand. Turn on Auto-fill from device GPS in the Location field’s settings. When the field opens empty in the web or desktop app, it reads the device position once (it asks permission the first time) and records it, along with how accurate the fix was. The Use my location button stays available to capture again.

This is a field setting, offered for point locations (it captures a single position, so it does not apply to a line or shape). It reads the device’s own GPS; a later release can bind other position instruments.

A point Location field can warn (or block) when its point sits too far from the point in another Location field of the same record, which catches a mistyped coordinate (an instrument logged far from where the gear went in).

What you set:

  • The other Location field to measure from.
  • The limit in metres.
  • The severity: a warning that still lets the record save, which is the default, or an error that blocks it.

The check stays quiet unless both points are present. Prefer a warning if any location on the form can be hidden by a condition, so it never blocks a save against a value the collector cannot see.

This is field configuration, so there is no separate rule to write. You edit it in the Location field’s settings (via the builder, or the survey type JSON with a maxDistanceFrom block):

{ "field": "start_position", "limitM": 926, "severity": "warning" }