Interface Object Structure
Overview
The interface object allows for customization of various user interface elements within the application, including visibility and behavior settings for components such as menus, panels, and links. This section provides a detailed breakdown of the interface object structure.
These are fields under interface:
thememcpServersprivacyPolicytermsOfServicemodelSelectagentSelectorLimitparameterscontextUsagecontextCostcurrencypresetspromptsbookmarksmemoriesmultiConvoagentsremoteAgentsskillssharedLinksschedulestemporaryChattemporaryChatRetentiongeneralChatRetentionretentionModeretainAgentFilesautoSubmitFromUrlcustomWelcomecodeHighlightThrottleMsartifactUndockingrunCodewebSearchfileSearchfileCitationsfeedbackreplyNotificationsdefaultPinnedToolscomposerRecentFilessteerArmConfirmationTimeoutMsqueuedTurnReconciliationTimeoutMsqueuedSendLockTimeoutMspeoplePickermarketplace
Notes:
- The
interfaceconfigurations are applied globally within the application. - Default values are provided for most settings but can be overridden based on specific requirements or conditions.
- Conditional logic in the application can further modify these settings based on other configurations like model specifications.
Deprecated: permission side-effect fields
Several fields below (mcpServers, prompts, bookmarks, memories, multiConvo, agents, remoteAgents, skills, sharedLinks, schedules, temporaryChat, runCode, webSearch, fileSearch, fileCitations, peoplePicker, marketplace) don't just toggle UI, they seed role permissions in the database at startup, and only for the built-in USER role.
For ongoing management, use the LibreChat Admin Panel, which edits the permission matrix directly on each role (including custom roles). These YAML fields remain supported for bootstrapping a fresh instance or fully file-driven deployments, but should no longer be used as the primary way to manage feature permissions.
See Access Control for the full permission model.
Example
interface:
theme: librechat
mcpServers:
placeholder: 'MCP Servers'
use: true
create: true
share: false
public: false
configureObo: false
trustCheckbox:
label: 'I trust this server'
subLabel: 'Only enable servers you trust'
privacyPolicy:
externalUrl: 'https://example.com/privacy'
openNewTab: true
termsOfService:
externalUrl: 'https://example.com/terms'
openNewTab: true
modalAcceptance: true
modalTitle: 'Terms of Service'
modalContent: |
# Terms of Service
## Introduction
Welcome to LibreChat!
modelSelect: false
agentSelectorLimit: 10
parameters: true
contextUsage: true
contextCost: true
currency:
code: EUR
rate: 0.92
presets: false
prompts:
use: true
create: true
share: true
public: false
bookmarks: true
multiConvo: true
agents:
use: true
create: true
share: true
public: false
skills:
use: true
create: true
share: false
public: false
defaultActiveOnShare: false
sharedLinks:
create: true
share: true
public: false
snapshotFiles: true
schedules:
use: true
create: true
maxPerUser: 10
minIntervalMinutes: 60
autoDisableAfterFailures: 5
fireConcurrency: 5
customWelcome: 'Hey {{user.name}}! Welcome to LibreChat'
codeHighlightThrottleMs: 300
artifactUndocking: true
runCode: true
webSearch: true
fileSearch: true
fileCitations: true
feedback: true
defaultPinnedTools:
- artifacts
- execute_codetheme
Sets the deployment theme applied to every user, in both light and dark mode. Either the name of a bundled theme (librechat or clickhouse) or an inline theme definition with its own colors, radii, fonts, shadows and motion.
It outranks the REACT_APP_THEME_* build-time colors and users' stored themes, yields to the high-contrast modes, and is never saved to the user's browser. Removing it restores each user's own stored theme, or the REACT_APP_THEME_* colors when the client was built with them.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| theme | String or Object | A bundled theme name, or an inline theme definition with `version`, `name`, `modes` and `brands`. | theme: clickhouse |
Default: None (the default LibreChat theme, or the user's own theme)
Example:
interface:
theme: clickhouseSee Theme for the inline definition format, every appearance key with its default, the ClickHouse reference theme and how shared links pick their theme.
mcpServers
Deprecated for permission management. The
use,create,share, andpublicsub-keys seed role permissions at startup. Prefer the Admin Panel for managing MCP server permissions per role/group/user. TheplaceholderandtrustCheckboxsub-keys are unaffected.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| mcpServers | Object | Contains settings related to the MCP (Model Context Protocol) server selection interface and access control. | Allows for customization of the placeholder text, user permissions, and trust checkbox labels. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| placeholder | String | The placeholder text displayed in the MCP server selection dropdown when no server is selected. | MCP Servers |
| use | Boolean | Controls whether users have permission to use existing MCP servers. | true |
| create | Boolean | Controls whether users have permission to create new MCP servers. | true |
| share | Boolean | Controls whether users have permission to share MCP servers with other users. | false |
| public | Boolean | Controls whether users can share MCP servers publicly (visible to all users). | false |
| configureObo | Boolean | Controls whether users have permission to configure MCP server On-Behalf-Of token exchange. | false |
| toolsRefreshInterval | Number | Polling interval in milliseconds for refreshing MCP tool catalogs while MCP controls are visible. Set to 0 to disable polling. | 300000 |
| statusRefreshInterval | Number | Polling interval in milliseconds for refreshing MCP connection status while MCP controls are visible. Set to 0 to disable polling. | 30000 |
| trustCheckbox | Object | Customizable labels for the trust checkbox in the MCP server dialog. Supports simple strings or language-keyed objects for internationalization. | See below |
trustCheckbox Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| label | String or Object | The main label for the trust checkbox. Can be a simple string or a language-keyed object (e.g., { en: "I trust this server", es: "ConfÃo en este servidor" }). | |
| subLabel | String or Object | The sub-label (help text) for the trust checkbox. Can be a simple string or a language-keyed object for internationalization. |
Example:
interface:
mcpServers:
placeholder: 'Select MCP Server'
toolsRefreshInterval: 300000
statusRefreshInterval: 30000
use: true
create: true
share: false
configureObo: false
trustCheckbox:
label:
en: 'I trust this server'
es: 'ConfÃo en este servidor'
subLabel:
en: 'Only enable servers you trust'
es: 'Solo habilite servidores en los que confÃe'privacyPolicy
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| privacyPolicy | Object | Contains settings related to the privacy policy link provided in the user interface. | Allows for the specification of a custom URL and the option to open it in a new tab. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| externalUrl | String (URL) | The URL pointing to the privacy policy document. | |
| openNewTab | Boolean | Specifies whether the link should open in a new tab. |
Where the policy links appear
On the sign-in and registration screens, published policies appear as a consent sentence: "By continuing, you agree to the Terms of Service and acknowledge the Privacy Policy." If only one policy is published, the sentence names only that one. On the registration screen it sits under the submit button; on the sign-in screen it sits below the sign-in options.
In chat, the policy links appear under the message box on the welcome screen of a new chat, and are hidden once a conversation starts.
A policy whose externalUrl is empty or blank is treated as not published and is never shown. When termsOfService.modalAcceptance is true, the auth screens show plain policy links instead of the consent sentence, because users accept the terms explicitly in the dialog after signing in.
termsOfService
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| termsOfService | Object | Contains settings related to the terms of service link provided in the user interface. | Allows for the specification of a custom URL and the option to open it in a new tab, as well as a modal acceptance dialog for the terms of service. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| externalUrl | String (URL) | The URL pointing to the terms of service document. | https://librechat.ai/tos |
| openNewTab | Boolean | Specifies whether the link should open in a new tab. | true |
| modalAcceptance | Boolean | Specifies whether to show a modal terms and conditions dialog for users to accept in order to be able to use LibreChat. | true |
| modalTitle | String | Specifies a custom title for the modal terms and conditions dialog (optional). | Terms of Service |
| modalContent | String | Specifies the content of the modal terms and conditions dialog in MarkDown format. | See librechat.yaml.example for how to correctly format the multi-line parameter. |
When modal acceptance is enabled, LibreChat records both the acceptance state and the time it was accepted. After upgrading an existing deployment, run npm run migrate:terms-timestamp to backfill accepted users that do not have a timestamp. The migration asks for confirmation, processes all tenants, uses each user's account creation time as the fallback, and exits non-zero if any batch fails. Running npm run reset-terms clears both the acceptance state and its timestamp so users must accept again.
modelSelect
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| modelSelect | Boolean | Determines whether the model selection feature is available in the UI. | Enabling this feature allows users to select different models directly from the interface. |
Default: true
Notes:
- This is required to be
trueif usingmodelSpecs.addedEndpoints. - If
modelSpecs.addedEndpointsis used andinterface.modelSelectis not explicitly set, it defaults totrue.
Example:
interface:
modelSelect: trueparameters
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| parameters | Boolean | Toggles the visibility of parameter configuration options within the interface. | This setting is crucial for users who need to adjust parameters for specific functionalities within the application. |
Default: true
Example:
interface:
parameters: falsecontextUsage
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| contextUsage | Boolean | Shows or hides the real-time context window and token usage gauge in the conversation UI. | When disabled, users will not see the context usage indicator for chats. |
Default: true
Example:
interface:
contextUsage: truecontextCost
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| contextCost | Boolean | Shows or hides cost values in context and token usage details. | When disabled, users can still see token usage if contextUsage is enabled, but cost values are hidden. |
Default: false
Notes:
- Set
contextCost: trueto opt in to visible cost values. Token usage can remain visible throughcontextUsagewhile cost values stay hidden. currencyonly affects displayed costs when cost display is enabled.
Example:
interface:
contextCost: truecurrency
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| currency | Object | Converts displayed usage costs from USD to another currency using a static conversion rate. | Set code to the display currency and rate to a positive conversion multiplier from USD. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| code | String | Currency code shown in usage/cost displays. | USD |
| rate | Number | Positive multiplier applied to USD usage costs. | 1 |
Example:
interface:
currency:
code: EUR
rate: 0.92presets
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| presets | Boolean | Enables or disables the use of presets in the application's UI. | Presets can simplify user interactions by providing pre-configured settings or operations, enhancing user experience and efficiency. |
Default: true
Example:
interface:
presets: trueprompts
Deprecated for permission management. Seeds the
PROMPTSrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel for managing prompt permissions per role/group/user.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| prompts | Boolean or Object | Controls prompt-related features for all users. Can be a boolean for simple enable/disable, or an object for granular control over use, creation, sharing, and public visibility. | When set to `false`, users will not have access to create, edit, or use custom prompts. |
Default: true
Important: Boolean vs Object Configuration
-
Boolean (
prompts: true): Only updates theusepermission. Existingcreate,share, andpublicpermission values are preserved from the database. Use this as a simple feature toggle without affecting other settings configured through the admin panel. -
Object: Updates only the sub-permissions that are explicitly specified. Any permissions not included in the config are preserved from the database.
When using the object structure:
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| use | Boolean | Controls whether users can use prompts. | true |
| create | Boolean | Controls whether users can create new prompts. | true |
| share | Boolean | Controls whether users can share prompts with specific users/groups. | false |
| public | Boolean | Controls whether users can share prompts publicly (visible to all users). | false |
Example (boolean - simple feature toggle):
interface:
prompts: true # Only updates USE; create/share/public remain unchangedExample (object - granular control):
interface:
prompts:
use: true
create: false # Disable creation while allowing use
# share and public not specified - preserves existing valuesExample (object - full control):
interface:
prompts:
use: true
create: true
share: true
public: falsebookmarks
Deprecated for permission management. Seeds the
BOOKMARKSrole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| bookmarks | Boolean | Enables or disables all bookmarks-related features for all users. | When disabled, users will not be able to create, manage, or access bookmarks within the application. |
Default: true
Example:
interface:
bookmarks: truememories
Deprecated for permission management. Seeds the
MEMORIESrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel. Note this toggle is separate from thememorybehavior configuration.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| memories | Boolean | Enables or disables the memories feature for all users in the interface. | When disabled, users will not have access to the memories panel or memory-related features. |
Default: true
Note: This controls the UI visibility of the memories feature. For detailed memory behavior configuration (token limits, personalization, agent settings), see the Memory Configuration.
Example:
interface:
memories: truemultiConvo
Deprecated for permission management. Seeds the
MULTI_CONVOrole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| multiConvo | Boolean | Enables or disables all "multiConvo", AKA multiple response streaming, related features for all users. | When disabled, users will not be able to stream responses from 2 AI models at the same time. |
Default: true
Example:
interface:
multiConvo: trueagents
More info on Agents
Deprecated for permission management. Seeds the
AGENTSrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel for managing agent permissions per role/group/user.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| agents | Boolean or Object | Controls agent-related features for all users. Can be a boolean for simple enable/disable, or an object for granular control over use, creation, sharing, and public visibility. | When set to `false`, users will not have access to agents. |
Default: true
Important: Boolean vs Object Configuration
-
Boolean (
agents: true): Only updates theusepermission. Existingcreate,share, andpublicpermission values are preserved from the database. Use this as a simple feature toggle without affecting other settings configured through the admin panel. -
Object: Updates only the sub-permissions that are explicitly specified. Any permissions not included in the config are preserved from the database.
When using the object structure:
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| use | Boolean | Controls whether users can use agents. | true |
| create | Boolean | Controls whether users can create new agents. | true |
| share | Boolean | Controls whether users can share agents with specific users/groups. | false |
| public | Boolean | Controls whether users can share agents publicly (visible to all users). | false |
Example (boolean - simple feature toggle):
interface:
agents: true # Only updates USE; create/share/public remain unchangedExample (object - granular control):
interface:
agents:
use: true
create: false # Disable creation while allowing use
# share and public not specified - preserves existing valuesExample (object - full control):
interface:
agents:
use: true
create: true
share: true
public: falseagentSelectorLimit
Limits the unsearched Agents panel selector to 10 Agents by default. Set an integer from 1 through 100 to change how many are listed before the user starts typing. Searching still reaches all accessible Agents; the limit is not an access-control setting.
interface:
agentSelectorLimit: 10remoteAgents
Controls access to the Agents API (OpenAI-compatible and Open Responses API endpoints), which allows external applications to interact with LibreChat agents programmatically via API keys.
Deprecated for permission management. Seeds the
REMOTE_AGENTSrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| remoteAgents | Object | Configuration for remote agent API access control. All fields default to `false`. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| use | Boolean | Controls whether users can access the remote agents API. | false |
| create | Boolean | Controls whether users can create API keys for remote agents. | false |
| share | Boolean | Controls whether users can share remote agents. | false |
| public | Boolean | Controls whether users can share remote agents publicly. | false |
Default: All fields default to false (disabled).
Example:
interface:
remoteAgents:
use: true
create: true
share: false
public: falseNote: Admin users have all remote agent permissions enabled by default regardless of this configuration.
skills
Deprecated for permission management. Seeds the
SKILLSrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel for managing Skills permissions per role/group/user.defaultActiveOnShareis not a permission bit and remains a YAML behavior setting.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| skills | Boolean or Object | Controls Skills-related permissions and shared-skill activation defaults. Can be a boolean for simple enable/disable, or an object for granular control. | When set to `false`, users cannot use, create, or share Skills. |
Default: true for use and create, false for share, public, and defaultActiveOnShare.
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| use | Boolean | Controls whether users can use Skills. | true |
| create | Boolean | Controls whether users can create Skills. | true |
| share | Boolean | Controls whether users can share Skills with specific users/groups. | false |
| public | Boolean | Controls whether users can share Skills publicly (visible to all users). | false |
| defaultActiveOnShare | Boolean | Controls whether shared Skills default to active for recipients until they override the setting. | false |
Example:
interface:
skills:
use: true
create: true
share: false
public: false
defaultActiveOnShare: falseFor Skills behavior and invocation modes, see Skills.
sharedLinks
Deprecated for permission management. Seeds the
SHARED_LINKSrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel for managing shared-link permissions per role/group/user.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| sharedLinks | Boolean or Object | Controls shared-link permissions. Can be a boolean to enable/disable all shared-link permissions, or an object for granular create/share/public control. | When set to `false`, users cannot create or share conversation links. |
Default: create: true, share: true, public: true
Important: Boolean vs Object Configuration
- Boolean (
sharedLinks: true): Enables allSHARED_LINKSpermissions for the defaultUSERrole. - Boolean (
sharedLinks: false): Disables allSHARED_LINKSpermissions for the defaultUSERrole. - Object: Updates only the sub-permissions that are explicitly specified. Any permissions not included in the config are preserved from the database.
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| create | Boolean | Controls whether users can create shared conversation links. | true |
| share | Boolean | Controls whether users can share links with authenticated users. | true |
| public | Boolean | Controls whether users can toggle "share with everyone" for a shared link. Anonymous viewing still requires ALLOW_SHARED_LINKS_PUBLIC=true. | true |
| snapshotFiles | Boolean | Controls whether newly created shared links can snapshot referenced conversation files so recipients can preview or download them through the link. | true |
Example:
interface:
sharedLinks:
create: true
share: true
public: false
snapshotFiles: trueFor user-facing shared-link behavior, see Shareable Links.
schedules
Enables the experimental Scheduled Chats panel and configures its permissions and runtime limits.
Deprecated for permission management. The
useandcreatesub-keys seed theSCHEDULESpermissions at startup for the defaultUSERrole only. Prefer the Admin Panel for ongoing permission management. The runtime limit fields remain YAML settings.
Experimental and default-off
The schedules field is absent from LibreChat's default interface configuration. Scheduled runs
can consume model and tool resources, so add this field only after reviewing the deployment
requirements in Scheduled Chats.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| schedules | Boolean or Object | Controls Scheduled Chats permissions and deployment limits. | Omitted by default (disabled). |
Boolean behavior:
schedules: trueopts in with the default runtime limits without changing stored role permissions.schedules: falseis a deployment-wide stop. It cannot be re-enabled by a role, group, or user configuration override.- Object form opts in unless
use: falseis set.
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| use | Boolean | Controls whether users can list and view their schedules. | true when opted in |
| create | Boolean | Controls whether users can create, edit, enable, run, and delete schedules. | true |
| maxPerUser | Number | Maximum schedules per user. Set to 0 to prevent creation. | 10 |
| minIntervalMinutes | Number | Shortest allowed interval between occurrences. | 60 |
| autoDisableAfterFailures | Number | Consecutive failed runs before a schedule is disabled. | 5 |
| admissionConcurrency | Number | Maximum occurrences concurrently performing readiness admission per replica (1-100). | 20 |
| fireConcurrency | Number | Maximum scheduled runs admitted concurrently across the deployment. | 5 |
| mcpPreflightConcurrency | Number | Maximum MCP readiness connections opened concurrently by one schedule admission (1-10). | 3 |
| mcpPreflightTimeoutMs | Number | Maximum wall-clock time for one schedule MCP readiness admission (1000-600000 ms). | 300000 |
| requireProject | Boolean | Requires every schedule to resolve to an owned Chat Project at create/update time and again at each run. | false |
| projectId | String | Pins every scheduled conversation to one Chat Project, overriding the stored choice and implying `requireProject`. |
interface:
schedules:
use: true
create: true
maxPerUser: 10
minIntervalMinutes: 60
autoDisableAfterFailures: 5
admissionConcurrency: 20
fireConcurrency: 5
mcpPreflightConcurrency: 3
mcpPreflightTimeoutMs: 300000
requireProject: false
# projectId: '000000000000000000000000'The base YAML is authoritative for the global enable state. Configuration overrides can narrow access and tune inherited limits, but cannot re-enable a base false or { use: false }. SCHEDULES_DISABLED=true is an additional emergency stop for both automatic and manual runs.
requireProject is enforced both when a schedule is written and immediately before each run. A schedule that no longer satisfies the requirement is auto-disabled rather than starting an unscoped conversation. projectId outranks a schedule's stored selection and is resolved as the schedule owner; because projects are user-owned, it is primarily useful in per-role or per-user configuration overrides rather than as one deployment-wide value.
temporaryChat
Controls whether the temporary chat feature is available to users. Temporary chats are not saved to conversation history and are automatically deleted after a configurable retention period.
Deprecated for permission management. Seeds the
TEMPORARY_CHATrole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.temporaryChatRetentionbelow is not a permission and remains the recommended way to configure retention.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| temporaryChat | Boolean | Enables or disables the temporary chat feature. | When set to false, users will not see the option to start temporary chats, unless retentionMode is "ephemeral", which shows the toggle locked on for everyone. |
Default: true
Note: The retention period for temporary chats can be configured using temporaryChatRetention. Under retentionMode: "ephemeral" the toggle is shown, locked on, to every user regardless of this setting or the TEMPORARY_CHAT permission.
Example:
interface:
temporaryChat: truetemporaryChatRetention
The temporaryChatRetention configuration allows you to customize how long temporary chats are retained before being automatically deleted. Under retentionMode: "ephemeral", every chat is temporary, so this value is the lifetime of every chat.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| temporaryChatRetention | Number | Sets the retention period for temporary chats in hours. | temporaryChatRetention: 168 |
Validation Rules:
- Minimum: 1 hour (prevents immediate deletion)
- Maximum: 8760 hours (1 year maximum retention)
- Default: 720 hours (30 days)
Configuration Methods:
- LibreChat.yaml (recommended):
interface.temporaryChatRetention: 168 - Environment Variable (deprecated):
TEMP_CHAT_RETENTION_HOURS=168
Note: The environment variable
TEMP_CHAT_RETENTION_HOURSis deprecated. Please use theinterface.temporaryChatRetentionconfig option inlibrechat.yamlinstead. The config file value takes precedence over the environment variable.
Example:
interface:
temporaryChatRetention: 168 # Retain temporary chats for 7 days
retentionMode: 'temporary'Common Retention Periods:
- 1 hour:
temporaryChatRetention: 1(minimal retention) - 24 hours:
temporaryChatRetention: 24(1 day) - 168 hours:
temporaryChatRetention: 168(1 week) - 720 hours:
temporaryChatRetention: 720(30 days - default) - 8760 hours:
temporaryChatRetention: 8760(1 year - maximum)
generalChatRetention
Controls how long regular chats are retained when retentionMode is set to "all". It is ignored by the other modes; under "ephemeral" every chat is temporary and uses temporaryChatRetention.
| Key | Type | Description | Example |
|---|---|---|---|
| generalChatRetention | Number | Sets the retention period for regular chats in hours under all-data retention. | Defaults to temporaryChatRetention when omitted |
The value must be between 1 and 8760 hours. This setting lets regular and temporary chats use different lifetimes. Changing either retention value affects deadlines assigned to new or updated records; LibreChat does not rewrite existing stored deadlines automatically.
interface:
temporaryChatRetention: 168 # 7 days for temporary chats
generalChatRetention: 2160 # 90 days for regular chats
retentionMode: 'all'retentionMode
Controls which data receives retention deadlines, and whether every chat is forced to be temporary.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| retentionMode | String | Retention policy. "temporary" applies retention only to chats users mark temporary; "all" applies retention to every conversation and message while keeping them visible; "ephemeral" forces every chat to be temporary (hidden from history and search, toggle locked on). | retentionMode: "temporary" |
Default: temporary
Modes:
temporary(default): only chats a user marks temporary expire. Normal chats never expire.all: every chat and message gets anexpiredAtbut stays visible and searchable until it expires.ephemeral: every chat is forced temporary, hidden from history and search, and the toggle is locked on. Enforcement is server-authoritative.
See the Temporary Chat & Data Retention feature page for the full behavior matrix and migration guidance.
retentionMode: "all" and "ephemeral" apply retention deadlines beyond temporary chats,
including persistent agent resource files unless retainAgentFiles: true is configured. Confirm
your retention policy before enabling either.
Example:
interface:
temporaryChatRetention: 168
generalChatRetention: 2160
retentionMode: 'all'To force every chat to be temporary and never persisted long-term:
interface:
temporaryChatRetention: 24
retentionMode: 'ephemeral'retainAgentFiles
Controls whether persistent agent resource files are exempt from all-data retention.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| retainAgentFiles | Boolean | When true, persistent agent resource files do not expire under retentionMode: "all" or "ephemeral". Non-agent files and message attachments still expire. | retainAgentFiles: false |
Default: false
Notes:
- This setting only changes behavior when
retentionModeis set to"all"or"ephemeral". - Set this to
truewhen agents should keep their persistent resource files even while conversations, messages, and non-agent files receive retention deadlines.
Example:
interface:
temporaryChatRetention: 168
retentionMode: 'all'
retainAgentFiles: trueautoSubmitFromUrl
Controls whether a prompt supplied via URL query parameters on /c/new is auto-submitted to the model.
When /c/new?prompt=…&submit=true is opened by an authenticated user, LibreChat normally pre-fills the composer with the URL-supplied prompt and submits it immediately. This is a convenience feature for crafted deeplinks and shared chat URLs.
For deployments where users may receive crafted links from external sources — and where memory- or tool-enabled models could leak sensitive context if a prompt-injection payload reaches the model — operators can disable auto-submission. With the flag set to false, the prompt is still pre-filled in the composer but the user must press Send explicitly.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| autoSubmitFromUrl | Boolean | Controls whether `/c/new?prompt=…&submit=true` auto-submits to the model. | When `false`, the prompt is pre-filled in the composer but not submitted. |
Default: true (existing behavior is preserved unless explicitly disabled).
Notes:
- This setting does not affect URL-driven model spec selection or other URL-driven settings — only the auto-submission step.
- The query parameter accepts both
promptandqas the prompt source, withprompttaking precedence.submit=trueis the trigger. - Recommended for instances handling sensitive memory or tool data, where a 1-click prompt-injection vector should require explicit user confirmation.
Example:
interface:
autoSubmitFromUrl: falsecustomWelcome
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| customWelcome | String | Allows administrators to define a custom welcome message for the chat interface, with the option to personalize it using the {{user.name}} parameter. |
Default: None (if not specified, a default greeting is used)
Example:
interface:
customWelcome: 'Hey {{user.name}}! Welcome to LibreChat'Note: You can use {{user.name}} within the customWelcome message to dynamically insert the user's name for a personalized greeting experience.
codeHighlightThrottleMs
Controls the minimum interval between syntax-highlighting passes while a code block is changing during a streamed response. Throttling reduces repeated highlighting work without delaying the streamed text itself. The same value applies when rendering shared conversations.
Default: 300 milliseconds
Set the value to 0 to highlight every streamed update. Valid values range from 0 through 60000 milliseconds.
interface:
codeHighlightThrottleMs: 300artifactUndocking
Controls whether users can move the Artifacts pane into its own browser window.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| artifactUndocking | Boolean | Shows the "Open in new window" button in the Artifacts pane header on desktop. The mobile layout never offers it. | artifactUndocking: true |
Default: true
Setting it to false hides the button for new undocks. A pane that is already in its own window keeps its Dock back to panel button, so users can always bring it back.
Example:
interface:
artifactUndocking: falserunCode
Enables/disables the "Run Code" button for Markdown Code Blocks. More info on the LibreChat Code Interpreter API
Note: This setting does not disable the Agents Code Interpreter Capability. To disable the Agents Capability, see the Agents Endpoint configuration instead.
Deprecated for permission management. Seeds the
RUN_CODErole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| runCode | Boolean | Enables or disables the "Run Code" button for Markdown Code Blocks. |
Default: true
Example:
interface:
runCode: truewebSearch
Enables/disables the Web Search tool in the composer palette. More info on Web Search Configuration
Note: This setting does not disable the Agents Web Search capability. To disable the Agents capability, see the Agents endpoint configuration instead.
Deprecated for permission management. Seeds the
WEB_SEARCHrole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| webSearch | Boolean | Enables or disables the Web Search tool in the composer palette. |
Default: true
Example:
interface:
webSearch: truefileSearch
Enables/disables the File Search tool (RAG API usage via tool) in the composer palette.
Note: This setting does not disable the Agents File Search Capability. To disable the Agents Capability, see the Agents Endpoint configuration instead.
Deprecated for permission management. Seeds the
FILE_SEARCHrole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| fileSearch | Boolean | Enables or disables the File Search tool in the composer palette. |
Default: true
Example:
interface:
fileSearch: truefileCitations
Controls the global availability of file citations functionality. When disabled, it effectively removes the FILE_CITATIONS permission for all users, preventing any file citations from being displayed when using file search, regardless of individual user permissions.
Deprecated for permission management. Seeds/globally gates the
FILE_CITATIONSrole permission at startup. Prefer the Admin Panel for managing citations permissions per role/group/user.
Note:
- This setting acts as a global toggle for the
FILE_CITATIONSpermission system-wide. - When set to
false, no users will see file citations, even if they have been granted the permission through roles. - File citations require the
fileSearchfeature to be enabled. - When using agents with file search capability, citation behavior (quantity and quality) can be configured through the Agents endpoint configuration.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| fileCitations | Boolean | Globally enables or disables the FILE_CITATIONS permission for all users, controlling whether file search results can include source citations. |
Default: true
Example:
interface:
fileCitations: truefeedback
Controls whether the thumbs up / thumbs down buttons are shown under responses. When set to false, the buttons are removed from the message action row and the server rejects feedback writes, so a deployment that hides the controls also stores no ratings.
Notes:
- The other message actions (read aloud, copy, edit, fork, and regenerate) are unaffected, and the action row reflows without leaving a gap.
- With feedback disabled,
PUT /api/messages/:conversationId/:messageId/feedbackresponds with403and{"error": "Feedback is disabled"}before anything is written to the database or exported. - Ratings collected while the feature was enabled stay on existing messages. The flag stops new writes, it does not delete stored feedback.
- Ratings are only consumed outside LibreChat when Langfuse tracing is configured, where each one is sent as a
user-feedbackscore. See Message Feedback Scores. - This is a plain interface flag rather than a role permission, so there is nothing to grant per role in the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| feedback | Boolean | Shows or hides the thumbs up/thumbs down feedback buttons on responses. | When disabled, the buttons are removed for every user and the feedback endpoint rejects writes with a 403. |
Default: true
Example:
interface:
feedback: falsereplyNotifications
Controls which unread-reply alerts users are allowed to turn on. When a reply finishes while a user is looking at another chat, LibreChat marks that chat as unread. Users then choose their own alerts in Settings > General > Notifications; these options only decide which of those alerts are offered.
The unread dots in the chat list and the Mark as unread action are always available and are not affected by this setting.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| replyNotifications | Object | Which reply alerts users may enable, and how often the client checks for new replies. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| tabBadge | Boolean | Allow the unread count in the browser tab title and icon. Default: true. | tabBadge: true |
| desktop | Boolean | Allow users to turn on desktop notifications for replies. Default: true. | desktop: true |
| sound | Boolean | Allow users to turn on a sound for new replies. Default: true. | sound: true |
| pollLimit | Number | How many of the most recent conversations each background check looks at. Range 1 to 100. Default: 100. | pollLimit: 100 |
| pollIntervalMs | Number | Milliseconds between checks while the tab is in the background and an alert is on. Range 10000 to 600000. Default: 30000. | pollIntervalMs: 30000 |
| focusedRefreshMs | Number | Milliseconds between chat list refreshes while the tab is focused, so replies produced elsewhere get their unread dot. Range 60000 to 300000. Default: 300000. | focusedRefreshMs: 300000 |
Setting tabBadge, desktop or sound to false hides that option from users' settings. What each user turns on is stored per device. See Settings for the user side.
Example:
interface:
replyNotifications:
tabBadge: true
desktop: true
sound: false
pollIntervalMs: 60000defaultPinnedTools
Seeds the initial prompt-bar pinned tools for users who have not customized their pinned tool state. Once a user pins or unpins a tool, LibreChat preserves that user's choice.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| defaultPinnedTools | Array of strings | Built-in tool keys that should start pinned on the composer bar for new or uncustomized users. | When omitted, built-in tools start unpinned. |
Supported values:
- Built-in tool keys:
artifacts,execute_code,web_search,file_search,skills
The mcp keyword and MCP server names are still accepted for compatibility, but the redesigned composer does not pin MCP servers to the bar. Users turn servers on from the palette's MCP Servers section instead.
Example:
interface:
defaultPinnedTools:
- artifacts
- execute_codecomposerRecentFiles
How many recently used files the composer palette requests for its Your files section before the user searches.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| composerRecentFiles | Number | Number of recent files shown in the composer palette. Range 0 to 100. 0 hides the list. | composerRecentFiles: 5 |
Default: 5
The palette displays at most five of them, so values above 5 have no visible effect; use a lower value to shorten the list, or 0 to hide it. Searching the palette, or Show all, still reaches every file. The value is also capped by the top-level fileListLimit.
interface:
composerRecentFiles: 10Queue and steer timeouts
Three timeouts tune how the client handles messages sent while a response is still streaming (queued messages and steers, see Agents). The defaults suit most deployments; raise them when a slow proxy or a lagging database replica makes queued messages show as unconfirmed.
| Key | Type | Description | Example |
|---|---|---|---|
| steerArmConfirmationTimeoutMs | Number | How long, in milliseconds, the client waits for the server to confirm a steer before giving up. Default: 10000. | steerArmConfirmationTimeoutMs: 10000 |
| queuedTurnReconciliationTimeoutMs | Number | How long, in milliseconds, the client keeps checking whether a queued message whose delivery is uncertain was received. Default: 60000. | queuedTurnReconciliationTimeoutMs: 60000 |
| queuedSendLockTimeoutMs | Number | How long, in milliseconds, a queued message may hold the chat while it starts before the hold is released. A healthy start releases it immediately; this only limits a start that failed silently. Default: 60000. | queuedSendLockTimeoutMs: 60000 |
All three must be positive integers.
interface:
queuedTurnReconciliationTimeoutMs: 120000peoplePicker
Controls which principal types (users, groups, roles) are available for selection in the people picker interface, typically used when sharing agents or managing access controls.
Deprecated for permission management. Seeds the
PEOPLE_PICKERrole permissions at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| peoplePicker | Object | Configuration for which principal types are available in the people picker interface. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| users | Boolean | Enables user search in the people picker. Default: true | |
| groups | Boolean | Enables group search in the people picker. Default: true | |
| roles | Boolean | Enables role search in the people picker. Default: true |
Default:
peoplePicker:
users: true
groups: true
roles: trueExample:
interface:
peoplePicker:
users: true
groups: true
roles: false # Disable role selection in people pickermarketplace
Enables/disables access to the Agent Marketplace.
Deprecated for permission management. Seeds the
MARKETPLACErole permission at startup for the defaultUSERrole only. Prefer the Admin Panel.
Key:
| Key | Type | Description | Example |
|---|---|---|---|
| marketplace | Object | Configuration for Agent Marketplace access control. |
Sub-keys:
| Key | Type | Description | Example |
|---|---|---|---|
| use | Boolean | Enables or disables marketplace access. Default: false |
Default:
marketplace:
use: falseExample:
interface:
marketplace:
use: true # Enable marketplace accessHow is this guide?