ObjectOS LogoObjectOS

Metadata Format Specification

ObjectOS uses strict YAML schemas for defining application metadata. This document specifies the complete format for object definitions.

Object Schema

Basic Structure

name: <string> # Required: Internal API name (snake_case)
label: <string> # Optional: Human-readable display name
description: <string> # Optional: Object description
icon: <string> # Optional: Icon name (from icon library)
enable_api: <boolean> # Optional: Enable API endpoints (default: true)
enable_audit: <boolean> # Optional: Enable audit logging (default: false)

fields:
  <field_name>:
    type: <field_type> # Required: Field data type
    label: <string> # Optional: Display label
    description: <string> # Optional: Help text
    required: <boolean> # Optional: Is field required (default: false)
    unique: <boolean> # Optional: Must be unique (default: false)
    default: <any> # Optional: Default value

permission_set:
  allowRead: <boolean|array> # Who can read records
  allowCreate: <boolean|array> # Who can create records
  allowEdit: <boolean|array> # Who can edit records
  allowDelete: <boolean|array> # Who can delete records

Example: Complete Object Definition

name: contacts
label: Contact
description: Customer and prospect contact information
icon: user
enable_api: true
enable_audit: true

fields:
  first_name:
    type: text
    label: First Name
    required: true
    max_length: 100

  last_name:
    type: text
    label: Last Name
    required: true
    max_length: 100

  email:
    type: email
    label: Email Address
    unique: true
    required: true

  phone:
    type: text
    label: Phone Number
    pattern: '^\+?[1-9]\d{1,14}$'

  birthdate:
    type: date
    label: Birth Date

  account:
    type: lookup
    label: Account
    reference_to: accounts
    on_delete: set_null

  is_active:
    type: boolean
    label: Active
    default: true

  status:
    type: select
    label: Status
    options:
      - value: active
        label: Active
      - value: inactive
        label: Inactive
      - value: pending
        label: Pending
    default: pending

permission_set:
  allowRead: true # Everyone can read
  allowCreate: ['sales', 'admin'] # Sales and admin can create
  allowEdit: ['sales', 'admin'] # Sales and admin can edit
  allowDelete: ['admin'] # Only admin can delete

Field Types Reference

Text Fields

text

Short text field (up to 255 characters).

field_name:
  type: text
  label: Title
  max_length: 100 # Optional: Maximum length
  min_length: 3 # Optional: Minimum length
  pattern: '^[A-Za-z]+$' # Optional: Regex pattern

textarea

Long text field (unlimited length).

description:
  type: textarea
  label: Description
  rows: 5 # Optional: Display rows

email

Email address field with validation.

email:
  type: email
  label: Email Address
  unique: true

url

URL field with validation.

website:
  type: url
  label: Website

phone

Phone number field.

phone:
  type: text
  label: Phone
  pattern: '^\+?[1-9]\d{1,14}$'

Numeric Fields

number

Integer or decimal number.

quantity:
  type: number
  label: Quantity
  min: 0 # Optional: Minimum value
  max: 1000 # Optional: Maximum value
  precision: 2 # Optional: Decimal places

currency

Monetary value.

price:
  type: currency
  label: Price
  currency_code: USD # Optional: Currency code
  precision: 2 # Decimal places

percent

Percentage value (0-100).

discount:
  type: percent
  label: Discount Rate
  min: 0
  max: 100

Date and Time Fields

date

Date only (no time).

birth_date:
  type: date
  label: Birth Date
  min: '1900-01-01' # Optional: Minimum date
  max: '2100-12-31' # Optional: Maximum date

datetime

Date and time.

created_at:
  type: datetime
  label: Created At
  default: now # Special value: current timestamp

time

Time only (no date).

start_time:
  type: time
  label: Start Time

Boolean and Selection Fields

boolean

True/false checkbox.

is_active:
  type: boolean
  label: Active
  default: true

select

Dropdown selection (single value).

status:
  type: select
  label: Status
  options:
    - value: draft
      label: Draft
    - value: published
      label: Published
  default: draft

multiselect

Multiple selection.

tags:
  type: multiselect
  label: Tags
  options:
    - value: important
      label: Important
    - value: urgent
      label: Urgent

Relationship Fields

lookup

Many-to-one relationship (foreign key).

account:
  type: lookup
  label: Account
  reference_to: accounts
  on_delete: set_null # Options: set_null, cascade, restrict

master_detail

Master-detail relationship (cascade delete).

account:
  type: master_detail
  label: Account
  reference_to: accounts
  on_delete: cascade # Automatically cascades

Special Fields

autonumber

Auto-incrementing number.

ticket_number:
  type: autonumber
  label: Ticket #
  format: 'TKT-{0000}' # Format template
  start_number: 1 # Starting number

formula

Calculated field.

full_name:
  type: formula
  label: Full Name
  formula: 'first_name + " " + last_name'
  return_type: text

rollup_summary

Aggregation from related records.

total_opportunities:
  type: rollup_summary
  label: Total Opportunities
  reference_to: opportunities
  summary_type: count # Options: count, sum, min, max, avg

Field Attributes

Common Attributes

All fields support these attributes:

AttributeTypeDescription
typestringRequired. Field data type
labelstringDisplay label for UI
descriptionstringHelp text shown in UI
requiredbooleanField is required (default: false)
uniquebooleanValue must be unique (default: false)
defaultanyDefault value for new records
readonlybooleanField cannot be edited (default: false)
hiddenbooleanHide from UI (default: false)

Validation Attributes

AttributeApplies ToDescription
minnumber, currency, percent, dateMinimum value
maxnumber, currency, percent, dateMaximum value
min_lengthtext, textareaMinimum character length
max_lengthtext, textarea, email, urlMaximum character length
patterntext, email, url, phoneRegex validation pattern
precisionnumber, currency, percentDecimal places

Relationship Attributes

AttributeApplies ToDescription
reference_tolookup, master_detailTarget object name
on_deletelookup, master_detailCascade behavior
related_list_labellookup, master_detailLabel in related list

Permission Schema

Permissions control who can access and modify records.

Object-Level Permissions

permission_set:
  allowRead: <boolean|array<string>>
  allowCreate: <boolean|array<string>>
  allowEdit: <boolean|array<string>>
  allowDelete: <boolean|array<string>>
  • true: Everyone has permission
  • false: No one has permission
  • ['role1', 'role2']: Only specified roles have permission

Field-Level Permissions

fields:
  salary:
    type: currency
    label: Salary
    visible_to: ['hr', 'admin'] # Only HR and admin can see
    editable_by: ['hr'] # Only HR can edit

Validation Rules

Built-in Validation

ObjectOS automatically validates:

  • Required fields
  • Unique fields
  • Data type correctness
  • Min/max constraints
  • Pattern matching
  • Reference integrity

Custom Validation

Define custom validation in hooks (see Logic Hooks).

Edit this page on GitHub

On this page