ObjectStackObjectStack

App

App protocol schemas

Base Navigation Item Schema Shared properties for all navigation types.

NAMING CONVENTION: Navigation item IDs are used in URLs and configuration and must be lowercase snake_case.

@example Good IDs

  • 'menu_accounts'
  • 'page_dashboard'
  • 'nav_settings'

@example Bad IDs (will be rejected)

  • 'MenuAccounts' (PascalCase)
  • 'Page Dashboard' (spaces)

Source: packages/spec/src/ui/app.zod.ts

TypeScript Usage

import { ActionNavItemSchema, AppSchema, AppBrandingSchema, AppContextSelectorSchema, ComponentNavItemSchema, DashboardNavItemSchema, GroupNavItemSchema, NavigationAreaSchema, NavigationContributionSchema, NavigationItemSchema, ObjectNavItemSchema, PageNavItemSchema, ReportNavItemSchema, UrlNavItemSchema } from '@objectstack/spec/ui';
import type { ActionNavItem, App, AppBranding, AppContextSelector, ComponentNavItem, DashboardNavItem, GroupNavItem, NavigationArea, NavigationContribution, NavigationItem, ObjectNavItem, PageNavItem, ReportNavItem, UrlNavItem } from '@objectstack/spec/ui';

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

ActionNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'action'
actionDef{ actionName: string; params?: Record<string, any> }Action definition to execute when clicked

App

Properties

PropertyTypeRequiredDescription
namestringApp unique machine name (lowercase snake_case)
labelstring | Record<string, string>App display label
versionneveroptional[REMOVED] App.version was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit — no consumer in framework or objectui). An app is versioned by its owning package: use manifest.version. Delete the key. Run os migrate meta --from 16 to rewrite existing sources automatically.
descriptionstring | Record<string, string>optionalApp description
iconstringoptionalApp icon used in the App Launcher
branding{ primaryColor?: string; accentColor?: string; logo?: string; favicon?: string }optionalApp-specific branding
activebooleanoptionalWhether the app is enabled
isDefaultbooleanoptionalIs default app
hiddenbooleanoptionalHide from the App Switcher; the shell surfaces hidden apps via the avatar menu instead (navigation only — never an access gate)
_unpublishedbooleanoptionalMachine-managed publish gate (ADR-0045 §3) — true = unpublished, externally unobservable. Written by AI materialization, cleared by publish-drafts. Never authored.
navigation({ id: string; label: string | Record<string, string>; icon?: string; order?: number; … } | { type: 'separator'; id?: string; order?: number } | … +7 more)[]optionalFull navigation tree for the app sidebar
areas{ id: string; label: string | Record<string, string>; icon?: string; description?: string | Record<string, string>; … }[]optionalNavigation areas for partitioning navigation by business domain
contextSelectors{ id: string; label: string | Record<string, string>; icon?: string; optionsSource: object; … }[]optionalApp-level scope dropdowns whose value is injected into nav items as {<id>} template vars
homePageIdneveroptional[REMOVED] app.homePageId was removed in @objectstack/spec 17.0.0 (#4667, #4709, ADR-0049). objectui's console did read it before v17 (resolveLandingRoute), so this key had a consumer — it was retired because the capability is better expressed on the navigation item itself than as an ID cross-reference that silently falls back when it dangles. An app's landing page IS its first navigation item (by order), and the root landing follows isDefault routing. Delete the key; to change where an app opens, reorder navigation so the intended entry is first, and set isDefault on the app that should own the root landing. Run os migrate meta --from 16 to rewrite existing sources automatically.
requiredPermissionsstring[]optionalPermissions required to access this app
objectsneveroptional[REMOVED] App.objects was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit — never read; the spec itself labelled it "config file convenience"). Objects belong to the stack (defineStack({ objects })); an app reaches them through its navigation items. Delete the key. Run os migrate meta --from 16 to rewrite existing sources automatically.
apisneveroptional[REMOVED] App.apis was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit — never read). Delete the key and declare the endpoint one level up, on the STACK: defineStack({ apis }). That surface EXECUTES from protocol 17 (#5040). Between #4936 and the executor landing it was refused wholesale — nothing mounted a declared path, so every key including authRequired parsed and gated nothing — and that blanket refusal is now narrowed to five per-endpoint publish gates (namespace, supported target, mapping, policy, uniqueness): an endpoint that passes them is mounted and serves traffic as soon as the stack is published. Two things to get right when you move it: the path must sit inside your own carve-out, /api/v1/apps/<manifest.namespace>/<subpath> with an explicit manifest.namespace (ADR-0121 D1/D2), and authRequired defaults to true — an explicit false is the only thing that opens anonymous access, and ADR-0121 D6 then requires an armed rateLimit: { enabled: true, windowMs, maxRequests }. Read the declarative-apis-endpoints-live entry of the protocol upgrade guide first; it is a security review, not a rename. A route that genuinely needs handler CODE still belongs in a plugin manifest contributes.routes entry. Run os migrate meta --from 16 to rewrite existing sources automatically.
sharingneveroptional[REMOVED] App.sharing was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit / ADR-0049 enforce-or-remove) — no public-app route ever read it, so it declared sharing that did not exist. Public access is granted per FORM VIEW (FormView.sharing, the public-data-collection surface). Delete the key. Run os migrate meta --from 16 to rewrite existing sources automatically.
embedneveroptional[REMOVED] App.embed was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit / ADR-0049) — no iframe route ever read it. Embedding is a per-form-view surface (FormView.sharing), not an app-level switch. Delete the key. Run os migrate meta --from 16 to rewrite existing sources automatically.
mobileNavigationneveroptional[REMOVED] App.mobileNavigation was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit — fully unimplemented; no renderer, including packages/mobile, ever read it). Delete the key; the block returns if/when a real mobile navigation ships. Run os migrate meta --from 16 to rewrite existing sources automatically.
defaultAgentstringoptionalPlatform agent bound to this app's ambient chat ('ask' is the implicit default; 'build' for authoring surfaces) — ADR-0063 §1
arianeveroptional[REMOVED] App.aria was removed in @objectstack/spec 17.0.0 (2026-06 liveness audit — no renderer read app-level ARIA attributes). Declare aria on the page component that renders the DOM node instead (page.components[].aria; page.aria and the list view aria are live too). Delete the key. Run os migrate meta --from 16 to rewrite existing sources automatically.
protection{ lock: Enum<'none' | 'no-overlay' | 'no-delete' | 'full'>; reason: string; docsUrl?: string }optionalPackage author protection block — lock policy for this app.
_lockEnum<'none' | 'no-overlay' | 'no-delete' | 'full'>optionalItem-level lock — controls overlay & delete (ADR-0010).
_lockReasonstringoptionalHuman-readable reason shown when a write is refused by _lock.
_lockSourceEnum<'artifact' | 'package' | 'env-forced'>optionalLayer that set _lock (artifact | package | env-forced).
_provenanceEnum<'package' | 'org' | 'env-forced'>optionalOrigin of the item (package | org | env-forced).
_packageIdstringoptionalOwning package machine id.
_packageVersionstringoptionalOwning package version.
_lockDocsUrlstringoptionalOptional documentation link surfaced next to _lockReason.

