gadgetroid

joined 1 year ago
[–] gadgetroid@lemdro.id 2 points 1 month ago

I've been working on Duet, an open source Getting Things Done task app. It's mainly developed as a PWA, with a working Android client.

I primarily only intented to distribute it as a PWA, but there are way too many problems with this approach:

  • Since it's offline first, I had to find a suitable database that can be used locally. Browser level Implementation ended up being based on IndexedDB, and all was swell on Android, but it was dog shit slow on iOS because of a long standing bug in Safari that Apple has never fixed since iOS13
  • PWAs work great on Android - but only when accessed and "Installed" via Chrome - Firefox support is nil (for any platform TBH), and other Chromium browsers don't have the same featureset for PWAs that Chrome does. Like for example, WebAPKs, which add a ton of niceties like launcher shortcuts, or "open in app" when browsing a supported link in Chrome. WebAPK has been claimed by Google to be released "shortly" since 2022, but so far, only Samsung's browser support a similar feature set, and I don't think they're using the same WebAPK standard that Google uses on Chrome
  • Local notifications - there were proposals for support for this, but all of them fell through, and since Duet is offline first, I'd need to run a separate API server to facilitate push notifications (and also make it insanely difficult if someone wants to selfhost their own instance of Duet)
  • PWAs suffer from limited resources on Android - initial versions of Duet wasn't actually offline first, and communicated with a self-hostable API server, and the app itself was written in Vue. The scrolling and UI animations were extremely janky when Vue was managing deep reactivity for a bunch of things. In fact, if you run the PWA version of Voyager for Lemmy, you'll notice the same thing. This isn't there on iOS, and moving the PWA into an WKWebView or WebView instantly makes it more responsive without any changes in code at all.
  • File access - PWAs can't access the local filesystem. This is probably for the better, but I seem to recall there's a standard for it being discussed.

PWAs work well for any sort of situation where you have online experiences like shopping or the like - Walmart's Flipkart have a really good PWA built in React Native for Web and is often showcased as the best example of React Native and React Native Web by the RN team

The moment you want to make a slightly more complex app like a productivity app or similar, you'll find it very hard to work with a PWA and would want a native counterpart.

Not to mention that any sort of filesystem access pretty much requires you to have a hybrid app - either through React Native, or Expo, or Capacitor.