Application Settings
What It Is
Application settings are the tenant-wide operational defaults managed from the Application settings screen. They define how the tenant behaves in broad areas such as:
- shell and navigation behavior
- localization defaults
- views and forms defaults
- onboarding and identity-management rules
- security and deletion behavior
- logging
- feature flags and feature keys
These settings are different from per-resource configuration such as Views, Modules, or Queries. They are also different from Customization, which focuses more on branding, theme, assets, mail transport, SMS, and environment variables.
Why It Matters
These settings shape the environment in which the whole tenant runs.
Even when no type, query, or view changes, application settings can still change:
- how navigation is laid out
- what users see as default viewers
- how dates and times feel across the UI
- how registration and onboarding work
- how APIs behave
- whether deletion is soft or real
Poor defaults here create friction everywhere. Good defaults quietly improve the whole tenant.
How These Settings Are Stored
These settings are stored as tenant configuration values and written through Config::set(...), not through the environment-variable store used by customization variables.
That means:
- this screen manages tenant configuration keys
- the settings act as reserved configuration keys with known defaults
- many parts of the platform read them directly as runtime defaults
This is useful to understand because it explains why these settings feel "built into" the tenant rather than like arbitrary dynamic variables.
How To Read This Chapter
The Application settings screen is organized into these groups:
- Application
- Localization
- Views
- Identity management
- Security
- Logging
- Feature keys
This chapter follows the same structure and explains each option in terms of:
- what it controls
- how to configure it
- what effect it has at runtime
- when to use it
Use this chapter together with:
What This Chapter Covers Versus Customization
This screen covers behavioral and operational defaults.
Typical examples:
- default locale
- default viewers
- registration policy
- password rules
- logging switches
Customization covers different concerns, such as:
- app title
- logos
- icon asset files
- colors and theme
- mail transport settings
- SMS settings
- environment variables
This distinction matters because implementers often expect branding settings here, but those live elsewhere.
Application Group
navigationPosition
What it controls:
- whether the main tenant navigation is shown on the
topor on theleft
How to configure it:
- choose
topfor a top navigation layout - choose
leftfor a sidebar-oriented layout
What it affects:
- the main application shell
- the navigation wrapper used in the standard layout
- how users orient themselves inside the tenant
Use left when:
- the tenant has many modules
- navigation should stay persistent and space-efficient
Use top when:
- the tenant has a smaller navigation surface
- the design should feel more website-like or dashboard-like
iconsBootstrapIcons
What it controls:
- whether Bootstrap Icons are loaded into the tenant frontend
How to configure it:
- enable it if the tenant uses Bootstrap Icons in modules, views, canvases, buttons, or templates
- disable it if the icon library is not needed
What it affects:
- the
<head>asset loading for Bootstrap Icons
Use it when:
- builder-configured icons or templates rely on Bootstrap icon classes such as
bi bi-table
iconsFontAwesome
What it controls:
- whether Font Awesome assets are loaded into the tenant frontend
How to configure it:
- enable it when templates or UI customizations rely on Font Awesome classes
- disable it if the tenant standardizes on Bootstrap Icons only
What it affects:
- the
<head>asset loading for Font Awesome styles
Practical guidance:
- avoid loading unnecessary icon libraries if the tenant already has a clear icon standard
Localization Group
locale
What it controls:
- the tenant's default language/locale
How to configure it:
- choose one of the supported locales currently exposed by the settings form, such as
enorcs
What it affects:
- the UI language baseline
- translator output
- date/time localization defaults in several places
- template language in the standard HTML shell
Use it when:
- the tenant should have one primary operating language
Important note:
- user preferences may still override some locale behavior at runtime, but this setting remains the tenant default
firstDay
What it controls:
- the first day of week used by calendar-oriented UI
How to configure it:
- choose
0for Sunday - choose
1for Monday
What it affects:
- calendar view layout and expectation
Use it when:
- the tenant should match local business conventions
businessDays
What it controls:
- the days treated as business days in business-time-aware UI
How to configure it:
- select one or more weekday codes from the multi-select
- the field is taggable, but in normal use you should stick to weekday values:
1Monday2Tuesday3Wednesday4Thursday5Friday6Saturday0Sunday
What it affects:
- calendar business-hours display
- work-week-like expectations in the UI
Use it when:
- the tenant has non-standard work weeks
- the organization operates on region-specific business-day conventions
businessHoursStart
What it controls:
- the default business opening time
How to configure it:
- enter a time string such as
8:00or09:00
What it affects:
- calendar business-hour display range
Use it when:
- working hours should be visually emphasized in scheduling views
businessHoursEnd
What it controls:
- the default business closing time
How to configure it:
- enter a time string such as
18:00or17:30
What it affects:
- calendar business-hour display range end
Use it when:
- schedule planning should align with typical operating hours
decimalSeparator
What it controls:
- the default decimal separator for numeric formatting conventions
How to configure it:
- enter the desired separator, typically
,or.
What it affects:
- number presentation expectations in user-facing contexts
Use it when:
- the tenant should match regional numeric conventions
defaultTimeZone
What it controls:
- the tenant's default time zone
How to configure it:
- choose one IANA time zone identifier such as
Europe/Prague,UTC, orAmerica/New_York
What it affects:
- runtime default timezone setup
- date/time interpretation across many screens and processes
Use it when:
- the tenant should operate from one primary business timezone
Be careful:
- changing this after a tenant is heavily used can alter how times are perceived across the system
timeFormat
What it controls:
- the preferred default time display format
How to configure it:
- choose the 12-hour or 24-hour format offered by the form
Current options:
g:i afor 12-hour timeH:ifor 24-hour time
What it affects:
- human-readable datetime rendering that falls back to tenant defaults
Use it when:
- the tenant should match local time-reading habits
Views Group
viewDefaultPageLength
What it controls:
- the default number of items shown per page in list-oriented data views
How to configure it:
- enter a positive integer such as
20,50, or100
What it affects:
- default pagination in views and APIs that use tenant defaults for page length
Use it when:
- the tenant should favor denser operational lists or lighter default pages
Practical guidance:
- smaller values reduce initial page load complexity
- larger values reduce pagination frequency for power users
viewerListDefault
What it controls:
- the default list viewer used when no more specific list viewer is chosen
How to configure it:
- choose from the supported list viewer options shown in the form, such as:
tabletable_sortablelistkanbancalendarcardsfiles-listfiles-thumbnails
What it affects:
- default list rendering fallback in the view system
Use it when:
- the tenant has one dominant list interaction style
Be careful:
- this is a tenant-wide default, not a replacement for configuring individual views intentionally
viewerSingleDefault
What it controls:
- the default single-object viewer mode
How to configure it:
- choose one of the form options:
formpostpublic
What it affects:
- fallback behavior when rendering a single object
Use it when:
- the tenant should have a consistent default detail-view style
multipleItemsSeparator
What it controls:
- the fallback separator used when multiple values are rendered together
How to configure it:
- choose one of the provided separator styles:
- new line (
<br>) - comma
- pipe
- new line (
What it affects:
- rendering of multi-value outputs in property displays and similar contexts
Use it when:
- the tenant should consistently render multiple values with one preferred visual convention
formRenderMode
What it controls:
- the default form layout mode used by platform forms when no more specific mode is chosen
How to configure it:
- choose one of:
- vertical
- side-by-side
What it affects:
- how many forms are laid out by default
Use vertical when:
- forms should feel simpler and narrower
Use side-by-side when:
- denser enterprise-style forms are preferred
APIMultipleValuesReturnFormat
What it controls:
- how API responses should return multiple values by default
How to configure it:
- choose
arrayorobject
What it affects:
- API response shape for multi-value data
Why it matters:
- this is an integration contract setting
- changing it after integrations are live can break assumptions in external consumers
Use it carefully:
- prefer stability once external systems depend on the API
thumbnailSizeX
What it controls:
- the horizontal size used for generated thumbnails
How to configure it:
- enter an integer pixel value
What it affects:
- image thumbnail generation behavior for file/image properties
Use it when:
- the tenant needs more compact or larger thumbnail previews
thumbnailSizeY
What it controls:
- the vertical size used for generated thumbnails
How to configure it:
- enter an integer pixel value
What it affects:
- image thumbnail generation behavior for file/image properties
Use it together with:
thumbnailSizeX
checkboxDisplayEmptyAsFalse
What it controls:
- whether an empty checkbox-like value should be interpreted as
false
How to configure it:
- enable it if missing checkbox values should be treated as negative values
- disable it if empty and false should stay distinct
What it affects:
- checkbox-related property handling and output interpretation
Use it when:
- integrations or form behavior expect empty checkbox submissions to behave like explicit
false
Identity Management Group
allowedExternalIdentityProviders
What it controls:
- which external identity providers are allowed for sign-in or onboarding flows
How to configure it:
- select one or more providers from the multi-select
What it affects:
- login and identity flows that expose external providers
Use it when:
- the tenant wants to allow only approved external identity providers
allowApiPasswordReset
What it controls:
- whether password reset is allowed through the API-oriented password reset flow
How to configure it:
- enable or disable the checkbox
What it affects:
- API password reset capability exposed by the user module
Use it when:
- password reset should be available through API-supported flows
allowUserRegistrations
What it controls:
- whether external user self-registration is allowed
How to configure it:
- enable it to allow user-driven registration
- disable it to prevent public/self-service registration
What it affects:
- registration routes
- identity onboarding behavior
Important relationship:
- if this is disabled, the standard registration flow is blocked even if a custom registration link is configured elsewhere
customRegistrationLink
What it controls:
- a custom URL used as the registration link target
How to configure it:
- enter an external or alternate URL if registration should lead somewhere other than the standard tenant registration route
What it affects:
- login-page registration link behavior
Use it when:
- registration is handled outside the standard tenant registration screen
- onboarding should redirect to an external signup portal or another entry flow
customRegistrationLinkText
What it controls:
- the label shown for the custom registration link
How to configure it:
- enter the exact text users should see next to the login form
Use it when:
- the default "register" wording is not specific enough for the onboarding flow
allowedUserDomains
What it controls:
- which email domains are allowed during user self-registration
How to configure it:
- enter one or more domains in the taggable multi-select, such as:
example.compartner.org
What it affects:
- registration validation
- API and onboarding checks for allowed domains
Important behavior:
- an empty list means no domain restriction
- once values are added, only those domains are accepted
allowedUserRoles
What it controls:
- which roles a registering or requested user may choose or receive in registration-related flows
How to configure it:
- select one or more roles from the existing role list
What it affects:
- registration and user-creation constraints
Use it when:
- onboarding should be limited to a defined set of roles
defaultUserRoles
What it controls:
- which roles should be assigned by default during self-registration or external identity onboarding
How to configure it:
- select one or more roles from the role list
What it affects:
- automatic role assignment during registration/onboarding flows
Best practice:
- keep these aligned with
allowedUserRoles - use only the minimum roles necessary for a newly onboarded user
allowedUserGroups
What it controls:
- which groups are allowed in onboarding or requested group assignment flows
How to configure it:
- select one or more groups from the group list
What it affects:
- group assignment constraints during registration and related flows
defaultUserGroup
What it controls:
- the default group assigned to a newly registered or externally onboarded user
How to configure it:
- choose one group from the select field or leave it empty
What it affects:
- onboarding defaults for user grouping
Best practice:
- keep this aligned with
allowedUserGroups
Security Group
accessControlAllowOrigins
What it controls:
- which origins are allowed for CORS-style access to API endpoints
How to configure it:
- add one or more origins to the taggable multi-select, for example:
https://app.example.comhttps://admin.example.com
What it affects:
- API presenters and webhook-like endpoints that consult allowed origins
Important behavior:
- an empty list means no extra origins are explicitly allowed by this setting
Use it when:
- browser-based integrations need cross-origin access
Be careful:
- this is a security boundary
- allow only origins you trust
passwordRegex
What it controls:
- the regex pattern used to validate passwords against tenant rules
How to configure it:
- enter a valid regular-expression body describing the required password shape
Default intent:
- at least one number
- at least one lowercase letter
- at least one uppercase letter
- minimum length requirement
What it affects:
- password validation in reset and onboarding flows
- password-type property validation behavior where tenant rules apply
Use it when:
- the tenant needs stricter or differently explained password requirements
Be careful:
- invalid or overly strict regex rules can make onboarding or resets fail in confusing ways
passwordRegexExplanation
What it controls:
- the user-facing explanation of the password rule
How to configure it:
- enter a clear human-readable explanation that matches
passwordRegex
Why it matters:
- the regex is for validation
- this field is what users actually read
Best practice:
- always update this together with
passwordRegex
objectsRealDelete
What it controls:
- whether objects should be truly deleted rather than handled through softer deletion behavior
How to configure it:
- enable it for true destructive deletes
- disable it if the tenant should preserve deleted records through soft-delete-like behavior
What it affects:
- delete behavior in resource and object managers
Use it carefully:
- true deletion is operationally risky
- enable it only when retention and recovery expectations allow it
filesRealDelete
What it controls:
- whether files should be truly deleted from storage rather than only logically removed
How to configure it:
- enable it for physical file deletion
- disable it if file recovery or softer lifecycle handling is needed
What it affects:
- file and image deletion behavior
Use it carefully:
- like object real delete, this has data-retention consequences
defaultAccountExpirationTerm
What it controls:
- the default relative term used when calculating account expiration during onboarding-related flows
How to configure it:
- enter a relative time expression such as:
+5 minutes+7 days+30 days
What it affects:
- account expiration defaults during some user onboarding or identity flows
Use it when:
- temporary accounts or timed activation windows should have a default expiry rule
Logging Group
logApiRequests
What it controls:
- whether API requests should be logged
How to configure it:
- enable it when API observability is needed
- disable it to reduce log volume
Use it when:
- integrations need troubleshooting support
- auditability of API activity matters
logAutomationErrors
What it controls:
- whether automation errors should be logged centrally
How to configure it:
- enable it for stronger operational observability
- disable it if the tenant intentionally keeps automation logging minimal
What it affects:
- automation error logging behavior in the automation runtime
Use it when:
- automations are business-critical and failures need to be discoverable
logStructureQueries
What it controls:
- whether structure-related queries should be logged
How to configure it:
- enable it when low-level structure/query troubleshooting is needed
What it affects:
- certain lower-level structure-query diagnostics in resource handling
Use it when:
- investigating data-model or query-generation issues
Be careful:
- this is mainly a diagnostic switch, not a normal business setting
Feature Keys Group
The Application settings screen also exposes one text field per feature key defined by the platform.
In the current codebase, these feature keys are:
featureKey__customization_templatesfeatureKey__customization_scriptsfeatureKey__aiSidecar
What These Fields Control
They store inserted feature keys used to unlock gated capabilities.
How to configure them:
- enter the provided feature key value into the corresponding field
What they affect:
- access to customization templates
- access to customization scripts
- use of the AI sidecar feature
Important note:
- these fields are not ordinary convenience settings
- they participate in feature unlocking logic
Use them when:
- the tenant has been issued a valid feature key for the corresponding capability
Settings Relationships That Matter
Some settings make most sense in combination.
Registration Controls
Think of these together:
allowUserRegistrationscustomRegistrationLinkcustomRegistrationLinkTextallowedUserDomainsallowedUserRolesdefaultUserRolesallowedUserGroupsdefaultUserGroup
This whole cluster defines how external onboarding should work.
Tenant Shell Defaults
Think of these together:
navigationPositionlocaledefaultTimeZoneviewerListDefaultformRenderMode
These together define what the tenant "feels like" before any individual module or view customization is applied.
Destructive Behavior Controls
Think of these together:
objectsRealDeletefilesRealDelete- logging settings
These determine whether the tenant behaves conservatively or destructively in operational cleanup scenarios.
What Is Not Configurable Here
Some related values exist as tenant defaults but are not edited on this screen.
Examples include:
viewPageLengths- branding assets such as title and logos
- mail transport settings
- SMS gateway settings
- theme and color tokens
Those belong to config defaults or to Customization, not to the Application settings form itself.
Design Questions To Ask Before Changing Application Settings
- Is this a tenant-wide policy, or should it really be configured per view, module, or flow?
- Will changing this affect live integrations?
- Does this setting define a safe default, or a hard business restriction?
- If registration or identity settings change, do the chosen defaults still match the onboarding policy?
- If delete behavior changes, is the tenant ready for the retention consequences?
Best Practices
- Set localization and timezone defaults early in the tenant lifecycle.
- Keep API response-shape settings stable once integrations exist.
- Align onboarding settings as a coherent policy, not one field at a time.
- Treat
objectsRealDeleteandfilesRealDeleteas deliberate governance decisions. - Update
passwordRegexandpasswordRegexExplanationtogether. - Use logging switches intentionally, and turn on deep diagnostics only when operationally useful.