{"id":27425783,"url":"https://github.com/rafatosta/zapzap","last_synced_at":"2026-05-27T21:00:51.957Z","repository":{"id":37780619,"uuid":"443556270","full_name":"rafatosta/zapzap","owner":"rafatosta","description":"WhatsApp desktop application written in PyQt6 + PyQt6-WebEngine.","archived":false,"fork":false,"pushed_at":"2026-05-23T21:27:34.000Z","size":12446,"stargazers_count":1031,"open_issues_count":42,"forks_count":67,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-23T22:20:17.354Z","etag":null,"topics":["flathub","flatpak","linux","linux-desktop","messaging","pyqt6","python","qt","qt6","whatsapp","whatsapp-web"],"latest_commit_sha":null,"homepage":"http://rtosta.com/zapzap/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rafatosta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"rafatosta","open_collective":null,"ko_fi":"rafaeltosta","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-01-01T14:34:09.000Z","updated_at":"2026-05-23T20:40:36.000Z","dependencies_parsed_at":"2026-02-24T11:15:44.379Z","dependency_job_id":null,"html_url":"https://github.com/rafatosta/zapzap","commit_stats":null,"previous_names":[],"tags_count":159,"template":false,"template_full_name":null,"purl":"pkg:github/rafatosta/zapzap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafatosta%2Fzapzap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafatosta%2Fzapzap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafatosta%2Fzapzap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafatosta%2Fzapzap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafatosta","download_url":"https://codeload.github.com/rafatosta/zapzap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafatosta%2Fzapzap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33583399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flathub","flatpak","linux","linux-desktop","messaging","pyqt6","python","qt","qt6","whatsapp","whatsapp-web"],"created_at":"2025-04-14T12:29:08.296Z","updated_at":"2026-05-27T21:00:51.951Z","avatar_url":"https://github.com/rafatosta.png","language":"Python","funding_links":["https://github.com/sponsors/rafatosta","https://ko-fi.com/rafaeltosta","https://www.paypal.com/donate/?business=E7R4BVR45GRC2\u0026no_recurring=0\u0026item_name=ZapZap+-+Whatsapp+Desktop+for+linux%0AAn+unofficial+WhatsApp+desktop+application+written+in+Pyqt6+%2B+PyQt6-WebEngine.\u0026currency_code=USD","https://ko-fi.com/X8X2E1OLG"],"categories":["linux"],"sub_categories":[],"readme":"# [ZapZap](https://rtosta.com/zapzap-web/) – WhatsApp Desktop for Linux \u0026 Windows\n![ZapZap for WhatsApp](share/screenshot/default.png)\n\n## 📌 About\n\nZapZap brings the WhatsApp experience on Linux closer to that of a native application.  \nSince Meta does not provide a public API for third-party applications, ZapZap is developed as a [Progressive Web Application (PWA)](https://en.wikipedia.org/wiki/Progressive_web_app), built with **PyQt6 + PyQt6-WebEngine**.\n\n📌 Technical documentation:\nSee [docs/technical-documentation.md](docs/technical-documentation.md)\n\n---\n\n## 📥 Download\n\n- **[Flathub](https://flathub.org/apps/details/com.rtosta.zapzap)**  \n- **[AppImage](https://github.com/rafatosta/zapzap/releases/latest/download/ZapZap-x86_64.AppImage)**\n\n---\n\n## ✨ Features\n\nZapZap extends WhatsApp Web with additional features:\n\n### 🎨 Appearance\n- Adaptive **light and dark mode**\n- **Fullscreen mode**\n- Custom **window decorations**\n- **Interface scaling adjustment** (ideal for 2K/4K screens)\n\n### ⚡ Usability\n- **Keyboard shortcuts** for main options\n- Adaptive **system tray icon** (notifies new messages)\n- **Background process** support\n- **Drag-and-drop** functionality\n- **Account Grid View** (Quickly switch between all accounts)\n- Ability to select a **custom folder for downloads**\n- **Temporary folder** for opening files\n\n### 🛠️ Extras\n- **Spellchecker** with language selection via context menu\n- Customizable **system tray icons**\n- Option to choose a **folder for custom dictionaries**\n- Setting to **disable the native file selection dialog** (Hyprland)\n- **Custom CSS/JS** with global + per-account override\n- **Reorganized Settings Panel**\n- Added **Performance section**\n- **Native Windows support** (SQLite + Registry settings)\n\n### 🧩 Customizations\n- New **Customizations** page in Settings\n- Supports **Global** customization and **Current account** customization\n- Account mode supports **inherit global settings** + optional override\n- Users can:\n  - import `.css` and `.js` files\n  - create and edit CSS/JavaScript files in dialogs\n  - enable/disable each imported CSS/JS file independently\n  - import CSS/JavaScript from any `https://` URL\n  - open customization folders directly\n- Supports many userstyle files (`.user.css`) by extracting WhatsApp-targeted `@-moz-document` blocks\n- Page actions: `Save`, `Save and reload`, `Reload`\n\nCustomization files are stored in the app local data path under:\n- `customizations/global/css`\n- `customizations/global/js`\n- `customizations/accounts/\u003cid\u003e/css`\n- `customizations/accounts/\u003cid\u003e/js`\n\nReserved for future extension support:\n- `customizations/extensions`\n\n---\n\n## ⚠️ File upload notice\n\n### File uploads and filesystem permissions\n\nTo enable **file uploads (documents, images, videos, audio, etc.)** in WhatsApp Web, **ZapZap requires access to the user’s folders**.\n\nThis is due to **technical limitations of QtWebEngine (Chromium)** in modern environments such as **Wayland** and **sandboxed applications** (for example, Flatpak).  \nUnder these conditions, the embedded browser **cannot upload files correctly** without direct access to the filesystem.\n\n### What this means in practice\n\n- Without filesystem access:\n  - file uploads may fail\n  - files may be sent **with no content**\n- With the required permissions granted:\n  - file uploads work correctly\n  - the experience matches that of a regular web browser\n\n### Recommended permissions\n\nWhen running in a sandboxed environment (such as Flatpak), it is recommended to grant access to at least:\n\n- `Documents`\n- `Videos`\n- `Pictures`\n- `Downloads`\n\nThese permissions are used **only** to allow the user to select and upload files and are **not** used for automatic file scanning, indexing, or data collection.\n\n### Changing permissions on Flatpak\n\nIf ZapZap was installed via **Flatpak**, you can manage filesystem permissions using **Flatseal** (a graphical permission manager for Flatpak apps):\n\n👉 https://flathub.org/apps/com.github.tchx84.Flatseal\n\nSteps:\n1. Install and open **Flatseal**\n2. Select **ZapZap** from the application list\n3. Enable access to the recommended folders (`Documents`, `Videos`, `Pictures`, `Downloads`)\n4. Restart ZapZap\n\nOptional terminal alternative:\n\n```bash\nflatpak override --user --filesystem=home com.rtosta.zapzap\n```\n\nAfter adjusting these permissions, file uploads, opening PDFs, and drag-and-drop should work normally.\n\n\n# ⚙️ Development\n\n## Requirements\n\n-   **Python 3.9 or higher**\n\n\n\n## Fedora 43 System Dependencies\n\nIf `pip install -r requirements.txt` fails due to `dbus-python`:\n\n``` bash\nsudo dnf install -y dbus-devel pkg-config gcc python3-devel\n```\n\nThen:\n\n``` bash\npip install -r requirements.txt\n```\n\n\n\n# 🚀 Running ZapZap\n\n``` bash\npython run.py [dev|preview|build] [options]\n```\n\n\n\n## 🔧 Development Mode\n\nWithout translations:\n\n``` bash\npython run.py dev\n```\n\nWith translations:\n\n``` bash\npython run.py dev --build-translations\n```\n\n#### Debugging WebEngine\n- Open DevTools for current account page: `View -\u003e Open DevTools` (`Ctrl+Shift+I`)\n\n\n## 👀 Preview Mode\n\nFlatpak:\n\n``` bash\npython run.py preview --flatpak\n```\n\nAppImage:\n\n``` bash\npython run.py preview --appimage\n```\n\nWindows:\n\n``` bash\npython run.py preview --windows\n```\n\nWith translations:\n\n``` bash\npython run.py preview --build-translations --flatpak \n```\n\n\n\n## 📦 Build AppImage\n\n``` bash\npython run.py build --appimage \u003cversion\u003e\n```\n\nExample:\n\n``` bash\npython run.py build --appimage 6.0\n```\n\n\n\n## 📦 Build Flatpak Onefile\n\n``` bash\npython run.py build --flatpak-onefile\n```\n\nOutput:\n\n    dist/com.rtosta.zapzap.flatpak\n    \n### 📦 Build Windows (EXE)\n\n``` bash\npython run.py build --windows\n```\n\nOutput:\n\n    dist/ZapZap.exe\n    dist/ZapZap-Windows.zip\n\n\n\n\n## 📦 Install as Python Module\n\n``` bash\npip install .\n```\n\n### Uninstall\n\n``` bash\npip uninstall zapzap\n```\n\n\n\n## 🔧 uv Tool\n\n``` bash\nuv tool install . --with-requirements requirements.txt\n```\n\n## 📦 Packaging\n- **[Flatpak](https://github.com/flathub/com.rtosta.zapzap)**\n- **[AppImage](_scripts/build-appimage.sh)**\n\n## 🌍 Translation\nZapZap supports translations. If your language file is missing from the [po](/po) folder, submit a pull request or open an [issue](https://github.com/rafatosta/zapzap/issues).\n\n## 🤝 Contributions\nContributions are welcome!\nPlease submit a pull request with any improvements or changes you wish to propose.\n\n## 📜 License\nThis project is licensed under the GPL.\nSee the LICENSE file for more information.\n\n## 💖 Donations\n**PayPal:** [Donate via PayPal](https://www.paypal.com/donate/?business=E7R4BVR45GRC2\u0026no_recurring=0\u0026item_name=ZapZap+-+Whatsapp+Desktop+for+linux%0AAn+unofficial+WhatsApp+desktop+application+written+in+Pyqt6+%2B+PyQt6-WebEngine.\u0026currency_code=USD) \n\n**Pix:** [Donate via Pix](https://nubank.com.br/pagar/3c3r2/LS2hiJJKzv) \n\n**Ko-fi:** [Donate via Ko-fi](https://ko-fi.com/X8X2E1OLG)\n\n## 📬 Contact\n**Maintainer:** Rafael Tosta \n\n**Email:** [rafa.ecomp@gmail.com](mailto:rafa.ecomp@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafatosta%2Fzapzap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafatosta%2Fzapzap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafatosta%2Fzapzap/lists"}