appActiveCheckInterval | number | 2 | A numeric value in seconds as poll interval to check if the system is active from being idle | restart |
screenSharing | object | {"thumbnail":{"enabled":true,"alwaysOnTop":true},"lockInhibitionMethod":"Electron"} | Screen sharing configuration. thumbnail: controls the preview window shown during active sharing. lockInhibitionMethod: screen lock inhibition method (Electron/WakeLockSentinel). | restart |
appIcon | string | "" | Teams app icon to show in the tray | restart |
appIconType | string | "default" | Type of tray icon to be used | restart |
appIdleTimeout | number | 300 | A numeric value in seconds as duration before app considers the system as idle | restart |
appIdleTimeoutCheckInterval | number | 10 | A numeric value in seconds as poll interval to check if the appIdleTimeout is reached | restart |
appTitle | string | "Microsoft Teams" | A text to be suffixed with page title | restart |
alwaysOnTop | boolean | true | Keep the pop-out window always on top of other windows. | restart |
authServerWhitelist | string | "*" | Set auth-server-whitelist value | restart |
awayOnSystemIdle | boolean | false | Sets the user status as away when system goes idle | restart |
idleDetection | object | {"forceState":false,"stateFile":"/tmp/teams-for-linux-idle-state-$USER"} | Idle detection configuration. forceState: enables state file-based idle control (workaround for Wayland/Hyprland). stateFile: path to state file with $USER expansion support. | restart |
chromeUserAgent | string | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<version> Safari/537.36" | Google Chrome User Agent | restart |
customBGServiceBaseUrl | string | "http://localhost" | Base URL of the server which provides custom background images | restart |
customBGServiceConfigFetchInterval | number | 0 | A numeric value in seconds as poll interval to download background service config download | restart |
customCACertsFingerprints | array | [] | Array of custom CA Certs Fingerprints to allow SSL unrecognized signer or self signed certificate | restart |
customCSSName | string | "" | custom CSS name for the packaged available css files. Currently those are: "compactDark", "compactLight", "tweaks", "condensedDark" and "condensedLight" | restart |
customCSSLocation | string | "" | custom CSS styles file location | restart |
customStickers | object | {"enabled":false,"folder":"","formats":["png","jpg","jpeg","gif","webp"],"urlImport":{"enabled":true,"allowedContentTypes":["image/png","image/jpeg","image/gif","image/webp"],"maxBytes":5242880}} | Custom stickers feature. enabled: master flag (off by default). folder: absolute path to the sticker folder; empty string uses <userData>/stickers/ (auto-created). formats: file extensions to scan (lowercase, no leading dot). The scanner reads the configured folder plus one level of subdirectories so packs imported under <folder>/<pack>/ are visible. urlImport: HTTPS URL import (drop or paste a URL onto the sticker panel); allowedContentTypes restricts what the wrapper will save; maxBytes caps individual file size. | restart |
disableTimestampOnCopy | boolean | false | Controls whether timestamps are included when copying messages in chats | restart |
class | string | null | A custom value for the WM_CLASS property | restart |
cacheManagement | object | {"enabled":false,"maxCacheSizeMB":600,"cacheCheckIntervalMs":3600000} | Cache management configuration to prevent daily logout issues | restart |
clearStorageData | boolean | null | Flag to clear storage data. Expects an object of the type https://www.electronjs.org/docs/latest/api/session#sesclearstoragedataoptions | restart |
clientCertPath | string | "" | Custom Client Certs for corporate authentication (certificate must be in pkcs12 format) | restart |
clientCertPassword | string | "" | Custom Client Certs password for corporate authentication (certificate must be in pkcs12 format) | restart |
closeAppOnCross | boolean | false | Close the app when clicking the close (X) cross | restart |
defaultNotificationUrgency | string | "normal" | Default urgency for new notifications (low/normal/critical) | live |
defaultURLHandler | string | "" | Default application to be used to open the HTTP URLs | restart |
disableGpu | boolean | false | A flag to disable GPU and hardware acceleration (can be useful if the window remains blank) | restart |
download | object | {"enabled":false,"notifyOnDownloadComplete":true,"showProgressBar":true,"showTitlePrefix":true,"saveDirectory":"","alwaysAskWhereToSave":false,"openWhenDone":false} | Download manager configuration. enabled: master switch for the entire feature, defaults to false while the feature is in early development — set true to opt in. notifyOnDownloadComplete: show a system notification when a file download finishes (click opens the containing folder). showProgressBar: drive the taskbar progress bar and KDE JobView / Unity LauncherEntry signals while downloads are in flight. showTitlePrefix: also prefix the window title with [N%] as a portable fallback for environments where the other progress signals aren't rendered; set to false to keep the title untouched when KDE / Ubuntu already show progress elsewhere. saveDirectory: absolute path to always save allowed downloads into without prompting (empty string uses the OS default download directory). alwaysAskWhereToSave: show the native Save As dialog for every download (takes precedence over saveDirectory). openWhenDone: open each completed download in the OS default handler. When a download is interrupted by a Microsoft 365 / SharePoint / tenant policy the failure notification explains the likely cause and clicking it opens the file's link in your browser. All sub-flags only take effect when enabled is true. | restart |
disableNotifications | boolean | false | A flag to disable all notifications | live |
disableNotificationSound | boolean | false | Disable chat/meeting start notification sound | live |
disableNotificationSoundIfNotAvailable | boolean | false | Disables notification sound unless status is Available (e.g. while in a call, busy, etc.) | live |
disableNotificationWindowFlash | boolean | false | A flag indicates whether to disable window flashing when there is a notification | live |
notifications | object | {"timeoutType":"default","electron":{"clickAction":"show"}} | Notification behaviour. timeoutType: how long notifications stay in the system notification center (Linux/Windows only). Choices: default (auto-clear per system policy) or never (persist until the user dismisses, useful on GNOME and other desktops that auto-remove notifications). Mirrors Electron's Notification timeoutType. May not be honoured by every notification daemon. electron.clickAction: what clicking a notification does to the main window when notificationMethod is electron. Choices: show (reveal the window, default and current behaviour), restore (also un-minimise and focus, which helps on GNOME where a plain show does not raise the window) or none (do nothing). | restart |
disableBadgeCount | boolean | false | A flag indicates whether to disable the badge counter on the taskbar/dock icon | live |
disableGlobalShortcuts | array | [] | Array of global shortcuts to disable while the app is in focus. See https://www.electronjs.org/docs/latest/api/accelerator for available accelerators to use | restart |
globalShortcuts | array | [] | Global keyboard shortcuts that work system-wide. Disabled by default (opt-in). See configuration docs for details and limitations | restart |
electronCLIFlags | array | [] | Electron CLI flags | restart |
emulateWinChromiumPlatform | boolean | false | Use windows platform information in chromium. This is helpful if MFA app does not support Linux. | restart |
enableIncomingCallToast | boolean | false | Enable incoming call toast | restart |
followSystemTheme | boolean | true | Follow the operating-system dark/light theme preference. Default is true; set false to keep Teams's own theme regardless of OS changes. | restart |
frame | boolean | true | Specify false to create a Frameless Window. Default is true | restart |
incomingCallCommand | string | null | Command to execute on an incoming call. (caution: "~" in path is not supported) | restart |
incomingCallCommandArgs | array | [] | Arguments for the incoming call command. | restart |
isCustomBackgroundEnabled | boolean | false | A flag indicates whether to enable custom background or not | restart |
logConfig | object | {"transports":{"console":{"level":"info"},"file":{"level":false}}} | Electron-log configuration. See logger.js for configurable values. To disable it provide a Falsy value. | restart |
meetupJoinRegEx | string | "^https://teams\\.(?:microsoft\\.com|live\\.com|cloud\\.microsoft)/(v2/\\?meetingjoin=|meet/|l/(?:app|call|channel|chat|entity|file|meet(?:ing|up-join)|message|task|team)/)" | Regex for Teams meetup-join and related links | restart |
menubar | string | "auto" | A value controls the menu bar behaviour | restart |
minimized | boolean | false | Start the application minimized | restart |
minimizeOnClose | boolean | false | Minimize the window when clicking the close (X) cross instead of hiding it to the tray (ignored when closeAppOnCross is true) | restart |
notificationMethod | string | "web" | Notification method to be used by the application (web/electron/custom) | restart |
customNotification | object | {"toastDuration":5000} | Custom in-app notification system configuration | restart |
onNewWindowOpenMeetupJoinUrlInApp | boolean | true | Open meetupJoinRegEx URLs in the app instead of the default browser | restart |
partition | string | "persist:teams-4-linux" | BrowserWindow webpreferences partition | restart |
proxyServer | string | null | Proxy Server with format address:port | restart |
network | object | {"webRTCIPHandlingPolicy":null,"disableQuic":true} | Network configuration. webRTCIPHandlingPolicy: WebRTC IP handling policy to control which network interfaces are used for ICE candidates. Use 'default_public_interface_only' to prevent WebRTC from advertising interfaces that have no internet route (e.g. a secondary ethernet adapter), which can cause calls to drop to OnHold due to asymmetric STUN routing. Valid values: 'default', 'default_public_and_private_interfaces', 'default_public_interface_only', 'disable_non_proxied_udp'. Disabled by default (opt-in). disableQuic: Append Chromium's --disable-quic switch at startup. Defaults to true to work around issue #2518 (concurrent SharePoint downloads abort with ERR_QUIC_PROTOCOL_ERROR on the shared QUIC session). Set to false to re-enable QUIC if a future Chromium release fixes the underlying transport bug. | restart |
spellCheckerLanguages | array | [] | Array of languages to use with Electron's spell checker (experimental) | restart |
ssoBasicAuthUser | string | "" | User to use for SSO basic auth. | restart |
ssoBasicAuthPasswordCommand | string | "" | Command to execute to retrieve password for SSO basic auth. | restart |
trayIconEnabled | boolean | true | Enable tray icon | restart |
msTeamsProtocols | object | {"v1":"^msteams:/(?:meet/|l/(?:app|call|channel|chat|entity|file|meet(?:ing|up-join)|message|task|team)/)","v2":"^msteams://teams\\.(?:microsoft\\.com|live\\.com|cloud\\.microsoft)/(?:meet/|l/(?:app|call|channel|chat|entity|file|meet(?:ing|up-join)|message|task|team)/)"} | Regular expressions for Microsoft Teams protocol links (v1 and v2). | restart |
url | string | "https://teams.cloud.microsoft" | Microsoft Teams URL | restart |
useMutationTitleLogic | boolean | true | Use MutationObserver to update counter from title | restart |
watchConfigFile | boolean | false | Watch for changes in the config file and reload the app | restart |
webDebug | boolean | false | Enable debug at start | restart |
media | object | {"microphone":{"disableAutogain":false,"speakingIndicator":false,"ignoreSystemMute":false,"overrideConstraints":{"enabled":false}},"camera":{"resolution":{"enabled":false,"mode":"remove"},"autoAdjustAspectRatio":{"enabled":false}},"video":{"menuEnabled":false},"showStatusOnDockIcon":false,"macPerformanceMode":true,"preventDeviceSwitching":false} | Media settings for microphone, camera, and video. showStatusOnDockIcon: overlay the user presence status on the Dock icon on macOS. macPerformanceMode: on macOS, force-enable native hardware/rendering optimizations (Metal ANGLE, GPU rasterization, hardware WebRTC codecs) at startup; defaults to true, set false to opt out without disabling the GPU entirely. preventDeviceSwitching: prevent automatic audio/video device switching by blocking device change notifications. | restart |
mqtt | object | {"enabled":false,"brokerUrl":"","username":"","password":"","clientId":"teams-for-linux","topicPrefix":"teams","statusTopic":"status","commandTopic":"","statusCheckInterval":10000,"homeAssistant":{"enabled":false,"discoveryPrefix":"homeassistant","deviceName":"Teams for Linux"},"mediaTopics":{"inCall":"in-call","incomingCall":"incoming-call","camera":"camera","microphone":"microphone","microphoneControl":"microphone/control","screenSharing":"screen-sharing"}} | MQTT configuration for publishing Teams status updates and receiving action commands | restart |
quickChat | object | {"enabled":false} | Quick Chat configuration for quick access to chat contacts and inline messaging via Graph API | restart |
graphApi | object | {"enabled":false} | Microsoft Graph API integration for enhanced Teams functionality (calendar, user profile, etc.) | restart |
auth | object | {"intune":{"enabled":false,"user":""},"webauthn":{"enabled":false,"debug":false},"reauthRecovery":{"enabled":false}} | Authentication configuration. auth.webauthn.enabled turns on hardware security key support on Linux (requires fido2-tools). auth.webauthn.debug enables verbose diagnostic logs, intended for beta testers only. auth.reauthRecovery.enabled opts into the in-app re-authentication recovery feature and is off by default; while off, renderer auth-failure signals are ignored and Teams' own stale 'sign in again' banner is left untouched (you re-authenticate by relaunching, as before this feature existed). When on, a reliable MSAL InteractionRequired signal automatically clears stale auth state and reloads to force a fresh interactive login, and clicking the stale 'sign in again' banner is intercepted to recover in-app instead of opening the login popup externally. Uncaught Teams worker 'UPR' errors are noisy and fire on healthy sessions, so they never trigger an automatic reload on their own; they only help recognise a genuinely broken session for the banner interception. Interception only happens when the session has emitted a trusted auth-failure signal within the last hour, so login popups from healthy flows (initial sign-in, consent and step-up prompts, adding an account) are never diverted. During an active call, recovery is never run silently (it would end the call): the user is asked whether to sign in now, after the call, or not at all. | restart |
multiAccount | object | {"enabled":false} | Multi-account profile switcher configuration (see ADR-020). enabled: opt-in flag for the single-window multi-tenant switcher. Mutually exclusive with auth.intune.enabled; when both are true a startup warning is logged and multi-account is disabled for the session. | restart |
wayland | object | {"xwaylandOptimizations":false} | Wayland display server configuration. xwaylandOptimizations: keeps GPU enabled and skips fake media UI flag under XWayland (may fix camera issues but can break screen sharing) | restart |