ObjectStackObjectStack

Settings Manifest

Settings Manifest protocol schemas

Settings Manifest Protocol

Declarative description of a single namespace of platform settings

(e.g. mail, branding, feature_flags). Modelled on Apple's

Settings.bundle/Root.plist PreferenceSpecifiers — a small, closed

set of specifier types that the system-owned renderer turns into a

uniform Settings page.

Storage for values is the generic sys_setting K/V table; manifests

themselves are NEVER persisted — they ship with plugin code.

See ADR-0007 (Settings Manifest + K/V Store + Resolver).

Resolution order (handled by SettingsService.get):

  1. process.env override (source='env', locked=true)

  2. sys_setting scope=tenant

  3. sys_setting scope=user

  4. manifest specifier.default

Source: packages/spec/src/system/settings-manifest.zod.ts

TypeScript Usage

import { ResolvedSettingValue, SettingsActionResult, SpecifierHandler, SpecifierOption, SpecifierScope, SpecifierType } from '@objectstack/spec/system';
import type { ResolvedSettingValue, SettingsActionResult, SpecifierHandler, SpecifierOption, SpecifierScope, SpecifierType } from '@objectstack/spec/system';

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

ResolvedSettingValue

Properties

PropertyTypeRequiredDescription
valueanyEffective value (post-resolution)
sourceEnum<'env' | 'global' | 'tenant' | 'user' | 'default'>Resolution source
lockedbooleanCannot be overridden from UI
lockedReasonstringoptionalReason for the lock (UI tooltip)
cascadeChainObject[]optionalFull cascade trace (env → global → tenant → user → default)

SettingsActionResult

Properties

PropertyTypeRequiredDescription
okbooleanSuccess flag
messagestringoptionalToast message
severityEnum<'info' | 'success' | 'warning' | 'error'>optional
detailsanyoptionalOptional structured detail (renderer-defined)

SpecifierHandler

Union Options

This schema accepts one of the following structures:

Option 1

Properties

PropertyTypeRequiredDescription
kindstring
methodEnum<'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'>
urlstringEndpoint URL; supports ${...} interpolation
bodyRecord<string, any>optionalOptional JSON body; supports ${...} interpolation
confirmTextstringoptionalConfirm dialog text before invoking (omit = no confirm)

Option 2

Properties

PropertyTypeRequiredDescription
kindstring
namestringRegistered action machine name
paramsRecord<string, any>optional
confirmTextstringoptionalDisplay label (plain string; i18n keys are auto-generated by the framework)

Option 3

Properties

PropertyTypeRequiredDescription
kindstring
urlstringTarget URL or in-app route
targetEnum<'_self' | '_blank'>


SpecifierOption

Properties

PropertyTypeRequiredDescription
valuestring | number | booleanStored value
labelstringDisplay label
descriptionstringoptionalOptional helper text
iconstringoptionalOptional Lucide icon name

SpecifierScope

Allowed Values

  • global
  • tenant
  • user

SpecifierType

Allowed Values

  • group
  • child_pane
  • info_banner
  • title_value
  • text
  • textarea
  • password
  • email
  • url
  • phone
  • number
  • toggle
  • select
  • radio
  • multiselect
  • slider
  • color
  • json
  • action_button

On this page