The State of Progressive Web Apps on GNU/Linux
Updated! (12/19/25) - Update command line arguments to check if browser is running.
A quick post on some changes I made to my Linux system.
PWAs have been around for many years now. Still, they have always been finicky, offering few advantages over bookmarks. For this reason, I never used them.
Today, I decided to investigate their use on my Linux laptop. My reasoning is that I prefer webmail over a local email client (there are not many/any good ones) and also that I would prefer to run Discord in my web browser. Discord uses electron which is essentially a whole web browser, so we could save some system resources by using the web browser I probably already have open. Finally, running Discord in my browser means I can run uBlock origin on it to filter out some garbage and make it run better (hopefully.) That’s not to say Legcord is bad by any means - it’s the best “just werks” Discord setup I have found, but let’s try it this way.
Brave, being a fork of Chrome, allows for “installation” of any page by creating a desktop entry. The said content of desktop entry is usually a call to a browser binary and passing an –app-id so that it can open whatever page was “installed.”
I discovered a few problems. For one, they would not open 100% consistently. Brave would open, then a window for the application, but the application/webpage itself would never load. This issue did not occur if the browser was already open, and if it was, no empty browser window was created, only the application/webpage.
Two windows opening when I only want one is kind of annoying, but considering these applications are really just (isolated?) instances of the web browser, this isn’t very surprising. This problem could be mitigated if Brave/Chrome kept the process alive when the last window closes. There is a toggle in Settings to “continue running background apps when Brave is closed” which I’m not even sure why exists - why would I want my “apps” to close if I close the browser? Aren’t they supposed to be their own thing?
I looked into what flags would allow me to start Brave minimized. There is –start-minimized which is included in the created desktop entry, but it does not work here nor when testing this flag in a terminal. Further Googling indicates Wayland doesn’t allow applications to request a minimized state on startup as X11 does. Wow! I’m too lazy to confirm this but it seems plausible.
The solution I came up with is the following desktop entry format:
Program:
sh
Command-line arguments:
-c 'pgrep -f "^/opt/brave.com/brave/brave$" >/dev/null || /usr/bin/brave-browser-stable & sleep 1; /usr/bin/brave-browser-stable --profile-directory=Default --app-id=magkoliahgffibhgfkmoealggombgknl
'
What this effectively does is check if Brave is already running, if not, start a Brave process, wait for 1 second, then call Brave again with –app-id specified. App ID will vary of course.
This sleep seems to fix the issue of pages not loading. If –start-minimized actually worked, I would put it right after the first brave command.
The only other thing left to fix is that website icons do not seem to carry over to the desktop entry. Why I do not know, as the emoticon is correctly shown in Brave’s dialog. I manually changed the icons to a generic email icon and Discord which were included in my desktop environment’s icon pack.

Conclusion
That’s about all. The apps work fine. I’m satisfied for now.