Skip to main content

Configuration Options Reference (Auto-Generated)

note

This page is auto-generated by scripts/generateConfigDocs.js from app/config/options.js, the single source of truth for the wrapper's configuration. Do not edit it by hand. After changing an option, run npm run generate-config-docs and commit the result.

For configuration examples, file locations, and platform-specific notes, see the Configuration Options guide. This reference lists every option the wrapper defines, with its type, default, description, and apply mode. The Apply column tells you when a change takes effect: live means immediately, restart means the app must be relaunched.

Total options: 72

OptionTypeDefaultDescriptionApply
appActiveCheckIntervalnumber2A numeric value in seconds as poll interval to check if the system is active from being idlerestart
screenSharingobject{"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
appIconstring""Teams app icon to show in the trayrestart
appIconTypestring"default"Type of tray icon to be usedrestart
appIdleTimeoutnumber300A numeric value in seconds as duration before app considers the system as idlerestart
appIdleTimeoutCheckIntervalnumber10A numeric value in seconds as poll interval to check if the appIdleTimeout is reachedrestart
appTitlestring"Microsoft Teams"A text to be suffixed with page titlerestart
alwaysOnTopbooleantrueKeep the pop-out window always on top of other windows.restart
authServerWhiteliststring"*"Set auth-server-whitelist valuerestart
awayOnSystemIdlebooleanfalseSets the user status as away when system goes idlerestart
idleDetectionobject{"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
chromeUserAgentstring"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<version> Safari/537.36"Google Chrome User Agentrestart
customBGServiceBaseUrlstring"http://localhost"Base URL of the server which provides custom background imagesrestart
customBGServiceConfigFetchIntervalnumber0A numeric value in seconds as poll interval to download background service config downloadrestart
customCACertsFingerprintsarray[]Array of custom CA Certs Fingerprints to allow SSL unrecognized signer or self signed certificaterestart
customCSSNamestring""custom CSS name for the packaged available css files. Currently those are: "compactDark", "compactLight", "tweaks", "condensedDark" and "condensedLight"restart
customCSSLocationstring""custom CSS styles file locationrestart
customStickersobject{"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
disableTimestampOnCopybooleanfalseControls whether timestamps are included when copying messages in chatsrestart
classstringnullA custom value for the WM_CLASS propertyrestart
cacheManagementobject{"enabled":false,"maxCacheSizeMB":600,"cacheCheckIntervalMs":3600000}Cache management configuration to prevent daily logout issuesrestart
clearStorageDatabooleannullFlag to clear storage data. Expects an object of the type https://www.electronjs.org/docs/latest/api/session#sesclearstoragedataoptionsrestart
clientCertPathstring""Custom Client Certs for corporate authentication (certificate must be in pkcs12 format)restart
clientCertPasswordstring""Custom Client Certs password for corporate authentication (certificate must be in pkcs12 format)restart
closeAppOnCrossbooleanfalseClose the app when clicking the close (X) crossrestart
defaultNotificationUrgencystring"normal"Default urgency for new notifications (low/normal/critical)live
defaultURLHandlerstring""Default application to be used to open the HTTP URLsrestart
disableGpubooleanfalseA flag to disable GPU and hardware acceleration (can be useful if the window remains blank)restart
downloadobject{"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
disableNotificationsbooleanfalseA flag to disable all notificationslive
disableNotificationSoundbooleanfalseDisable chat/meeting start notification soundlive
disableNotificationSoundIfNotAvailablebooleanfalseDisables notification sound unless status is Available (e.g. while in a call, busy, etc.)live
disableNotificationWindowFlashbooleanfalseA flag indicates whether to disable window flashing when there is a notificationlive
notificationsobject{"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
disableBadgeCountbooleanfalseA flag indicates whether to disable the badge counter on the taskbar/dock iconlive
disableGlobalShortcutsarray[]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 userestart
globalShortcutsarray[]Global keyboard shortcuts that work system-wide. Disabled by default (opt-in). See configuration docs for details and limitationsrestart
electronCLIFlagsarray[]Electron CLI flagsrestart
emulateWinChromiumPlatformbooleanfalseUse windows platform information in chromium. This is helpful if MFA app does not support Linux.restart
enableIncomingCallToastbooleanfalseEnable incoming call toastrestart
followSystemThemebooleantrueFollow the operating-system dark/light theme preference. Default is true; set false to keep Teams's own theme regardless of OS changes.restart
framebooleantrueSpecify false to create a Frameless Window. Default is truerestart
incomingCallCommandstringnullCommand to execute on an incoming call. (caution: "~" in path is not supported)restart
incomingCallCommandArgsarray[]Arguments for the incoming call command.restart
isCustomBackgroundEnabledbooleanfalseA flag indicates whether to enable custom background or notrestart
logConfigobject{"transports":{"console":{"level":"info"},"file":{"level":false}}}Electron-log configuration. See logger.js for configurable values. To disable it provide a Falsy value.restart
meetupJoinRegExstring"^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 linksrestart
menubarstring"auto"A value controls the menu bar behaviourrestart
minimizedbooleanfalseStart the application minimizedrestart
minimizeOnClosebooleanfalseMinimize the window when clicking the close (X) cross instead of hiding it to the tray (ignored when closeAppOnCross is true)restart
notificationMethodstring"web"Notification method to be used by the application (web/electron/custom)restart
customNotificationobject{"toastDuration":5000}Custom in-app notification system configurationrestart
onNewWindowOpenMeetupJoinUrlInAppbooleantrueOpen meetupJoinRegEx URLs in the app instead of the default browserrestart
partitionstring"persist:teams-4-linux"BrowserWindow webpreferences partitionrestart
proxyServerstringnullProxy Server with format address:portrestart
networkobject{"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
spellCheckerLanguagesarray[]Array of languages to use with Electron's spell checker (experimental)restart
ssoBasicAuthUserstring""User to use for SSO basic auth.restart
ssoBasicAuthPasswordCommandstring""Command to execute to retrieve password for SSO basic auth.restart
trayIconEnabledbooleantrueEnable tray iconrestart
msTeamsProtocolsobject{"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
urlstring"https://teams.cloud.microsoft"Microsoft Teams URLrestart
useMutationTitleLogicbooleantrueUse MutationObserver to update counter from titlerestart
watchConfigFilebooleanfalseWatch for changes in the config file and reload the apprestart
webDebugbooleanfalseEnable debug at startrestart
mediaobject{"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
mqttobject{"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 commandsrestart
quickChatobject{"enabled":false}Quick Chat configuration for quick access to chat contacts and inline messaging via Graph APIrestart
graphApiobject{"enabled":false}Microsoft Graph API integration for enhanced Teams functionality (calendar, user profile, etc.)restart
authobject{"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
multiAccountobject{"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
waylandobject{"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

Nested fields (object options)

Object options group several related settings. The tables below list each nested field with its type and the default derived from the option's default object.

screenSharing

FieldTypeDefaultDescription
screenSharing.thumbnail.enabledbooleantrueAutomatically show the preview thumbnail window when screen sharing starts.
screenSharing.thumbnail.alwaysOnTopbooleantrueKeep the screen sharing thumbnail window always on top.
screenSharing.lockInhibitionMethodstring"Electron"Screen lock inhibition method used while sharing.

idleDetection

FieldTypeDefaultDescription
idleDetection.forceStatebooleanfalseEnable state file-based idle state control (workaround for Wayland/Hyprland).
idleDetection.stateFilestring"/tmp/teams-for-linux-idle-state-$USER"Path to the idle state file (supports $USER expansion).

customStickers

FieldTypeDefaultDescription
customStickers.enabledbooleanfalseMaster flag for the custom stickers feature.
customStickers.folderstring""Absolute path to the sticker folder; empty string uses <userData>/stickers/, created on first run if missing.
customStickers.formatsarray["png","jpg","jpeg","gif","webp"]File extensions the scanner accepts (lowercase, no leading dot); the scanner reads the configured folder plus one level of subdirectories.
customStickers.urlImport.enabledbooleantrueAllow importing stickers from HTTPS URLs via the panel header input or by dropping a URL on the panel.
customStickers.urlImport.allowedContentTypesarray["image/png","image/jpeg","image/gif","image/webp"]Response content-types the wrapper will accept and save when importing from a URL.
customStickers.urlImport.maxBytesnumber5242880Per-file size cap in bytes for URL imports; larger responses are rejected.

cacheManagement

FieldTypeDefaultDescription
cacheManagement.enabledbooleanfalseEnable automatic cache management to prevent daily logout issues.
cacheManagement.maxCacheSizeMBnumber600Maximum cache size in MB before cleanup runs.
cacheManagement.cacheCheckIntervalMsnumber3600000How often the cache size is checked, in milliseconds.

download

FieldTypeDefaultDescription
download.enabledbooleanfalseMaster switch for the download feedback feature; sub-flags only take effect when this is true.
download.notifyOnDownloadCompletebooleantrueShow a system notification when a file download finishes (click opens the containing folder).
download.showProgressBarbooleantrueDrive the taskbar progress bar and KDE JobView / Unity LauncherEntry signals while downloads are in flight.
download.showTitlePrefixbooleantruePrefix the main window title with download progress as a portable fallback where other progress signals are not rendered.

notifications

FieldTypeDefaultDescription
notifications.timeoutTypestring"default"How long notifications stay in the system notification center (Linux/Windows only); may not be honoured by every notification daemon.
notifications.electron.clickActionstring"show"What clicking an Electron notification does to the main window (notificationMethod electron only): show reveals the window (default), restore also un-minimises and focuses it (helps on GNOME), none does nothing.

logConfig

FieldTypeDefaultDescription
logConfig.transports.console.level`stringboolean`"info"
logConfig.transports.file.level`stringboolean`false

customNotification

FieldTypeDefaultDescription
customNotification.toastDurationnumber5000Time in milliseconds before a custom toast notification auto-dismisses.

network

FieldTypeDefaultDescription
network.webRTCIPHandlingPolicystringnullWebRTC IP handling policy controlling which network interfaces are used for ICE candidate gathering.
network.disableQuicbooleantrueAppend Chromium's --disable-quic switch at startup to work around QUIC protocol errors (issue #2518).

msTeamsProtocols

FieldTypeDefaultDescription
msTeamsProtocols.v1string"^msteams:/(?:meet/|l/(?:app|call|channel|chat|entity|file|meet(?:ing|up-join)|message|task|team)/)"Regular expression matching legacy msteams: scheme protocol links.
msTeamsProtocols.v2string"^msteams://teams\\.(?:microsoft\\.com|live\\.com|cloud\\.microsoft)/(?:meet/|l/(?:app|call|channel|chat|entity|file|meet(?:ing|up-join)|message|task|team)/)"Regular expression matching host-based msteams:// scheme protocol links.

media

FieldTypeDefaultDescription
media.microphone.disableAutogainbooleanfalseDisable microphone auto gain control so Teams does not automatically adjust microphone volume levels.
media.microphone.speakingIndicatorbooleanfalseEnable a visual overlay showing microphone state during calls (speaking/silent/muted) with WebRTC-based call state detection.
media.microphone.ignoreSystemMutebooleanfalseStop Teams' mute button from following the operating system microphone mute on Linux. Chromium reports the OS capture-source mute to the page as a track mute event and Teams mirrors it onto its own button; enable this to keep the Teams button where you left it and rely solely on your system/hotkey mute (which still cuts the transmitted audio). Remote participants' mute state is unaffected.
media.microphone.overrideConstraints.enabledbooleanfalseEnable overriding the microphone audio constraints Teams requests via getUserMedia; only the keys you set are overridden.
media.microphone.overrideConstraints.echoCancellationbooleanundefinedWhen set, overrides getUserMedia's echoCancellation constraint; omit to leave it untouched.
media.microphone.overrideConstraints.noiseSuppressionbooleanundefinedWhen set, overrides getUserMedia's noiseSuppression constraint; omit to leave it untouched.
media.microphone.overrideConstraints.autoGainControlbooleanundefinedWhen set, overrides getUserMedia's autoGainControl constraint (takes precedence over disableAutogain); omit to leave it untouched.
media.microphone.overrideConstraints.channelCountnumberundefinedWhen set, pins the microphone channel count (typically 1 or 2); omit to leave it untouched.
media.microphone.overrideConstraints.sampleRatenumberundefinedWhen set, pins the microphone sample rate in Hz (e.g. 48000); omit to leave it untouched.
media.camera.resolution.enabledbooleanfalseEnable camera resolution control.
media.camera.resolution.modestring"remove"Resolution mode: remove strips Teams' constraints to allow native camera resolution, override sets a specific width/height.
media.camera.resolution.widthnumberundefinedTarget camera width when mode is override.
media.camera.resolution.heightnumberundefinedTarget camera height when mode is override.
media.camera.autoAdjustAspectRatio.enabledbooleanfalseReapply proper aspect ratio constraints to fix camera video stretching when moving Teams between monitors with different orientations.
media.video.menuEnabledbooleanfalseEnable the menu entry for controlling video elements (PiP mode, video controls).
media.showStatusOnDockIconbooleanfalseOverlay the user presence status on the Dock icon on macOS.
media.macPerformanceModebooleantrueOn macOS, force-enable native hardware/rendering optimizations (Metal ANGLE, GPU rasterization, hardware WebRTC codecs) at startup; set false to opt out without disabling the GPU entirely.

mqtt

FieldTypeDefaultDescription
mqtt.enabledbooleanfalseEnable the MQTT integration (status publishing and command reception).
mqtt.brokerUrlstring""MQTT broker URL, e.g. mqtt://host:1883 or mqtts://host:8883 for TLS.
mqtt.usernamestring""MQTT username for authentication (optional).
mqtt.passwordstring""MQTT password for authentication (optional).
mqtt.clientIdstring"teams-for-linux"Unique MQTT client identifier.
mqtt.topicPrefixstring"teams"Topic prefix for all MQTT messages.
mqtt.statusTopicstring"status"Topic name for outbound status messages, combined with topicPrefix.
mqtt.commandTopicstring""Topic name for receiving inbound commands; leave empty to disable (status-only mode).
mqtt.statusCheckIntervalnumber10000Polling interval in milliseconds for the status detection fallback.
mqtt.homeAssistant.enabledbooleanfalseEnable Home Assistant MQTT auto-discovery so entities are created automatically.
mqtt.homeAssistant.discoveryPrefixstring"homeassistant"MQTT discovery topic prefix used by Home Assistant.
mqtt.homeAssistant.deviceNamestring"Teams for Linux"Device name shown in Home Assistant.

quickChat

FieldTypeDefaultDescription
quickChat.enabledbooleanfalseEnable the Quick Chat feature for quick contact search and chat access.
quickChat.shortcutstringundefinedKeyboard shortcut to toggle the Quick Chat modal (e.g. CommandOrControl+Alt+Q); unset by default.

graphApi

FieldTypeDefaultDescription
graphApi.enabledbooleanfalseEnable the Microsoft Graph API integration for calendar and mail access.

auth

FieldTypeDefaultDescription
auth.intune.enabledbooleanfalseEnable Single-Sign-On using Microsoft Intune.
auth.intune.userstring""User (e-mail) to use for Intune SSO.
auth.webauthn.enabledbooleanfalseEnable FIDO2 hardware security key support for WebAuthn authentication on Linux (requires fido2-tools).
auth.webauthn.debugbooleanfalseEnable verbose WebAuthn diagnostic logging, intended for beta testers troubleshooting key registration.
auth.reauthRecovery.enabledbooleanfalseOpt into in-app recovery from stale sessions by intercepting the stale 'sign in again' login popup and recovering in-app.

multiAccount

FieldTypeDefaultDescription
multiAccount.enabledbooleanfalseOpt-in flag for the single-window multi-account profile switcher; mutually exclusive with auth.intune.enabled.

wayland

FieldTypeDefaultDescription
wayland.xwaylandOptimizationsbooleanfalseKeep GPU enabled and skip the fake media UI flag under XWayland; may fix camera issues but can break screen sharing.

Generated by scripts/generateConfigDocs.js from app/config/options.js.