Birdtray, a Thunderbird new mail counter that reads the mork database
new mail system tray notification icon for Thunderbird
At a glance
- What is it?
- Birdtray puts an unread mail counter in the system tray for Thunderbird on Linux and Windows without installing any Thunderbird extension. It reads the mail mork database directly, which keeps it working across extension API changes, and it depends on a spec-compliant desktop manager.
- Who is it for?
- Birdtray fits Linux and Windows users who want a Thunderbird unread counter and a working hide and show action on a conventional desktop, and it does not fit Wayland sessions, where show and hide does not work, or barebone window managers that never show a tray icon.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 81 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Reading the mork database instead of hooking an extension
Birdtray is a system tray new mail notification for Thunderbird that does not require any Thunderbird extension. The mechanism is the interesting part of the design. Instead of asking Thunderbird for its unread count through an extension API, Birdtray checks the unread status directly by reading the Thunderbird email mork database. The documentation gives the reason plainly: because it does not depend on extensions, it is immune to any future extension API changes in Thunderbird.
That is a genuine architectural bet rather than a feature list. Extensions are the usual way to reach a mail client's internal state, and they are also the part of a client that breaks when the client changes its internals. Birdtray reads a file on disk instead, which means it keeps a narrow dependency surface: the mork database format and whatever Thunderbird writes into it. The cost of that approach is that the user has to point Birdtray at the right MSF file for each mailbox, which is a manual step in the settings under the Monitoring tab rather than something that is discovered automatically.
The project supports Linux and Windows, with the Windows support credited to @Abestanis, and patches for other platforms are welcome. The licence is GPLv3, and the author is George Yunaev.
What the tray icon actually gives you
The feature list is longer than the usual one-item summary. The tray icon shows the unread email counter, and it can optionally animate when new mail arrives. You can snooze new mail notifications for a specific period. You can configure which accounts to check for unread email, and you can give different accounts different font colours, so personal mail can show a blue count, work mail a red count, and a default colour when more than one folder has unread mail.
Beyond the counter, the icon can hide the Thunderbird window when clicked and restore it, a behaviour that has been in the project since version 0.2 and, as the documentation notes, currently only works on Linux. Birdtray can launch Thunderbird when it starts and terminate it when it quits, and that behaviour is configurable rather than fixed. You can choose the tray icon or use the original Thunderbird icon. It can also monitor whether Thunderbird is running and indicate it if you closed it by accident, which matters when the whole point of the tool is that Thunderbird lives in the tray.
There is also a configurable New Email function with pre-configured email templates. The overall shape is a small companion application that owns the relationship between Thunderbird and your desktop, rather than a plugin that lives inside Thunderbird.
Building from source with CMake and Qt 6
Building Birdtray needs a C++ compiler, CMake, Qt 6.2 or higher and libX11-devel. The build itself is a standard out-of-source CMake build:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .That produces a birdtray executable in the build directory, which the documentation tells you to launch directly. The presence of libX11-devel in the requirement list is the giveaway that this is an X11-oriented build, which connects to the Wayland limitations discussed further down. The repository layout matches a conventional CMake C++ project, with CMakeLists.txt at the root and src/, tests/, contrib/ and installer/ directories alongside it.
There is a build badge pointing at a GitHub Actions workflow for the main branch, so the project does have continuous integration for its builds. Tests live in their own directory, which is unusual for a tray utility of this size and worth a look if you intend to modify the mork parsing code.
Installing to a prefix, and the Windows installer route
Installation from the build tree is one command:
cmake --build . --target installOn Unix systems you can choose where it lands by setting the install prefix at configure time, before running that command:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ..On Windows the same build target produces a graphical installer and runs it, and that path requires NSIS to be installed on the system. The documentation recommends that Windows users download the precompiled installers for the latest release rather than building, which is a reasonable suggestion given the extra dependency.
That recommendation points at a gap in the release history. The listed releases are v1.11.4 from 2023-09-04, v1.11.3 from 2023-08-31 and v1.11.2 from 2023-08-31, while the last push to the repository was on 2026-08-03. In other words, the source tree has moved on since the last tagged release, and the release page a Windows user is pointed to is several years old. Anyone who wants current behaviour should build from the master branch rather than assume the latest release contains the newest work.
Where the configuration file lands on each platform
Birdtray stores its configuration per user, and the path differs by installation method on Linux and by platform on Windows. For a Linux package installation it is $HOME/.config/birdtray-config.json. For the Flatpak installation it is $HOME/.var/app/com.ulduzsoft.Birdtray/config/ulduzsoft/birdtray-config.json. On Windows it is %LocalAppData%\ulduzsoft\birdtray\birdtray-config.json.
The flatpak path is the one to note, because it shows the app id the Flatpak package uses and it shows how much the configuration layout depends on how the application was installed. If you move between a package install and a Flatpak, the configuration does not follow you automatically.
One operational detail is easy to miss and is stated plainly in the documentation: once you change settings, you often need to restart Birdtray for them to take effect. That is a small thing, but it interacts with the workflow of pointing the tool at a Thunderbird MSF file, because the first run has nothing to monitor until you restart it. The configuration is a JSON file, so it is also readable and editable by hand if you prefer to script the setup.
Wayland, barebone desktops and a corrupt mork file
The troubleshooting section is the most useful part of the documentation, because it names the cases where Birdtray will not behave. The general expectation is a spec-compliant desktop manager. On a barebone or non-standard desktop, features are likely to fail, with hiding and restoring Thunderbird windows, including their position and state, the most likely casualty. Sometimes even the tray icon itself is not shown. Linux Mint with Cinnamon is named as a particularly troublesome distribution that reports many issues.
Wayland is a partial support story rather than a full one. Email monitoring works, but show and hide does not, and the documentation asks people to track a specific issue for the current status. It also asks that Wayland-related issues not be reported unless the person built Birdtray from source themselves.
There is a separate failure mode worth knowing about, and it is a data problem rather than a platform problem. If Birdtray shows the wrong number of unread messages, the cause can be a corrupt mork file, and the fix is to use the Repair functionality in Thunderbird in the mail folder settings. That is a useful reminder that Birdtray is reading a database that another application owns, so the database can be damaged independently of anything Birdtray does.
Reading the database instead of asking Thunderbird
The alternative to Birdtray is a Thunderbird extension that asks the client for its unread count and paints a badge or an icon itself. The difference in approach is worth being precise about, because both routes display the same number.
An extension sits inside Thunderbird, so it inherits the client's own state and can react to events as they happen rather than by polling a file on disk. It also inherits the extension API, which is exactly the dependency the Birdtray design avoids, and it needs to be installed, updated and kept compatible whenever Thunderbird changes. Birdtray runs as a separate process, so it survives a Thunderbird upgrade without touching the profile, and it can keep working while Thunderbird is not running at all, unlike an extension that only lives inside the client.
The cost of the file-based route is that you configure it by hand. Choosing the MSF file for each mailbox, picking per-account colours, and restarting Birdtray after a change are all manual steps that an extension would hide. Which route suits you depends on whether you want a tray counter that works independently of the client or a badge that lives inside it. Given the release history, the independent process is the part of Birdtray that is still being worked on.
Editorial conclusion
Birdtray fits Linux and Windows users who want a Thunderbird unread counter and a working hide and show action on a conventional desktop, and it does not fit Wayland sessions, where show and hide does not work, or barebone window managers that never show a tray icon. Before adopting it, check your desktop environment against the spec-compliant requirement, confirm that your Thunderbird profile exposes the MSF file you want to monitor, and decide whether you want to build it yourself, since the last release tag on the repository is v1.11.4 from 2023 while the last push was on 2026-08-03.
Frequently asked questions
Does Birdtray need a Thunderbird extension?
No. Birdtray checks the unread status directly by reading the Thunderbird email mork database, so no extension is required. The documentation notes that this makes it immune to future extension API changes in Thunderbird.
How do I build Birdtray from source?
You need a C++ compiler, CMake, Qt 6.2 or higher and libX11-devel. Create a build directory, run cmake -DCMAKE_BUILD_TYPE=Release .., build with cmake --build ., and then launch the birdtray executable from the build directory.
Where is the Birdtray configuration file stored?
It is stored per user as a JSON file. On a Linux package installation the path is $HOME/.config/birdtray-config.json, for the Flatpak it is $HOME/.var/app/com.ulduzsoft.Birdtray/config/ulduzsoft/birdtray-config.json, and on Windows it is %LocalAppData%\ulduzsoft\birdtray\birdtray-config.json.
Does Birdtray work on Wayland?
Only partly. The documentation states that email monitoring works with Wayland but show and hide of the Thunderbird window does not, and it points to a tracked issue for the current status.
What should I do if Birdtray shows the wrong unread count?
A corrupt mork file can cause it. The fix is to use the Repair functionality in Thunderbird in the mail folder settings, which rebuilds the folder database.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/gyunaev-birdtray)Was this useful?