PrettyZap is a desktop wrapper for WhatsApp Web with custom features for a better desktop experience.
WhatsApp Web remains responsible for authentication, messaging, encryption, networking, and data. PrettyZap adds the desktop window and custom controls around it.
Tested on Linux, including Omarchy/Hyprland.
Use keyboard shortcuts to search, move through chats, navigate WhatsApp sections, open Archived, and focus the composer.
Watch the keyboard controls demo
Switch between WhatsApp's native appearance and the active system palette without reloading the conversation or changing its layout.
Use the desktop widget to open or hide PrettyZap and access its settings and theme controls.
Watch the settings and widget demo
- A native desktop window for WhatsApp Web with persistent login state.
- A collapsible chat drawer that keeps WhatsApp's own interface intact.
- Keyboard shortcuts for searching, navigating sections, cycling through chats, opening Archived, and focusing the composer.
- A theme toggle for WhatsApp's native appearance and the active system palette.
- A quick show/hide command for desktop keybindings and launchers.
- An optional Omarchy bar widget with controls for opening, hiding, theming, and quitting PrettyZap.
- A native nbshell integration in
packaging/nbshellin thenerdislb/prettyzapfork. - Local shell preferences for window size, maximized state, and drawer state.
Install the core package from the AUR:
paru -S prettyzap-binFor Omarchy, add the native bar plugin directly from GitHub:
omarchy plugin add https://github.com/prettyletto/prettyzap.git --enable --yesOpen the PrettyZap bar icon and choose Install PrettyZap if the core app is not already installed.
Download the latest release, make it executable, and run it:
chmod +x PrettyZap-*.AppImage
./PrettyZap-*.AppImagenpm install
npm run build
npm start| Shortcut | Action |
|---|---|
Ctrl/Cmd + L |
Toggle the chat drawer |
Ctrl/Cmd + / |
Focus WhatsApp's chat search |
Ctrl/Cmd + 1 … 8 |
Open WhatsApp navigation sections |
Ctrl/Cmd + J / K |
Move down/up in the active conversation |
Ctrl/Cmd + I or Ctrl/Cmd + Enter |
Focus the composer |
Ctrl/Cmd + Shift + J / K |
Cycle forward/backward through chats |
Ctrl/Cmd + Shift + A |
Open Archived |
Ctrl/Cmd + Shift + T |
Toggle the theme |
Ctrl/Cmd + Shift + Space |
Show or hide PrettyZap, when supported |
The show/hide action is also available from a desktop keybinding or launcher:
prettyzap --toggleOn Omarchy, the bar icon is the primary control surface. Install the published plugin with:
omarchy plugin add https://github.com/prettyletto/prettyzap.git --enable --yesOpen the bar panel and click Install PrettyZap once to install
prettyzap-bin through yay; after that, left-click opens or hides the app
and right-click opens the control panel.
See packaging/omarchy/README.md for the
local checkout installer, standalone Quickshell fallback, and uninstall
instructions.
PrettyZap loads the official WhatsApp Web client and does not replace it. It does not add a backend, copy WhatsApp's message database, reverse-engineer private APIs, or expose arbitrary Node.js/Electron APIs to the page.
The WhatsApp Web surface runs with Electron security boundaries enabled:
WebContentsViewnodeIntegration: falsecontextIsolation: true- sandboxing where applicable
- a persistent partition for the WhatsApp session
- a narrow preload and IPC boundary
PrettyZap stores only its own shell preferences in
$XDG_CONFIG_HOME/prettyzap/shell-state.json or
~/.config/prettyzap/shell-state.json.
PrettyZap opens WhatsApp Web in an Electron WebContentsView. Small feature
modules interact with WhatsApp's existing DOM and native controls, while the
Electron main process handles the window, shortcuts, shell state, and desktop
integration.
WhatsApp Web still handles the account, session, messages, media, encryption, networking, and rendering. PrettyZap is the shell around it.
npm run dev # build, watch TypeScript, and launch Electron
npm run typecheck # type-check without emitting files
npm test # build and run the tests
npm run package:linux # build a Linux AppImagePrettyZap disables Chromium GPU acceleration by default. WhatsApp Web can cause Electron's GPU process to reserve several hundred megabytes on some Linux/Wayland systems, while the wrapper's UI and normal messaging remain usable without GPU rendering. Disabling it is intended to reduce the default memory footprint.
GPU acceleration can be enabled for troubleshooting, video playback, or voice/video calls:
PRETTYZAP_ENABLE_GPU=1 prettyzapThe equivalent one-shot override is:
prettyzap --enable-gpuGPU acceleration may improve media rendering on some systems, but can also increase memory usage substantially.
The implementation notes are in src/features/README.md
and src/main/README.md.
MIT — see LICENSE.



