How to Install ZapZap on Ubuntu: A WhatsApp Desktop Client for Linux
There is no official WhatsApp application for Linux. What Linux users get instead is web.whatsapp.com in a browser tab: easy to lose among the others, quiet when the browser is minimised, and limited to one account at a time.
ZapZap is the unofficial desktop client that closes the gap. Built with Python, PyQt6 and QtWebEngine, it wraps WhatsApp Web in a proper application window and adds the native integration a tab cannot offer: multiple account profiles with isolated sessions, a system tray icon, real desktop notifications, light and dark theming, spell checking, and custom CSS or JavaScript injection when you want to adjust the interface.
ZapZap is not in the Ubuntu archive. Upstream publishes Flatpak, Snap, AppImage and a .deb on GitHub releases; the .deb route works fine but leaves updates entirely up to you.
The unofficial deb.griffo.io repository packages ZapZap for APT, so it installs like any other application and upgrades with the rest of the system, using your distribution’s Qt libraries rather than a bundled runtime.
Install the Latest ZapZap on Ubuntu: The Short Version
If you only came for the commands, this adds the repository and installs the latest ZapZap .deb package on Ubuntu:
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt update
sudo apt install zapzap
The rest of this guide explains what each command does, how to verify the install, how to keep ZapZap up to date, and what to check when something goes wrong.
What Makes ZapZap Special?
- 🖥️ A real desktop application - Its own window, icon and place in the alt-tab order instead of one tab among thirty.
- 👥 Multiple accounts - Isolated profiles and sessions, so a work number and a personal number can both be signed in.
- 🔔 Native notifications - Delivered by your normal notification daemon, browser or no browser.
- 📥 System tray integration - Close to tray and keep receiving messages in the background.
- 🎨 Light, dark and system themes - Match your desktop or choose explicitly.
- ✍️ Spell checking - Through QtWebEngine dictionaries.
- 🎛️ Custom CSS and JavaScript - Applied globally or per account for interface tweaks.
- 🆓 Open source - GPL-3.0, written in Python, straightforward to audit.
Why Use the deb.griffo.io Repository?
- Easy installation and updates through APT rather than a release page you have to remember.
- Automatic dependency management for PyQt6 and QtWebEngine.
- A native
.debusing the system Qt stack, with no Snap or Flatpak runtime in between. - Always tracks upstream releases so you stay close to the latest ZapZap.
- Works across supported Ubuntu releases, with the codename detected for you.
Prerequisites
Before starting, confirm you have:
- An Ubuntu system (Jammy 22.04 LTS, Noble 24.04 LTS, or newer)
- A graphical desktop session; this is a GUI application
- A phone with WhatsApp installed, to link the session by QR code
sudoprivilegescurlinstalled (sudo apt install curlif needed)
Step 1: Add the deb.griffo.io Repository
Register the key and repository source:
# Create the keyrings directory
sudo install -d -m 0755 /etc/apt/keyrings
# Download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
# Add the repository (auto-detects your distro codename)
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
# Update the package list
sudo apt update
Breaking it down:
- Create the keyrings directory - makes sure
/etc/apt/keyringsexists with the right permissions. - Install the GPG key - downloads and de-armours the repository key into its own keyring so APT can verify signatures.
- Add the repository - writes a
signed-bysource line, lettinglsb_release -scfill in your Ubuntu codename. - Update the package list - refreshes APT’s view of available packages.
Step 2: Update the Package List
If you did not run the final command above, do it now:
sudo apt update
Step 3: Install ZapZap
Install with APT:
sudo apt install zapzap
APT pulls in python3-pyqt6, python3-pyqt6.qtwebengine, the Qt SVG bindings and the Qt Wayland platform plugin. QtWebEngine is a large download, so allow a little time.
Step 4: Verify the Installation
Start ZapZap from the Activities overview, or from a terminal:
zapzap
The first launch shows the WhatsApp Web QR code. On your phone, open WhatsApp and go to Settings → Linked devices → Link a device, then scan it. The session persists after that, so this is a one-time step per profile.
Getting Started with ZapZap
The Tray and Background Behaviour
Closing the window hides ZapZap to the tray instead of exiting, so messages and notifications keep coming. Click the tray icon to restore it, and use the tray menu to quit for real.
Stock Ubuntu GNOME shows AppIndicator tray icons out of the box, so this works without extra setup on a default install.
Multiple Accounts
Add a second account from the settings panel. Each profile gets its own isolated session and its own device link, so you can stay signed in to two numbers at once and switch between them in the sidebar.
Themes, Notifications and Downloads
The settings cover everything a browser tab cannot:
- Theme: light, dark, or follow the system.
- Tray: hide-to-tray behaviour and icon style.
- Notifications: native desktop notifications, controllable per account.
- Downloads: default folder, and whether to prompt each time.
- Spell checking: which QtWebEngine dictionaries to load.
Custom CSS and JavaScript
ZapZap can inject your own CSS and JavaScript into the web view, globally or per account. That covers anything WhatsApp Web will not let you change: font sizes, a wider chat column, hiding interface elements you never touch.
Wayland Sessions
Ubuntu defaults to a Wayland session on recent releases. ZapZap uses the session’s Qt platform by default, and can be told explicitly:
# Force the Wayland platform
zapzap --wayland
# Force XWayland, useful when comparing behaviour
QT_QPA_PLATFORM=xcb zapzap
If you see scaling or rendering oddities, trying both is the fastest way to narrow the cause.
Keeping ZapZap Updated
ZapZap upgrades with the rest of Ubuntu:
sudo apt update && sudo apt upgrade
When deb.griffo.io publishes a newer ZapZap, apt upgrade installs it. Quit and relaunch afterwards so the running instance is the new build.
Other Tools from deb.griffo.io
The repository has plenty more for a Linux desktop:
- Ulauncher - a fuzzy application launcher for opening ZapZap with a keystroke.
- Ghostty - a fast, GPU-accelerated terminal emulator.
- Zed - a high-performance code editor.
- termusic - a terminal music player for the background.
Troubleshooting
GPG or Key Errors
If APT flags the repository as unsigned or the key as invalid, re-import it:
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Package Not Found
If APT cannot locate zapzap:
- Re-run
sudo apt updateafter adding the repository. - Verify your Ubuntu release is supported (Jammy, Noble, or newer).
- Check the source list:
cat /etc/apt/sources.list.d/deb.griffo.io.list.
A Blank or Black Window
Usually a disagreement between QtWebEngine and your graphics drivers. Confirm with software rendering:
QTWEBENGINE_CHROMIUM_FLAGS="--disable-gpu" zapzap
If that works, the problem is in the driver stack rather than ZapZap. QT_QPA_PLATFORM=xcb zapzap is another quick comparison.
No Desktop Notifications
Verify notifications are enabled in ZapZap’s settings and permitted inside WhatsApp Web itself. Also check Ubuntu’s Settings → Notifications, where an application can be muted globally without any sign of it in the app.
An Existing Snap or Flatpak Install
Ubuntu makes it easy to end up with the Snap as well. Two copies compete in the applications menu and can clash over profile data, so keep one:
sudo snap remove zapzap
flatpak uninstall com.rtosta.zapzap
Missing Qt Platform Plugin
If startup fails complaining about the wayland or xcb platform plugin:
sudo apt install qt6-wayland qt6-qpa-plugins
Uninstalling
Remove ZapZap with:
sudo apt remove zapzap
To also remove the repository and key:
sudo rm /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Linked sessions and settings remain under ~/.config and ~/.local/share, so clear those for a fresh start. It is also worth unlinking the device from your phone’s Linked devices screen.
Conclusion
Until WhatsApp ships a native Linux client, a good wrapper is what is on offer, and ZapZap is a genuinely good one. Multiple accounts, a working tray icon, native notifications and theming that follows your desktop, all on the Qt libraries Ubuntu already ships.
Installing it from deb.griffo.io handles the PyQt6 and QtWebEngine dependency chain in a single command, and keeps the app current with the apt upgrade you already run.
Frequently Asked Questions
How do I install the latest ZapZap on Ubuntu?
Add the deb.griffo.io APT repository and its signing key, then run sudo apt install zapzap. The repository tracks upstream ZapZap releases, so you get the latest packaged version rather than a build frozen when your distribution was released.
Is there a .deb package for ZapZap?
Yes. deb.griffo.io publishes ZapZap as a signed .deb for Ubuntu. You could download that .deb and install it by hand, but adding the repository is the better option: APT then resolves dependencies and picks up new versions on its own.
How do I update ZapZap to the latest version?
Run sudo apt update && sudo apt upgrade. Once ZapZap is installed from APT there is no separate updater to remember, since new releases arrive with the rest of your system updates.
How do I install ZapZap on Debian?
Exactly the same way; lsb_release -sc simply resolves to a different codename. There is a companion guide with the Debian specifics: How to install ZapZap on Debian.
Which Ubuntu releases are supported?
Jammy 22.04 LTS, Noble 24.04 LTS and newer. Because the repository line is built from lsb_release -sc, the matching suite is selected for you.
Resources
Disclaimer: The deb.griffo.io repository is an unofficial community project and is not affiliated with the official Debian or Ubuntu projects, or with the upstream ZapZap project. ZapZap is an unofficial client and is not affiliated with or endorsed by WhatsApp or Meta.