app:table:create
Adds a new table to a schema and applies the migration
Options
| Name | Type | Description |
|---|---|---|
org_id | string | The organization ID that owns the schema |
schema_id | string | The name of the schema (database) to add the table to |
table | Table | The table definition to create |
↳ name | string | Is the table identifier and must be unique within a Schema. |
↳ description | string | Is an optional human-readable summary surfaced in generated documentation and GUI tooling. Has no effect on storage. |
↳ fields | []Field | Is the ordered list of user-defined columns on the table. |
↳ name | string | Is the column / input name. Must be unique within its table or input set and must not collide with reserved record fields (id, created_at, updated_at, deleted_at, version, version_owner_id) when used as a DB column. |
↳ type | FieldType | Is the field's data type. See the FieldType constants for the supported values. |
↳ required | bool | Marks the field as non-nullable / mandatory. Inserts and updates that omit a required field (and provide no Default) are rejected. |
↳ default | any | Is the value applied when a record is inserted (or a form is rendered) without an explicit value for this field. A nil or zero value means no default is applied. |
↳ related_table | string | Is the name of the target table for relation fields. Required when Type is has_one, has_many, or belongs_to; ignored otherwise. |
↳ related_field | string | Is the name of the foreign-key field on the related table. Used only by has_many to identify which column on RelatedTable points back to this record. |
↳ description | string | Is a human-readable explanation of the field's purpose. Surfaced in generated documentation and GUI tooling; has no effect on storage or validation. |
↳ options | []string | Is the ordered list of permitted string values for FieldTypeEnum. Required for enum fields; ignored for all other types. |
↳ label | string | Is the UI label for the field. Renderers fall back to Name when empty. |
↳ option_labels | []string | Is a parallel array to Options that carries display labels for enum values. Index i in OptionLabels labels Options[i]. When empty, the value itself is shown. |
↳ default_source | string | Declares the origin of a dynamic default value when the server has resolved one into Default. Allowed sources: "now", "today". The set is closed and intentionally excludes identity sources (org_id, user_id), which are injected as workflow vars by the server, never surfaced as form fields. |
↳ relation_label_field | string | Names the field on the related record that the UI should show as the dropdown label. When empty, the renderer falls back to the related record's id. Only meaningful when Type is a relation. |
↳ indexes | []Index | Is the optional list of secondary indexes defined on the table. |
↳ name | string | Is the index identifier and must be unique within its table. |
↳ fields | []string | Is the ordered list of field names covered by the index. Order is significant for composite indexes (leftmost-prefix semantics). |
↳ unique | bool | Enforces that no two records share the same value combination for the indexed fields. |
↳ versioned | bool | Adds the per-record version counter and version_owner_id columns to this table. The DataStore increments version on every write and stamps version_owner_id with the writing user, supporting optimistic concurrency and "last edited by" semantics |
↳ audited | bool | Enables per-write audit logging for this table. When true, every successful Insert/Update/Delete records an entry in _schema_audit_log with the actor, source, reason, workflow attribution, and a changed-fields diff (before/after for the keys that actually changed). Independent of Versioned: versioning answers "what did the record look like at point X", auditing answers "who changed what, when, why" |
↳ config | RawMessage | Is opaque JSON configuration for the table, persisted in the _schema_tables meta-table. Used by GUI consumers (e.g. column ordering, view definitions) and not interpreted by the engine |
Outputs
| Name | Type | Description |
|---|---|---|
table | Table | The newly created table definition |
↳ name | string | Is the table identifier and must be unique within a Schema. |
↳ description | string | Is an optional human-readable summary surfaced in generated documentation and GUI tooling. Has no effect on storage. |
↳ fields | []Field | Is the ordered list of user-defined columns on the table. |
↳ name | string | Is the column / input name. Must be unique within its table or input set and must not collide with reserved record fields (id, created_at, updated_at, deleted_at, version, version_owner_id) when used as a DB column. |
↳ type | FieldType | Is the field's data type. See the FieldType constants for the supported values. |
↳ required | bool | Marks the field as non-nullable / mandatory. Inserts and updates that omit a required field (and provide no Default) are rejected. |
↳ default | any | Is the value applied when a record is inserted (or a form is rendered) without an explicit value for this field. A nil or zero value means no default is applied. |
↳ related_table | string | Is the name of the target table for relation fields. Required when Type is has_one, has_many, or belongs_to; ignored otherwise. |
↳ related_field | string | Is the name of the foreign-key field on the related table. Used only by has_many to identify which column on RelatedTable points back to this record. |
↳ description | string | Is a human-readable explanation of the field's purpose. Surfaced in generated documentation and GUI tooling; has no effect on storage or validation. |
↳ options | []string | Is the ordered list of permitted string values for FieldTypeEnum. Required for enum fields; ignored for all other types. |
↳ label | string | Is the UI label for the field. Renderers fall back to Name when empty. |
↳ option_labels | []string | Is a parallel array to Options that carries display labels for enum values. Index i in OptionLabels labels Options[i]. When empty, the value itself is shown. |
↳ default_source | string | Declares the origin of a dynamic default value when the server has resolved one into Default. Allowed sources: "now", "today". The set is closed and intentionally excludes identity sources (org_id, user_id), which are injected as workflow vars by the server, never surfaced as form fields. |
↳ relation_label_field | string | Names the field on the related record that the UI should show as the dropdown label. When empty, the renderer falls back to the related record's id. Only meaningful when Type is a relation. |
↳ indexes | []Index | Is the optional list of secondary indexes defined on the table. |
↳ name | string | Is the index identifier and must be unique within its table. |
↳ fields | []string | Is the ordered list of field names covered by the index. Order is significant for composite indexes (leftmost-prefix semantics). |
↳ unique | bool | Enforces that no two records share the same value combination for the indexed fields. |
↳ versioned | bool | Adds the per-record version counter and version_owner_id columns to this table. The DataStore increments version on every write and stamps version_owner_id with the writing user, supporting optimistic concurrency and "last edited by" semantics |
↳ audited | bool | Enables per-write audit logging for this table. When true, every successful Insert/Update/Delete records an entry in _schema_audit_log with the actor, source, reason, workflow attribution, and a changed-fields diff (before/after for the keys that actually changed). Independent of Versioned: versioning answers "what did the record look like at point X", auditing answers "who changed what, when, why" |
↳ config | RawMessage | Is opaque JSON configuration for the table, persisted in the _schema_tables meta-table. Used by GUI consumers (e.g. column ordering, view definitions) and not interpreted by the engine |
Example
name: Create a table
actions:
- name: created
component: app:table:create
vars:
org_id: "{{ var.org_id }}"
schema_id: content
table:
name: articles
outputs:
table: "{{ created.table }}"