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 | "" | Custom app icon (PNG) for the tray, the window icon on Windows and Linux, and the dock on macOS. Also settable from the App Icon menu | live |
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 Deprecated: use storage.clearData instead | 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 Deprecated: use shortcuts.disableWhileFocused instead | restart |
globalShortcuts | array | [] | Global keyboard shortcuts that work system-wide. Disabled by default (opt-in). See configuration docs for details and limitations Deprecated: use shortcuts.global instead | 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 | false | Follow the operating-system dark/light theme preference. Default is false; set true to drive Teams's theme from the OS preference. | 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","meetingStarted":"meeting-started","camera":"camera","microphone":"microphone","microphoneControl":"microphone/control","screenSharing":"screen-sharing"},"meetingStartDetection":{"enabled":false,"patterns":["meeting started","started the meeting"],"resetSeconds":10}} | 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},"clientCertificate":{"pinDialog":{"enabled":false}},"webLogin":{"user":"","passwordCommand":"","extraHosts":[],"autoSubmit":false,"verifyMethod":""},"keepMsalCacheEncryptionCookie":{"enabled":true,"days":400}} | 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. auth.clientCertificate.pinDialog.enabled (Linux only) shows a PIN dialog for smartcard / PKCS#11 client certificates and is off by default. auth.webLogin.* pre-fills the Microsoft/federated web sign-in page so you don't retype credentials each launch: auth.webLogin.user pre-fills the email/account field, auth.webLogin.passwordCommand runs a shell command (e.g. 'pass show teams') and pre-fills its first stdout line into the password field (the app stores no secret), auth.webLogin.autoSubmit clicks through the steps, auth.webLogin.verifyMethod clicks the matching option on the MFA 'Verify your identity' page (e.g. 'Text'), and auth.webLogin.extraHosts adds login hosts beyond the Microsoft defaults. All off/empty by default. Distinct from ssoBasicAuth*, which drive the native HTTP Basic/NTLM dialog, not the web form. | 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 |
shortcuts | object | {"global":[],"disableWhileFocused":[]} | Keyboard shortcut configuration. global: global keyboard shortcuts that work system-wide, disabled by default (opt-in). disableWhileFocused: global shortcuts to disable while the app is in focus. Replaces the deprecated globalShortcuts and disableGlobalShortcuts options. | restart |
storage | object | {"clearData":null} | Storage configuration. clearData: flag to clear storage data, expects an object of the type https://www.electronjs.org/docs/latest/api/session#sesclearstoragedataoptions. Replaces the deprecated clearStorageData option. | restart |