Whatly 6.0.0
6.0.0 (2026-07-16)
First release of the fork maintained at https://github.com/shakaran/whatly.
Everything below is on top of upstream 5.1.0.
The app is now called Whatly (it was WhatSie). The application id is
net.shakaran.whatly, the binary is whatly, and user data lives under
shakaran/whatly. Existing installs are carried over automatically on first
run — settings and the logged-in session are copied from the old shakaran
namespace and from the previous WhatSie layout, so nobody is logged out by
upgrading. If the automatic copy ever misses something, whatly --migrate-from=whatsie does it by hand (--dry-run to preview first).
🎁 Features
- Multiple WhatsApp accounts. Either as separate windows —
whatly --profile=<name>, each with its own session, settings file and
instance — or as tabs inside one window, added with a + and renamed or
removed from a right-click menu. Every account is a separate Chromium storage
partition, so the sessions never touch; the tray badge sums the unread count
across them all. The default account keeps the exact storage it had, so an
upgrade neither moves it nor logs it out, and the tab bar hides itself when
there is only one account. - Spell checker, working. It was not broken, it was gone — and the build
asserted that the system hunspell package supplied the dictionaries. Qt
WebEngine uses Chromium's spell checker, which reads.bdicand cannot read
hunspell's.dic/.affat all, so the language list was empty on every
distribution. The 31 dictionaries already in the tree are now converted at
build time and installed. - Chat themes. Fourteen of them, recolouring WhatsApp Web itself. Keyed on
the colour values, since WhatsApp's CSS variable names are
compiler-generated and change with each of its deploys. Photos and avatars are
untouched. - Chat wallpaper — your own image behind the messages.
- Custom CSS. Load a .css file to restyle WhatsApp Web — the community
stylesheets (catppuccin and the like) work — applied on top of the chat theme. - Smooth scrolling, as an option.
- Privacy blur. Blurs the chat list and the open conversation until you
hover a row, so someone glancing at the screen cannot read them. Five levels. - Theme and blur buttons inside WhatsApp's own sidebar, above the avatar,
reachable without opening Settings. - Interface translations, with a language picker. 15 languages (Italian was
human-written; the other 14 are machine-translated and unreviewed). - Windows support, behind
Q_OSguards, with a build workflow. - Image paste from a browser's clipboard.
- A connection watchdog that reloads the page when WhatsApp's WebSocket hangs,
capped at three reloads per episode. - Identify as Whatly in the phone's linked-devices list, instead of as Chrome —
reported as a desktop client so the phone shows a computer icon beside the
"Whatly for Linux" label rather than leaving it blank. - Close the emoji panel by clicking outside it (opt-in).
F1opens About; its Report a Bug button fills in the GitHub issue with
the version, commit, memory usage of the whole process tree, and the recent
log — including WhatsApp Web's console.
🐞 Bug Fixes
- Logging out of KDE could stall on Whatly. With close-to-tray on, the
window vetoed every close — including the one the session manager sends at
logout — so the desktop saw an app refusing to quit and waited on it. A
session-end close is now honoured as a real quit. (Reported on KDE; the fix
hooksQGuiApplication::commitDataRequest, which fires only on a real session
logout, so it could not be exercised in a normal run.) - Clearing the cache could delete your home directory. If the profile ever
handed back an empty storage path, the recursive delete ran on.— the
working directory, which is your home when the app is launched from a desktop
or file manager. The delete now refuses any path that is empty, relative, the
home directory, the root, or not inside the app's own storage. (Gentoo dropped
the app over this.) - The theme could not be set to dark in any language but English. The
setting was stored as the combo box's displayed text, which is translated:
running in Spanish wrotewindowTheme=claro, and every comparison in the code
is against"dark". A value written by an older build is repaired at startup. - The permissions dialog did nothing at all — wrong enum, a double-prefixed
settings key, and a signal nothing was connected to. It never once reached the
engine. This is also why voice and video calls appeared not to work: the
microphone and camera could not be granted. - Notifications went to the app's own popup, on the primary monitor, rather
than to the desktop's notification service and the screen the window is on. - Notification avatars had red and blue swapped (a byte-order mismatch between
QImageand the freedesktopimage-datahint). - The window would not restore down from maximized (Wayland reports the
maximized geometry as the normal one). - The theme was reset to light on every exit.
- Pasting an image copied from a browser silently produced "no content".
- Attachments: the desktop's file chooser is used, and the last directory is
remembered. Qt's built-in dialog has no bookmarks, no Recent and no address
bar, so a file outside the directory it happened to open in was unreachable. - Quitting could turn into minimize-to-tray.
- "Restore" in the tray menu could be left permanently disabled, with no way
left to bring the window back. - Logging out hung on the "Logging out" overlay and opened a browser tab.
- Unhandled permission types were denied and the denial was persisted, so they
stayed denied forever once the app learned to ask. - The injected sidebar buttons burned about 40% of a CPU core with the app
idle — a MutationObserver whose own repaints retriggered it. - The User-Agent is derived from the engine, so it always reports the truth.
📦 Packaging (snap)
- Stage
libxcb-shape0:libqxcblinks against it, and without it the snap
does not launch at all. - Drop the
hunspell-dictionariescontent mount andDICPATH. It could never
have fed the spell checker — Chromium reads.bdic, not hunspell's
.dic/.aff— and the dictionaries are shipped inside the snap now.
📖 Documentation
- The build docs describe the actual CMake build. Old Qt or CMake now fails with
an actionable error instead of a confusing one. docs/TRANSLATIONS.md,docs/WINDOWS_BUILD.md.
⚠️ Known limitations
- Screen sharing during a call does not work. Qt WebEngine as packaged
enumerates zero screens and zero windows (measured, on Wayland and on X11
alike); it is built without PipeWire. Nothing in the application can change
that. - Memory use is Chromium's, not the app's: with every injected script disabled,
the renderer still accounts for the great majority of it.