ObjectStackObjectStack

Object Designer

Object Designer protocol schemas

@module studio/object-designer

Object Designer Protocol — Visual Field Editor, Relationship Mapper & ER Diagram

Defines the specification for the Object Designer experience within ObjectStack Studio,

including:

  • Field Editor: Visual field creation/editing with type-aware property panels

  • Relationship Mapper: Visual lookup/master-detail relationship configuration

  • ER Diagram: Entity-Relationship diagram rendering and interaction

  • Object Manager: Unified object list with search, filtering, and bulk operations

Architecture

The Object Designer is composed of four interconnected panels:


┌─────────────────────────────────────────────────────────────────┐

│                     Object Manager (list / search)             │

├──────────────┬──────────────────────────┬──────────────────────┤

│  Object List │  Field Editor            │  Property Panel      │

│  (sidebar)   │  (table + inline edit)   │  (type-specific)     │

│              │                          │                      │

│  ─ search    │  ─ drag-to-reorder       │  ─ constraints       │

│  ─ filter    │  ─ inline type picker    │  ─ validation        │

│  ─ group     │  ─ batch add/remove      │  ─ security          │

│  ─ create    │  ─ field groups           │  ─ relationships     │

├──────────────┴──────────────────────────┴──────────────────────┤

│                     ER Diagram (toggle panel)                  │

│  ─ auto-layout (force / hierarchy / grid)                     │

│  ─ interactive: click node → navigate to object               │

│  ─ hover: highlight connected relationships                   │

│  ─ zoom/pan/minimap                                           │

└─────────────────────────────────────────────────────────────────┘

@example


import \{

ObjectDesignerConfigSchema,

ERDiagramConfigSchema,

\} from '@objectstack/spec/studio';

const config = ObjectDesignerConfigSchema.parse(\{

defaultView: 'field-editor',

fieldEditor: \{

inlineEditing: true,

dragReorder: true,

showFieldGroups: true,

\},

erDiagram: \{

enabled: true,

layout: 'force',

showFieldDetails: true,

\},

\});

Source: packages/spec/src/studio/object-designer.zod.ts

TypeScript Usage

import { ERDiagramConfig, ERLayoutAlgorithm, ERNodeDisplay, FieldEditorConfig, FieldGroup, FieldPropertySection, ObjectDesignerConfig, ObjectDesignerDefaultView, ObjectFilter, ObjectListDisplayMode, ObjectManagerConfig, ObjectPreviewConfig, ObjectPreviewTab, ObjectSortField, RelationshipDisplay, RelationshipMapperConfig } from '@objectstack/spec/studio';
import type { ERDiagramConfig, ERLayoutAlgorithm, ERNodeDisplay, FieldEditorConfig, FieldGroup, FieldPropertySection, ObjectDesignerConfig, ObjectDesignerDefaultView, ObjectFilter, ObjectListDisplayMode, ObjectManagerConfig, ObjectPreviewConfig, ObjectPreviewTab, ObjectSortField, RelationshipDisplay, RelationshipMapperConfig } from '@objectstack/spec/studio';

// Validate data
const result = ERDiagramConfig.parse(data);

ERDiagramConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable ER diagram panel
layoutEnum<'force' | 'hierarchy' | 'grid' | 'circular'>Default layout algorithm
nodeDisplayObjectNode display configuration
showMinimapbooleanShow minimap for large diagrams
zoomControlsbooleanShow zoom in/out/fit controls
minZoomnumberMinimum zoom level
maxZoomnumberMaximum zoom level
showEdgeLabelsbooleanShow cardinality labels on relationship edges
highlightOnHoverbooleanHighlight connected entities on node hover
clickToNavigatebooleanClick node to navigate to object detail
dragToConnectbooleanDrag between nodes to create relationships
hideOrphansbooleanHide objects with no relationships
autoFitbooleanAuto-fit diagram to viewport on load
exportFormatsEnum<'png' | 'svg' | 'json'>[]Available export formats for diagram

ERLayoutAlgorithm

ER diagram layout algorithm

Allowed Values

  • force
  • hierarchy
  • grid
  • circular

ERNodeDisplay

Properties

PropertyTypeRequiredDescription
showFieldsbooleanShow field list inside entity nodes
maxFieldsVisiblenumberMax fields visible before "N more..." collapse
showFieldTypesbooleanShow field type badges
showRequiredIndicatorbooleanShow required field indicators
showRecordCountbooleanShow live record count on nodes
showIconbooleanShow object icon on node header
showDescriptionbooleanShow description tooltip on hover

FieldEditorConfig

Properties

PropertyTypeRequiredDescription
inlineEditingbooleanEnable inline editing of field properties
dragReorderbooleanEnable drag-and-drop field reordering
showFieldGroupsbooleanShow field group headers
showPropertyPanelbooleanShow the right-side property panel
propertySectionsObject[]Property panel section definitions
fieldGroupsObject[]Field group definitions
paginationThresholdnumberNumber of fields before pagination is enabled
batchOperationsbooleanEnable batch add/remove field operations
showUsageStatsbooleanShow field usage statistics

FieldGroup

Properties

PropertyTypeRequiredDescription
keystringGroup key matching field.group values
labelstringGroup display label
iconstringoptionalLucide icon name
defaultExpandedbooleanWhether group is expanded by default
ordernumberSort order (lower = higher)

FieldPropertySection

Properties

PropertyTypeRequiredDescription
keystringSection key (e.g., "basics", "constraints", "security")
labelstringSection display label
iconstringoptionalLucide icon name
defaultExpandedbooleanWhether section is expanded by default
ordernumberSort order (lower = higher)

ObjectDesignerConfig

Properties

PropertyTypeRequiredDescription
defaultViewEnum<'field-editor' | 'relationship-mapper' | 'er-diagram' | 'object-manager'>Default view
fieldEditorObjectField editor configuration
relationshipMapperObjectRelationship mapper configuration
erDiagramObjectER diagram configuration
objectManagerObjectObject manager configuration
objectPreviewObjectObject preview configuration

ObjectDesignerDefaultView

Default view when entering the Object Designer

Allowed Values

  • field-editor
  • relationship-mapper
  • er-diagram
  • object-manager

ObjectFilter

Properties

PropertyTypeRequiredDescription
packagestringoptionalFilter by owning package
tagsstring[]optionalFilter by object tags
includeSystembooleanInclude system-level objects
includeAbstractbooleanInclude abstract base objects
hasFieldTypestringoptionalFilter to objects containing a specific field type
hasRelationshipsbooleanoptionalFilter to objects with lookup/master_detail fields
searchQuerystringoptionalFree-text search across name, label, and description

ObjectListDisplayMode

Object list display mode

Allowed Values

  • table
  • cards
  • tree

ObjectManagerConfig

Properties

PropertyTypeRequiredDescription
defaultDisplayModeEnum<'table' | 'cards' | 'tree'>Default list display mode
defaultSortFieldEnum<'name' | 'label' | 'fieldCount' | 'updatedAt'>Default sort field
defaultSortDirectionEnum<'asc' | 'desc'>Default sort direction
defaultFilterObjectDefault filter configuration
showFieldCountbooleanShow field count badge
showRelationshipCountbooleanShow relationship count badge
showQuickPreviewbooleanShow quick field preview tooltip on hover
enableComparisonbooleanEnable side-by-side object comparison
showERDiagramTogglebooleanShow ER diagram toggle in toolbar
showCreateActionbooleanShow create object action
showStatsSummarybooleanShow statistics summary bar

ObjectPreviewConfig

Properties

PropertyTypeRequiredDescription
tabsObject[]Object detail preview tabs
defaultTabstringDefault active tab key
showHeaderbooleanShow object summary header
showBreadcrumbsbooleanShow navigation breadcrumbs

ObjectPreviewTab

Properties

PropertyTypeRequiredDescription
keystringTab key
labelstringTab display label
iconstringoptionalLucide icon name
enabledbooleanWhether this tab is available
ordernumberSort order (lower = higher)

ObjectSortField

Object list sort field

Allowed Values

  • name
  • label
  • fieldCount
  • updatedAt

RelationshipDisplay

Properties

PropertyTypeRequiredDescription
typeEnum<'lookup' | 'master_detail' | 'tree'>Relationship type
lineStyleEnum<'solid' | 'dashed' | 'dotted'>Line style in diagrams
colorstringLine color (CSS value)
highlightColorstringHighlighted color on hover/select
cardinalityLabelstringCardinality label (e.g., "1:N", "1:1", "N:M")

RelationshipMapperConfig

Properties

PropertyTypeRequiredDescription
visualCreationbooleanEnable drag-to-create relationships
showReverseRelationshipsbooleanShow reverse/child-to-parent relationships
showCascadeWarningsbooleanShow cascade delete behavior warnings
displayConfigObject[]Visual config per relationship type

On this page