There’s a certain community in tech that’s very vocal about their preference toward native apps. I share that sentiment, yet sometimes people take this idea too religiously.
First, what is a native app? It’s an app built using the native frameworks of a platform. For MacOS it could be SwiftUI. Such apps leverage the native platform’s interface, including windows, buttons, text areas, and everything else. They look right and familiar, and they behave this way. And most of the time, they’re smooth and fast. Historically, this has been the way to build applications for any platform.
Here are the main problems people point out in web apps.
Each Electron app basically carries a large part of Google Chrome in it and has to keep it running. Naturally, this isn’t great for memory consumption. Of course, Notion is a complex app by itself, but in comparison, the native app for Apple Notes usually takes around just 120Mb for me.
This particular problem is impossibly difficult to solve. In fact, you might save a bit of resources by simply running all the same apps in your browser, since it will at least be able to share some resources and offload tabs when they’re needed.
They might be slow
Electron apps are known to be slow. There are just too many levels, and JavaScrip is an interpreted language, not a compiled one, so by default, it will be orders of magnitude slower than an app written in Swift, Rust, or C++.
Still, in my experience, this isn’t necessarily the defining characteristic of a web app. Superhuman is insanely quick. Todoist is also seamless enough. While VS Code is sluggish, it still performs better than Atom did. Unfortunately, such apps are rare exceptions. Yes, the foundations are indeed slower, but at least some people are capable of writing quick web apps.
Feel free to share positive examples you’re aware of.
They have unique UI
Since web apps can’t just use the components provided by the operating system, they have to recreate everything from scratch. And this creates a lot of burden for developers and, I think, lowers the quality floor. Creating beautiful, compelling apps is possible, but it requires so much work. People building native apps get it all “for free”. In fact, this could be one of the reasons Apple still has such a vibrant ecosystem of great artisanal apps since developers can build most things out of nice ready-made components.
This also means users often must learn your app’s UI instead of relying on their muscle memory.
I’ve been focusing on desktop, but the same is happening on mobile, albeit at a smaller scale. Tools like React Native allow developers to build apps for iOS and Android. I’d say the “experience gap” is a bit larger on mobile. Notion famously started introducing more native components in their app, which instantly made it quicker and nicer to use. Still, their apps are largely web-based, which limits their functionality. For instance, it’s quite difficult to implement complete offline mode (Notion caches recently seen pages but nothing else).
Basecamp has a particularly good visual example of how this works, even though they use quite a “basic” approach.
Web apps are here to stay. There are fewer and fewer artisanal Mac apps these days, even though sometimes a jewel appears out of thin air, as it happened with Craft. Quite unusually, they have native apps for all of Apple’s platforms and a web app with the same functionality, which is useful for people on Windows, ChromeOS, or Linux.
Native apps do feel great. But they have their own challenges. The first and the most important one is making them cross-platform. If you’re a small developer, you might not have enough resources for this. And if you’re a big company, you don’t want to struggle to keep all your apps’ development in sync. Building a web app and wrapping it with Electron ends up being the most reasonable approach for most people.
So most of the time, our choice isn’t between native and web apps. You either have that useful app or you don’t because it didn’t make much sense for the developer. And while I like native apps and enjoy them when I have such an option, I’d rather have a web app than nothing.
If I use the app all the time, I’d want it to be at least quick (and ideally, native). But if I need it occasionally, I’d be OK with pretty much anything, as long as it’s useful and there’s nothing better. Also, we have seen evidence it’s humanly possible to build quick web apps. The fact most people don’t bother is a different question.