Title: Demfilz PWA
Author: demfilz
Published: <strong>October 13, 2026</strong>
Last modified: October 13, 2026

---

Search plugins

![](https://ps.w.org/demfilz-pwa/assets/banner-772x250.png?rev=3743709)

![](https://ps.w.org/demfilz-pwa/assets/icon-256x256.png?rev=3743709)

# Demfilz PWA

 By [demfilz](https://profiles.wordpress.org/demfilz/)

[Download](https://downloads.wordpress.org/plugin/demfilz-pwa.1.0.1.zip)

 * [Details](https://wordpress.org/plugins/demfilz-pwa/#description)
 * [Reviews](https://wordpress.org/plugins/demfilz-pwa/#reviews)
 *  [Installation](https://wordpress.org/plugins/demfilz-pwa/#installation)
 * [Development](https://wordpress.org/plugins/demfilz-pwa/#developers)

 [Support](https://wordpress.org/support/plugin/demfilz-pwa/)

## Description

Demfilz PWA makes your WordPress site a compliant Progressive Web App the moment
you activate it. It serves a web app manifest and a service worker from your site
root, generates the icon sizes browsers require, adds an offline page in your colours,
and offers visitors an “Install” banner so they can add your site to their home 
screen or desktop.

In plain terms: visitors can add your site to their home screen like an app. Pages
they have already seen keep opening when they lose signal, and everything else shows
a friendly offline page instead of a browser error.

**What you get**

 * **Web app manifest** with name, short name, description, start URL, scope, display
   mode, orientation, colours, language, categories, app shortcuts, screenshots 
   for the richer install dialog, and 192 / 512 pixel icons (plus maskable variants).
 * **Service worker** served at your site root, so the whole site is in scope. Pages
   are fetched from the network first with an offline fallback; scripts and styles
   are refreshed in the background; images and fonts are cached with sensible caps;
   old caches are cleared automatically when you change settings; a list of pages
   you choose is stored in advance.
 * **Offline page** in your theme and background colours with Retry and Home buttons
   and a list of the pages available offline, stored when the worker installs, with
   a built-in fallback if that ever fails.
 * **App icons** generated from any image in your media library (512, 192, 180 and
   maskable sizes, padded on your background colour). Falls back to your Site Icon(
   also given maskable variants), then to a neutral placeholder, so the site is 
   installable immediately.
 * **Install banner** (“Add to Home Screen”) shown after a configurable number of
   visits, with a snooze period. iPhone and iPad visitors get Share > Add to Home
   Screen instructions, since iOS has no install prompt.
 * **Install button** shortcode `[dpwa_install_button]`, plus a `data-dpwa-install`
   attribute or a `dpwa-install` CSS class (handy for menu items) for your own buttons.
 * **Offline indicator** while the connection is down, and an optional “site updated,
   reload” notice.
 * **Diagnostics** on the settings screen: HTTPS, manifest, icons, service worker,
   offline page, home page tags, what anonymous visitors receive and registration
   are checked from your browser, and a Site Health test reports PWA readiness.
 * **Safe by design**: pages served to logged-in users, the WooCommerce cart, checkout
   and account pages, search results, previews, admin, REST and AJAX requests are
   never stored. Non-GET requests are never touched.

**Compatible with WooCommerce** (cart, checkout and account pages are recognised
automatically), page builders (edit modes are excluded from caching) and the common
caching and minifying plugins (the front-end script is excluded from combine and
minify bundles).

**Requirements**

Your site must be served over HTTPS for browsers to register the service worker 
and offer installation (localhost and 127.0.0.1 are exempt for testing). Your theme
must be mobile-friendly, which every modern theme is; the Status panel checks this
for you.

**Developer hooks**

 * `dpwa_manifest` – filter the manifest array.
 * `dpwa_service_worker_config` – filter the worker configuration (bypass and no-
   store patterns, cache limits, precache list).
 * `dpwa_bypass_patterns` and `dpwa_no_store_patterns` – adjust the URL fragments
   the worker leaves alone or never stores.
 * `dpwa_script_config` – filter the front-end configuration (banner, strings).
 * `dpwa_should_output` – switch the manifest link, meta tags and script off for
   a request.
 * JavaScript: `window.dpwa.canInstall()`, `window.dpwa.promptInstall()`, `window.
   dpwa.showBanner()`; events `dpwa:installable`, `dpwa:installed` and `dpwa:dismissed`
   on `document`, plus matching `dataLayer` pushes when a `dataLayer` exists.

### Privacy

This plugin does not connect to any external service and sends no data anywhere.
The service worker stores copies of pages, scripts, styles, images and fonts in 
the visitor’s own browser cache, subject to the limits on the settings screen. If
your theme already loads Google Fonts, the worker keeps those font files in the 
same browser cache so they render offline; it never requests them itself. The install
banner remembers the visit count, dismissal time and installed state in the visitor’s
browser storage (localStorage) so it does not nag. No cookies are set.

## Screenshots

[⌊The Status panel on Settings > PWA with every check passing.⌉⌊The Status panel
on Settings > PWA with every check passing.⌉[

The Status panel on Settings > PWA with every check passing.

[⌊App identity and appearance settings, with the icon picker.⌉⌊App identity and 
appearance settings, with the icon picker.⌉[

App identity and appearance settings, with the icon picker.

[⌊The install banner on a phone.⌉⌊The install banner on a phone.⌉[

The install banner on a phone.

[⌊The offline page in the site's colours.⌉⌊The offline page in the site's colours
.⌉[

The offline page in the site’s colours.

## Installation

 1. Upload the plugin files to `/wp-content/plugins/demfilz-pwa`, or install through
    the WordPress plugins screen.
 2. Activate the plugin. Your site is installable straight away with the default settings.
 3. Go to Settings > PWA. Check the Status panel, then set your app name, short name,
    icon and colours.
 4. Open your site in Chrome, Edge or Samsung Internet on a phone or desktop: after
    you have interacted with a page the browser offers to install it, or the install
    banner appears after the configured number of page views. On iPhone and iPad the
    banner shows Add to Home Screen instructions instead.

## FAQ

### Does my site need HTTPS?

Yes. Browsers only register service workers and offer installation on secure origins.
The Status panel and Site Health tell you if your site is not served over HTTPS.
Localhost and 127.0.0.1 are exempt, which is handy for testing.

### Where are the manifest and the service worker served from?

From your site root through WordPress: `/dpwa-manifest.webmanifest`, `/dpwa-sw` 
and `/dpwa-offline`. No files are written to your document root and no .htaccess
changes are made. With plain permalinks the plugin switches to `/?dpwa_manifest=
1` style URLs automatically. The service worker URL has no `.js` extension on purpose,
because some nginx configurations return 404 for missing static files instead of
passing the request to WordPress.

### Will logged-in users or WooCommerce customers see cached pages?

Personal pages are never stored. Responses that WordPress or WooCommerce mark as
private or no-cache (every page served to a logged-in user, the cart, checkout and
account pages) never enter the cache, and neither do search results, previews or
anything under wp-admin. Form submissions and other non-GET requests are never handled
by the worker at all. Public pages are fetched from the network first; the stored
public copy is used only when the network fails or takes longer than the timeout
in the settings (8 seconds by default), so on a very slow connection a visitor may
briefly see the public version of a public page.

### Why do I see the offline page for every page when I test?

Pages served to logged-in users are never stored, by design, so testing while logged
in to WordPress shows the offline page for everything except pages stored in advance.
Test in a private window, or log out first.

### Which image should I use for the icon?

A square PNG or JPEG of at least 512 x 512 pixels with your logo or symbol filling
most of the canvas. The plugin generates the 512, 192 and 180 pixel sizes and the
maskable variants (your icon at 80% on the background colour). If you do not choose
one, the Site Icon from Settings > General is used, and failing that a neutral placeholder.

### Why does the install banner not appear?

The banner only appears when the browser reports that the site is installable, which
needs HTTPS, the manifest, the icons and a registered service worker. Check the 
Status panel. Only Chrome, Edge and Samsung Internet report installability, and 
only after the visitor has tapped or clicked something on the page; Firefox never
does, and desktop Safari offers File > Add to Dock without any signal to the page.
The banner also waits for the configured number of page views and delay, is hidden
once the app is installed, and stays hidden for the snooze period after a visitor
chooses “Not now”. Safari on iOS has no install prompt, so iPhone and iPad visitors
get Add to Home Screen instructions instead.

### Can I publish the app to Google Play or the Microsoft Store?

Yes, with PWABuilder (pwabuilder.com): give it your site address and it packages
the manifest and service worker into store-ready apps. Add screenshots and categories
under Settings > PWA first, as the stores use them for the listing.

### I changed my theme or content. Do visitors get the new version?

Yes. Pages are network-first, so online visitors always receive fresh HTML. Scripts
and styles are refreshed in the background and WordPress adds version query strings
when plugins or themes update. Saving the PWA settings, or pressing Clear caches,
publishes a new service worker version that drops every old cache on the visitor’s
next visit.

### How do I add an install button to my menu or page?

Use the shortcode `[dpwa_install_button text="Install app"]`, add the attribute `
data-dpwa-install` to any link or button, or give a menu item the CSS class `dpwa-
install` (Appearance > Menus > Screen Options > CSS Classes). The element stays 
hidden until the browser can install the site; on iOS it opens the Add to Home Screen
instructions.

### What happens when I deactivate the plugin?

The manifest, service worker and offline page URLs stop responding. Browsers unregister
a service worker whose script URL returns a 404 at their next update check, so visitors
drop back to plain browser behaviour on their own. Uninstalling also removes the
settings and the generated icon files.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Demfilz PWA” is open source software. The following people have contributed to 
this plugin.

Contributors

 *   [ demfilz ](https://profiles.wordpress.org/demfilz/)

[Translate “Demfilz PWA” into your language.](https://translate.wordpress.org/projects/wp-plugins/demfilz-pwa)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/demfilz-pwa/), check
out the [SVN repository](https://plugins.svn.wordpress.org/demfilz-pwa/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/demfilz-pwa/) by
[RSS](https://plugins.trac.wordpress.org/log/demfilz-pwa/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.1

 * The offline page’s stylesheet and script are registered and printed through the
   WordPress style and script APIs, and its Retry button no longer uses inline JavaScript.
 * The service worker’s last-resort offline response is plain HTML without inline
   styles.

#### 1.0.0

 * Initial release: manifest, service worker with offline page, icon generation,
   install banner with iOS instructions, install button shortcode, offline indicator,
   update notice, diagnostics panel, Site Health test, WooCommerce and page-builder
   aware caching rules.

## Meta

 *  Version **1.0.1**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.6 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.2 or higher **
 * Tags
 * [add to home screen](https://wordpress.org/plugins/tags/add-to-home-screen/)[offline](https://wordpress.org/plugins/tags/offline/)
   [progressive web app](https://wordpress.org/plugins/tags/progressive-web-app/)
   [pwa](https://wordpress.org/plugins/tags/pwa/)[service worker](https://wordpress.org/plugins/tags/service-worker/)
 *  [Advanced View](https://wordpress.org/plugins/demfilz-pwa/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/demfilz-pwa/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/demfilz-pwa/reviews/)

## Contributors

 *   [ demfilz ](https://profiles.wordpress.org/demfilz/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/demfilz-pwa/)