Skip to content

How the Installable App Works

An installable app is not a build or an upload. It is three files your site serves and a browser that reads them. This page follows that chain from end to end, because every setting on every tab plugs into one of these steps.

Saving any configuration tab writes an app manifest into your site root and links it from every page. It carries the name, the short name, the two colours, the display mode, the scope, the start URL and the icons.

The App Information section of the General tab

That file is what a browser reads to decide whether the site is installable at all, and what to show in the install dialog when it is. Everything on the General tab and the App Icons tab ends up in it.

Step 2: A service worker registers in the visitor’s browser

Section titled “Step 2: A service worker registers in the visitor’s browser”

On the first page view the plugin registers a service worker. It is a small script the browser keeps running beside your site, and it is the piece that makes the app work offline.

The Offline tab

The worker takes control on the second page view, not the first. That is a browser rule, not a plugin setting, and it is why a brand new visitor is not yet covered by the cache.

From then on, each page the visitor loads is fetched from your server and a copy is stored on their device. The default strategy asks your server first and only reaches for the copy when that fails, so nobody is shown stale content while they are online.

A product page served from the cache with the network switched off

That screenshot is a real product page with the connection cut. It looks like an ordinary page because that is the whole point: offline browsing is invisible when it works.

Cart, checkout and account pages are excluded by default, and should stay that way. Those pages are different for every visitor, and serving one from a cache shows people stale totals or, on a shared device, somebody else’s session.

Once the manifest, the icons and the service worker are all in place, the browser decides the site is installable and offers it. What that looks like depends on the platform.

  • Android and desktop Chrome, Edge, Opera and Samsung Internet fire an install event. The plugin catches it and shows your own banner instead of the browser’s menu item.
  • iPhone and iPad have no install event at all. The banner switches to guidance: tap Share, then Add to Home Screen.
  • Firefox installs on Android and not on desktop.

The install banner on a storefront page

Pressing Install hands over to the browser, which asks its own question. That dialog is the browser’s, so its wording and buttons are outside the plugin’s control.

The Chrome install dialog, naming the app and its site

On an iPhone the banner cannot offer that, because Safari has no install event to hook.

The install banner on an iPhone, with Add to Home Screen guidance

The banner’s wording, its button label and all four of its colours are on the Banners tab. There is also an [ddwppwa_install_button] shortcode for putting the same prompt inside a page.

Tapping the icon opens your site at the Start URL, in the Display Mode you chose, with the splash screen painted in your background colour. Standalone is the mode that hides the address bar and makes it feel like an app.

A product page inside the installed app, with the tab bar along the bottom

On a phone, which is where most people will open it, the same thing looks like this. No address bar, no browser chrome, and the tabs sit where a thumb reaches them.

The shop inside the installed app on an Android phone

The shop inside the installed app on an iPhone

The tab bar in those screenshots is the App Experience layer, and it is the one part of this chain that only ever runs inside the installed app. In an ordinary browser tab the same page draws none of it.

Almost nothing, and that is the design. There is no login, no account, no download and no store. The scope decides which addresses count as part of the app: anything outside it opens in a normal browser tab instead.

The Scope field on the General tab