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 adata-dpwa-installattribute or adpwa-installCSS 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_patternsanddpwa_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(); eventsdpwa:installable,dpwa:installedanddpwa:dismissedondocument, plus matchingdataLayerpushes when adataLayerexists.
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




Installation
- Upload the plugin files to
/wp-content/plugins/demfilz-pwa, or install through the WordPress plugins screen. - Activate the plugin. Your site is installable straight away with the default settings.
- Go to Settings > PWA. Check the Status panel, then set your app name, short name, icon and colours.
- 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-swand/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=1style URLs automatically. The service worker URL has no.jsextension 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.
-
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.
-
Use the shortcode
[dpwa_install_button text="Install app"], add the attributedata-dpwa-installto any link or button, or give a menu item the CSS classdpwa-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.
ContributorsTranslate “Demfilz PWA” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by 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.
