Microsoft’s own client availability table marks Linux with a red X. The native Teams desktop app for Linux was retired years ago, and the current Microsoft documentation states plainly that Teams is no longer supported on Linux. What is left are two routes that both work, and one of them is officially sanctioned.
This guide shows how to install Microsoft Teams on Fedora two ways: the community teams-for-linux desktop client from its vendor RPM repository, which gives you a real application window with a tray icon and its own config file, and the Teams progressive web app installed from Chrome or Edge, which is the route Microsoft points Linux users to. Both were installed and driven as far as the Microsoft sign in page on Fedora 44 Workstation in August 2026, with teams-for-linux 2.16.0 and Google Chrome 151, and the install path was smoke tested on the two older Fedora releases the title covers.
Why there is no official Teams client for Fedora
Microsoft killed the native Linux client in December 2022 and never replaced it. The client availability table in the Teams admin documentation lists Windows, macOS, iOS, Android and the web as supported, and Linux as not supported. The system requirements page is more useful about what you actually get: “Linux users have access to Teams for Web and Teams as a progressive web app (PWA)”, with Edge, Chrome and Firefox listed as supported browsers.
So the practical question is not whether a native client exists. It is whether you want a browser-managed app window from Microsoft or a self-contained Electron wrapper from the community.
| teams-for-linux (RPM) | Teams PWA in Chrome or Edge | |
|---|---|---|
| Maintained by | Independent open source project, not affiliated with Microsoft | Microsoft (it is the web app) |
| Install source | Vendor RPM repo, Flathub, Snap Store, AppImage | Any Chromium browser already on the machine |
| Updates arrive via | dnf upgrade or flatpak update | The browser plus Microsoft’s own web releases |
| Desktop integration | Own window, tray icon, JSON config file, custom CSS | App window and launcher entry, no tray icon |
| Microsoft support | None | Teams for Web is supported, the Linux desktop client is not |
Install Microsoft Teams on Fedora with the teams-for-linux RPM repo
The project publishes a signed RPM repository, which is a much better fit on Fedora than the Snap package older guides recommended. Start by pulling the repository signing key and importing it into the RPM keyring:
curl -1sLf -o /tmp/teams-for-linux.asc https://repo.teamsforlinux.de/teams-for-linux.asc
sudo rpm --import /tmp/teams-for-linux.asc
The key import must succeed before you go any further. The repository file the project ships sets gpgcheck=1 without a gpgkey line, so if the key never lands in the keyring the install fails at the very last step, after downloading everything. Write the repo definition yourself with the key URL included and that failure mode disappears:
sudo vim /etc/yum.repos.d/teams-for-linux.repo
Add the repository definition:
[teams-for-linux]
name=Teams for Linux
baseurl=https://repo.teamsforlinux.de/rpm/
enabled=1
gpgcheck=1
gpgkey=https://repo.teamsforlinux.de/teams-for-linux.asc
The baseurl carries no $releasever, which is why one repository serves every Fedora release. Fedora 42 needs one caveat before you go further: it reached end of life in May 2026, so the client installs and runs there, but the system under it stopped receiving security updates. Install the client:
sudo dnf install -y teams-for-linux
On a Workstation install almost everything the Electron app needs is already there, so the transaction is tiny:
Package Arch Version Repository Size
Installing:
teams-for-linux x86_64 0:2.16.0-1 teams-for-linux 337.9 MiB
Installing dependencies:
libXScrnSaver x86_64 0:1.2.4-7.fc44 fedora 49.5 KiB
Transaction Summary:
Installing: 2 packages
Total size of inbound packages is 96 MiB. Need to download 96 MiB.
After this operation, 338 MiB extra will be used (install 338 MiB, remove 0 B).
That number changes a lot on a machine without a desktop. The same command on a Fedora Cloud Base image pulled the entire GTK, PipeWire and libcamera stack with it, which is worth knowing before you run this on a minimal box you only reach over SSH.
| Starting point | Packages in the transaction | Download size |
|---|---|---|
| Workstation (GNOME already installed) | 2 | 96 MiB |
| Cloud Base / minimal install | 247 | 253 MiB |
Confirm what landed and where the launcher points:
rpm -q teams-for-linux
teams-for-linux --version
The version check prints a config notice first, then the version on its own line:
teams-for-linux-2.16.0-1.x86_64
No config file found (user or system-wide), using default values
2.16.0
Same thing in the terminal on the lab machine, notice included:

