View
View protocol schemas
HTTP Method Enum & HTTP Request Schema
Migrated to shared/http.zod.ts. Re-exported here for backward compatibility.
Source: packages/spec/src/ui/view.zod.ts
TypeScript Usage
import { AddRecordConfig, AppearanceConfig, CalendarConfig, ColumnSummary, FormButtonConfig, FormField, FormSection, FormView, GalleryConfig, GanttConfig, GanttQuickFilter, GroupingConfig, GroupingField, KanbanConfig, ListChartConfig, ListColumn, ListView, NavigationConfig, NavigationMode, ObjectListView, ObjectUserFilters, PaginationConfig, RowColorConfig, RowHeight, SelectionConfig, TimelineConfig, TreeConfig, UserActionsConfig, UserFilterField, UserFilters, View, ViewData, ViewFilterRule, ViewItem, ViewItemName, ViewKind, ViewScope, ViewSharing, ViewTab, VisualizationType } from '@objectstack/spec/ui';
import type { AddRecordConfig, AppearanceConfig, CalendarConfig, ColumnSummary, FormButtonConfig, FormField, FormSection, FormView, GalleryConfig, GanttConfig, GanttQuickFilter, GroupingConfig, GroupingField, KanbanConfig, ListChartConfig, ListColumn, ListView, NavigationConfig, NavigationMode, ObjectListView, ObjectUserFilters, PaginationConfig, RowColorConfig, RowHeight, SelectionConfig, TimelineConfig, TreeConfig, UserActionsConfig, UserFilterField, UserFilters, View, ViewData, ViewFilterRule, ViewItem, ViewItemName, ViewKind, ViewScope, ViewSharing, ViewTab, VisualizationType } from '@objectstack/spec/ui';
// Validate data
const result = AddRecordConfig.parse(data);AddRecordConfig
Add record entry point configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| enabled | boolean | ✅ | Show the add record entry point |
| position | Enum<'top' | 'bottom' | 'both'> | ✅ | Position of the add record button |
| mode | Enum<'inline' | 'form' | 'modal'> | ✅ | How to add a new record |
| formView | string | optional | Named form view to use when mode is "form" or "modal" |
AppearanceConfig
Appearance and visualization configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| showDescription | boolean | ✅ | Show the view description text |
| allowedVisualizations | Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'>[] | optional | Whitelist of visualization types users can switch between (e.g. ["grid", "gallery", "kanban"]) |
CalendarConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| startDateField | string | ✅ | |
| endDateField | string | optional | |
| titleField | string | ✅ | |
| colorField | string | optional |
ColumnSummary
Aggregation function for column footer summary
Allowed Values
nonecountcount_emptycount_filledcount_uniquepercent_emptypercent_filledsumavgminmax
FormButtonConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| show | boolean | optional | Whether the button is rendered (renderer default applies when omitted) |
| label | string | optional | Button label (i18n-capable; renderer default when omitted) |
FormField
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Field name (snake_case) |
| type | Enum<'text' | 'textarea' | 'email' | 'url' | 'phone' | 'password' | 'secret' | 'markdown' | 'html' | 'richtext' | 'number' | 'currency' | 'percent' | 'date' | 'datetime' | 'time' | 'boolean' | 'toggle' | 'select' | 'multiselect' | 'radio' | 'checkboxes' | 'lookup' | 'master_detail' | 'tree' | 'user' | 'image' | 'file' | 'avatar' | 'video' | 'audio' | 'formula' | 'summary' | 'autonumber' | 'composite' | 'repeater' | 'record' | 'location' | 'address' | 'code' | 'json' | 'color' | 'rating' | 'slider' | 'signature' | 'qrcode' | 'progress' | 'tags' | 'vector'> | optional | Field type (auto-infers widget if omitted) |
| options | Object[] | optional | Options for select/multiselect/radio/checkboxes fields |
| reference | string | optional | Target object name for lookup/master_detail fields |
| maxLength | number | optional | Maximum character length (for text/textarea/email/url/phone) |
| minLength | number | optional | Minimum character length |
| min | number | optional | Minimum value (for number/currency/percent/slider) |
| max | number | optional | Maximum value |
| precision | number | optional | Total digits (for number/currency) |
| scale | number | optional | Decimal places |
| multiple | boolean | optional | Allow multiple values (for select/lookup/file/image) |
| label | string | optional | Display label override |
| placeholder | string | optional | Placeholder text |
| helpText | string | optional | Help/hint text |
| readonly | boolean | optional | Read-only override |
| immutable | boolean | optional | Editable on create, locked once the record exists (e.g. machine names). |
| required | boolean | optional | Required override |
| hidden | boolean | optional | Hidden override |
| colSpan | integer | optional | [legacy — prefer span] Absolute column span (1-4). Fragile when the column count is derived per surface (mobile 1 / modal 2 / page 3-4): a fixed span only lines up at the width the author imagined. The renderer clamps it to the current column count. Prefer span. |
| span | Enum<'auto' | 'full'> | optional | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count (wide widgets like textarea/richtext/json/file/subform take the whole row). 'full': whole row at any column count. Prefer this over the absolute colSpan. |
| widget | string | optional | Custom widget/component name (overrides type-based inference) |
| language | string | optional | Code editor language (for type=code) |
| fields | [#](./#)[] | optional | Sub-fields for composite/repeater/record types |
| keyField | Object | optional | Key column config for record-typed fields |
| dependsOn | string | optional | Parent field name for cascading |
| visibleWhen | string | Object | optional | Visibility predicate (CEL) — field shown only when TRUE. Root: record+current_user (runtime forms) or data (metadata forms). e.g. Precord.priority == 'urgent' |
| visibleOn | string | Object | optional | [DEPRECATED → visibleWhen] Visibility predicate (CEL). Normalized to visibleWhen at parse. |
| disclosure | Enum<'inline' | 'popover'> | optional | Composite rendering: inline bordered box (default) or a summary line + gear popover (progressive disclosure). |
FormSection
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | optional | Stable section identifier for i18n lookup (snake_case) |
| label | string | optional | Display label (plain string; i18n keys are auto-generated by the framework) |
| description | string | optional | Optional description rendered under the section header. |
| collapsible | boolean | optional | |
| collapsed | boolean | optional | |
| visibleWhen | string | Object | optional | Visibility predicate (CEL) — section shown only when TRUE. Root: record+current_user (runtime forms) or data (metadata forms). |
| visibleOn | string | Object | optional | [DEPRECATED → visibleWhen] Visibility predicate (CEL). Hides the whole section when false. Normalized to visibleWhen at parse. |
| columns | Enum<'1' | '2' | '3' | '4'> | number | number | number | number | optional | |
| fields | string | [__schema0](./__schema0)[] | ✅ |
FormView
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| type | Enum<'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'> | optional | |
| layout | Enum<'vertical' | 'horizontal' | 'inline' | 'grid'> | optional | Field layout direction |
| columns | integer | optional | Number of columns for the form body |
| title | string | optional | Form title |
| description | string | optional | Form description |
| defaultTab | string | optional | Initially active tab (tabbed forms) |
| tabPosition | Enum<'top' | 'bottom' | 'left' | 'right'> | optional | Tab strip position (tabbed forms) |
| allowSkip | boolean | optional | Allow skipping steps (wizard forms) |
| showStepIndicator | boolean | optional | Show the step indicator (wizard forms) |
| splitDirection | Enum<'horizontal' | 'vertical'> | optional | Split orientation (split forms) |
| splitSize | number | optional | Primary split panel size, % (split forms) |
| splitResizable | boolean | optional | Whether the split is resizable (split forms) |
| drawerSide | Enum<'top' | 'bottom' | 'left' | 'right'> | optional | Drawer side (drawer forms) |
| drawerWidth | string | optional | [DEPRECATED → size buckets] Drawer width, e.g. "480px". A pixel width cannot be chosen without knowing the client viewport — the renderer derives it. |
| modalSize | Enum<'sm' | 'default' | 'lg' | 'xl' | 'full'> | optional | Modal size (modal forms) |
| data | Object | Object | Object | Object | optional | Data source configuration (defaults to "object" provider) |
| sections | Object[] | optional | |
| groups | Object[] | optional | |
| subforms | Object[] | optional | Inline master-detail child collections |
| defaultSort | Object[] | optional | Default sort order for related list views within this form |
| sharing | Object | optional | Public sharing configuration for this form |
| submitBehavior | Object | Object | Object | Object | optional | Post-submit behavior |
| buttons | Object | optional | [EXPERIMENTAL — NOT ENFORCED, #2998] Form action-button visibility & labels. Renderer wiring pending in ObjectUI (objectui#2545). |
| defaults | Record<string, any> | optional | [EXPERIMENTAL — NOT ENFORCED, #2998] Initial field values for create-mode forms (spec home for ObjectUI initialValues). Renderer wiring pending (objectui#2545). |
| aria | Object | optional | ARIA accessibility attributes for the form view |
GalleryConfig
Gallery/card view configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| coverField | string | optional | Attachment/image field to display as card cover |
| coverFit | Enum<'cover' | 'contain'> | ✅ | Image fit mode for card cover |
| cardSize | Enum<'small' | 'medium' | 'large'> | ✅ | Card size in gallery view |
| titleField | string | optional | Field to display as card title |
| visibleFields | string[] | optional | Fields to display on card body |
GanttConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| startDateField | string | ✅ | |
| endDateField | string | ✅ | |
| titleField | string | ✅ | |
| progressField | string | optional | |
| dependenciesField | string | optional | |
| colorField | string | optional | Field that drives the bar color |
| parentField | string | optional | Field holding the parent task id (builds the summary → step tree) |
| typeField | string | optional | Field whose value maps to task/summary/milestone |
| baselineStartField | string | optional | Baseline (planned) start field |
| baselineEndField | string | optional | Baseline (planned) end field |
| groupByField | string | optional | Field to group leaf tasks by (synthesized summary rows) |
| resourceView | boolean | optional | Render a per-resource workload histogram instead of the timeline |
| assigneeField | string | optional | Resource field to bucket load by (resource view) |
| effortField | string | optional | Per-task load units (resource view; default 1) |
| capacity | number | optional | Per-resource capacity ceiling; loads above this flag overload |
| tooltipFields | string | Object[] | optional | Fields to surface in the hover tooltip, in display order |
| quickFilters | Object[] | optional | Multi-select filter dropdowns rendered above the chart |
| autoZoomToFilter | boolean | optional | When true (default), filtering zooms the range to the filtered tasks |
GanttQuickFilter
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Record field / dot-path the dimension filters on |
| label | string | optional | Trigger label (falls back to the field label) |
| options | string | Object[] | optional | Explicit option override for fixed enums |
GroupingConfig
Record grouping configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| fields | Object[] | ✅ | Fields to group by (supports up to 3 levels) |
GroupingField
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Field name to group by |
| order | Enum<'asc' | 'desc'> | ✅ | Group sort order |
| collapsed | boolean | ✅ | Collapse groups by default |
KanbanConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| groupByField | string | ✅ | Field to group columns by (usually status/select) |
| summarizeField | string | optional | Field to sum at top of column (e.g. amount) |
| columns | string[] | ✅ | Fields to show on cards |
ListChartConfig
List chart view configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| chartType | Enum<'bar' | 'line' | 'pie' | 'area' | 'scatter'> | ✅ | Chart visualisation type |
| dataset | string | ✅ | Dataset name to bind (ADR-0021) |
| dimensions | string[] | optional | Dimension names — X/group/split |
| values | string[] | ✅ | Measure names — Y (at least one) |
ListColumn
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Field name (snake_case) |
| label | string | optional | Display label override |
| width | number | optional | Column width in pixels |
| align | Enum<'left' | 'center' | 'right'> | optional | Text alignment |
| hidden | boolean | optional | Hide column by default |
| sortable | boolean | optional | Allow sorting by this column |
| resizable | boolean | optional | Allow resizing this column |
| wrap | boolean | optional | Allow text wrapping |
| type | string | optional | Renderer type override (e.g., "currency", "date") |
| pinned | Enum<'left' | 'right'> | optional | Pin/freeze column to left or right side |
| summary | Enum<'none' | 'count' | 'count_empty' | 'count_filled' | 'count_unique' | 'percent_empty' | 'percent_filled' | 'sum' | 'avg' | 'min' | 'max'> | optional | Footer aggregation function for this column |
| link | boolean | optional | Functions as the primary navigation link (triggers View navigation) |
| action | string | optional | Registered Action ID to execute when clicked |
ListView
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | optional | Internal view name (lowercase snake_case) |
| label | string | optional | Display label (plain string; i18n keys are auto-generated by the framework) |
| type | Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'> | optional | |
| data | Object | Object | Object | Object | optional | Data source configuration (defaults to "object" provider) |
| columns | string[] | Object[] | ✅ | Fields to display as columns |
| filter | Object[] | optional | Filter criteria (JSON Rules) |
| sort | string | Object[] | optional | |
| searchableFields | string[] | optional | Fields enabled for search |
| filterableFields | string[] | optional | Legacy shorthand for userFilters.fields — bare field names enabled for end-user filtering. Prefer userFilters |
| userFilters | Object | optional | End-user quick-filter bar: dropdown/toggle fields or tab presets. Omit to let the renderer derive filters from select/boolean fields |
| resizable | boolean | optional | Enable column resizing |
| striped | boolean | optional | Striped row styling |
| bordered | boolean | optional | Show borders |
| compactToolbar | boolean | optional | Collapse Group/Color/Density/Hide-fields into a single View settings popover |
| selection | Object | optional | Row selection configuration |
| navigation | Object | optional | Configuration for item click navigation (page, drawer, modal, etc.) |
| pagination | Object | optional | Pagination configuration |
| kanban | Object | optional | |
| calendar | Object | optional | |
| gantt | Record<string, any> | optional | |
| gallery | Object | optional | Gallery/card view configuration |
| timeline | Object | optional | Timeline view configuration |
| chart | Object | optional | List chart view configuration |
| tree | Record<string, any> | optional | |
| description | string | optional | View description for documentation/tooltips |
| sharing | Object | optional | View sharing and access configuration |
| rowHeight | Enum<'compact' | 'short' | 'medium' | 'tall' | 'extra_tall'> | optional | Row height / density setting |
| grouping | Object | optional | Group records by one or more fields |
| rowColor | Object | optional | Color rows based on field value |
| hiddenFields | string[] | optional | Fields to hide in this specific view |
| fieldOrder | string[] | optional | Explicit field display order for this view |
| rowActions | string[] | optional | Actions available for individual row items |
| bulkActions | string[] | optional | Actions available when multiple rows are selected |
| bulkActionDefs | Record<string, any>[] | optional | Rich bulk action definitions (schema-driven, executed via BulkActionDialog) |
| virtualScroll | boolean | optional | Enable virtual scrolling for large datasets |
| conditionalFormatting | Object[] | optional | Conditional formatting rules for list rows |
| inlineEdit | boolean | optional | Allow inline editing of records directly in the list view |
| exportOptions | Enum<'csv' | 'xlsx' | 'pdf' | 'json'>[] | optional | Available export format options |
| userActions | Object | optional | User action toggles for the view toolbar |
| appearance | Object | optional | Appearance and visualization configuration |
| tabs | Object[] | optional | Tab definitions for multi-tab view interface |
| addRecord | Object | optional | Add record entry point configuration |
| showRecordCount | boolean | optional | Show record count at the bottom of the list |
| allowPrinting | boolean | optional | Allow users to print the view |
| emptyState | Object | optional | Empty state configuration when no records found |
| aria | Object | optional | ARIA accessibility attributes for the list view |
| responsive | Object | optional | Responsive layout configuration |
| performance | Object | optional | Performance optimization settings |
NavigationConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| mode | Enum<'page' | 'drawer' | 'modal' | 'split' | 'popover' | 'new_window' | 'none'> | ✅ | |
| view | string | optional | Name of the form view to use for details (e.g. "summary_view", "edit_form") |
| preventNavigation | boolean | ✅ | Disable standard navigation entirely |
| openNewTab | boolean | ✅ | Force open in new tab (applies to page mode) |
| size | Enum<'auto' | 'sm' | 'md' | 'lg' | 'xl' | 'full'> | ✅ | [#2578] Overlay size bucket for drawer/modal detail: 'auto' (default — renderer derives from field count + viewport; AI writes nothing) or a coarse override sm/md/lg/xl/full. Prefer this over the pixel width; page mode ignores it. |
| width | string | number | optional | [DEPRECATED → size] Pixel/percent width of the drawer/modal (e.g. "600px"). A pixel width cannot be chosen at authoring time without knowing the client viewport — use the size bucket. |
NavigationMode
Allowed Values
pagedrawermodalsplitpopovernew_windownone
ObjectListView
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | optional | Internal view name (lowercase snake_case) |
| label | string | optional | Display label (plain string; i18n keys are auto-generated by the framework) |
| type | Enum<'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart' | 'tree'> | optional | |
| data | Object | Object | Object | Object | optional | Data source configuration (defaults to "object" provider) |
| columns | string[] | Object[] | ✅ | Fields to display as columns |
| filter | Object[] | optional | Filter criteria (JSON Rules) |
| sort | string | Object[] | optional | |
| searchableFields | string[] | optional | Fields enabled for search |
| filterableFields | string[] | optional | Legacy shorthand for userFilters.fields — bare field names enabled for end-user filtering. Prefer userFilters |
| resizable | boolean | optional | Enable column resizing |
| striped | boolean | optional | Striped row styling |
| bordered | boolean | optional | Show borders |
| compactToolbar | boolean | optional | Collapse Group/Color/Density/Hide-fields into a single View settings popover |
| selection | Object | optional | Row selection configuration |
| navigation | Object | optional | Configuration for item click navigation (page, drawer, modal, etc.) |
| pagination | Object | optional | Pagination configuration |
| kanban | Object | optional | |
| calendar | Object | optional | |
| gantt | Record<string, any> | optional | |
| gallery | Object | optional | Gallery/card view configuration |
| timeline | Object | optional | Timeline view configuration |
| chart | Object | optional | List chart view configuration |
| tree | Record<string, any> | optional | |
| description | string | optional | View description for documentation/tooltips |
| sharing | Object | optional | View sharing and access configuration |
| rowHeight | Enum<'compact' | 'short' | 'medium' | 'tall' | 'extra_tall'> | optional | Row height / density setting |
| grouping | Object | optional | Group records by one or more fields |
| rowColor | Object | optional | Color rows based on field value |
| hiddenFields | string[] | optional | Fields to hide in this specific view |
| fieldOrder | string[] | optional | Explicit field display order for this view |
| rowActions | string[] | optional | Actions available for individual row items |
| bulkActions | string[] | optional | Actions available when multiple rows are selected |
| bulkActionDefs | Record<string, any>[] | optional | Rich bulk action definitions (schema-driven, executed via BulkActionDialog) |
| virtualScroll | boolean | optional | Enable virtual scrolling for large datasets |
| conditionalFormatting | Object[] | optional | Conditional formatting rules for list rows |
| inlineEdit | boolean | optional | Allow inline editing of records directly in the list view |
| exportOptions | Enum<'csv' | 'xlsx' | 'pdf' | 'json'>[] | optional | Available export format options |
| userActions | Object | optional | User action toggles for the view toolbar |
| appearance | Object | optional | Appearance and visualization configuration |
| tabs | Object[] | optional | Tab definitions for multi-tab view interface |
| addRecord | Object | optional | Add record entry point configuration |
| showRecordCount | boolean | optional | Show record count at the bottom of the list |
| allowPrinting | boolean | optional | Allow users to print the view |
| emptyState | Object | optional | Empty state configuration when no records found |
| aria | Object | optional | ARIA accessibility attributes for the list view |
| responsive | Object | optional | Responsive layout configuration |
| performance | Object | optional | Performance optimization settings |
| userFilters | Object | optional |
ObjectUserFilters
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| element | Enum<'dropdown' | 'toggle'> | ✅ | Filter control style on object views: "dropdown" (per-field value chips). "toggle" is deprecated. "tabs" is page-only — use listViews for named presets. |
| fields | Object[] | optional | Fields exposed as quick filters (dropdown/toggle elements) |
PaginationConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| pageSize | integer | ✅ | Number of records per page |
| pageSizeOptions | integer[] | optional | Available page size options |
RowColorConfig
Row color configuration based on field values
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Field to derive color from (typically a select/status field) |
| colors | Record<string, string> | optional | Map of field value to color (hex/token) |
RowHeight
Row height / density setting for list view
Allowed Values
compactshortmediumtallextra_tall
SelectionConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| type | Enum<'none' | 'single' | 'multiple'> | ✅ | Selection mode |
TimelineConfig
Timeline view configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| startDateField | string | ✅ | Field for timeline item start date |
| endDateField | string | optional | Field for timeline item end date |
| titleField | string | ✅ | Field to display as timeline item title |
| groupByField | string | optional | Field to group timeline rows |
| colorField | string | optional | Field to determine item color |
| scale | Enum<'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year'> | ✅ | Default timeline scale |
TreeConfig
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| parentField | string | optional | Single-parent pointer field (auto-detected from the object schema when omitted) |
| labelField | string | optional | Field rendered indented in the first column (defaults to "name") |
| fields | string[] | optional | Additional fields rendered as flat columns alongside the label |
| defaultExpandedDepth | integer | optional | Initial expansion depth (0 = roots only; omit = expand all) |
UserActionsConfig
User action toggles for the view toolbar
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| sort | boolean | ✅ | Allow users to sort records |
| search | boolean | ✅ | Allow users to search records |
| filter | boolean | ✅ | Allow users to filter records |
| rowHeight | boolean | ✅ | Allow users to toggle row height/density |
| addRecordForm | boolean | ✅ | Add records through a form instead of inline |
| editInline | boolean | ✅ | Allow users to edit records inline — click a cell to edit it with the field's type-aware widget (the same control the form uses). Off by default: the list is read-only unless the author opts in. |
| buttons | string[] | optional | Custom action button IDs to show in the toolbar |
UserFilterField
Quick-filter field configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Field name on the source object (must exist — checked by reference diagnostics) |
| label | string | optional | Display label override (defaults to the field label) |
| type | Enum<'select' | 'multi-select' | 'boolean' | 'date-range' | 'text'> | optional | Filter control type. Omit to infer from the field definition |
| options | Object[] | optional | Static options. Omit to derive from the field definition (select options / lookup records) |
| showCount | boolean | optional | Show per-option record counts |
| defaultValues | string | number | boolean[] | optional | Pre-selected values when the view loads |
UserFilters
End-user quick-filter configuration (Airtable "User filters" parity)
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| element | Enum<'dropdown' | 'tabs' | 'toggle'> | ✅ | Filter control style: "dropdown" (per-field value selectors) or "tabs" (named presets). "toggle" is deprecated. |
| fields | Object[] | optional | Fields exposed as quick filters (dropdown/toggle elements) |
| tabs | Object[] | optional | Named filter presets rendered as tabs (tabs element). Reuses ViewTabSchema |
| showAllRecords | boolean | optional | Show an "All records" tab before the presets (tabs element) |
View
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| list | Object | optional | |
| form | Object | optional | |
| listViews | Record<string, Object> | optional | Additional named list views (views mode — dropdown userFilters allowed, no tabs; ADR-0047) |
| formViews | Record<string, Object> | optional | Additional named form views |
| protection | Object | optional | Package author protection block — lock policy for this view. |
| _lock | Enum<'none' | 'no-overlay' | 'no-delete' | 'full'> | optional | Item-level lock — controls overlay & delete (ADR-0010). |
| _lockReason | string | optional | Human-readable reason shown when a write is refused by _lock. |
| _lockSource | Enum<'artifact' | 'package' | 'env-forced'> | optional | Layer that set _lock (artifact | package | env-forced). |
| _provenance | Enum<'package' | 'org' | 'env-forced'> | optional | Origin of the item (package | org | env-forced). |
| _packageId | string | optional | Owning package machine id. |
| _packageVersion | string | optional | Owning package version. |
| _lockDocsUrl | string | optional | Optional documentation link surfaced next to _lockReason. |
ViewData
Union Options
This schema accepts one of the following structures:
Option 1
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| provider | string | ✅ | |
| object | string | ✅ | Target object name |
Option 2
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| provider | string | ✅ | |
| read | Object | optional | Configuration for fetching data |
| write | Object | optional | Configuration for submitting data (for forms/editable tables) |
Option 3
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| provider | string | ✅ | |
| items | any[] | ✅ | Static data array |
Option 4
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| provider | string | ✅ | |
| schemaId | string | ✅ | Schema identifier — typically the metadata type name |
| schema | Record<string, any> | optional | Inline JSON Schema (Draft 2020-12). Optional when schemaId is resolvable. |
ViewFilterRule
View filter rule
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| field | string | ✅ | Field name to filter on |
| operator | string | ✅ | Filter operator (e.g. equals, not_equals, contains, this_quarter) |
| value | string | number | boolean | null | string | number[] | optional | Filter value |
ViewItem
Union Options
This schema accepts one of the following structures:
Option 1
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| viewKind | string | ✅ | |
| config | Object | ✅ | List-family view configuration. |
| name | string | ✅ | Globally-unique view id, <object>.<viewKey>. |
| object | string | ✅ | Bound object name — the foreign key used to aggregate views. |
| label | string | optional | Display label (supports i18n). |
| isDefault | boolean | optional | Whether this is the object's default view in the switcher. |
| order | integer | optional | Sort order within the object's view switcher / left rail. |
| scope | Enum<'package' | 'shared' | 'personal'> | optional | Identity layer (defaults to package for source-loaded views). |
| owner | string | optional | Owner user id — set when scope is personal. |
| hidden | boolean | optional | Hidden from the switcher (per-user / per-org declutter). |
| protection | Object | optional | Package author protection block — lock policy for this view. |
| _lock | Enum<'none' | 'no-overlay' | 'no-delete' | 'full'> | optional | Item-level lock — controls overlay & delete (ADR-0010). |
| _lockReason | string | optional | Human-readable reason shown when a write is refused by _lock. |
| _lockSource | Enum<'artifact' | 'package' | 'env-forced'> | optional | Layer that set _lock (artifact | package | env-forced). |
| _provenance | Enum<'package' | 'org' | 'env-forced'> | optional | Origin of the item (package | org | env-forced). |
| _packageId | string | optional | Owning package machine id. |
| _packageVersion | string | optional | Owning package version. |
| _lockDocsUrl | string | optional | Optional documentation link surfaced next to _lockReason. |
Option 2
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| viewKind | string | ✅ | |
| config | Object | ✅ | Form view configuration. |
| name | string | ✅ | Globally-unique view id, <object>.<viewKey>. |
| object | string | ✅ | Bound object name — the foreign key used to aggregate views. |
| label | string | optional | Display label (supports i18n). |
| isDefault | boolean | optional | Whether this is the object's default view in the switcher. |
| order | integer | optional | Sort order within the object's view switcher / left rail. |
| scope | Enum<'package' | 'shared' | 'personal'> | optional | Identity layer (defaults to package for source-loaded views). |
| owner | string | optional | Owner user id — set when scope is personal. |
| hidden | boolean | optional | Hidden from the switcher (per-user / per-org declutter). |
| protection | Object | optional | Package author protection block — lock policy for this view. |
| _lock | Enum<'none' | 'no-overlay' | 'no-delete' | 'full'> | optional | Item-level lock — controls overlay & delete (ADR-0010). |
| _lockReason | string | optional | Human-readable reason shown when a write is refused by _lock. |
| _lockSource | Enum<'artifact' | 'package' | 'env-forced'> | optional | Layer that set _lock (artifact | package | env-forced). |
| _provenance | Enum<'package' | 'org' | 'env-forced'> | optional | Origin of the item (package | org | env-forced). |
| _packageId | string | optional | Owning package machine id. |
| _packageVersion | string | optional | Owning package version. |
| _lockDocsUrl | string | optional | Optional documentation link surfaced next to _lockReason. |
ViewKind
Whether config is a ListView (list family) or a FormView.
Allowed Values
listform
ViewScope
View identity layer: package | shared | personal.
Allowed Values
packagesharedpersonal
ViewSharing
View sharing and access configuration
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| type | Enum<'personal' | 'collaborative'> | ✅ | View ownership type |
| lockedBy | string | optional | User who locked the view configuration |
ViewTab
Tab configuration for multi-tab view interface
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | ✅ | Tab identifier (snake_case) |
| label | string | optional | Display label |
| icon | string | optional | Tab icon name |
| view | string | optional | Referenced list view name from listViews |
| filter | Object[] | optional | Tab-specific filter criteria |
| order | integer | optional | Tab display order |
| pinned | boolean | ✅ | Pin tab (cannot be removed by users) |
| isDefault | boolean | ✅ | Set as the default active tab |
| visible | boolean | ✅ | Tab visibility |
VisualizationType
Visualization type that users can switch to
Allowed Values
gridkanbangallerycalendartimelineganttmapcharttree