Docs / properties

Properties and Datatypes

Portable property descriptors let any properties surface show any opt-in component field.

This is Contract vocabulary (zero code).

Why

ECS components are POD. Editors should not hardcode one inspector per type forever. A component advertises rows: name + datatype + value. A property manager that understands the datatype table can draw anything that opts in.

Property row

Field Meaning
id Stable index within the component
name Display label
type Datatype id (see below)
value The field itself (host binds pointer / path / leaf)

Exact host types are fulfillment. The row meaning is Contract.

Datatype ids

Id Meaning
bool Boolean
int Signed integer
uint Unsigned integer
float 32-bit float
double 64-bit float
string Text
vec2 Two floats
vec3 Three floats
vec4 Four floats
quat Four floats (x, y, z, w)
entity Entity id (host integer / handle encoding)
enum Named choice; schema lists the literals
curve 1D transfer curve (rig.anim.curve shape: points + optional interpolation/preset)

Domain meaning (colour, pitch, ...) lives in schema field names, not extra type ids. A host may draw a vec4 named rgba with a colour control - fulfillment, not a Contract type.

Node graph pins and params reuse this table - see rig.node.pin / rig.node.param. Group interface pins (rig.node.publish) map outer pins to interior pins; the outer pin’s type is still one of these datatype ids.

Arrays and nested structs other than curve are schema-local until a later properties version. curve is a first-class datatype for editable 1D transfer curves. Property managers skip or stub unknown types without crashing.

Hosts may add prefixed ids.

Rules

  • Components that should appear in Properties advertise these rows (or an equivalent catalog).
  • No toolkit types inside the descriptor.
  • One type per field.

Fulfillment (RigKit)

RigKit maps this table to propTypes / sProp / GetProperties(). rigImGui draws those rows in Properties.

See ui.md, ecs.md.