The Native App vs Progressive Web App Debate is Completely Flawed
Every year, companies and developers look at the state of mobile web technology and Progressive Web Apps (PWAs), and ask the question: given recent advancements in mobile web technology, do we even need to bother with building native iOS and Android apps for the app stores, or can we just ship a mobile-enabled web app and be done with it?
Trust me, I completely get it. It’s no secret that native iOS and Android development can be painful. The complexity requires the use of difficult tooling and dealing with gatekeeping companies that run each app store and have their own approval and update processes that often feel like a big step back from the freedom and agility of deploying web apps.
This challenge has led to this becoming one of the most common discussions I have with developers and architects looking to streamline their approach to mobile. But what if I told you there was an easy way to put this debate to rest and get the benefits of both approaches all at once, and that this whole debate is completely flawed at the core?
It’s all about your users
Before even embarking on this discussion, serious thought has to be put into user and customer acquisition for your app. Are users going to be coming primarily through search engines indexing content with high levels of traffic? Or are users pushed to find and install an app in the app stores?
If users are finding your product through search engines, then it’s highly likely you’ll need a strong mobile web experience, lest all that traffic hits a big wall when users are required to download an app in the app store, completely destroying funnel conversion rates. This makes the decision as to whether to build a Progressive Web App an obvious yes because products like this live and die by search engine ranking and traffic.
For apps that don’t rely on search engine traffic, and where pushing the user to the app stores is okay, the decision is more complicated. Would a mobile app provide a duplicated experience of an existing web app? Then the cost of building a net-new codebase for mobile needs to be weighed with advancements in mobile development that would enable either bringing that existing web app to mobile or building one code-base for mobile and web.
A False Dichotomy
Many developers mistakenly believe that the decision to build a Progressive Web App or a native mobile app is an either-or. Thankfully, with advances in mobile development and web technology, you can now build and deploy a Progressive Web App and native iOS and Android apps with the same code, but you have to be deliberate about the technology stack you pick up front.
Capacitor is the leading technology stack for this need because it lets you build an iOS, Android, and Progressive Web App all with the same code. You can even transform an existing web app and mobile-enable it by simply including the Capacitor cross-platform JS library. This means your app runs pretty much everywhere your users are and enables targeting search engine and traditional app store traffic with the same app on day one.
Unfortunately, this capability is not available when using other technologies. Traditional native (Swift/ObjC for iOS, Java/Kotlin for Android) obviously can’t produce a web app with the same code. React Native targets iOS and Android but React web code won’t just work without significant modification and avoiding web technologies like CSS. Flutter has limited web support but requires significant code bundle size and avoiding standard web technologies like CSS, and is not appropriate for apps that must load quickly and rank well on search engines such as Google.
Capacitor, in contrast, takes a PWA-first approach, where your web app is extended with powerful native functionality when running natively on iOS and Android, but can happily scale back to use browser APIs when running on the web as a PWA. There are no limitations to what a Capacitor app can do on iOS and Android because you’re building a real native app with full access to iOS/Android SDKs and APIs, so an app can progressively enhance itself when running natively. Capacitor’s large plugin ecosystem enables JS developers to quickly add native functionality without needing to know native development.
Changing the Discussion
Whenever I explain the above to those that ask me about native iOS/Android vs web/PWA, I often see their eyes light up when they realize the industry has been looking at this debate completely incorrectly. We can have it both ways, but we need to make some deliberate decisions up front. Luckily, that decision primarily means to invest in standard web technology and use Capacitor to extend the web app with native functionality and enable it to port between iOS, Android, and web with a single codebase.
With this approach, we can build one app and deploy it where our users are, whether that’s on the web to take full advantage of search engine traffic, or as an installed iOS/Android app that needs additional native functionality. We designed Capacitor deliberately to lead this revolution in app development and make building apps faster and cheaper, and put the control back into the developer’s hands.