These pages describe application settings. Defaults come from each app's src/environments/settings.ts file. Schemas describe the fields available to settings forms, but some settings are read directly by components and are not in a schema. A dash in a default column means that the app does not define a value there. The description gives any fallback used by the component.
| App | Doc | Notes |
|---|---|---|
| Workplace | workplace.md | Staff booking app |
| Concierge | concierge.md | Front-of-house management |
| Booking Panel | booking-panel.md | Room booking panel |
| Assistant Panel | assistant-panel.md | |
| Caterer UI | caterer-ui.md | External caterer interface |
| Control | control.md | Room behaviour is mostly configured on the System, not app settings |
| Map Kiosk | map-kiosk.md | Wayfinding kiosk |
| Visitor Kiosk | visitor-kiosk.md | Visitor check-in kiosk |
| Outlook Add-in | outlook-addin.md | |
| Signage | signage.md | Display player |
| Signage Manager | signage-manager.md | Playlist/media admin |
| Stagehand | stagehand.md | |
| Timetable | timetable.md | |
| Survey | survey.md | Settings belong on the organisation zone |
| Enrolment | enrolment.md | Also reads the domain config enrolment object |
| App Loader | app-loader.md | Build-time settings; no zone metadata |
The Map Studio, public and redirect apps have no configurable runtime settings.
For apps that use the shared organisation loader, put settings in Backoffice zone metadata. The metadata key is <app-name>_app, such as workplace_app, concierge_app or booking-panel_app. The loader derives the app name from the URL pathname, removes slashes, and converts it to lower case. If the pathname is empty, it uses the configured application name. A custom deployment path can therefore change the metadata key.
The app prefix used in code, such as app.events.multiple_spaces, is a settings lookup prefix. Put this object directly in the workplace_app metadata details field:
{
"events": {
"multiple_spaces": true
}
}The shared loader checks these sources in order. The first value that is not null or undefined wins:
- A local browser debug override for the exact
app.*key. - The active building's application metadata.
- The active region's application metadata.
- The organisation's
settingsmetadata, shared across apps. - The organisation's application metadata.
- The app's build-time defaults.
The organisation's settings metadata uses the same object format. It takes priority over the organisation's application metadata. Level metadata is not part of this override list. Booking Panel, Signage Manager and Survey disable region and building metadata loading by default, so only the organisation sources apply. Enrolment also sets an override list from domain configuration during startup. See those app pages for the exceptions.
The service resolves each requested key separately. false, 0, an empty string and an empty array are valid overrides. An object or array returned for one key replaces the value from lower-priority sources; the service does not combine those values. For example, supply the full list when you override features.
Root settings such as composer, mock and service_worker are outside app. Zone application metadata does not override them. Keep connection and build settings in the app's environment file.
The loader caches zone data in the browser. Reload the app after a metadata change. If cached values remain, use window.app.org.reloadMetadata() in debug mode to clear the organisation cache and fetch it again.
Apps that use the shared settings service read two maps of CSS variables. Each key is a variable name from shared/styles/application.css without the -- prefix. Each value is a CSS colour.
| Setting | Type | Default | Description |
|---|---|---|---|
css_variables |
object | – | Colour overrides for the light theme. In the dark theme, they apply only to variables that the dark theme does not set. |
css_variables_dark |
object | – | Colour overrides for the dark theme. Repeat a brand colour here to use it in the two themes. |
{
"css_variables": {
"brand-100": "#00afd0",
"secondary": "#006a9d"
},
"css_variables_dark": {
"brand-100": "#00afd0",
"secondary": "#006a9d",
"base-100": "oklch(23% 0.034 264.665)"
}
}The loading screen shows before the zone settings load. Its colours come from the config object of the domain (authority) in Backoffice, not from zone metadata.
| Key | Type | Default | Description |
|---|---|---|---|
loading_gradient |
string[] | blue gradient | Two or more CSS colours for the background of the loading screen, from left to right. Hex, named, rgb(), hsl() and oklch() colours are valid. The app ignores the list if a value is not a colour. |
{
"loading_gradient": ["#f15b55", "#f68c50"]
}The browser stores the last gradient, so a reload shows it immediately. After a change to the domain config, the first load shows the old colours for about one second.
Apps with a settings debug panel use Ctrl+Alt+Shift+S to open it. A saved override applies only in that browser. It does not update Backoffice. Overrides persist in local storage under PLACEOS.setting_overrides and take priority over zone settings.
Overrides use exact keys. An override for app.events does not override a lookup for app.events.multiple_spaces. Use the exact setting key. Use Clear all overrides in the panel to restore the configured values. Apps on the same origin share this local storage key.