ZapFast 0.20.0 makes and answers WhatsApp calls: voice and video, one-to-one and, as an experiment, in groups. It rings for an incoming call, and a new Calls page lists every call. Calls are new and video calls are in alpha, so please try them, and if something breaks, point your agents at it: pull requests are very welcome. A rail beside the chat list now holds Chats, Calls, Starred and Settings. Sound and recording run on a new audio layer that talks to PipeWire directly on Linux. This release also brings group invite links and group management, starred and pinned messages, a full-window photo and video viewer, chat info in a side panel, sound in WhatsApp's videos, deletions that sync with your phone, and dozens of fixes from more than forty contributors. The prebuilt Linux packages need Ubuntu 24.04, Debian 13 or newer: Ubuntu 22.04 and Debian 12 are not supported.
Download ZapFast: Mac · Windows · Windows ARM · Linux · Linux ARM · AppImage · AppImage ARM · Flatpak · Debian/Ubuntu · Fedora
On a Mac, brew install --cask crmne/tap/zapfast. On Arch, yay -S zapfast-bin.
On Windows, pick the .msi. The setup program (-setup.exe) is still attached so that installs from 0.19.0 and earlier can update through it.
The screenshot uses ZapFast's built-in demo content.
New
- Voice calls. The phone button in a chat's header calls that person, and an incoming call takes over the window with Accept and Decline, raises a notification and rings, even with the window in the tray. You hear a ringback tone while their phone rings. During a call you can mute, switch the microphone or speaker, and put the call screen aside to keep chatting while it runs. A muted, archived or locked chat's call stays as quiet as its messages. By @crmne, building on the work of @alitura1. (#220)
- Video calls, in alpha. The camera button starts a video call, turns your camera off and on, or switches a voice call to video from either side. A computer without a camera still takes part and sees the other side. Your picture goes out at 25 frames a second, up to 720p, and follows the connection: it steps down rather than stalling when the other side receives less. Each picture is sent with repair packets, as WhatsApp's own apps send them, so a lost packet is rebuilt on the other side instead of freezing the picture until the next full one. An iPhone relies on them, and with them calls to an iPhone that froze every few seconds ran smooth in testing. If a call misbehaves, please attach your log to an issue: it counts why frames drop, never what was said or shown. Settings > Files > Log > Open shows it, and the guide says where it lives. By @crmne, building on the work of @alitura1, with the repair packets and pacing contributed to whatsapp-rust. (#255)
- Group calls, as an experiment. A group's header has the call buttons a person's has, a call to one of your groups rings here, and a call link in a message joins its call. Everyone hears everyone and each person gets a tile, but in testing your own video, as the others see it, still stopped for a moment every few seconds. By @crmne, building on the work of @alitura1. (#395)
- Calls take the speaker's echo out of your microphone, so the other side does not hear themselves when you call without headphones, all in Rust with WebRTC's echo canceller, noise suppression and gain control. By @crmne.
- A Calls page and call history. Every call takes its place in its chat, as on the phone: voice or video, who called, how long it lasted, or that it was missed or declined. Calls in the rail lists them newest first, with All and Missed chips, a search, and a call-back button on each row. New call offers the people you call most, then every contact. By @crmne, building on the work of @alitura1. (#256)
- A navigation rail beside the chat list. Chats and Calls sit at the top, and Starred, Archived, Locked chats, Settings and your own photo (the account switcher) at the bottom, on every platform. With the chat list hidden, your chats' pictures fill the rail. Ctrl+Shift+1 goes to Chats and Ctrl+Shift+2 to Calls (Command on a Mac). By @crmne.
- ZapFast's sound talks to PipeWire directly on Linux, else PulseAudio, else ALSA, on a new audio layer shared by voice messages, videos, call tones and notification sounds. It follows the default device when it changes and reopens it after a failure. ZapFast shows up as "ZapFast" in your volume mixer, and a call is marked as a call, so the system can lower other sound while it runs. By @crmne.
- Star messages and find them again under Starred in the rail. By @LisandroNahuelH. (#236)
- Pin a message in a chat for everyone, and see what others pinned. By @LisandroNahuelH. (#234)
- A full-window viewer for photos and videos, with the chat's album to move through and the message's actions at hand. The arrow keys and buttons step through a chat's photos. By @LisandroNahuelH (#189) and @8bury; thanks @edmooredop. (#436, #308)
- Chat info opens in a side panel beside the conversation, with the chat's media, links and documents. It also shows a group's description and a chat's disappearing-message timer. By @pulgueta (#264), @nalyx1 (#391, #389) and @fgrehm. (#424, #191)
- Delete for me syncs with your phone and your other devices, both ways, and a deletion made while offline goes out once ZapFast reconnects. By @eternalwaitt; thanks @AbdullahHouso. (#384, #393)
- Select messages with check boxes, as in WhatsApp Web, from Select messages in the chat's menu. Copy them with Cmd or Ctrl+C, forward them, or delete them all at once. By @rafaelsantana6 (#300), @moleh1307 (#409; thanks @itszux, #326) and @eternalwaitt. (#321)
- Forward to several chats at once, and check the list before it is sent. By @eternalwaitt. (#336)
- Reply privately to a group message in the sender's own chat, with the message quoted. By @eternalwaitt. (#359)
- Photos and videos sent together show as an album, with Download all and Save all. By @eternalwaitt. (#286)
- Crop and rotate a picture before sending it, by clicking it in the attachment strip. By @Rokuko-L. (#453)
- Send pictures as documents, from a file or the clipboard, so they arrive uncompressed. By @FelipeFMedeiros; thanks @rajarshikhatua. (#469, #362)
- Send a location from coordinates or a map link. By @fabiomotta0311. (#301)
- Create a group from New chat: pick the people, name it, and add a photo if you like. By @crmne.
- Manage a group from its info: copy its invite link to share or reset it, add members, make or dismiss admins, remove someone, and set who may edit the group, send messages and add members, and whether admins approve new members. By @crmne.
whatsapp://group invite links open in ZapFast. By @paixaomp. (#591)- Message a number you have not saved. By @eternalwaitt. (#320)
- Mention everyone in a group with @ALL, or the word for it in your language. By @rafaelsantana6. (#418)
- Chats that mention you are marked with "@" in the list, and open at the mention. By @crmne; thanks @jamorenom. (#487)
- Sound in WhatsApp's videos. Every video WhatsApp sends played silently; now its sound plays with it. By @claudiocp; thanks @joaogks. (#462, #265)
- Play videos at 1.5x and 2x, like voice messages. By @claudiocp. (#465, #464)
- A chat can keep its own voice message speed, from "Voice message speed" in its menu. By @bruno-costanzo. (#526)
- Motion photos play instead of showing their clip as an unsupported message. By @Z1xus. (#399)
- Audio files look different from voice messages, with a seek bar and a music icon. By @eternalwaitt. (#365, #361)
- Phone numbers in messages are links. By @nathanbzrr. (#303)
- Open a chat from outside ZapFast:
zapfastfollowed by a number, awa.melink, awhatsapp://link or a group invite link opens that chat or the invite, and the desktop can handwhatsapp:links to ZapFast. By @assawalhy (#426; #407) and @tassiovirginio. (#479) - ZapFast fits a narrow window, showing the chat list or one chat at a time, with a back arrow between them. By @frantgn90. (#356)
- The day stays at the top of a chat while you scroll, and older day labels carry their date. By @eternalwaitt. (#319)
- The window comes back at the same size, place and zoom. By @jbouhier, with the size kept in logical pixels by @crmne. (#385)
- The chat list filter is remembered across restarts. By @crmne; thanks @BurrHM. (#380)
- A short chat sits at the bottom of the view, next to the composer, as in WhatsApp Web. By @crmne; thanks @BurrHM. (#378)
- A reaction to your message moves its chat up the list, as on WhatsApp. By @crmne; thanks @BurrHM. (#373)
- Hide message content in notifications. Turn off "Show message content in notifications" in Settings, and every notification says only "New message". By @crmne; thanks @BurrHM. (#376)
- Limit repeat notifications from busy direct chats, groups, or both: one notification, then quiet for 10 minutes or until you read it. A mention or a reply to you still notifies. By @TopShaggerGomlen. (#406)
- Keep chats archived, or not. Turn off "Keep chats archived" in Settings, and a new message brings its chat back from the archive, as on the phone. By @caumeira; thanks @MatharuG. (#390, #208)
- Keep the chat list where it is after sending, as an option. By @eternalwaitt. (#366)
- Documents keep their own names in a download folder you chose. By @crmne; thanks @rajarshikhatua. (#363)
- Large attachments download when you click them, whatever their size. Only automatic downloads keep the 64 MiB limit. By @crmne; thanks @dCo3lh0 and @8bury. (#386, #316)
- Older history and its files download in the background, when you turn it on in Settings. By @LisandroNahuelH. (#194)
- Settings shows how much space downloaded attachments take, and can clear them. By @LisandroNahuelH. (#232)
- Reload earlier messages from a message's menu asks the phone again for the messages before it, to fill a gap without relinking. Edited replies and the phone's own order are kept in history. By @crmne.
- Click a message's time or ticks to open Message info. By @UMCEKO. (#414)
- A clicked sticker opens on its own, with Add to favorites. By @treepo1. (#268)
- A Messages theme, with bubbles shaped and coloured as Messages draws them on the Mac. By @iclems (#332, #331), with the bubble shapes by @crmne.
- A drawn title bar on Windows and Linux, as an option under Settings > Appearance > Custom title bar. By @crmne.
- New shortcuts: Ctrl+E archives the open chat, Ctrl+Shift+A switches to the next linked number (Command on a Mac), and the mouse's side buttons go back and forth. By @GeorgeMunas (#427, #428) and @Nullpntr1337. (#401)
- Screen readers hear status changes such as toasts, errors and a dropped connection, and NVDA no longer freezes while someone is typing. By @a2hsh. (#480, #434, #438)
- The macOS Dock icon shows your unread chats. By @crmne; thanks @joseddg92 and @traerin. (#368, #346)
- Clicking a macOS notification opens its chat. By @victorcesc. (#472)
- Linux desktops treat ZapFast's notifications as chat: they appear in KDE's notification settings, play the system message sound, carry the instant-message category, and mark ZapFast in the taskbar. The launcher gains a Quit ZapFast action. By @pataar. (#415, #416, #417, #419, #420)
- A phone camera can open Linked devices from the pairing QR code. By @bruno-costanzo. (#471)
- Your computer's name shows in the phone's Linked devices after you link again. By @fgrehm. (#448, #210)
- Indonesian. By @yasfaa. (#402)
- Message summaries such as "Photo" are in your language in the chat list, quotes and notifications. By @bruno-costanzo. (#527)
- Shift+Insert pastes text, as in other Linux applications, so espanso's longer expansions arrive on Wayland. By @alejogtz. (#576)
- A Windows Installer (.msi) package, for x64 and ARM. It takes over an earlier install, keeping your chats and settings. By @crmne.
- The Nix package builds on Apple Silicon Macs. By @surma. (#306)
Fixed
- Voice messages keep their first moment. A USB microphone that the system put to sleep takes a moment to wake, and what you said meanwhile was lost; the time now starts when the microphone delivers sound. By @crmne.
- Recording carries on through a microphone hiccup. By @karadoganyi; thanks @oovaa. (#481, #382)
- No more endless audio errors on Linux after a sound device underrun, which held a CPU core until restart. By @crmne; thanks @survey-sudo. (#507)
- The account shows offline while ZapFast sits in the tray, so your phone gets its notifications. By @udaya2899; thanks @Clascheurduturfu. (#475, #461)
- A message sent while reconnecting goes back to the composer instead of failing for good. By @crmne; thanks @oovaa. (#452)
- Stickers send again when the picker opens, instead of hitting WhatsApp's rate limit. By @claudiocp and @crmne; thanks @claudiocp. (#468, #405)
- "Follow system" follows the light or dark preference of GNOME, KDE and other Linux desktops. By @crmne; thanks @dkess. (#483)
- GNOME on Wayland draws a proper window frame instead of a square grey one. By @crmne; thanks @pratyush-1327. (#397)
- The Flatpak shows desktop notifications. By @crmne; thanks @jamorenom. (#510)
- On GNOME a notified message no longer also shows "ZapFast is ready". By @claudiocp. (#467, #466)
- Clicked links no longer leave defunct browser processes behind on Linux. By @crmne; thanks @akitaonrails. (#446)
- A hidden start at login stays hidden on GNOME, waiting for the tray instead of opening the window. By @crmne; thanks @pedronora. (#429)
- Built-in notification sounds respect Do Not Disturb and Focus on a Mac. By @crmne; thanks @lucasew. (#211)
- Pasting an image with a quick Ctrl+V tap works, and pasted attachments stay in the chat they were pasted in. By @eternalwaitt; thanks @devrimyz. (#317, #494, #340)
- Phone numbers are grouped by their own country code. By @karadoganyi; thanks @tizoras. (#476, #449)
- The app icon shows in Qt trays and launchers. By @karadoganyi; thanks @paganotoni. (#482, #396)
- Read ticks stay grey when your read receipts are off, as on the phone. By @fgrehm. (#458)
- A message the contact never read no longer turns blue or claims a read time of 1969. By @dhanyel. (#370, #369)
- A group created on the phone shows at once. By @boskowski. (#400)
- Chats split between a phone number and a privacy id come back together once WhatsApp links the two. By @nathanbzrr. (#423)
- Followed channels show their names, and empty ones you no longer follow are gone. By @LILQK. (#525)
- A live location says when its newer positions are only on the phone, instead of showing a pin that never moves. By @fabiomotta0311. (#302)
- Edits are checked before they are sent, and a failed edit keeps the original. The cursor starts at the end of the text. By @eternalwaitt (#337) and @ridvansevik; thanks @Halliday202. (#485, #456)
- A changed chat picture shows at once, without a restart. By @crmne.
- A chat opens at its end without flashing its oldest messages first. By @frantgn90. (#357)
- Message text is easier to select, from anywhere in the bubble. By @eternalwaitt. (#281)
- ZapFast reconnects right after your computer wakes on Linux and Windows, instead of waiting for the link to time out. By @crmne.
- Closing a minimized window keeps ZapFast in the tray, and on niri a notification or a second launch brings the existing window forward. By @crmne and @tassiovirginio. (#474)
- Settings survive a crash or power cut, and saving them no longer freezes the window under disk load. By @crmne.
- A 12-hour clock on GNOME is followed inside the Flatpak. By @crmne.
- A voice message's time sits on its duration line. By @bruno-costanzo. (#473)
- The chip rows show their scroll bar below the chips, and long titles and submenus fit their space. By @n3ndor (#422), @iclems (#470), @vncsalencar (#435) and @frantgn90. (#372)
- Removing a sticker pack asks first. By @tobymarks. (#207)
- macOS shows ZapFast's notifications, which it had refused because they went out under a different identity from the app's. By @Bervinm. (#577)
- A new message no longer brings ZapFast forward on Hyprland, for example out of a scratchpad. By @boskowski; thanks @Yoryoboy. (#562, #530)
- Every entry of the message menu is translated, not only Open in system player. By @karadoganyi; thanks @Raposoraptor. (#565, #552)
- Archiving or unarchiving a chat here reaches your phone, and ZapFast follows the phone's Keep chats archived setting. By @thize. (#589, #572)
- People you never wrote to stay out of the chat list. By @thize. (#573)
- Your sent messages sit at the time WhatsApp's server gave them, so a reply that arrives after them no longer appears above them. By @thize; thanks @CorgiLeo. (#574, #548)
- The log of a run that froze survives the restart, as
zapfast.previous.logbeside the new one, so it can still be attached to an issue. By @crmne; thanks @Isllanrx. (#560) - A download that timed out leaves no partial file behind. By @akitaonrails. (#580, #579)
- The Nix package no longer pulls in the compiler (about 280 MiB) at run time. By @crmne; thanks @v1cferr. (#498)
Known limitations
- Calls are a work in progress. On a connection that loses many packets at once, the other side's picture can still stop for about a second until a fresh one arrives: the repair packets rebuild a few lost packets at a time, not a burst of ten or more. Sound and picture now carry the timing a phone needs to line them up, but they can still drift apart. In group calls your video stops for a moment every few seconds, since only one-to-one calls send repair packets yet. Please attach your log to an issue when a call misbehaves, and pull requests are very welcome: the call code is in
src/calls.rsand in whatsapp-rust'svoipmodule. - The prebuilt Linux packages (tarball, AppImage,
.deband.rpm) need glibc 2.39: Ubuntu 24.04, Debian 13, Fedora 40 or newer. They do not run on Ubuntu 22.04 or Debian 12. - Building ZapFast on Linux now needs libpipewire's headers and clang.
- On Windows a file pasted with Ctrl+V can still attach nothing for some people (#404). The log now says where it stopped; please attach it to that issue.
Thanks
@alitura1, whose calling pull requests this release's calls grew from, and @eternalwaitt, @LisandroNahuelH, @claudiocp, @bruno-costanzo, @fabiomotta0311, @pataar, @fgrehm, @karadoganyi, @frantgn90, @rafaelsantana6, @nathanbzrr, @a2hsh, @GeorgeMunas, @iclems, @tassiovirginio, @8bury, @jbouhier, @caumeira, @dhanyel, @surma, @yasfaa, @Z1xus, @UMCEKO, @assawalhy, @Nullpntr1337, @victorcesc, @udaya2899, @ridvansevik, @boskowski, @n3ndor, @moleh1307, @TopShaggerGomlen, @tobymarks, @FelipeFMedeiros, @Rokuko-L, @treepo1, @pulgueta, @nalyx1, @vncsalencar, @LILQK, @alejogtz, @Bervinm, @akitaonrails, @thize and @paixaomp for the pull requests in this release, and @BurrHM, @rajarshikhatua, @oovaa, @jamorenom, @AbdullahHouso, @MatharuG, @joaogks, @edmooredop, @itszux, @dCo3lh0, @joseddg92, @traerin, @lucasew, @survey-sudo, @Clascheurduturfu, @dkess, @pratyush-1327, @pedronora, @devrimyz, @tizoras, @paganotoni, @Halliday202, @v1cferr, @mustafarec, @Yoryoboy, @Isllanrx, @Raposoraptor and @CorgiLeo for their reports.
Full changelog: v0.19.0...v0.20.0
