Switch seamlessly between multiple WhatsApp Web accounts in parallel tabs within the same browser profile.
WP Switcher is an ultra-fast, bloat-free Chrome extension designed to solve one major headache: running multiple WhatsApp Web accounts simultaneously on a single computer.
Normally, WhatsApp Web restricts you to a single session per browser profile. Workarounds like opening Incognito tabs force you to re-scan QR codes every time you close your browser, and managing multiple Chrome user profiles creates cluttered windows, high memory consumption, and disorganized workflows.
WP Switcher introduces true client-side storage isolation, intercepting IndexedDB, LocalStorage, SessionStorage, and BroadcastChannels directly in the page realm. Each account runs in its own tab, completely isolated and permanently logged in.
- 🚀 Unlimited Concurrent Accounts: Run 2, 5, or 10+ WhatsApp accounts side-by-side in separate tabs within your regular browser profile.
- 🔒 Permanent Session Persistence: Sessions stay logged in across browser restarts. Scan your QR code once, and never scan it again.
- 🛡️ Zero Telemetry & 100% Private: Operates entirely client-side. No intermediate servers, no cloud proxies, and zero external tracking. Your credentials and chats remain strictly between your device and WhatsApp.
- 🎨 AMOLED Dark Aesthetic: Crafted with a neon purple (
#a855f7) and hot pink (#ff007f) aesthetic designed for modern power users. - 🔄 Real-Time Profile Capture: Automatically detects and displays your account name, phone number, and avatar directly on the popup cards.
- ✏️ Account Customization (Pencil Edit): Rename accounts (e.g., Work Support, Personal VIP, Sales Lead) and assign custom theme colors for instant recognition.
- ⚡ 1-Click Instant Focus & Switching: Click any account in the switcher to jump straight to that active tab or open a fresh tab instantly.
- 🔄 Built-in GitHub Release Checker: Checks for new updates directly from the official repository with 1-click update archive downloads.
- 🧹 One-Click Fresh Start: Clean wipe utility that clears tab sessions and cached keys with a single click.
| Feature | Regular WhatsApp Web | Incognito Windows | Multiple Chrome Profiles | WP Switcher |
|---|---|---|---|---|
| Simultaneous Accounts | 1 | 2 (1 normal + 1 incognito) | Unlimited (separate windows) | Unlimited (single window) |
| Session Persistence | ✅ Yes | ❌ Lost on tab close | ✅ Yes | ✅ Permanent |
| Single-Window Workflow | ✅ Yes | ❌ Cluttered | ❌ Cluttered | ✅ Unified Tab Bar |
| System Memory Usage | Normal | High | Very High (Multiple Chrome Instances) | Minimal (Shared Engine) |
| One-Click Tab Switcher | ❌ No | ❌ No | ❌ No | ✅ Built-in Popup |
| Profile Identification | ❌ None | ❌ None | Manual icon | ✅ Auto Name, Phone & Avatar |
WP Switcher isolates sessions at runtime using prototype hooking in the page's MAIN world (document_start).
┌────────────────────────────────────────────────────────┐
│ WP Switcher Engine │
├────────────────────────────────────────────────────────┤
│ Browser Tab: https://web.whatsapp.com/?wsi=acc_sales │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ MAIN Realm: inject.js │ │
│ │ - Prefix isolation: "acc_sales::" │ │
│ │ - Hooks: IDBFactory.prototype.open │ │
│ │ - Hooks: Storage.prototype.getItem/setItem │ │
│ │ - Hooks: BroadcastChannel & navigator.locks │ │
│ │ - Traps: SharedWorker (Security isolation) │ │
│ └───────────────────────▲────────────────────────┘ │
│ │ window.postMessage │
│ ┌───────────────────────▼────────────────────────┐ │
│ │ ISOLATED: content.js │ │
│ │ - Bridges messages to background service │ │
│ └───────────────────────▲────────────────────────┘ │
│ │ chrome.runtime │
│ ┌───────────────────────▼────────────────────────┐ │
│ │ Service Worker: background.js │ │
│ │ - Tab tracking & session registry │ │
│ │ - Persistent storage (chrome.storage.local) │ │
│ └────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────┘
- URL Binding (
?wsi=<session_id>): Each WhatsApp tab receives a unique session identifier. The default account runs with zero prefix (P = '') to keep pre-existing logins intact. - IndexedDB Sandboxing: The extension proxies
indexedDB.open(), prepending${sessionId}::to every database table (e.g.wawc,model-storage), preventing database lock contention and token collisions. - Storage Namespacing:
localStorageandsessionStoragemethods (getItem,setItem,removeItem,key,clear) are scoped dynamically so each account only sees its own session keys. - Channel & Lock Partitioning: Isolates
BroadcastChannelandnavigator.locks.requestto ensure background synchronization workers from different accounts never cross-communicate.
WP Switcher is open-source and easy to install directly in Google Chrome, Brave, Microsoft Edge, Opera, or any Chromium-based browser:
-
Clone or Download this Repository:
git clone https://github.com/expgg/WP-Switcher.git
Or click Code > Download ZIP from GitHub and extract the folder to your computer.
-
Open Extensions in Chrome:
- Navigate to
chrome://extensions/in your browser address bar. - Turn ON the Developer mode toggle in the top-right corner.
- Navigate to
-
Load the Extension:
- Click the Load unpacked button in the top-left corner.
- Select the
WP-Switcherdirectory (the folder containingmanifest.json).
-
Pin and Launch:
- Click the extension puzzle icon in your Chrome toolbar and pin WP Switcher.
- Click the WP Switcher switch icon to launch!
- Click the Add New Account button. A fresh isolated tab will open automatically.
- Scan the displayed QR code with your phone.
- Once connected, WP Switcher automatically syncs your WhatsApp name, phone number, and avatar!
- Click the ✏️ Pencil icon on any account card.
- Set a custom alias (e.g.
Support Team,Client Ops,Family) and pick a theme color. - Your customized name is preserved permanently and won't be overwritten.
- Open the WP Switcher popup anytime.
- Click Switch to focus an open account, or Open to launch an offline account into a new tab.
WP Switcher follows Semantic Versioning. Releases and changelogs are published on GitHub under Releases.
Click Check for Updates in the popup footer at any time. The extension will query the official GitHub repository for new tags and commits:
- If a newer build is available, the popup displays release highlights and a direct 1-click download button.
- Simply replace your local extension files or run
git pulland click the extension reload icon onchrome://extensions.
- 🏷️ Native WhatsApp Header Preserved: Kept the official "WhatsApp" header title completely untouched and native.
- ✨ Beside-Header Account Indicator: Placed the WP Switcher switch logo and account name/alias (e.g.
Teletalk Number) elegantly directly beside the "WhatsApp" text in a themed glassmorphic pill badge. - 🔍 Zero Search Box Interference: Strict bounding-box exclusions guarantee the search input is never touched, overlapped, or modified.
- 🎨 Adaptive Theme Syncing: The badge's border and icon dynamically mirror the active account's custom accent color and alias.
- 🚀 Robust Multi-Strategy Header Detection: Added bidirectional Unicode normalization (
\u200Edirectional marks), SVG container detection, and layout-based fallback to reliably detect and replace WhatsApp Web's top-left branding across all modern UI builds. - 🏷️ Native Header Title Replacement: Replaced the default top-left "WhatsApp" title in WhatsApp Web with the WP Switcher switch logo and current active account name/alias.
- 🎨 Adaptive Theme Syncing: The header switch badge dynamically mirrors the account's custom accent color and updates immediately when an alias or theme is edited in the popup.
- 🛡️ Zero-Flicker SPA Persistence: Integrated DOM observers and state deduplication so navigation between chats, search, and status tabs maintains the branded account title seamlessly without flicker.
- 🏷️ Native Header Title Replacement: Replaced default top-left header with switch logo badge and account name.
- 📏 Clean Flat Tab Accent Bar: Removed the ambient glow and fade effect from the in-tab top accent strip, making it a clean, razor-sharp 3px solid indicator.
- 🧹 Removed Floating Account Badge: Completely removed the floating name/number badge pill from the top of the WhatsApp Web interface for a clean, non-intrusive chat view.
- 🚫 Zero Unscanned Session Pollution: Clicking "Add New Account" no longer creates or saves placeholder accounts into storage. A session is strictly saved only after the QR code is scanned and login tokens are verified.
- 🧹 Automatic Scratch Cleanup: If a user opens a new account tab and closes it without scanning, any temporary scratch tokens are automatically purged on tab close.
- 📌 Always-Pinned Docked Footer: The update checker and author credits are permanently docked at the bottom of the popup window and never scroll away.
- 📜 AAA Custom Scrollbars for Multi-Accounts: Smooth internal scrolling with gradient purple-to-pink glowing scrollbars for seamless scalability when managing 10, 20, or 50+ accounts.
- 🎨 Full Account Card Theming: The entire account card (border, left accent bar, background tint, action buttons, and status dots) is dynamically themed by the account's accent color.
- 🌐 In-Tab WhatsApp Accent Strip & Pill: Injected a top 4px glowing indicator line and a floating account badge in the active WhatsApp Web tab itself for instant multi-account tab awareness.
- 🖼️ Custom Avatar Upload: Users can now upload and crop custom avatar images with live preview.
- 📱 Raw Phone Formatting: Clean national digits without quotes, country codes, or plus signs.
- 💖 Animated Author Credits: Glowing pulse footer credit linked to r1fat.pages.dev.
- ✨ Initial public release with Manifest V3 multi-account isolation engine.
- Zero Cloud Storage: WP Switcher does not store, log, or transmit any user communications, encryption keys, tokens, or personal information.
- Local Sandbox: All session data is isolated strictly on your local machine using standard browser storage mechanisms.
- Auditable Source: 100% vanilla JavaScript, HTML, and CSS. No obfuscated bundles, no binary dependencies, and no remote code execution.
This project is licensed under the MIT License. Feel free to fork, contribute, and adapt it for your own workflows!
