UI Engine
Apps, views, dashboards, branding, and public forms — server-driven UI declared as metadata and rendered by the ObjectUI runtime.
The UI engine turns metadata into user interfaces: you declare apps, views, pages, and dashboards as data, and any compliant renderer draws them. This module is the practical documentation for the ObjectUI layer — the UI Protocol specified normatively in the ObjectUI spec. Because the UI is data, it ships inside the same artifact as your schema, respects the same permissions, and can be generated or modified by AI agents through the same typed surface.
An app is a navigation shell over your objects (from the CRM example app):
import { App } from '@objectstack/spec/ui';
export const CrmApp = App.create({
name: 'crm_app',
label: 'CRM',
icon: 'briefcase',
branding: { primaryColor: '#2563EB' },
navigation: [
{ id: 'group_sales', type: 'group', label: 'Sales', icon: 'briefcase', children: [
{ id: 'nav_leads', type: 'object', objectName: 'crm_lead', label: 'Leads', icon: 'funnel' },
{ id: 'nav_accounts', type: 'object', objectName: 'crm_account', label: 'Accounts', icon: 'building' },
]},
],
});The building blocks
- Apps group navigation, branding, and entry points for one audience.
- Views present object records as
grid(the standard data table),kanban,gallery,calendar,timeline,gantt,map,chart, ortree. Forms are their own view kind with per-mode layouts (Views). - Pages compose free-form layouts from widgets; Dashboards combine charts, reports, and datasets for analytics.
- Branding colours an app:
app.branding.primaryColor/accentColordrive the console's--primary/--accentvariables. (The standalonethemescollection was retired in spec 17.1, ADR-0049 — it was parsed but never applied.) - Public forms expose a scoped slice of an object to external audiences through anonymous entry routes for public data collection (Forms, public data collection).
- The Setup App — the platform's built-in administration UI — is itself rendered from the same protocol (Setup App).
What's in this module
Apps
App metadata: navigation, branding, entry points
Pages
Page metadata and layout composition
React Pages
Author a page body as real React, or as JSX that is parsed and never executed
Views
Grid, kanban, calendar, gantt, map, and more
Actions
Declarative buttons with server-side behavior, bound to lists and records
Dashboards
Dashboard metadata, charts, and datasets
Reports
Analytics reports as metadata: report shapes, dataset binding, drill-through
Translations
Labels and UI text as metadata, one bundle per locale
Forms
Public and internal form patterns
Doc Pages
Ship package documentation rendered in the console
Setup App
The built-in administration UI
Recipes
Create form ≠ edit form
Different layouts per form mode
Field grouping & order
Control form structure
Audience-based interfaces
Different UIs per audience
Collect data from the public
Anonymous public form routes end to end
Related
- Spec: UI as Data Concept, Layout DSL, Action Protocol, Widget Contract
- Schema reference: UI, Studio
- Neighbors: the records a view shows come from Data Modeling; what a user is allowed to see is decided by Permissions & Identity; buttons that run logic call into Automation.