teams-for-linux Documentation

Unofficial Microsoft Teams for Linux client

4,726 stars JavaScript JavaScript 1 file Β· ~1,173 tokens #electron#linux#microsoft#teams
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy teams-for-linux on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name teams-for-linux -p 6081:6081 --restart always cross-distro-ubuntu
Configured Services & Ports
βš™οΈ ubuntu-x11
image: cross-distro-ubuntu
πŸ”Œ Ports: 127.0.0.1:6081:6080, 127.0.0.1:5901:5900
βš™οΈ ubuntu-wayland
image: cross-distro-ubuntu
πŸ”Œ Ports: 127.0.0.1:6082:6080, 127.0.0.1:5902:5900
βš™οΈ ubuntu-xwayland
image: cross-distro-ubuntu
πŸ”Œ Ports: 127.0.0.1:6083:6080, 127.0.0.1:5903:5900
βš™οΈ fedora-x11
image: cross-distro-fedora
πŸ”Œ Ports: 127.0.0.1:6084:6080, 127.0.0.1:5904:5900
βš™οΈ fedora-wayland
image: cross-distro-fedora
πŸ”Œ Ports: 127.0.0.1:6085:6080, 127.0.0.1:5905:5900
βš™οΈ fedora-xwayland
image: cross-distro-fedora
πŸ”Œ Ports: 127.0.0.1:6086:6080, 127.0.0.1:5906:5900
βš™οΈ debian-x11
image: cross-distro-debian
πŸ”Œ Ports: 127.0.0.1:6087:6080, 127.0.0.1:5907:5900
βš™οΈ debian-wayland
image: cross-distro-debian
πŸ”Œ Ports: 127.0.0.1:6088:6080, 127.0.0.1:5908:5900
βš™οΈ debian-xwayland
image: cross-distro-debian
πŸ”Œ Ports: 127.0.0.1:6089:6080, 127.0.0.1:5909:5900
docker-compose.yml
yaml (docker-compose.yml)
# Cross-Distro Testing for Teams for Linux
# 3 distros x 3 display servers = 9 test configurations
#
# Usage:
#   docker compose up ubuntu-x11          # Single config
#   docker compose up ubuntu-x11 fedora-wayland  # Multiple configs
#
# Access via browser: http://localhost:/vnc.html
# Access via VNC client: localhost:

x-common: &common
  platform: linux/amd64
  shm_size: "4gb"
  # seccomp=unconfined is required for Sway/wlroots headless backend to
  # function inside Docker. SYS_PTRACE is needed for Electron's sandbox
  # and crash reporter. SYS_ADMIN and SYS_NICE are needed for Sway on
  # Fedora 41+ (wlroots process management). These weaken container
  # isolation, so ports are bound to localhost only (see below).
  security_opt:
    - seccomp=unconfined
  cap_add:
    - SYS_PTRACE
    - SYS_ADMIN
    - SYS_NICE
  volumes:
    - ./app:/app:ro
    # Persist login session and app config across container restarts
    - ./session:/home/tester/.config/teams-for-linux
    # Mount project source for running Playwright tests inside the container
    - ../../:/src:ro
  environment: &common-env
    SCREEN_RESOLUTION: "1920x1080x24"
    # Software rendering -- no physical GPU in containers
    LIBGL_ALWAYS_SOFTWARE: "1"
    MESA_GL_VERSION_OVERRIDE: "3.3"
    # Set APP_URL to download an AppImage at startup (e.g. CI artifact or release URL)
    APP_URL: "${APP_URL:-}"
    # Set AUTO_LAUNCH=false to skip auto-starting the app
    AUTO_LAUNCH: "${AUTO_LAUNCH:-true}"
    # Extra flags to pass to the app (e.g. --spellChecker.enabled=false)
    APP_FLAGS: "${APP_FLAGS:-}"

