PWA vs Electron: Which Should You Actually Ship?
PWAs are lighter and Electron is more powerful, but that framing misses the real decision. Here's how to choose between them based on what your app actually needs to do, not which one is trendier.
Every few years someone declares that Progressive Web Apps have finally killed Electron. Then you open Slack, Discord, VS Code, Figma, Notion, and 1Password, all Electron, and wonder what happened.
The truth is less dramatic than either camp wants it to be. PWAs and Electron solve overlapping problems with very different tradeoffs, and the right answer depends entirely on what your app needs to do on the user's machine. This post cuts through the tribalism and gives you a decision you can actually make.
The one-sentence version
A PWA is your website with a nicer window. An Electron app is a native program that happens to be built with web tech. Everything else follows from that.
Where PWAs win
Let's be fair to PWAs, because for a lot of apps they're genuinely the right call.
- Size and speed. Most PWAs are under a megabyte. They install nearly instantly and sip memory. It's hard to find an Electron app under 50MB.
- Zero extra build pipeline. You add a manifest and a service worker to the web app you already have. No installers, no code signing, no per-platform builds.
- Cross-platform for free. Because it runs in the browser engine, a PWA works anywhere there's a modern browser, including Android and (with caveats) iOS.
- Security by default. A PWA lives inside the browser's sandbox and its HTTPS guarantees. Less surface area, less for you to secure by hand.
If your app is fundamentally a web experience that users would like to launch from their dock, a PWA is the pragmatic choice. Don't over-engineer it.
Where PWAs hit a wall
The browser sandbox that makes PWAs safe is also a hard ceiling. A PWA cannot:
- Run reliably in the background after the window closes, or live in the system tray
- Register global keyboard shortcuts that work when your app isn't focused
- Get full read/write access to the file system, or watch a folder for changes
- Detect or control other applications on the machine
- Show truly native notifications with inline replies when the app is closed
- Tie a license to a specific device via hardware identifiers
- Print silently, run in true kiosk mode, or use a frameless/transparent custom window
- Get listed in the Mac App Store or Microsoft Store as a first-class app
Some of these have partial, experimental APIs in some browsers on some platforms. But "works in Chrome on Windows, missing in Safari on Mac" is not a foundation you want to ship a product on.
Where Electron wins
Electron ships its own Chromium and Node.js runtime, so your app is a full desktop citizen. That's the whole point. It gets:
- True OS integration: tray, startup launch, global shortcuts, native menus.
- Full file system and hardware access, including device fingerprinting for licensing.
- The ability to reach outside itself, detecting the focused app, controlling other windows, bridging to local hardware.
- Consistent rendering everywhere, because it bundles the same Chromium on every platform instead of relying on whatever WebView the OS provides.
- A real path into the app stores, with code-signed, notarized installers.
The cost is the flip side of the benefit: you're shipping a browser inside your app, so it's larger, and you now own a real build-and-distribution pipeline (signing, notarization, auto-updates, per-platform installers).
| Capability | PWA | Electron |
|---|---|---|
| Runs after the tab is closed (tray / background) | ||
| Launch at login | ||
| Full filesystem access | Scoped picker only | |
| Global keyboard shortcuts | ||
| Mac App Store / Microsoft Store listing | ||
| Zero install friction (it's just a URL) | Installer download |
The decision, made simple
Don't argue architecture in the abstract. Run down this list:
Ship a PWA if:
- Your app is mostly UI and network calls
- You don't need background execution, global shortcuts, or file system access
- You want the lightest possible footprint and no build pipeline
- You care more about Android/iOS reach than deep desktop integration
Ship an Electron app if:
- You need any of: tray presence, launch-at-startup, global hotkeys, real file access, app-focus detection, device licensing, silent printing, kiosk mode, or custom window chrome
- You want to be in the Mac App Store or Microsoft Store
- You need consistent rendering and behavior across every OS
- Your product's value depends on it feeling like it lives on the computer, not in a tab
If even one item on the Electron list is a hard requirement, the PWA can't do it. That single requirement usually makes the decision for you.
"But I don't want to own an Electron pipeline"
This is the real reason a lot of teams settle for a PWA even when they need more. The features aren't the blocker, the operational work is: learning Electron, setting up code signing on two platforms, wiring auto-updates, building installers for Windows, macOS, and Linux, and submitting to two app stores.
That's exactly the work Deskifier removes. You keep your existing web app and point Deskifier at its URL. It produces signed, notarized installers for every platform, wires up auto-updates so the app refreshes when you deploy, and gives you store-ready builds, along with the native capabilities (notifications, deep links, global shortcuts, file access, a local bridge to your web app) that a PWA can't reach.
deskifier build --url app.yoursaas.com --store mac,windows
So don't let the pipeline be the thing that decides for you. Work out whether you actually need native power. If you don't, a PWA is a great answer. If you do, wrap your web app and let a platform carry the signing and updates so that part never lands on your plate.
TL;DR
PWAs are lighter, safer, and simpler, and for a web-shaped app, they're the right choice. Electron is heavier but breaks out of the browser sandbox, which is the entire reason to ship a desktop app in the first place. Choose based on the capability list above, not the hype cycle. And if the only thing holding you back from Electron is the distribution grind, that part is solved.