Features and UI
These environment variables decide which parts of DIAL Chat users see: the UI features, the role-gated features, the Catalog, the start screen and announcements, seasonal celebrations, and the usage views. This reference is for platform engineers who tailor Chat for their organization; it assumes you know how DIAL Chat is configured.
UI features
ENABLED_UI_FEATURES is a comma-separated list of UI feature keys. When set, it replaces the built-in default set; it does not add to it. When unset or empty, the defaults apply.
ENABLED_UI_FEATURES=header,conversations-section,catalog,file-manager,prompts,skills,likes,voice-input
- Unknown keys are dropped with a warning. If every key is unknown, the built-in defaults apply.
custom-applicationsis still accepted and resolves toschema-apps, with a deprecation warning.- An overlay host that passes its own
enabledFeaturesoverrides this list for that embed. See Chat Overlay API.
Keys enabled by default
header, conversations-section, conversations-panel-toggle, showConversationsSectionByDefault, attachments-manager, likes, dislike-comment, input-files, live-chat-interaction, empty-chat-settings, chat-settings, removable-tools, conversations-sharing, applications-sharing, toolsets-sharing, conversations-publishing, schema-apps, code-apps, catalog, file-manager, toolsets, custom-apps, prompts, skills, voice-input, conversation-drafts.
Because the list replaces the defaults, a deployment that sets ENABLED_UI_FEATURES must name every default key it wants to keep.
Keys you turn on
These keys are off by default: hide-custom-app-creation, disabled-send, skip-focus-chat-input-onload, disallow-change-agent, hide-change-agent, hide-conversations-filter, hide-new-conversation, hide-empty-chat-change-agent, catalog-hide-my-apps, catalog-table-view, hide-delete-user-message, hide-edit-user-message, hide-regenerate-assistant-message, hide-user-menu, hide-user-menu-identity, hide-user-settings, hide-keyboard-shortcuts, hide-navigation-menu, show-all-starters, starters-below-greeting, hide-greeting, hide-footer-version, show-agent-description, disable-input-history-navigation, hide-conversation-export, hide-conversation-import, hide-settings-page, hide-usage-page, show-header-logo, hide-starter-icon.
Keys with a documented effect
| Key | Effect |
|---|---|
chat-settings | On by default. The master switch for Chat settings (temperature, system prompt, response format) in the input's + menu. Drop it to remove those settings everywhere. |
empty-chat-settings | On by default. Narrows Chat settings to the empty-chat screen; it has no effect without chat-settings. |
removable-tools | On by default. Lets users remove tool chips from the input and add them back from + → Tools. Without it, each chip is a fixed on/off toggle. |
conversation-drafts | On by default. Keeps what the user typed in a conversation for the browser tab session, until it is sent, the conversation is deleted, or the user logs out. |
hide-custom-app-creation | Hides the create entries for custom apps and Quick Apps, whatever custom-apps and schema-apps say. |
show-all-starters | Shows every configured conversation starter instead of the default subset. |
starters-below-greeting | Moves the starters and their intro text between the greeting and the input. |
hide-greeting | Removes the time-of-day greeting, and with it WELCOME_SCREEN_DESCRIPTION. |
show-agent-description | Shows the selected agent's own description, as Markdown, above the greeting on the empty-chat screen. |
show-header-logo | Shows the theme logo in the center of the desktop top bar, and in the mobile header when header is off. |
hide-footer-version | Hides the version label in the footer. |
disable-input-history-navigation | Up and Down in the input move the caret instead of recalling sent messages. |
hide-conversation-export, hide-conversation-import | Hide conversation export or import. They hide the entry points only; the APIs stay available. |
hide-settings-page | Hides Settings in the user menu and redirects /settings to /. Stored preferences keep their values. |
hide-usage-page | Hides only the Usage tab of Settings and the Full usage link of the usage popover. |
hide-user-menu-identity | Hides the avatar-and-name row of the user menu, keeping Settings and Log out. |
Role-gated features
| Variable | Default | Description |
|---|---|---|
PROJECTS_ENABLED | false | Turns on Projects: the Projects pages, their navigation entry, and the /api/v1/projects endpoints. When off, the pages show Not Found and the endpoints answer 403. |
PROJECTS_ENABLED_ROLES | — | Comma-separated roles allowed to use Projects. Unset means every signed-in user. |
SCHEDULED_TASKS_ENABLED | false | Turns on the Scheduled Tasks page and its navigation entry. When off, the scheduled-task API answers 403. |
SCHEDULED_TASKS_ENABLED_ROLES | — | Comma-separated roles allowed to use Scheduled Tasks. Unset means every signed-in user. |
LIVE_CHAT_INTERACTION_ENABLED | false | Turns on interactive toolset sign-in: when a completion needs toolset credentials mid-stream, Chat shows a sign-in dialog. |
LIVE_CHAT_INTERACTION_ENABLED_ROLES | — | Comma-separated roles allowed to use interactive sign-in. Unset means every signed-in user. |
Roles are read from the provider's roles claim; see Roles and administrators.
Scheduled tasks
Scheduled tasks run through DIAL Scheduler, a DIAL application with routes. Its configuration reference covers deployment, application registration, administrator consent, and offline credentials.
| Variable | Default | Description |
|---|---|---|
SCHEDULER_APP_ID | — | The DIAL Core application ID of DIAL Scheduler. Without it, the scheduled-task endpoints answer 503. |
SCHEDULER_SERVICE_ID | — | The service_id sent to DIAL Scheduler when a schedule is created or updated. Without it, create and update answer 503. |
SCHEDULER_SERVICE_TIMEOUT_MS | 10000 | The timeout of requests to DIAL Scheduler, in milliseconds. |
Catalog
| Variable | Default | Description |
|---|---|---|
FEATURED_MODEL_IDS | — | Comma-separated model or application IDs marked as featured in the Catalog. Matching is exact and case-sensitive, for example gpt-4o,dial-rag. |
HIDDEN_ENTITY_TAGS | [] | Comma-separated topic tags. Models and toolsets with one of them are hidden in the Catalog and the model selector, but stay available in the Quick App form. |
CATALOG_CREATION_ROLES | Unrestricted | A server-only JSON policy that restricts who may create Catalog entities. See Catalog creation roles. |
Catalog creation roles
CATALOG_CREATION_ROLES limits who may create entities, by type and by exact application schema ID. Browsing, using, editing, sharing, and publishing existing entities are not affected.
{
"types": {
"custom-app": ["developers"],
"schema-app": ["app-authors"],
"toolset": ["integrators"],
"prompt": ["prompt-authors"],
"skill": ["skill-authors"]
},
"schemas": {
"https://example.com/schemas/runner-a": ["team-a"]
}
}
typestakescustom-app,schema-app,toolset,prompt, andskill. Any other key fails startup.schemastakes exact schema IDs, compared as written and case-sensitively. Copy them fromGET /api/v1/application-schemas.- Rules. A user passes a rule when they hold any of its roles. A schema app needs both its
schema-apprule and its schema rule. A missing rule restricts nothing. - No bypass. Administrators get no exception; list their role to let them create.
- Enforcement. The policy hides create entry points in the UI; DIAL Core stays the authority for direct API calls.
The roles above are examples, not defaults. An invalid policy fails startup without echoing its value.
Start screen, footer, and announcements
| Variable | Default | Description |
|---|---|---|
WELCOME_SCREEN_DESCRIPTION | — | Plain text shown below the greeting on the new-chat screen. Never read as markup. |
FOOTER_HTML_MESSAGE | — | HTML shown in the footer of the input area and the mobile user panel. %%VERSION%% is replaced with the Chat version. Sanitized to a, span, strong, u, em, br, and p. |
ANNOUNCEMENT_TITLE | — | The bold heading of the announcement banner at the top of the app, as plain text. |
ANNOUNCEMENT_DESCRIPTION | — | The text after the banner title. Sanitized to a, b, strong, em, br, and span; links open in a new tab. Long text collapses to one line that users can expand. |
ANNOUNCEMENTS | [] | A JSON array behind the banner's "+N announcements" popover: [{"title": "…", "description": "…", "link": {"label": "…", "href": "https://…"}}]. Up to 10 entries; invalid entries are dropped and logged. |
ANNOUNCEMENT_HTML_MESSAGE | — | Deprecated. The legacy centered banner. Ignored when ANNOUNCEMENT_TITLE or ANNOUNCEMENT_DESCRIPTION is set. |
Set ANNOUNCEMENT_TITLE or ANNOUNCEMENT_DESCRIPTION to show the banner. A user who closes it keeps it closed until the content changes; editing the title, the description, or any ANNOUNCEMENTS entry shows it to everyone again.
Seasonal celebrations
| Variable | Default | Description |
|---|---|---|
UI_EVENT | — | The start-page celebration: halloween or new-year. Unset or none turns celebrations off. |
UI_EVENT_ENABLED_BY_DEFAULT | true | The initial state of the Seasonal celebrations switch in Settings → Preferences for users who have not chosen. Only false, 0, or no turn it off. |
UI_EVENT_DELIVERY_MODE | bundled | bundled plays only the scenes built into Chat. prefer-external lets the scenes and events listed below come from packs served at <THEMES_CONFIG_URL>/celebrations/. |
UI_EVENT_DELIVERY_REVISION | 0 | Change it to restart a scene that is playing under the previous delivery policy. |
UI_EVENT_EXTERNAL_SCENES | — | Comma-separated eventId/sceneId pairs whose scene may come from a pack, for example new-year/snowman-delivery. |
UI_EVENT_EXTERNAL_EVENTS | — | Comma-separated event IDs with no built-in module that may come entirely from a pack, for example company-anniversary. |
Celebrations appear on the start page only and respect reduced motion.
Usage and limits
| Variable | Default | Description |
|---|---|---|
USAGE_LIMITS_CONTROL_ENABLED | false | When true, the input shows the token and cost usage dial beside the model selector. When false, a banner above the input warns about limits instead. |
USAGE_LIMITS_WARNING_THRESHOLD_PERCENT | 75 | An integer from 1 to 99: the share of a day, week, or month limit at which the banner appears. |
USER_USAGE_DEPLOYMENT_TYPES | model,application | The deployment kinds the usage and limits views report: model, application, or both. Application rows need a DIAL Core that attributes cost to applications. |
File Manager
| Variable | Default | Description |
|---|---|---|
FILE_MANAGER_AVAILABLE_TABS | all,my_files,shared,organization | The File Manager tabs. all adds a combined tab and appears only when at least two source tabs are on. Unknown values are dropped. |
Further reading
- Models and generation — the default deployment, the Responses API, and the utility model
- Chat Overlay API — feature keys for an embedded Chat
- Security and embedding — visualizers and MCP Apps
- DIAL Chat configuration: Authentication — OpenID Connect sign-in, sessions, and roles in Chat