A Thunderbird extension that integrates Microsoft Teams chat directly into Thunderbird.
- Unified inbox experience – access all your Teams chats without leaving Thunderbird.
- Chat list – all your Teams conversations listed in the left panel, grouped and sorted by recent activity.
- Message view – full conversation thread displayed on the right when a chat is selected.
- Send messages – type a reply in the compose field at the bottom and press Enter to send.
- Unread indicators – chats with new messages are shown in bold (Thunderbird style), with a badge count on the Teams button.
- Avatar or initials – profile photos are shown by default; an option lets you disable them and show sender initials (first + last name) in a coloured circle instead.
- Automatic refresh – chats and messages are polled every 30 seconds; the current open thread refreshes every 15 seconds.
- Building on Linux
- Allowing the plugin to access your Teams account
- Plugin options
- Installing on Thunderbird
- Development workflow
- CI / CD
| Dependency | Minimum version | Install |
|---|---|---|
| Node.js | 18 | sudo apt install nodejs or nvm |
| npm | 8 | bundled with Node.js |
| git | any | sudo apt install git |
Ubuntu / Debian one-liner:
sudo apt update && sudo apt install -y nodejs npm git
Fedora / RHEL:
sudo dnf install -y nodejs npm git
# 1 – Clone the repository
git clone https://github.com/gortazar/thunderbird-teams-provider.git
cd thunderbird-teams-provider
# 2 – Install build tools (web-ext)
npm install
# 3 – Lint the extension (optional but recommended)
npm run lint
# 4 – Build the .xpi file
npm run buildThe build output is placed in web-ext-artifacts/thunderbird_teams_provider-<version>.xpi.
No. If you download an already-built .xpi from the
Releases page,
you just install it and click Sign in with Microsoft. No Azure portal, no Client ID,
no configuration of any kind. The experience is identical to adding a Microsoft email
account in Thunderbird.
TL;DR for end-users:
- Install the
.xpifrom Releases.- Click the Teams button in the Thunderbird sidebar.
- Click Sign in with Microsoft → enter your email, password, one-time code.
- On first sign-in your organisation may ask you to approve the app once (same one-time screen you saw when adding your Microsoft email to Thunderbird).
- Done — your chats load automatically.
This section is for whoever builds and publishes the
.xpi, not for end-users. If you are just installing a pre-built release you can skip everything below.
The extension ships with a placeholder Client ID in the source code:
const DEFAULT_CLIENT_ID = "YOUR_EXTENSION_CLIENT_ID_HERE";Before you publish a build you must replace this placeholder with a real Azure AD Application (client) ID. You only need to do this once, and you do not need your organisation's Azure account — a free personal Microsoft account (e.g. outlook.com, hotmail.com) is enough to register a multi-tenant application that any work or school account can sign in to.
- Sign in to the Azure portal with any Microsoft account (personal accounts work fine).
- Navigate to Azure Active Directory → App registrations → New registration.
- Fill in the form:
- Name:
Thunderbird Teams Provider(or any name you prefer) - Supported account types: Accounts in any organizational directory and personal Microsoft accounts — this allows users from any organisation to sign in.
- Redirect URI: select Public client / native (mobile & desktop) and enter the redirect URL shown in the extension options page (see below).
- Name:
- Click Register.
- Go to API permissions → Add a permission → Microsoft Graph → Delegated permissions.
- Add:
Chat.ReadWrite,User.Read,offline_access. - Click Add permissions.
Chat.ReadWriteis a user-delegated permission. Users consent to it themselves on first sign-in. No admin pre-approval is needed for most tenants.
Replace the placeholder in background/background.js:
const DEFAULT_CLIENT_ID = "YOUR_EXTENSION_CLIENT_ID_HERE";with your Application (client) ID from the Azure portal overview page, then build:
npm run buildThe generated .xpi in web-ext-artifacts/ is ready to distribute. Users of your
build just install it and click Sign in — no further configuration required.
Some organisations configure Azure AD to require an administrator to pre-approve any app before users can sign in to it. If your users see a "Need admin approval" screen, an Azure AD global administrator can grant tenant-wide consent via:
https://login.microsoftonline.com/<TENANT_ID>/adminconsent?client_id=<CLIENT_ID>
Replace <TENANT_ID> with your Directory (tenant) ID and <CLIENT_ID> with the
extension's Application ID. After this one-time approval, users sign in normally.
Open Thunderbird → Add-ons Manager → Thunderbird Teams Provider → Preferences (or click Open Options on the sign-in screen).
| Option | Description |
|---|---|
| Client ID (advanced) | Override the extension's built-in Azure AD app ID. Leave blank to use the pre-configured default. |
| Tenant ID (advanced) | Override the Azure AD tenant. Leave blank for common (personal and work accounts). |
| Disable avatars | When checked, profile photos are never fetched. Each sender is represented by a coloured circle containing their initials (first letter of first name + first letter of last name, e.g. JS for Jane Smith). Useful for privacy or bandwidth savings. |
| Sign in / Sign out | Authenticate or revoke the session. Tokens are stored locally in Thunderbird's secure extension storage. |
Download the latest .xpi file from the
Releases page.
Works for Thunderbird installed via DEB package, RPM, tarball, or Flatpak.
Method A – Drag and drop
Drag the .xpi file onto the Thunderbird window. Thunderbird will prompt you to install it.
Method B – Add-ons Manager
- Open Thunderbird.
- Press
Ctrl+Shift+Ato open the Add-ons Manager. - Click the ⚙ gear icon (top-right of the add-ons list).
- Select Install Add-on From File….
- Browse to the downloaded
.xpiand click Open. - Click Add on the confirmation prompt.
After installation a Teams button (purple T icon) appears in the vertical spaces toolbar on the left side of the Thunderbird window.
The official Thunderbird snap (thunderbird from Canonical) runs in a confined
sandbox. Extensions are installed the same way as for the standard package:
- Open the Thunderbird snap application.
- Press
Ctrl+Shift+A→ gear icon → Install Add-on From File…. - Select the
.xpifile.
Note: The snap's sandbox does not restrict Thunderbird's ability to load extensions via the Add-ons Manager. You do not need to run any
snap connectcommands for this extension.
Tip: If the file picker in the snap cannot see your
Downloadsfolder, copy the.xpito your home directory first:cp ~/Downloads/thunderbird_teams_provider-*.xpi ~/Then browse to
~in the file picker.
# Run the extension inside Thunderbird (hot-reload)
npm run startThis launches a temporary Thunderbird profile with the extension pre-loaded.
You need Thunderbird installed and on $PATH (or set WEB_EXT_FIREFOX to the
Thunderbird binary path).
# Lint without building
npm run lintThe GitHub Actions workflow (.github/workflows/build.yml) runs on every pull request
and every push to main:
- Lint –
web-ext lintchecks the extension for common issues. - Build –
web-ext buildproduces a signed-ready.xpi. - Artifact – the
.xpiis uploaded as a workflow artifact (available for 30 days). - Release – on a successful push to
maina GitHub Release is automatically created and the.xpiis attached as the release asset.
Apache 2.0 – see LICENSE.