# ============================================================
# Ubuntu 24.04
# ============================================================
services:
  ubuntu-x11:
    <<: *common
    image: cross-distro-ubuntu
    build:
      context: .
      dockerfile: dockerfiles/ubuntu.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: x11
    ports:
      - "127.0.0.1:6081:6080"
      - "127.0.0.1:5901:5900"

  ubuntu-wayland:
    <<: *common
    image: cross-distro-ubuntu
    build:
      context: .
      dockerfile: dockerfiles/ubuntu.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: wayland
    ports:
      - "127.0.0.1:6082:6080"
      - "127.0.0.1:5902:5900"

  ubuntu-xwayland:
    <<: *common
    image: cross-distro-ubuntu
    build:
      context: .
      dockerfile: dockerfiles/ubuntu.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: xwayland
    ports:
      - "127.0.0.1:6083:6080"
      - "127.0.0.1:5903:5900"

  # ============================================================
  # Fedora 41
  # ============================================================
  fedora-x11:
    <<: *common
    image: cross-distro-fedora
    build:
      context: .
      dockerfile: dockerfiles/fedora.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: x11
    ports:
      - "127.0.0.1:6084:6080"
      - "127.0.0.1:5904:5900"

  fedora-wayland:
    <<: *common
    image: cross-distro-fedora
    build:
      context: .
      dockerfile: dockerfiles/fedora.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: wayland
    ports:
      - "127.0.0.1:6085:6080"
      - "127.0.0.1:5905:5900"

  fedora-xwayland:
    <<: *common
    image: cross-distro-fedora
    build:
      context: .
      dockerfile: dockerfiles/fedora.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: xwayland
    ports:
      - "127.0.0.1:6086:6080"
      - "127.0.0.1:5906:5900"

  # ============================================================
  # Debian Bookworm
  # ============================================================
  debian-x11:
    <<: *common
    image: cross-distro-debian
    build:
      context: .
      dockerfile: dockerfiles/debian.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: x11
    ports:
      - "127.0.0.1:6087:6080"
      - "127.0.0.1:5907:5900"

  debian-wayland:
    <<: *common
    image: cross-distro-debian
    build:
      context: .
      dockerfile: dockerfiles/debian.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: wayland
    ports:
      - "127.0.0.1:6088:6080"
      - "127.0.0.1:5908:5900"

  debian-xwayland:
    <<: *common
    image: cross-distro-debian
    build:
      context: .
      dockerfile: dockerfiles/debian.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: xwayland
    ports:
      - "127.0.0.1:6089:6080"
      - "127.0.0.1:5909:5900"

Teams for Linux


Unofficial Microsoft Teams client for Linux β€” a native desktop app that wraps the Teams web version with enhanced Linux integration.

βœ… System notifications
βœ… System tray integration (badge support varies by desktop environment)
βœ… Custom backgrounds & themes
βœ… Screen sharing support
βœ… Multiple account profiles

[!NOTE]
This is an independent project, not affiliated with Microsoft. Some features are limited by the Teams web app.

Recall.ai β€” API for Meeting Recording and Transcription

If you're looking for a meeting recording API, consider checking out Recall.ai, an API that records and transcribes Zoom, Google Meet, Microsoft Teams, in-person meetings, and more.

This sponsorship helps support the ongoing development of teams-for-linux.

Installation

Package Repositories

We have dedicated Debian/DEB and RHEL/Fedora/RPM repositories at https://teamsforlinux.de hosted with :heart: by Nils BΓΌchner. Please follow the installation instructions there.

Distribution Packages





Manual Download

Download from GitHub Releases β€” available as AppImage, deb, rpm, snap, tar.gz (plus Windows/macOS builds).

[!TIP]
For AppImage files, use AppImageLauncher for better desktop integration.

Quick Start

  1. Install using your preferred method above
  2. Launch with teams-for-linux
  3. Configure by creating ~/.config/teams-for-linux/config.json if needed

Documentation

πŸ“– Complete Documentation β€” Enhanced documentation with search, mobile optimization, and comprehensive guides

Topic Description
Installation Guide Package repositories and installation methods
Configuration Guide Complete setup and configuration options
Troubleshooting Common issues and solutions
Multiple Profiles Running work & personal accounts
Custom Backgrounds Video call backgrounds setup
Contributing Development setup and contribution guidelines
Privacy & Data Protection What personal data the app does and does not handle

Project Activity

Support & Community

Security & Sandboxing

Electron's contextIsolation and sandbox features are disabled to enable Teams DOM access functionality. For enhanced security, use system-level sandboxing:

Available options:

  • Flatpak: Built-in isolation via Flathub
  • Snap packages: Application confinement with auto-updates
  • Firejail: Use this script for manual sandboxing
  • AppArmor/SELinux: Most Linux distributions include these by default

System-level sandboxing provides better isolation than Electron's built-in features while preserving full functionality.

Advanced Usage

History

Read about the history of this project in the HISTORY.md file.

License

GPL-3.0 β€” See LICENSE.md

Icons from Icon Duck (CC BY 4.0)