We often think of web apps and native apps as completely different things. For full coverage, we need to create a web app, a native Android app, a native iOS app, and perhaps native apps for other platforms too.
Progressive web applications are an attempt to consolidate development on the web platform, while bringing many of the features we associate with native apps to the web. Progressive web apps are intended to work reasonably well on all devices, to be installable, and, most importantly, to offer at least some of their full functionality while the user is offline.
Consider a user who needs a todo app. They Google for a suitable web app, load it up with their shopping list, and head off to the store. When they’re at the store, they try to consult their shopping list, but because the store has no WiFI and terrible mobile data connectivity, they can’t access it.
A native application is the obvious solution, but that means the developer now has to maintain a native app and a web app. Progressive web applications are an alternative way to solve the problem: allowing our shopper to access their shopping in the browser without a connection, and, even better, allowing them to install the app on their home screen.
The name “progressive web app” is a bit of a misnomer, because it brings to mind progressive enhancement, which is a key part of progressive web app creation, but is far from being the only requirement. Progressive web applications are expected to work on any browser on any device. That means developing for the least capable devices and progressively enhancing functionality where it can be used. And, of course, it means responsive design.
The ability to work offline is a key differentiator between native apps and web apps. Progressive web applications get around the problem with Service Workers and an offline cache. Service workers run in the browser regardless of whether there is an internet connection, and they can be used to cache the static assets of the site — its application shell — and user data from a connected session. Our todo app would cache the user’s lists so that they’re available while he’s doing his weekly shop even if he’s disconnected.
As you might expect, the adoption of progressive web apps is strongly encouraged by Google. Google wants to keep everyone on the web, and to be counted as a progressive web app, an app has to provide web-like features, including being linkable. Google supports offline-modes with service workers and the installation of progressive web apps on Android and its Chrome browser.
The news is less exciting where Apple’s devices are concerned. Safari offers no support for service workers or installation of progressive web applications. This isn’t surprising, since Apple is all-in on native applications, but the technologies are currently “under consideration” for inclusion in WebKit, so we’ll have to wait and see.
Progressive web applications could be a great step forward for smaller businesses offering online services. Developing a web app, an iOS app, an Android app, and so on, is expensive. That’s why many companies focus on one or the other, much to the chagrin of users of the competing platform. Consolidating around a single codebase that works on all platforms (except Apple’s) could be a game-changer.