WhatsApp Web Wrapper
Ultra-lightweight native Linux desktop client for WhatsApp Web built with Rust and Tauri v2.
I got tired of running heavy Electron wrappers that eat 500MB+ of RAM just to keep WhatsApp open in the background on Linux, so I built my own native client using Rust and Tauri v2 with WebKitGTK.
My main goals were to keep it extremely lightweight, make it integrate smoothly with modern desktop environments, and fix common Wayland annoyances.
What it does
- Almost zero overhead: Uses native Rust backend bindings and WebKitGTK instead of bundled Chromium, keeping memory usage minimal.
- Native desktop notifications: Integrated with Linux D-Bus (
notify-rust). Clicking a notification brings the window up and focuses the chat directly. - Clean background behavior: Minimizes to the system tray with auto-start support, without chewing through battery or CPU cycles when idle.
- Full media support: Audio messages, microphone recording, camera, and file attachments all work out of the box.
A few interesting technical challenges
- Fixing Wayland and KDE Plasma 6 glitches: On Wayland, hiding and re-showing web surfaces often leads to black screens or lost window decorations. I solved this by keeping the surface alive and handling visibility through a non-destructive state machine (
minimize+skip_taskbar). - Intercepting notifications past CSP: WhatsApp Web has strict Content-Security-Policy rules that prevent external scripts from talking out. I injected a small ES6 polyfill via WebKit’s
UserContentManagerthat hooks into the browser’sNotificationconstructor and bridges incoming messages directly to Rust IPC. - Self-contained audio in AppImage: Bundled the necessary GStreamer audio plugins directly inside the AppImage builds so voice notes work on any Linux distribution without manual dependencies.