AppBranding

Properties

PropertyTypeRequiredDescription
primaryColorstringoptionalPrimary theme color hex code
accentColorstringoptionalAccent color hex code (highlights, active states). Declared to match the objectui ConsoleLayout read of branding.accentColor (inverse-drift fix, liveness audit #1878/#1891/#1894).
logostringoptionalCustom logo URL for this app
faviconstringoptionalCustom favicon URL for this app

AppContextSelector

Properties

PropertyTypeRequiredDescription
idstringSelector id; selected value is exposed as the nav template var {<id>}
labelstring | Record<string, string>Dropdown label
iconstringoptionalIcon name
optionsSource{ endpoint: string; valueKey: string; labelKey: string; filter?: object[] }Option data source
allValuestringSentinel value meaning "no concrete selection yet" (empty string is almost always right)
persistEnum<'query' | 'session' | 'none'>Persist selection via URL query, sessionStorage, or not at all

ComponentNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'component'
componentRefstringComponent registry key (e.g. "metadata:directory")
paramsRecord<string, any>optionalProps passed to the component

DashboardNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'dashboard'
dashboardNamestringTarget dashboard name

GroupNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'group'
expandedbooleanoptionalDefault expansion state in sidebar

Properties

PropertyTypeRequiredDescription
idstringUnique area identifier (lowercase snake_case)
labelstring | Record<string, string>Area display label
iconstringoptionalArea icon name
descriptionstring | Record<string, string>optionalArea description
navigation({ id: string; label: string | Record<string, string>; icon?: string; order?: number; … } | { type: 'separator'; id?: string; order?: number } | … +7 more)[]Navigation items within this area

A navigation contribution: a package injecting nav items into an app it does not own (ADR-0029 D7)

Properties

PropertyTypeRequiredDescription
appstringTarget app name to contribute navigation into (e.g. "setup")
groupstringoptionalTarget group nav-item id to append into (e.g. "group_integrations"); omit to append at the app top level
priorityintegeroptionalMerge priority within the target group — lower applied first (matches object extender priority)
items({ id: string; label: string | Record<string, string>; icon?: string; order?: number; … } | { type: 'separator'; id?: string; order?: number } | … +7 more)[]Navigation items contributed into the target app/group

Union Options

This schema accepts one of the following structures:

Option 1

Type: object

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'object'
objectNamestringTarget object name
viewNamestringoptionalDefault list view to open. Defaults to "all". Ignored when recordId is set.
recordIdstringoptionalNavigate directly to this record id instead of the list view. Supports template vars: {current_user_id}, {current_org_id}.
recordModeEnum<'view' | 'edit'>optionalOpen the record in view (default) or edit mode. Only meaningful when recordId is set.
filtersRecord<string, string>optionalURL filter conditions — targets the /:objectName/data bare surface via filter[<field>]=<value> params instead of a saved view. Values support template vars {current_user_id}, {current_org_id}. Mutually exclusive with recordId/viewName.
runActionstringoptionalAuto-run this declared action once on arrival at the object's list surface (deep-link "navigate = run action", #4848). Must name an action defined in the stack; validated by defineStack and lint. Not combinable with recordId.
children[NavigationItem](#navigationitem)[]optionalChild navigation items (e.g. specific views)

Option 2

Type: dashboard

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'dashboard'
dashboardNamestringTarget dashboard name

Option 3

Type: page

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'page'
pageNamestringTarget custom page component name
paramsRecord<string, any>optionalParameters passed to the page context

Option 4

Type: url

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'url'
urlstringTarget external URL
targetEnum<'_self' | '_blank'>optionalLink target window

Option 5

Type: report

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'report'
reportNamestringTarget report name

Option 6

Type: action

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'action'
actionDef{ actionName: string; params?: Record<string, any> }Action definition to execute when clicked

Option 7

Type: component

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'component'
componentRefstringComponent registry key (e.g. "metadata:directory")
paramsRecord<string, any>optionalProps passed to the component

Option 8

Type: separator

Properties

PropertyTypeRequiredDescription
type'separator'
idstringoptionalOptional id for the separator
ordernumberoptionalSort order within the same level (lower = first)

Option 9

Type: group

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'group'
expandedbooleanoptionalDefault expansion state in sidebar
children[NavigationItem](#navigationitem)[]Child navigation items


ObjectNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'object'
objectNamestringTarget object name
viewNamestringoptionalDefault list view to open. Defaults to "all". Ignored when recordId is set.
recordIdstringoptionalNavigate directly to this record id instead of the list view. Supports template vars: {current_user_id}, {current_org_id}.
recordModeEnum<'view' | 'edit'>optionalOpen the record in view (default) or edit mode. Only meaningful when recordId is set.
filtersRecord<string, string>optionalURL filter conditions — targets the /:objectName/data bare surface via filter[<field>]=<value> params instead of a saved view. Values support template vars {current_user_id}, {current_org_id}. Mutually exclusive with recordId/viewName.
runActionstringoptionalAuto-run this declared action once on arrival at the object's list surface (deep-link "navigate = run action", #4848). Must name an action defined in the stack; validated by defineStack and lint. Not combinable with recordId.

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'page'
pageNamestringTarget custom page component name
paramsRecord<string, any>optionalParameters passed to the page context

ReportNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'report'
reportNamestringTarget report name

UrlNavItem

Properties

PropertyTypeRequiredDescription
idstringUnique identifier for this navigation item (lowercase snake_case)
labelstring | Record<string, string>Display proper label
iconstringoptionalIcon name
ordernumberoptionalSort order within the same level (lower = first)
badgestring | numberoptionalBadge text or count displayed on the item
badgeVariantEnum<'default' | 'secondary' | 'destructive' | 'outline'>optionalVisual variant of the nav badge. Declared to match the objectui NavigationRenderer read (inverse-drift fix, liveness audit #1878/#1891/#1894).
visiblestring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalVisibility predicate (CEL). e.g. P'org_admin' in current_user.positions
requiredPermissionsstring[]optionalPermissions required to access this item
requiresObjectstringoptionalHide/disable this entry unless the named object is registered in the runtime
requiresServicestringoptionalHide/disable this entry unless the named kernel service is registered
type'url'
urlstringTarget external URL
targetEnum<'_self' | '_blank'>optionalLink target window

On this page