Run multiple WhatsApp Web accounts side by side. Isolated sessions, one window. Linux.
Each account runs in its own Electron WebContentsView with a dedicated persist: partition, so cookies, IndexedDB and Service Workers never cross between them. No scraping, no protocol reimplementation, no DOM injection into WhatsApp's content — just the official web.whatsapp.com page, N times, in the same window.
Running 4+ WhatsApp Web accounts in parallel means one Chrome profile per account and constant alt-tabbing. whatsdeck fits them all in a single window with a fixed sidebar and numeric shortcuts.
Download the latest .deb or AppImage from the Releases page, then:
# .deb — recommended; the post-install hook sets SUID on chrome-sandbox.
sudo dpkg -i whatsdeck-*-amd64.deb
whatsdeckOn Ubuntu 24.04+ the AppImage needs --no-sandbox because AppArmor restricts unprivileged user namespaces. Prefer the .deb when possible.
git clone https://github.com/AlexHerranr/whatsdeck.git
cd whatsdeck
npm install
# AppArmor on modern Linux kernels requires SUID on the Chromium sandbox helper.
# Once per Electron version:
sudo chown root:root node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 node_modules/electron/dist/chrome-sandbox
npm start- Click
+in the sidebar to create an account. Give it a name and a color. - In the main area, press Connect WhatsApp Web. Scan the QR once.
- Click
+again for the next account, scan its QR, and so on. - Switch between accounts with
Ctrl+1…Ctrl+9or click the sidebar row. Escreturns to the equal-cell grid; theGrid/Focustoggle at the bottom does the same.
| Key | Action |
|---|---|
Ctrl+N |
New account |
Ctrl+1..9 |
Focus account by order |
Esc |
Back to grid |
flowchart LR
U[User] --> SH[Shell UI<br/>sidebar + modals]
SH -->|IPC| MP[Main process]
MP --> VM[ViewManager]
VM --> V1[WebContentsView #1<br/>partition:persist:wd-A]
VM --> V2[WebContentsView #2<br/>partition:persist:wd-B]
VM --> VN[…]
V1 --> WA1[web.whatsapp.com]
V2 --> WA2[web.whatsapp.com]
VN --> WAN[web.whatsapp.com]
The main process owns the window and N WebContentsView instances. Each view uses a unique persist: partition so Chromium keeps cookies, IndexedDB, Service Workers and cache isolated by OS filesystem path. The shell UI is a static HTML/CSS surface talking to the main process over ipcMain / ipcRenderer behind a contextIsolation preload bridge.
See docs/architecture.md for the full request lifecycle.
- Altus — cross-platform, built around the deprecated
<webview>tag, with broad UI customization (themes, emoji picker, dark-mode variants).whatsdeckuses modernBaseWindow+WebContentsViewand stays scoped to session isolation. - Ferdium / Rambox — multi-service inboxes (WhatsApp, Slack, Telegram, Discord, …). Use those if you want one app for all messengers.
whatsdeckis the narrower tool: WhatsApp only, many accounts, visible simultaneously. - Multiple Chrome profiles — works, but every account is a separate window and there is no shared keyboard navigation.
- Linux only in
v0.x. macOS and Windowselectron-buildertargets may come later. - WhatsApp's own multi-device cap applies — the official limit is around 4–5 linked devices per phone number, enforced by Meta, not by this app. More accounts means more phone numbers.
- No native OS notifications in
v0.1— unread counts show in the sidebar, but the system tray is silent. - No conversation export or backup. Everything stays inside Chromium's partition storage.
npm run dist:deb # → release/whatsdeck-0.1.0-amd64.deb
npm run dist:appimage # → release/whatsdeck-0.1.0-x86_64.AppImageDetails in docs/building.md.
Read AGENTS.md and CONTRIBUTING.md. Scope is deliberately narrow.
MIT. Maintained by Alexander H. at Herran Dynamics S.A.S.
This project is not affiliated with or endorsed by WhatsApp, Meta Platforms, Inc., or any of its subsidiaries. WhatsApp is a trademark of Meta Platforms, Inc.