<- Back to projects
2024 - 2025Releases ->

WhatsApp Web Wrapper

Ultra-lightweight native Linux desktop client for WhatsApp Web built with Rust and Tauri v2.

RustTauri v2LinuxWaylandDesktopSystems

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 UserContentManager that hooks into the browser’s Notification constructor 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.
// rss feeds

Choose a feed to subscribe to in your RSS reader:

// All updates

Everything in one place: projects, releases, and blog posts.

/rss.xml

// Projects

New games, tools, and apps.

/projects/rss.xml

// Blog

Articles, devlogs, and writeups.

/blog/rss.xml