Skip to content

Releases: vianziro/Whatsapp-Dekstop

WhatsApp Desk 1.6.4 - Session, Startup, Preview and Windows Tray Fixes

Choose a tag to compare

@vianziro vianziro released this 11 Oct 14:18

Added

  • Windows has a tray icon. macOS has had a status-bar item and Linux a StatusNotifierItem, so
    Windows was the one platform where closing the window ended the process and its notifications
    with it — the platform where a chat client is most expected to keep running. The close button now
    hides the window instead of quitting, a right-click on the tray offers Show, Hide and Quit, and a
    one-off notification says the app is still running so the window does not simply seem to have
    vanished. The tray is created on a message-only window of its own, so it does not depend on the
    browser window or on the vendored library's window procedure. It is deliberately fail-open: if
    the tray cannot be created the window is left completely alone and the close button quits exactly
    as before.
  • Every push to main and every pull request is now built and tested by CI. It checks formatting,
    runs go vet on Linux — which also compiles app_linux.go, a file no local build can reach —
    cross-builds and vets the Windows target, and runs the test suite. The release workflow stays
    manual on purpose, for the reason documented in its own header.

Changed

  • The account rail no longer offers the add-account control once both accounts are present. With
    the cap at two, the control could never be used, and a permanently greyed-out button reads as a
    broken control rather than as a limit. It still appears while a slot is free, and returns as soon
    as one is released.

Fixed

  • The updater no longer offers an update whose download does not exist. The version check learns
    the latest version from the release page redirect, and the download URL was then built from a
    naming convention and never checked against the release itself — so on a platform with no
    published build the user was shown an update and sent to a link that answered HTTP 404 the
    moment they clicked it. The asset is now confirmed before it is advertised, and a release with no
    build for this platform says so instead of being presented as "up to date". Only a definite
    not-found counts: a timeout or a server error stays inconclusive, so a real update is never
    hidden.
  • The diagnostic log is bounded. It was opened for append with no size cap, so it grew without
    limit on exactly the machines that were being asked to send it in a bug report. It now rotates
    past 2 MB, keeping one previous generation.
  • The memory figure in the diagnostic log is real. It reported the heap the Go runtime had
    reserved rather than the memory the operating system had given the process, and it replaced the
    accurate reading on macOS and Windows, so every measurement in the log was wrong by an order of
    magnitude. It is now read from the operating system on each platform, and the log names where the
    number came from so a wrong figure is visible rather than plausible.
  • The WhatsApp session can no longer be lost to the disk-cache trim on macOS. The 512 MB budget
    measured the whole ~/Library/WebKit/com.whatsapp.desk tree, which is the session — cookies,
    localStorage and IndexedDB — so the cap tripped on ordinary session growth rather than on cache
    growth. The trim it then fired deleted ~/Library/Caches/com.whatsapp.desk while the engine was
    still running, on every window minimise and every close, and that directory is not a pure cache:
    it holds WebKit's live service-worker registration database. The budget now measures and deletes
    HTTP caches only, from one shared list so the measured set and the deleted set cannot drift, and
    the delete happens once, before the engine starts. A target that never existed — the code looked
    for NetworkCache directly under the WebKit root — is fixed, so the trim also works now (#74).
  • macOS handles SIGTERM and SIGINT. The app had no signal handler at all, so a logout, restart or
    shutdown killed it with writes still in flight and left nothing behind — which is why the
    symptom was indistinguishable from the app closing itself. Signals are now logged and the run
    loop ends through AppKit, the same path the Quit menu takes, so WebKit closes its website data
    store in order (#74).
  • The macOS updater quits cleanly before its bundle is replaced. It exited abruptly, which skips
    WebKit's teardown, and the helper script that swaps the app waited a fixed one second — long
    enough to begin replacing the bundle while the session store was still open. The helper now
    waits for the process to actually disappear, bounded so a stuck process cannot block an update
    (#74).
  • A missing WebView2 runtime now explains itself instead of crashing on Windows. The engine was
    created without checking for the runtime, and the vendored library leaves its internal interface
    pointer nil when the runtime is absent and then dereferences it — a panic that the startup
    recovery turned into a silent exit with no explanation. The runtime is checked first, and a
    missing one produces a dialog naming the download instead (#73).
  • Switching accounts keeps the window where it was on Windows. The replacement window is created
    centred on the primary display, and the saved frame was looked up using that window's monitor,
    so a switch made from a secondary display moved the window to the primary one. The outgoing
    window's monitor is now carried across the switch. The switch also gets a visible transition
    again: the page fades in a veil before asking the native side to switch, and the teardown used to
    run in the same turn, so not one frame of it ever reached the screen (#72).
  • Opening a PDF shows the in-app preview again. Clicking a document forwards the click to the
    document's own download control, which is how the file gets decrypted and fetched, and that
    forwarded click was being recorded as an explicit download. The explicit-download marker
    suppresses the preview by design, so every attempt to open a document fell through to WhatsApp's
    own viewer instead. A forwarded click no longer counts as a download, and a preview that is
    suppressed now records which guard suppressed it (#70).
  • The Linux blank-window workaround is applied automatically. WEBKIT_DISABLE_DMABUF_RENDERER=1
    only took effect for launches from a shell, so it was lost the moment the app was started from a
    menu or a desktop entry. Setting it once now records it and every later launch keeps the
    fallback. It is also applied by itself when there is no DRM render node at all, which covers VMs,
    containers and remote desktops without a table of specific hardware. Machines that can composite
    in hardware are unaffected (#63).
  • The microphone diagnostics actually record now. The capture probe read
    navigator.mediaDevices at document-creation time, when that API does not exist yet, and
    returned silently — so the mic: lines it was written to produce had never been written by any
    build, and every request for them came back empty. The probe retries until the API appears,
    within a bound, and records when it installs (#57).

Downloads & Verification

Platform Installer Portable / Archive
macOS 12.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.6.3...v1.6.4

WhatsApp Desk 1.6.3 - Attachment Saving Fixed & Idle Memory Reload

Choose a tag to compare

@vianziro vianziro released this 04 Oct 11:37

Added

  • macOS: an optional idle memory reload frees the renderer's memory while the app is out of
    sight. WebKit's WebContent process keeps every media item the page has decoded — measured at
    ~2 GB on a long-lived session — and purging its memory cache reclaims only about 6% of that,
    because the rest is live page data WebKit is not allowed to drop. Once the window has been off
    screen for 15 minutes the page is reloaded, which releases the decoded images, the JavaScript
    heap and its typed arrays together. It only ever runs while the window is hidden, so an ordinary
    alt-tab cannot trigger it; it runs at most once every 30 minutes; and the page is asked first —
    window.waIdleReloadAllowed() refuses while offline, while an upload is in flight, while a
    document preview is open, or before the chat list has loaded. "Hidden" means out of sight —
    minimised, hidden, or fully covered by another window — not merely unfocused, so a window the
    user can still see is never reloaded underneath them. Switch it off under
    Settings → Maintenance.
  • The idle-reload countdown can be shortened for a support session by writing the number of
    seconds into idle_reload_seconds in the app's profile folder
    (~/Library/Application Support/WhatsAppDesk/). The environment variable
    WA_IDLE_RELOAD_SECONDS does the same for a direct run, but macOS does not give a
    double-clicked bundle the shell's environment, so the file is the form a user can actually be
    asked to set. Either way the value must be a sane positive number of seconds, so it can never
    turn the feature into a reload loop. Each reload and each refusal is appended to
    wa_idle_reload.log in the same folder, and a refusal names the condition that blocked it
    ("the window is not hidden", "the chat list is not loaded", …) rather than leaving the reader to
    guess which of several situations applied.

Fixed

  • Saving an attachment no longer fails because of the name it was sent with. The filename comes
    straight from the chat and reached the filesystem with nothing removed but the path separators,
    so on Windows a document such as Rapat 12:30.pdf was rejected outright — < > : " | ? * are
    illegal there — and a name ending in a dot or space was silently renamed. Names are now cleaned
    of those characters, of control characters, of trailing dots and spaces, and of the reserved
    device names (CON, NUL, COM1…), consistently on every platform, so the same attachment is
    saved under the same name wherever the app runs (#68).
  • A download folder that cannot be used no longer ends the save. If the configured folder was
    deleted, sits on a drive that is no longer mounted, or is refused by Windows' Controlled Folder
    Access, the attachment is written to the default folder instead of being lost, and the toast says
    where it actually went rather than reporting an ordinary success (#68).
  • A failed save now explains itself. The native side knew why it refused — an unusable folder, a
    rejected name, a refused write — and threw the reason away, so the user saw only "Failed to save
    file." with nothing to act on and no way to report it. The reason is now shown in the toast and
    recorded in the page diagnostics (#68).

Downloads & Verification

Platform Installer Portable / Archive
macOS 11.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.6.2...v1.6.3

WhatsApp Desk 1.6.2 - Windows Close & Account-Switch Fix

Choose a tag to compare

@vianziro vianziro released this 29 Sep 03:18

The 1.6.1 binaries were first published with a Windows bug that made the app impossible to close,
and the corrected build was re-published under the same 1.6.1 version number — which the updater
never offers to installs already on 1.6.1. 1.6.2 carries the same fixes under a new number so they
finally reach every 1.6.1 install.

Fixed

  • macOS: the app launches again on macOS 12 Monterey. The linker derived the bundle's minimum
    macOS from the build host's SDK (13.0), so dyld refused to load the binary on anything older and
    the documented "macOS 11.0+" requirement was silently false (#66, #67). The build now targets
    12.0 — the oldest release the Go 1.26 runtime supports — and Info.plist declares
    LSMinimumSystemVersion, so macOS warns before installing on an unsupported release instead of
    failing after it.
  • Windows: the app closes normally again, and switching accounts no longer quits it. The session
    loop in runApp was for !switchRequested with the flag declared outside the loop, which put the
    two paths exactly the wrong way round: an ordinary close left the flag false, so the loop went
    round again and rebuilt the engine, reopening the window instead of exiting (#61, #64); a switch
    set the flag true, so the loop fell out and runApp returned, ending the process instead of
    rebuilding on the new account (#62). The flag is now declared per iteration and only an ordinary
    close leaves the loop, and the thread's message queue is drained after Destroy() so the
    WM_QUIT posted by the destroyed window's WM_DESTROY cannot reach the next session's Run().
  • Privacy Mode no longer makes scrolling heavy. The sidebar refresh asked every
    ancestor of the pointer target whether it was a sidebar control, and on a long
    chat list that read the whole list's text and re-queried its subtree on every
    pointer event; the refresh could also be dropped mid-flight, which risked leaving
    a chat row readable. The check is now bounded to the row it belongs to, and the
    refresh is deferred and rescheduled rather than dropped.
  • Document previews scroll as smoothly as the built-in viewer. The preview overlay
    is a full-viewport fixed element, and blurring its backdrop forces the compositor
    to re-render the page behind the modal on every scrolled frame; the four scroll
    surfaces inside the card also repainted their whole overlay because nothing
    contained them. The overlay now uses a flat dim, every scroll surface is a
    containment boundary, and the card is layer-promoted.

Downloads & Verification

Platform Installer Portable / Archive
macOS 11.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.6.1...v1.6.2

WhatsApp Desk 1.6.1 - Crash Fixes, Reliable Drag & Drop, and Document Preview Recovery

Choose a tag to compare

@vianziro vianziro released this 27 Sep 15:41

Fixed

  • Windows: the app no longer dies when the window is moved or activated while the
    webview is still being created. A title-bar click enters Windows' modal move loop,
    which re-entered the webview's message handler while its browser field was still
    empty, and the resulting fault killed the process (#58, #59, #60).
  • macOS: the app no longer quits by itself when the account registry cannot be read
    at startup, or when the webview fails to build on the first attempt. Both paths
    ended the process; they now fall back to a single-account session and retry, and
    any remaining exit path leaves a crash report behind.
  • Switching accounts is settled before another switch can start. A second switch
    requested while the previous swap was still painting could tear down the incoming
    view; switches now wait out the settle window.
  • Document previews no longer reopen in a loop. Dismissing WhatsApp's own viewer
    makes it re-create the attachment, which re-entered the preview interceptor and
    reopened the window indefinitely; the same document is now auto-previewed once per
    window, and a fresh click is still honoured.
  • Previewing a PDF no longer fights WhatsApp's viewer. The dismissal ran for 2.4
    seconds of close-button clicks and synthetic Escape keys; it is now bounded, and
    stops immediately when there is no viewer to dismiss.
  • If the in-app PDF renderer cannot take a file, the preview card is shown instead
    of nothing, so there is always a way to open or save the document.
  • Drag and drop works again for images and documents. The check that decided whether
    WhatsApp had accepted the drop treated any open dialog as success — and WhatsApp
    keeps dialog containers mounted permanently — so the fallback never ran and the
    drop silently did nothing.
  • A second drop arriving while the first was still being staged no longer overwrites
    it.
  • Privacy Mode no longer makes scrolling heavy. The sidebar refresh asked every
    ancestor of the pointer target whether it was a sidebar control, and on a long
    chat list that read the whole list's text and re-queried its subtree on every
    pointer event; the refresh could also be dropped mid-flight, which risked leaving
    a chat row readable. The check is now bounded to the row it belongs to, and the
    refresh is deferred and rescheduled rather than dropped.
  • Document previews scroll as smoothly as the built-in viewer. The preview overlay
    is a full-viewport fixed element, and blurring its backdrop forces the compositor
    to re-render the page behind the modal on every scrolled frame; the four scroll
    surfaces inside the card also repainted their whole overlay because nothing
    contained them. The overlay now uses a flat dim, every scroll surface is a
    containment boundary, and the card is layer-promoted.
  • Windows: switching accounts no longer closes the app. runApp looped while a
    switch had not been requested, and the Windows switch handler set that flag
    unconditionally, so every switch fell out of the loop and ended the process
    instead of rebuilding the engine on the new account. The loop is now
    unconditional, and the thread's message queue is drained after Destroy() so the
    WM_QUIT posted by the destroyed window's WM_DESTROY cannot reach the next
    session's Run().

Added

  • Capture diagnostics for calls (#57). The app now records the constraints the page
    requests and the settings the engine grants, so a "robotic microphone" report can
    be answered with data instead of a guess. The call path itself is untouched: the
    probe passes the original arguments and return value straight through.
  • The in-app issue reporter now includes feature notes — decisions that changed what
    the user saw, such as a suppressed duplicate preview — next to page errors.

Downloads & Verification

Platform Installer Portable / Archive
macOS 11.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.6.0...v1.6.1

WhatsApp Desk 1.6.0 - Multi-Account Profiles & a Quick-Tool Dock

Choose a tag to compare

@vianziro vianziro released this 27 Sep 03:23

Added

  • Account profiles: link a second WhatsApp account alongside the existing one.
    Each account keeps an isolated browser profile (WKWebsiteDataStore on macOS,
    a WebView2 user-data folder on Windows, a WebKitGTK website-data manager on
    Linux); the first account adopts the existing session by reference, so no
    re-pairing is needed. One engine is live at a time, and the account dock in
    the page rail switches, creates, and renames profiles, with
    Ctrl/Cmd+Shift+1/2 as shortcuts. On macOS and Linux the switch swaps the
    browser view in place; on Windows it restarts the window.
  • Unread hint per account chip: the dock shows the badge value an account had
    when it was last switched away from. Recorded once per switch, never polled.
  • Quick-tool zone in the account dock: Privacy Mode, Always on Top, and Blur
    Profile Photos live as small icons below a divider under the account chips,
    with active-state coloring, tooltips, and the existing Ctrl/Cmd+Shift+P/T
    shortcuts still working. Purely event-driven — no polling.

Fixed

  • macOS 13 (and older): the second account now keeps its session across app
    restarts. The named per-account data store API is macOS 14+ only, so the
    fallback built an in-memory store before; it now builds the same persistent
    store through WebKit's _WKWebsiteDataStoreConfiguration. Account IDs from
    older registries (UUIDs without dashes) are canonicalized before parsing,
    which previously failed silently and downgraded every account to an
    in-memory store.
  • Account switching no longer blanks the window. The replacement view is
    built before anything is touched on screen, the outgoing page stays visible
    (with a soft veil and clicks disabled) until the incoming account paints.

Downloads & Verification

Platform Installer Portable / Archive
macOS 11.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.5.9.9...v1.6.0

WhatsApp Desk 1.5.9.9 - Privacy Reliability, Linux Self-Update & Update Banner Fixes

Choose a tag to compare

@vianziro vianziro released this 26 Sep 10:59

Fixed

  • Privacy Mode keeps the Archived navigation row and guidance visible while blurring actual
    archived chat rows, with localized Archived labels and bounded view-scoped scanning (#50, #52).
  • Linux self-updates prefer the -webkit4.1 tarball on systems without the WebKitGTK 4.0
    runtime, including GUI launchers whose PATH omits ldconfig locations, while preserving
    architecture-safe fallback behavior (#55).
  • The update banner reserves layout space so it no longer covers the Archived header or back
    button, and disconnects its resize observer when dismissed (#56).

Downloads & Verification

Platform Installer Portable / Archive
macOS 11.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.5.9.8...v1.5.9.9

WhatsApp Desk 1.5.9.8 - Click Recovery, Multi-File Upload Hardening & WebKitGTK 4.1

Choose a tag to compare

@vianziro vianziro released this 22 Sep 03:57

Six pull requests contributed by @MAliffadlan land here
together, with the macOS and spreadsheet-preview follow-ups they needed to be mergeable.

Security

  • Self-update downloads are restricted to release artifacts of this repository served over
    HTTPS from github.com, so a page script can no longer point the updater at an arbitrary
    URL (#44).
  • The download folder is validated against system and autostart locations, including symlink
    escapes and dangling symlinks, and the open-file bridge is jailed to the download folder and
    the internal preview directory (#44).
  • Attacker-controlled strings in the in-app document preview are HTML-escaped (#47), and
    spreadsheet cell values are sanitized before they reach the preview table — SheetJS escapes
    cell text but writes the raw value into a data-v attribute, which a crafted cell could use
    to inject markup (#47 follow-up).
  • Self-update archives no longer propagate elevated mode bits on extraction, and the DBus tray
    handler passes its error message as a format argument rather than as the format string
    (#45, #46).
  • Self-update downloads are capped at 512 MB and saved attachments at 1 GB, checked before
    decoding so an oversized payload cannot exhaust memory (#49).

Fixed

  • Linux: opt-in WebKitGTK 4.1 build variant (WA_DESK_WEBKIT=4.1) for Ubuntu 24.04,
    Linux Mint 22.x and current Fedora, with -webkit4.1 artifacts and honest DEB
    Depends. The default 4.0 build is unchanged. Related to #8, #9.
  • Linux: the StatusNotifierItem tray properties no longer abort the process on launch on
    desktops with a tray watcher (#48).
  • wa_crash.log rotates past 1 MB with a single backup, so a crash loop can no longer grow it
    without bound (#49).
  • macOS: the download-folder blocklist and the preview-directory check resolved only one side
    of the comparison, so symlinked prefixes such as /etc and /var were never matched
    (follow-up to #44).
  • A file drop that hit an excluded target (a dialog, the settings modal) or arrived with an
    empty file list — cloud placeholder files such as OneDrive's are the common case — left the
    drag-over highlight class stuck. That class disables pointer events across the whole app, so
    clicks stopped responding (including selecting a contact from the @mention popup) while
    typing and Enter kept working, until the app was restarted. The drag state is now reset on
    every drop and again on dragend and window blur.
  • The drop fallback that waits for WhatsApp's native editor used a single 400 ms check; when
    the editor mounted slower than that — common on Windows — the app injected the dropped files
    a second time over the batch WhatsApp had already accepted, which could leave only one file
    in the editor. The fallback now probes for several rounds and only injects when no editor
    appeared during the whole window.

Downloads & Verification

Platform Installer Portable / Archive
macOS 11.0+ (Apple Silicon & Intel) WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip
Windows 10/11 x64 (WebView2 runtime) WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip

Every published binary is covered by SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: this release ships macOS and Windows builds. Linux packages are not
built by this pipeline; see earlier releases for the most recent Linux build.

Full Changelog: v1.5.9.7...v1.5.9.8

WhatsApp Desk 1.5.9.7 - Notification Controls, Download Reliability & macOS Fixes

Choose a tag to compare

@vianziro vianziro released this 19 Sep 16:34
c975a20

What's Changed in v1.5.9.7

A consolidation release: 24 pull requests merged since v1.5.9.6, 20 of them contributed by @agas007. It introduces configurable native notifications, makes downloads more reliable and less redundant, and clears a long backlog of macOS-specific issues.

Native Notifications

  • Cross-platform notification controls (#31). A new Settings toggle enables or disables native desktop notifications consistently on macOS, Windows, and Linux. When switched off, no OS-level notification is raised.
  • Modern macOS notification APIs (#25). Notification delivery now uses the UserNotifications framework instead of NSUserNotification, which Apple deprecated in macOS 11.

Downloads & Attachments

  • Original filenames preserved (#27). Attachments keep their real names — the filename is resolved from Content-Disposition and the source URL rather than falling back to a generic placeholder.
  • Content-based deduplication (#29). Downloading the same file twice no longer creates name (1).ext copies. Files are matched by SHA-256 content hash and the existing path is reused.
  • Accurate duplicate reporting (#40). When a file is already on disk, the toast now reads "File already saved" instead of implying a fresh save.
  • Saved badges track the filename (#28). The saved-state indicator stays aligned with its message bubble instead of drifting.
  • Explicit downloads no longer open a preview (#18). Choosing Download from the context menu suppresses the in-app document viewer.
  • Removed dead size-based deduplication bookkeeping (#39).

macOS

  • Media permission recovery UX (#30). If camera or microphone access is denied, Settings now shows a recovery card with a direct link to System Settings and a retry action.
  • Media permissions scoped to WhatsApp (#21). Permissions are no longer requested more broadly than necessary.
  • Fullscreen preserved on Escape (#24). Closing a chat no longer drops the window out of fullscreen.
  • PDF preview no longer closes the chat (#17).
  • File picker uploads skip the native preview (#16).
  • LaunchAgent state verified (#20). "Launch at Startup" now reflects the real system state on every launch.
  • Safer self-updater restart (#19).

Privacy Mode

  • Scoped hover reveal and timestamp blur (#22). Hovering a chat row reveals only that row, and sidebar timestamps are blurred consistently while staying readable.

Updater

  • Clearer failure recovery (#32). Failed updates report a specific reason instead of failing silently.

Settings & Polish

  • Shortcut button spacing corrected (#38).

Community & Documentation

Build & Release

  • Releases are now produced by the local build pipeline rather than the tag-triggered workflow.

Downloads & Verification

Platform Installer Portable / Archive Requirements
macOS WhatsApp-Desk-macOS-Universal.dmg WhatsApp-Desk-macOS-Universal.zip macOS 11.0+ (Apple Silicon & Intel)
Windows 10 / 11 WhatsApp-Desk-Windows-x64-Setup.exe WhatsAppDesk.exe or WhatsApp-Desk-Windows-x64.zip Windows 10/11 x64 with the WebView2 runtime

All eight binaries are covered by SHA256SUMS. Verify your download before installing:

shasum -a 256 -c SHA256SUMS      # macOS / Linux
certutil -hashfile <file> SHA256 # Windows

Note: This release ships macOS and Windows builds. Linux packages (.deb / .rpm / .tar.gz) remain available in v1.5.9.2 and earlier.

Contributors

Thanks to @agas007, who authored 20 of the 24 pull requests in this release, and to everyone who reported the macOS and download issues resolved here.

Full Changelog: v1.5.9.6...v1.5.9.7

WhatsApp Desk 1.5.9.6 - Enhanced Privacy Mode & Avatar Blur

Choose a tag to compare

@vianziro vianziro released this 18 Sep 11:12

What's Changed in v1.5.9.6

This release resolves Issue #15 by significantly expanding Privacy Mode and Avatar Blur coverage across modern WhatsApp Web DOM structures:

  • Archived Chats Privacy: Privacy Mode visual blur and Profile Photo blur now fully apply to the Archived Chats drawer and filtered lists (previously restricted to the main chat list container).
  • All Profile Photo Variants Covered:
    • Contacts currently posting a Status (avatar wrapped inside status ring SVG <image>) are now correctly blurred.
    • Chats with Disappearing Messages and Pinned / Previously Pinned Chats (with badge overlays and Stylex container wrappers) are now consistently blurred.
    • Saved and unsaved contacts without custom profile pictures (SVG default avatars) are now protected.
    • Conversation header (#main header) and group message bubble avatars are uniformly covered.
  • Symmetrical Instant Hover Peek: Hovering over any chat row or hovering directly over the profile photo reveals it instantly without delay.
  • Timestamp Sparing: Message times in the sidebar and Archived Chats drawer remain readable.

Downloads & Verification

  • macOS Universal (Apple Silicon + Intel, macOS 11+): WhatsApp-Desk-macOS-Universal.dmg / .zip
  • Windows x64 (Windows 10/11 with WebView2): WhatsApp-Desk-Windows-x64-Setup.exe (Installer) or WhatsAppDesk.exe / .zip (Portable)
  • Checksums available in SHA256SUMS.

WhatsApp Desk 1.5.9.5 - Window & Settings Fixes

Choose a tag to compare

@vianziro vianziro released this 18 Sep 04:21

Fixes the two most-reported Windows issues.

Maximize / Restore Down (#14). The window now stores its real restored size, so Restore Down returns to your previous custom size instead of staying full-screen. Maximized state is remembered across restarts.

Settings consistency (#13). Launch at Startup now reflects the actual system state on every launch, the Settings icon no longer shifts position, and toast messages always appear above the Settings panel. Only one Settings control is ever shown at a time.

Windows installer. Setup wizard with branded graphics, Start Menu and desktop shortcuts, and a clean uninstaller. Portable EXE is still provided.

macOS build is universal (Apple Silicon and Intel). Requires macOS 11+, Windows 10/11 x64 (WebView2), or a Linux desktop with GTK3 and WebKitGTK.

Note: this release ships macOS and Windows. Linux packages remain available in earlier releases.