The package also drops a desktop entry, and its launcher line explains a quirk you will hit on Wayland:
grep Exec /usr/share/applications/teams-for-linux.desktop
Electron is pinned to the X11 ozone platform:
Exec=/opt/teams-for-linux/teams-for-linux --ozone-platform=x11 %U
On a Wayland session that means the app runs through XWayland rather than natively. It is the upstream default, not something Fedora does. Nothing here needs SELinux work either: the client installs under /opt and runs as your user, and after a full install and launch cycle sudo ausearch -m avc -ts recent returned <no matches> with SELinux still enforcing.
Error: “The repository does not have any OpenPGP keys configured”
This is what a skipped or failed key import looks like. DNF downloads every package, then refuses the transaction at signature verification:
Transaction failed: Signature verification failed.
OpenPGP check for package "teams-for-linux-2.16.0-1.x86_64" (/var/cache/libdnf5/teams-for-linux-52070eda2215cb3c/packages/teams-for-linux-2.16.0.x86_64.rpm) from repo "teams-for-linux" has failed: The repository does not have any OpenPGP keys configured.
The fix is either of the two things above: import the key with rpm --import, or add the gpgkey line to the repo file so DNF fetches it itself. Do not reach for --nogpgcheck to get past this, because the whole point of the signed repository is that you can tell whether the RPM came from the maintainer.
Error: “can’t create transaction lock on /usr/lib/sysimage/rpm/.rpm.lock”
On a freshly installed system the key import can fail before it starts:
error: can't create transaction lock on /usr/lib/sysimage/rpm/.rpm.lock (Resource temporarily unavailable)
error: /tmp/teams-for-linux.asc: key 1 import failed.
Something else holds the RPM database, usually a background dnf makecache or the first-boot update that GNOME Software kicked off. Wait for it to finish, then repeat the import. The trap is that the failure is easy to miss in a long scroll of output, and the install then dies at the signature check ten minutes later.
Launch the client and sign in
Open the app from Activities as “Teams for Linux”, or run teams-for-linux from a terminal. The window that comes up is the Microsoft sign-in page, because the wrapper loads the same web app your browser would:

On a GNOME session the first launch pops a “Choose password for new keyring” dialog before the window appears. That is Chromium’s credential store asking to create a default keyring for the session cookie. Set a password and unlock it each session, or leave the field empty and GNOME stores the keyring unencrypted; the saved login survives a restart either way. On a machine with no keyring daemon at all, starting the client with --password-store=basic skips the dialog and keeps the cookie in the profile directory, obfuscated rather than encrypted, so treat that as a single user option.
If you followed an older version of this guide and installed the Snap package, remove it now so you are not running two clients: sudo snap remove teams-for-linux. The Snap build is still published, but on Fedora the RPM repo avoids pulling snapd in for one application.
Configure the client through config.json
Everything the wrapper adds on top of the web app is driven by one JSON file that does not exist until you create it. This is user configuration, so no root involved:
mkdir -p ~/.config/teams-for-linux
vim ~/.config/teams-for-linux/config.json
A sane starting point, with the X button closing the app instead of hiding it and notifications handled by Electron rather than the web layer. The tray and screen sharing lines restate upstream defaults, which keeps the file self documenting when you come back to it:
{
"closeAppOnCross": true,
"trayIconEnabled": true,
"notificationMethod": "electron",
"spellCheckerLanguages": ["en-US"],
"screenSharing": {
"lockInhibitionMethod": "Electron"
}
}
Start the client from a terminal after saving it. The first two log lines tell you whether the file was picked up:
Using user configuration
configPath: /home/user/.config/teams-for-linux
“No config file found (user or system-wide), using default values” means the path or the filename is wrong. Every option is also a command line flag, and teams-for-linux --help prints all 74 flags with their defaults, which is the fastest way to see what is adjustable. Two of those defaults are worth knowing: the client loads https://teams.cloud.microsoft, and it presents a stock Chrome user agent to Microsoft, which is how the web app serves it the full desktop experience instead of a degraded one. Idle handling has a forceState switch documented as a workaround for Wayland compositors, which is the kind of rough edge you inherit with an Electron wrapper.
The config path changes with the packaging. Flatpak reads ~/.var/app/com.github.IsmaelMartinez.teams_for_linux/config/teams-for-linux/config.json and Snap reads a path under ~/snap/teams-for-linux/current/, so a config that works for the RPM build has to be copied, not symlinked from muscle memory.
Install Teams as a PWA in Chrome or Edge
This is the route Microsoft supports, and it needs nothing beyond a Chromium browser. If Chrome is not on the machine yet, the steps for Google Chrome on Fedora set up Google’s own DNF repository so the browser updates with the rest of the system. Edge works the same way through Microsoft’s repo.
Open https://teams.cloud.microsoft in a normal tab. In Chrome the install entry lives under the three dot menu, in “Cast, save, and share”, and it is named after whatever page is loaded:

