Skip to content
This repository was archived by the owner on Sep 30, 2026. It is now read-only.

Releases: LunarWerxs/WhatsAppRs

v0.2.1 - survive a GPU driver reset

Choose a tag to compare

@LunarWerxs LunarWerxs released this 09 Sep 23:30

A GPU driver reset used to turn this app into a runaway. It does not any more.

Windows resets display drivers routinely (on the machine this was found on, eight times in three days). If that happened while v0.2.0 was running, the app could spin forever. Measured live before it was stopped: a 244 GB log file growing at 8.5 MB/s, 10.9 GB of RAM, and one CPU core pinned for eight hours and forty-five minutes. The system drive was about two hours from full. Nothing in the app reported any of it; it was found because someone happened to look at Task Manager.

This release fixes the cause and adds a backstop, so that nothing of that shape can run unnoticed again.

What changed

  • The GPU runs in its own process again. v0.2.0 saved one process and about 28 MB by running Chromium's GPU inside the main process. That also silently removed Chromium's own ability to notice the GPU had died, restart it, and fall back to software rendering after a few failures. A driver reset then had nothing to stop it. The saving was not worth what it turned off.
  • The engine's debug log is capped at 16 MB. Chromium neither rotates nor caps its own log, and the app pointed it at your system drive with no bound. It is now capped, and the beginning of a fault is kept separately, because that is the part that explains what went wrong.
  • The app watches itself. If it ever catches itself writing megabytes a second to disk, holding gigabytes of memory, or failing to keep its own log in check, it raises a Windows notification instead of quietly eating your drive. It will not restart or quit itself: a messaging app that shuts down on a hunch is worse than one running hot, and killing Chromium loses your login.
  • Notifications are rate limited, so a misbehaving page cannot flood you with toasts.

What it costs

6 processes and 518 MB, against 5 and 490 before, three runs each, sampled the same way. Private memory is unchanged (350 MB against 347) and frame timing is identical at 120 fps. One process and about 28 MB is the entire price of surviving a driver reset.

Upgrading

Download and run it. It unpacks its own engine and removes the previous version's. Your login and message history are untouched.

Quit the old version from the tray menu, not Task Manager: a clean quit lets Chromium flush its cookies, and a kill can cost you the login and another QR scan.

Verify the download

SHA-256: 27c92bd7dce63518c2f1f36d78b0ce1bcbc1e33b91b852984c480a5e9883d0a6

Get-FileHash whatsapp-rs-0.2.1-windows-x64.exe -Algorithm SHA256

The exe is not code-signed, so Windows SmartScreen shows "Windows protected your PC" on first run: More info, then Run anyway. The hash above is how you check the file is the one that was published.

Also in this release

A regression test that would have caught the original mistake in milliseconds, and CI that runs it on every push. The project had no automated checks at all until now, which is how a one-line setting sat in a shipped build for two days.

The full reasoning, the measurements, and what the mistake teaches are in DECISIONS.md #24 and FINDINGS.md.

v0.2.0 - one executable

Choose a tag to compare

@LunarWerxs LunarWerxs released this 08 Sep 09:12

One file

v0.1.0 was a zip of 17 files that unpacked to 347 MB. v0.2.0 is one executable: download it,
run it, scan the QR code.

Everything else is the same app: the same engine, tray, toasts and mute. Nothing was added and
nothing was removed.

Download whatsapp-rs-0.2.0-windows-x64.exe (129.8 MB) and run it. No installer, no
unzipping, nothing has to sit beside it.

What the first run does

About four seconds behind a small "Setting up" window, it unpacks the browser engine it is
carrying into %LOCALAPPDATA%\WhatsAppRs\engine\0.2.0-<id>. That folder is ~350 MB and it stays.

Be clear about what this is: the single file bought the download and the one click. It is not
a smaller program. Disk after first run and memory while running are identical to v0.1.0, because
it is the same Chromium, which exists only as a 271 MB DLL, with no static build available to
anyone. Meta ships the same trick inside an MSIX. A future version unpacks its own folder and
deletes this one.

How

The engine is appended to the executable as one zstd frame (2.82x, chosen over xz because xz was
6 MB smaller and 7x slower to decompress, and the decompression happens on every first run), with
a 64-byte footer the exe reads out of its own file. libcef.dll is delay-loaded, which is what
lets the exe start with nothing beside it; the DLL is loaded by full path from the unpacked folder
before the first CEF call, in every process, because CEF re-runs this executable for its renderer,
GPU and utility processes.

Measured on this release

Copied on its own into an empty folder: starts, unpacks 345.9 MB, loads the page in 4.4 s, and
does not unpack again on the second start. Close-to-tray / restore / clean quit 9 of 9 across
three runs. Mute-sounds probe PASS. Capability probe unchanged (service worker registered and
controlling, IndexedDB, SubtleCrypto, WebAssembly, SharedWorker, Web Locks, OPFS, mediaDevices,
WebRTC, WebGL). Still hardware accelerated on a real GPU, not a software rasteriser.

Memory over three runs, whole process tree, four minutes after the page reports ready:
494.7 MB working set, 349.3 MB private, 5 processes, against v0.1.0's 489.6 MB and 347.3 MB,
inside v0.1.0's own run-to-run spread. The compressed payload does not stay resident.

Known

  • No H.264. The public CEF binaries ship without proprietary codecs. Audio calls (Opus) are
    fine; a video call may not be, and uploading an MP4 may not be. If you make a video call from
    this build, please open an issue with the result either way.
  • Not code-signed, so SmartScreen will say "Windows protected your PC": More info, then Run
    anyway. The SHA-256 below is how you check the download is what was published.
  • Quit from the tray menu, not Task Manager: a clean quit lets Chromium flush its cookies, and a
    kill can cost you another QR scan.

SHA-256

1f57973d1c11f46964afb80a24a269e9a10fc5f5c583d5261ea762b081b231e4  whatsapp-rs-0.2.0-windows-x64.exe

v0.1.0

Choose a tag to compare

@LunarWerxs LunarWerxs released this 08 Sep 07:28

WhatsApp Web as a small native Windows tray app on a bundled Chromium. First public build.

Install: unzip anywhere, run whatsapp.exe, scan the QR. Windows 10/11 x64. No installer; the folder is the install. Login and cache live in %LOCALAPPDATA%\WhatsAppRs. Quit from the tray menu, not Task Manager, so Chromium can flush your login.

What is in it

  • Real Windows toasts for new messages
  • Tray menu: Open, Reload, Mute sounds (the chime and other alert tones go quiet; toasts, voice messages and calls are untouched), Show notifications, Start with Windows, About, Quit
  • Close to tray, single instance, remembered window position, hardware-accelerated rendering
  • Voice and video calls have WebRTC and Opus. No H.264 (the public CEF binaries ship without it), so a video call that will not fall back to VP8, and MP4 uploads, may fail. Reports either way are welcome as issues.

Measured, logged out, whole process tree: 5 processes, 490 MB. Meta's own WhatsApp for Windows by the same method: 8 processes, 1110 MB. Details and every other number in FINDINGS.md.

Privacy: talks to web.whatsapp.com and WhatsApp's CDN only; no telemetry, no update check, Chromium's own background services switched off.

SHA-256 of the zip: 8F6BBF6F37C4C7291AD0F11F69AB6D3B10DB319D5C201D7D53546925D6C71713