A seamless Progressive Web App (PWA) installer and desktop launcher for Firefox and Gecko-based browsers on Linux [tested on arch].
PWAish brings native-like PWA installation to Firefox. Instead of ordinary browser tabs, web apps installed through PWAish launch as standalone, chromeless desktop applications complete with native Linux .desktop entries and application icons.
PWAish_showcase.mp4
- URL Bar PWA Installer: Displays an Install the app action icon directly in the address bar on HTTP and HTTPS sites.
- Manifest & Icon Discovery: Automatically discovers and parses Web App Manifests (
manifest.json) to extract app titles, start URLs, and high-resolution icons. - Native Desktop Integration: Uses Firefox native messaging to create standard Linux
.desktoplaunchers in~/.local/share/applications. - Multi-Browser Auto-Detection: Fully supports Firefox, Zen Browser, Floorp, and LibreWolf. PWAish automatically inspects the calling process so PWAs installed from any browser open natively in that same browser.
- Install App: Click the Install the app icon in the URL bar while browsing any web app.
- Native Messaging Host: The extension sends app metadata (title, URL, manifest icon) to the native messaging host script (
popupwindow_desktop.py). - Desktop Entry Creation: The host downloads the app icon and generates a
.desktopfile in~/.local/share/applications. - App Launch: Launching the app from your application menu opens the extension's launcher page (
launcher.html), which immediately elevates the app into a standalone popup window.
The native messaging host is required to create Linux desktop entries. Installation is user-local (~/.local) and does not require root/sudo privileges.
Install directly using curl:
curl -fsSL https://raw.githubusercontent.com/ADIOR-enigma/PWAish/main/install.sh | bashOr, if you have cloned this repository locally:
./install.shThis installs:
- Python installer script:
~/.local/lib/webappinst/popupwindow_desktop.py - Native messaging host manifest:
~/.mozilla/native-messaging-hosts/popupwindow_desktop.json(shared across Firefox, Zen Browser, Floorp, and LibreWolf)
- Create target directories:
mkdir -p ~/.local/lib/webappinst mkdir -p ~/.mozilla/native-messaging-hosts
- Copy
native/popupwindow_desktop.pyto~/.local/lib/webappinst/popupwindow_desktop.pyand make it executable:cp native/popupwindow_desktop.py ~/.local/lib/webappinst/popupwindow_desktop.py chmod 755 ~/.local/lib/webappinst/popupwindow_desktop.py
- Copy
native/popupwindow_desktop.jsonto~/.mozilla/native-messaging-hosts/popupwindow_desktop.jsonand update its"path"to point to your script:cp native/popupwindow_desktop.json ~/.mozilla/native-messaging-hosts/popupwindow_desktop.json sed -i "s|\"path\": \".*\"|\"path\": \"$HOME/.local/lib/webappinst/popupwindow_desktop.py\"|" ~/.mozilla/native-messaging-hosts/popupwindow_desktop.json chmod 644 ~/.mozilla/native-messaging-hosts/popupwindow_desktop.json
Because webappinst.xpi is a standard XPI package, you can install it directly into any Gecko-based browser (Firefox, Zen Browser, Floorp, LibreWolf, etc.):
- Go to the Releases page and click on
webappinst.xpito install it directly in your browser.- Alternatively, you can build from source locally using
npm run buildand installdist/webappinst.xpi.
- Alternatively, you can build from source locally using
- Once installed, visit any web application to see the Install the app icon in your address bar.
Zen Browser can launch true standalone, chromeless PWA windows directly via the command-line flag --app=URL. PWAish includes a Zen Browser autoconfig installer (install_autoconfig.sh) that sets up this capability seamlessly while preserving any existing fx-autoconfig scripts.
Install directly using curl:
curl -fsSL https://raw.githubusercontent.com/ADIOR-enigma/PWAish/main/PWA_for_Zen/install_autoconfig.sh | sudo bashOr from a local clone:
sudo ./PWA_for_Zen/install_autoconfig.shHow install_autoconfig.sh works (Install & Update):
- Checks
config-prefs.js: Verifies ifdefaults/pref/config-prefs.jsexists in Zen Browser system directories (/opt/zen-browser-bin,/usr/lib/zen-browser, etc.). If not present, adds the file. If present, verifies and appends autoconfig preferences (general.config.filename) without overwriting your setup. - Checks
config.js: Verifies ifconfig.jsexists. If not present, creates the file with the PWAish autoconfig handler (pwaish.cfg). If present, it checks whether an existingPWAish Standalone Autoconfig Handlerblock is already there. If found, it cleanly replaces/updates the block with the latest version; if not, it appends the PWAish code cleanly so your existingfx-autoconfigscripts and PWAish run side by side.
Tip
Updating PWAish: Because install.sh and install_autoconfig.sh are idempotent, you can re-run either installation script at any time to update your local files (popupwindow_desktop.py) or Zen Browser autoconfig setup to the latest version.
PWAish automatically detects which browser (firefox, zen-browser, floorp, or librewolf) invoked the install request and configures .desktop launchers to use that browser executable.
You can optionally override the browser used for PWA launches:
- Environment variable override: Set
PWAISH_BROWSERorPOPUPWINDOW_BROWSERwhen launching:
export PWAISH_BROWSER=floorp- System-wide override: Edit
/etc/webappinst/browserto containfirefox,zen-browser,floorp, orlibrewolf. - Per-user override: Create
~/.config/webappinst/browserwith your preferred browser executable.
To remove the native messaging host and clean up installed files:
curl -fsSL https://raw.githubusercontent.com/ADIOR-enigma/PWAish/main/uninstall.sh | bashOr from a local clone:
./uninstall.shTo remove or downgrade the PWAish autoconfig setup across Zen Browser directories:
curl -fsSL https://raw.githubusercontent.com/ADIOR-enigma/PWAish/main/PWA_for_Zen/uninstall_autoconfig.sh | sudo bashOr from a local clone:
sudo ./PWA_for_Zen/uninstall_autoconfig.shWhen running uninstall_autoconfig.sh, you can choose how to handle your configuration files:
--keep-fx(-k): Keep original fx-autoconfig. Preservesconfig-prefs.jsand your existingconfig.js, removing ONLY thePWAish Standalone Autoconfig Handlercode block. Ideal if you use customfx-autoconfiguserChrome modifications in Zen Browser.--remove-all(-r): Remove whole setup. Deletes bothconfig.jsanddefaults/pref/config-prefs.jscompletely from Zen Browser directories.
If run interactively without options, uninstall_autoconfig.sh presents a prompt allowing you to select whether to keep your original fx-autoconfig setup or remove the entire configuration.