Lightweight, native GTK4 / Libadwaita desktop web app generator for Linux.
Turn any web application into a first-class native GNOME desktop app without the bloat of Electron or Chromium.
Most web-to-desktop app generators (like Nativefier or Pake) bundle entire Chromium runtimes or require heavy dependencies, consuming hundreds of megabytes of disk space and memory for a single web page.
web2gtk leverages your system's existing WebKitGTK 6.0 runtime and native GTK4 + Libadwaita libraries:
| Feature | Nativefier (Electron) | Pake (Tauri) | web2gtk |
|---|---|---|---|
| App Bundle Size | 150 MB – 300 MB | 15 MB – 30 MB | < 1 KB (shared system runtime) |
| RAM Usage | 500 MB – 1.2 GB | 150 MB – 300 MB | 80 MB – 150 MB |
| Styling & Theming | Web / Custom frame | Generic webview wrapper | 100% Native Libadwaita |
| System Tray | XEmbed / AppIndicator | Webview Tray | Pure D-Bus StatusNotifierItem (SNI) |
| Session Persistence | Chrome Profile | SQLite / Webview | Isolated SQLite Cookies & Storage |
| Anti-Bot / Cloudflare | Often flagged | May break 2FA | Clean Linux WebKit (authentic fingerprint) |
- Persistent Auth Across Reboots: Session tokens and cookies persist cleanly in SQLite (
cookies.sqlite). No surprise logouts after rebooting. - Cloudflare & Bot-Detection Friendly: Pure, untampered Linux WebKit engine with authentic platform fingerprint (eliminating fake stealth red flags) and disabled ITP for reliable login sessions.
- D-Bus System Tray Support: Built on the
org.kde.StatusNotifierItemprotocol. Optional tray minimization via menu with dynamic attention status (NeedsAttention) when background tasks finish. - Automatic Icon Scraper: Automatically discovers high-res icons (
apple-touch-icon, web app manifests, or SVGs) from target URLs and formats them into standard 32x32, 128x128, and 256x256 PNGs. - Full Media & Hardware Permissions: Supports WebRTC microphone and camera (voice chat in ChatGPT, Google Meet, etc.) and desktop notifications.
- OAuth Popup Friendly: Popup authentication flows (Google, Apple, Microsoft, GitHub) open seamlessly in dedicated transient windows without breaking the parent session.
- Export & Share: Easily export any configured app into a portable standalone
.tar.gzinstaller package or Arch LinuxPKGBUILD.
Ensure the following packages are installed on your Linux distribution:
sudo pacman -S python-gobject gtk4 libadwaita webkitgtk-6.0 libdbusmenu-glib python-pillow python-requests python-beautifulsoup4 librsvg gst-plugin-va intel-media-driver# Ubuntu 24.04+ / Debian 12+
sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 gir1.2-webkit-6.0 gir1.2-dbusmenu-glib-0.4 python3-pil python3-requests python3-bs4 librsvg2-bin gstreamer1.0-vaapi# Fedora 39+
sudo dnf install python3-gobject gtk4 libadwaita webkitgtk6.0 libdbusmenu-gtk3 python3-pillow python3-requests python3-beautifulsoup4 librsvg2-tools gstreamer1-vaapiRun the remote installer via curl:
curl -sSL https://raw.githubusercontent.com/galihlab/web2gtk/main/install.sh | bashgit clone https://github.com/galihlab/web2gtk.git
cd web2gtk
./install.shThe commands web2gtk and web2gtk-runner will be immediately available in ~/.local/bin/.
Simply provide the website URL:
# Auto-fetch icon and deduce name
web2gtk create https://claude.ai --name "Claude"
# Use a custom local icon
web2gtk create https://github.com --name "GitHub" --icon ./github.png
# Create without system tray
web2gtk create https://notion.so --name "Notion" --no-trayThe app is instantly integrated into your GNOME Application menu (App Grid) and can be executed from terminal (e.g. claude-gtk).
web2gtk listOutput:
SLUG NAME URL TRAY STEALTH
-----------------------------------------------------------------------------------------------
claude-gtk Claude https://claude.ai Yes Yes
github-gtk GitHub https://github.com Yes Yes
web2gtk info claude-gtkweb2gtk run claude-gtk(Or directly call its slug command: claude-gtk)
# Remove desktop entry, launcher, and icon
web2gtk remove claude-gtk
# Remove app and purge all session cookies & storage
web2gtk remove claude-gtk --purgeWant to share an app (like Claude, ChatGPT, or NotebookLM) with someone without requiring them to install web2gtk first?
# 1. Export as a standalone portable installer package (.tar.gz, ~13 KB)
web2gtk export claude-gtk
# 2. Export as an Arch Linux PKGBUILD directory
web2gtk export claude-gtk --format archThe exported package will be in dist/claude-gtk-installer.tar.gz. The recipient simply extracts it and runs:
./install.shThe app will be installed with its own icon, launcher in ~/.local/bin/, and desktop menu entry.
| Shortcut | Action |
|---|---|
Alt + Left Arrow |
Navigate Back |
Alt + Right Arrow |
Navigate Forward |
Ctrl + R |
Reload Page |
Ctrl + + / Ctrl + - |
Zoom In / Zoom Out |
Ctrl + 0 |
Reset Zoom |
Ctrl + W |
Hide to System Tray (or close window) |
Ctrl + Q |
Quit Application |
F11 |
Toggle Fullscreen |
F12 |
Toggle Web Inspector / Developer Tools |
See ROADMAP.md for upcoming milestones, planned features (AUR package, Flatpak, optional Libadwaita GUI Manager), and project guiding principles.
MIT License © 2026 Galyarder Labs
