Skip to content

Repository files navigation

whatsdeck

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.

MIT TypeScript Node 20+ Linux

Why this exists

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.

Install

From release

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
whatsdeck

On Ubuntu 24.04+ the AppImage needs --no-sandbox because AppArmor restricts unprivileged user namespaces. Prefer the .deb when possible.

From source

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

Usage

  1. Click + in the sidebar to create an account. Give it a name and a color.
  2. In the main area, press Connect WhatsApp Web. Scan the QR once.
  3. Click + again for the next account, scan its QR, and so on.
  4. Switch between accounts with Ctrl+1Ctrl+9 or click the sidebar row.
  5. Esc returns to the equal-cell grid; the Grid / Focus toggle at the bottom does the same.

Keyboard

Key Action
Ctrl+N New account
Ctrl+1..9 Focus account by order
Esc Back to grid

How it works

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]
Loading

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.

Why not the alternatives

  • Altus — cross-platform, built around the deprecated <webview> tag, with broad UI customization (themes, emoji picker, dark-mode variants). whatsdeck uses modern BaseWindow + WebContentsView and stays scoped to session isolation.
  • Ferdium / Rambox — multi-service inboxes (WhatsApp, Slack, Telegram, Discord, …). Use those if you want one app for all messengers. whatsdeck is 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.

Limitations

  • Linux only in v0.x. macOS and Windows electron-builder targets 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.

Build a release

npm run dist:deb        # → release/whatsdeck-0.1.0-amd64.deb
npm run dist:appimage   # → release/whatsdeck-0.1.0-x86_64.AppImage

Details in docs/building.md.

Contributing

Read AGENTS.md and CONTRIBUTING.md. Scope is deliberately narrow.

License

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.

About

Run multiple WhatsApp Web accounts side by side on Linux. Isolated sessions, one window. Electron + TypeScript.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages