Open-source project
keshavbhatt/whatsie avatar
keshavbhatt/whatsie

Whatsie: WhatsApp Web in a native Qt window on Linux

Feature rich WhatsApp Client for Desktop Linux

3,419 stars105 forksC++MIT

At a glance

What is it?
A Qt 6 and C++20 shell that wraps WhatsApp Web with tray notifications, a downloads window, spell check and an app lock, without pulling in Electron.
Who is it for?
Whatsie's argument is not that it reimplements WhatsApp, it is that a browser tab is the wrong container for it. Everything in the project follows from that: native notifications instead of web ones, a real downloads window, system proxy settings, a passcode lock that covers every window, and a diagnostics bundle attached to bug reports.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 16 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 September 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A native shell around a web view

The framing sentence is in the README: WhatsApp Web in a real desktop app. That is the entire architecture. Qt WebEngine renders the site, and a Qt 6 application provides the window, the tray icon, the settings dialogs and the file handling around it.

The pitch is explicitly anti-Electron, and the reason given is speed and weight rather than ideology: it is a thin native shell, so it starts fast and stays light. At 3419 stars and 105 forks it is one of the more popular Linux desktop wrappers, and unlike most of its category the README documents Windows builds as well as Linux ones, with an msi installer and a portable zip for x64, both bundling their own Qt runtime.

The project is MIT licensed and written in C++20 against Qt 6.11. It is not affiliated with WhatsApp or Meta, which the README states in a footnote rather than leaving ambiguous, which is the correct thing to do for a project in this space.

The last push was 2026-09-21 and version 6.1.1 was published the same day, so the release line tracks the source.

What the desktop integration actually adds

The features are grouped into three headings, and the first one is where the value over a browser tab sits.

Desktop integration gives you native notifications that include the contact's avatar, a system tray icon carrying an unread badge with mute and do-not-disturb, single instance handling with a --profile flag for multiple accounts, autostart at login, and handling for whatsapp: and wa.me links plus a --new-chat command that opens straight into a conversation. That last group is the part a browser cannot do at all.

The web experience section covers light, dark and follow-system theming kept in step with WhatsApp Web, voice, video and screen-share calls with Wayland handled through the desktop portal, a real downloads window with history, drag and drop plus paste for attachments, zoom and interface scaling, optional smooth scrolling, and system-language spell check.

Version 6.1.0 added a further desktop touch: an unread badge on the taskbar or dock, not just the tray icon, and a Settings option to drop Chromium's 60 FPS cap so animations match your monitor's refresh rate. That one is off by default, with the README noting it uses more GPU and CPU, which is the correct default for a laptop on battery.

The interface is also translatable into German, Spanish, French, Italian, Brazilian Portuguese and Russian, with Automatic following your system locale.

Privacy controls that are more than a checkbox

The third group is the one that distinguishes this from other wrappers, and it is where the project spends its engineering.

There are per-site controls for camera, microphone and location, which is a genuine improvement on giving the whole WebEngine view blanket access. There is a privacy blur that hides message text and media until you hover, which is useful in a shared office or on a screen anyone can walk past. There is a passcode app lock using PBKDF2 that covers every window, configurable to lock on start, on hide, or after a period of idle. And there is HTTP and SOCKS5 proxy support with authentication.

The app lock is worth understanding precisely, because it is the kind of feature that either covers everything or nothing. The README says it covers every window and can lock on start, on hide, or after idle. Those three triggers together mean you can have it behave like a screensaver, like a privacy screen when you switch away, or like a device lock at boot.

The last item in this group is unusual. There is a built-in Report a bug flow that pre-fills a GitHub issue with diagnostics and the last crash if there was one, while keeping your messages private. Reading a stack trace from an application that renders a website is exactly the context a maintainer needs and exactly what a user would never assemble by hand.

Installing on Linux and Windows

Three package formats are offered for Linux, all one command.

sh
# Snap — any distro with snapd
sudo snap install whatsie

# Flatpak — from Flathub
flatpak install flathub com.ktechpit.whatsie

# Arch Linux (AUR) — builds from source
yay -S whatsie      # or: paru -S whatsie

An AppImage and a self-contained .deb with Qt bundled are attached to the latest release, so a Debian or Ubuntu system can install without a Flatpak runtime. The AppImage needs making executable with chmod +x before running, and the .deb installs with sudo apt install.

On Windows the README lists two artifacts, an msi installer with Start Menu and Desktop shortcuts and in-place upgrades, and a portable zip that requires no installation. Both target Windows 10 and 11 on 64-bit and carry their own Qt runtime, which means you do not need a Qt install on the machine.

The choice between Flatpak and Snap has real consequences beyond disk space. Snap confinement changes where the Qt WebEngine dictionaries live, and 6.0.4 documents exactly that failure: on the Snap the app could silently load no dictionaries at all because it inherited an empty system dictionary path, so spell check appeared to do nothing. The fix was to fall back to its own bundled dictionaries. If spell check matters to you, check that it works immediately after installing.

