What you’ll learn: how fields work: types, required and unique, default values, and text transforms.What you’ll build: three user-input fields on the
Marketing model: campaign_name (Text), launch_date (Date), destination_url (URL).Prerequisites: Part 2: Create your governance model.Why this matters
Fields are the atoms of Terminus Hub. Everything else (picklists, taxonomies, computed URLs) either produces a field, references a field, or wraps a field. Getting the first three right sets the shape of every campaign record you create: campaigns need a name, a launch date, and a destination URL. The settings you choose now (required, unique, lowercased, underscored) are what make later steps likeutm_campaign assembly reliable.
Concepts first
Fields are defined once, on the model
A field is a definition on the governance model. Any taxonomy in the same model can reference it. You will see this pay off in Part 8, when the samecampaign_name field appears on all three taxonomies without being redefined. This part only creates the definitions. Nothing is connected to a taxonomy yet.
User-input versus computed fields
Field types split into two families. User-input fields (Text, URL, Date, Dropdown) accept a value a person types or picks. Computed fields (Concatenation, Tagged URL, Short URL, QR Code, Auto Number, Random, Constant, Terminus ID) are generated by the system from other fields, so a submitter never types their value directly. This part adds three user-input fields. Part 7 adds the computed chain on top of them.There is no generic “number” or “true/false” field type. A sequential counter is the Auto Number computed type, and a fixed value is the Constant computed type. See the field reference for the full catalog.
Common field settings
A few settings show up on most user-input fields:- Required: a submission with this field blank cannot be approved.
- Unique: two approved records in the same taxonomy cannot share the same value.
- Default: the starting value when someone opens a new row.
- Description: help text shown to the submitter under the field.
Text transforms
Text fields can reshape whatever the user types before it is stored. Two transforms matter for this tutorial:- Case set to lowercase (
transform_case: lowercase): “Black Friday 2026” becomesblack friday 2026. - Spaces set to replace with underscore (
transform_spaces: replace_underscore):black friday 2026becomesblack_friday_2026.
campaign_name = "Black Friday 2026" is stored as black_friday_2026. That is what makes it safe to drop into a URL in Part 7 without manual cleanup.
Step by step
Create campaign_name (Text)
Name:
campaign_name. Type: Text. Turn on Required and Unique. Under the text transforms, set Case to lowercase and Spaces to replace with underscore. Save. The field appears in the model’s field list.Worked example: a user types Black Friday 2026. The transforms fire in order, case first (black friday 2026), then spaces (black_friday_2026). The stored value is black_friday_2026.Create launch_date (Date)
Create another field. Name:
launch_date. Type: Date. Build the display format from the date components in the order year, month, day, with no separator, so a date renders as 20261115. Set Default to today and Earliest allowed date to today. Save. The new field appears below campaign_name.Screenshot coming soon: Part 3 field list.
Check your work
- Three fields exist on the
Marketingmodel:campaign_name,launch_date,destination_url. campaign_nameis Text with required, unique, lowercase, and replace-spaces-with-underscore set.launch_dateis Date, formatted year-month-day with no separator (so20261115), withtodayas both the default and the earliest allowed date.destination_urlis URL and accepts onlyhttpsaddresses.- None of the fields are connected to a taxonomy yet. That happens in Part 8.
What you just built
The model has its first three fields. None are computed and none are on a form yet. They are sitting in the shared field library, waiting to be referenced.Gotchas
- Field type cannot change after the field is created. If you picked the wrong type, delete the field and create it again. There is no “change type” control.
- Required with no default means the submission cannot be approved until a value is entered.
launch_datesidesteps this because its default istoday.campaign_namehas no default, so the submitter must type something. - Lowercase applies to the stored value, not just the display. Once saved, the value really is lowercase, and computed fields downstream see the transformed version, not the original.
- A URL field that allows only
httpsrejectshttp://input at validation time. This is deliberate: tagged URLs should not fall back to insecure destinations.
Next up
Part 4: Static picklists. Create theGoals picklist and its goal dropdown field. For everything a field type can do, see the field reference.