Edge keeps the same feature somewhere else: press Alt+F for “Settings and more”, open Apps, then “Install this site as an app”.
Chrome takes the app name and the scope from whatever page is open, and this is where the order matters. Install before signing in and the dialog offers you login.microsoftonline.com under the name “Sign in to your account”, because the Teams URL redirects to the Microsoft login origin until a session exists. Sign in first and it picks up Teams itself. The name field is editable either way, so fix it there if you have to:

Click Install and the app opens in its own window with no tab strip and no address bar, so it alt-tabs like any other application while remaining the same web app underneath. Below is that frame sitting on the sign in page:

The install writes a normal desktop entry into your home directory, which is what puts Teams in the GNOME app grid:
cat ~/.local/share/applications/chrome-*-Default.desktop
Chrome launches it by app ID rather than by URL, and sets a window class so the launcher can match the window to the icon:
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Microsoft Teams
Exec=/opt/google/chrome/google-chrome --profile-directory=Default --app-id=ffckconhdpbcmgiplifplbiahnigkhmk
Icon=chrome-ffckconhdpbcmgiplifplbiahnigkhmk-Default
StartupWMClass=crx_ffckconhdpbcmgiplifplbiahnigkhmk
To remove it later, open chrome://apps, right click the Teams tile and choose to uninstall, or use the three dot menu inside the app window itself. Deleting the desktop file by hand leaves the app registered in the browser profile.
Use the Flatpak build on Silverblue and the immutable spins
Layering an RPM on an image-based system for a chat app is not worth the reboot, so use the Flathub build there. Flatpak itself is already installed on Fedora, but the Flathub remote is not always enabled, so check what you have and add it if it is missing (the Flatpak and Flathub setup on Fedora covers the system-wide variant in more detail):
flatpak remotes --columns=name,options
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub com.github.IsmaelMartinez.teams_for_linux
Check what that costs on disk:
flatpak list --user --columns=application,version,branch,origin,size | grep teams
The app and its runtimes weigh in around a third of a gigabyte, same ballpark as the RPM:
com.github.IsmaelMartinez.teams_for_linux 2.16.0 stable flathub 364.0 MB
One thing that catches people out over SSH: a system-wide remote or install needs a polkit prompt, and there is nobody there to answer it. The error is blunt about it, and adding --user to both commands installs into your home directory instead with no authentication at all:
error: Flatpak system operation ConfigureRemote not allowed for user
What neither route gives you
Both options are the Teams web app wearing a window frame, and it pays to be clear about what that means before you roll either one out to a team. Microsoft supports the web app, not a Linux desktop client, so a support case that starts with “the Linux app” ends quickly. The community wrapper says so itself: it is an independent project, and features are limited by what the web app exposes. Screen sharing runs through Electron’s own picker rather than a native Teams stack, and notifications go over D-Bus, which is why the config file carries screen sharing and idle detection switches at all.
Two smaller things bite in corporate setups. Teams for Web needs third party cookies allowed for some line of business apps to load, and Microsoft explicitly does not support Teams for Web in VDI environments, so a thin client running Fedora is the wrong place to plan around it. For everything else, pick by update path: dnf and a config file if you want the app managed like a package, or the PWA if you would rather Microsoft’s release train handle it. Teams is rarely the only thing an office desktop needs, and the same machine usually ends up with Slack on Fedora and the Zoom client beside it. If this is a fresh install, the post-install checklist for Fedora Workstation and the DNF5 command reference are the next two stops.
This does not work.
[iss-soc@srcpos01 ~]$ sudo sh -c ‘echo -e “[teams]\nname=teams\nbaseurl=https://packages.microsoft.com/yumrepos/ms-teams\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc” > /etc/yum.repos.d/teams.repo’
[sudo] password for iss-soc:
[iss-soc@srcpos01 ~]$ sudo rpm –import https://packages.microsoft.com/keys/microsoft.asc
[iss-soc@srcpos01 ~]$ sudo dnf check-update
teams 4.6 kB/s | 1.5 kB 00:00
[iss-soc@srcpos01 ~]$ sudo dnf install teams
Last metadata expiration check: 0:00:14 ago on Fri 15 Sep 2023 05:53:16 AM PDT.
No match for argument: teams
Error: Unable to find a match: teams
See updated guide on using snap package.
hi Jim, teams package isn’t able in microsoft repository anymore , so you must use Snap package installation steps