Spell check with your own dictionaries

Spell check is more involved than it sounds, because Qt WebEngine uses Chromium's compiled .bdic format rather than a system Hunspell dictionary.

Six languages are bundled, covering English, German, Spanish, French, Italian and Russian, and 6.1.0 also fixed the settings dialog listing only the first few bundled dictionaries instead of all of them. You enable more than one at a time as of 6.1.0, and they are all checked together.

For any other language, the Open folder button in the same settings section takes you to the right directory, which differs per packaging format: the Snap path is under ~/snap/whatsie/current/.local/share/ktechpit/whatsie/qtwebengine_dictionaries/, the Flatpak path under ~/.var/app/com.ktechpit.whatsie/data/ktechpit/whatsie/qtwebengine_dictionaries/, and everything else at ~/.local/share/ktechpit/whatsie/qtwebengine_dictionaries/. You drop the .bdic file in and reopen the dialog to pick the language.

If you only have a Hunspell .dic and .aff pair, the README gives the conversion command that ships with Qt WebEngine, qwebengine_convert_dict taking the .dic and producing the .bdic.

Building from source and reading the layout

Building needs Qt 6.11, CMake 3.21 or newer and a C++20 compiler. The README gives two routes, and the first is the interesting one.

sh
sudo snap install kde-qt6-core24-sdk kf6-core24
scripts/dev-build.sh --tests
scripts/dev-run.sh

Installing the KDE Qt 6.11 snap SDK gives you a build environment that works on any distribution, rather than requiring you to install Qt 6.11 from your distribution's repositories, which most do not carry at that version. The second route is a plain CMake build against a system Qt.

sh
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build -j
ctest --test-dir build --output-on-failure

The source layout is the clearest part of the repository and explains why the project can be tested at all.

- src/core is pure logic, settings and services, on Qt Core only, so it is unit-testable without a display. - src/web holds the WebEngine profile, page and view, the injected scripts and the JavaScript to C++ bridge. - src/platform is the OS backends behind interfaces, covering notifications, autostart and files. - src/ui is QtWidgets, the main window, dialogs, tray and lock screen. - src/app is the application object, the CLI and single instance handling. - tests holds Qt Test suites including an offscreen smoke test, and snap holds the packaging built in CI.

Packagers can also trim the dictionaries at build time with a WHATSIE_DICTIONARIES define, which defaults to bundling every Hunspell dictionary found on the system.

Editorial conclusion

Whatsie's argument is not that it reimplements WhatsApp, it is that a browser tab is the wrong container for it. Everything in the project follows from that: native notifications instead of web ones, a real downloads window, system proxy settings, a passcode lock that covers every window, and a diagnostics bundle attached to bug reports. The cost is that you inherit WhatsApp Web's own limitations, since this is a WebEngine view and not an API client. Install the Flatpak or the AppImage rather than building first, and if you do build, the snap SDK route is the one the project documents for any distribution.

Frequently asked questions

What is the best WhatsApp client for Linux?

Whatsie is one of the strongest native options because it wraps WhatsApp Web in a Qt 6 window rather than a browser tab or an Electron app. It gives you tray notifications with an unread badge, a real downloads window, system proxy settings, a PBKDF2 passcode lock over every window, and spell check. It is published as a Flatpak, a Snap, an AppImage, a .deb and an AUR package.

How do I install Whatsie on Linux?

Use flatpak install flathub com.ktechpit.whatsie for the Flathub build, sudo snap install whatsie on any distribution with snapd, or the Arch User Repository package with yay or paru. An AppImage and a self-contained .deb with Qt bundled are attached to the latest release as well.

Does Whatsie work on Windows?

Yes, on 64-bit Windows 10 and 11. Two artifacts are published, an msi installer with Start Menu and Desktop shortcuts and in-place upgrades, and a portable zip requiring no installation. Both bundle their own Qt runtime, so no separate Qt install is needed.

Can I add a spell check language Whatsie does not bundle?

Yes. Whatsie uses Chromium's compiled .bdic format, so drop that file into the dictionaries folder, reachable from the Open folder button in Settings, then reopen the dialog and pick the language. The path differs between the Snap, Flatpak and system installs. Convert a Hunspell .dic and .aff pair with qwebengine_convert_dict.

How does Whatsie compare with running WhatsApp Web in a browser?

The rendering is the same site either way, but the container differs. Whatsie adds native notifications, a tray and dock unread badge, a downloads window with history, system proxy support, a passcode lock and keyboard spell check, all in a Qt shell that starts faster than an Electron app. Everything WhatsApp Web itself does not support remains unsupported.

Official sources

  1. keshavbhatt/whatsie on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/keshavbhatt-whatsie.svg)](https://hysenlabs.com/projects/keshavbhatt-whatsie)