From 8d033e16f8d8fdbd6b82cdb88634e7b11dce8883 Mon Sep 17 00:00:00 2001 From: Enas Gaber Date: Mon, 16 Mar 2026 12:09:47 +0100 Subject: [PATCH 01/16] Service worker and PWA Updates guide --- .../progressive-web-app.md | 4 + .../service-worker.md | 125 ++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md index a47183692f3..4c6260aee29 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md @@ -107,6 +107,10 @@ Next to that, it is possible to force a profile by providing the profile name in When forcing a specific profile on a cloud deployment, it can be necessary to first clear the browser cache. +## Managing PWA Updates + +To learn more about the Service Worker life cycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/service-worker). + ## Advanced Settings See the sections below for information on advanced settings. diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md new file mode 100644 index 00000000000..eb0888914cb --- /dev/null +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -0,0 +1,125 @@ +--- +title: "Service Worker and PWA Updates" +url: /refguide/mobile/introduction-to-mobile-technologies/service-worker +weight: 20 +--- + +## Introduction + +A Service Worker is a powerful type of web worker, essentially a JavaScript file that runs in the background, separate from your main web page. It can control pages within its [scope](#scope), and acts as a proxy, sitting between your PWA and the network. + +Its primary role is to intercept network requests made by your PWA, allowing it to decide whether to fetch resources from the network or retrieve them from the cache. This interception capability is crucial for providing robust offline experiences, enabling your PWA to function even when the user has no network connectivity. + +## Service worker Scope {#scope} + +A service worker’s scope is determined by the location of its JavaScript file on the web server. + +If a service worker runs on a page located at /subdir/index.html, and is located at /subdir/sw.js, the service worker's scope is /subdir/ + +Scope limits which pages are controlled by a service worker, not which requests it can intercept. Once a service worker controls a page, it can intercept any network request that page makes, including requests to cross-origin resources. + +## The Service Worker Life Cycle + +Understanding the Service Worker life cycle is key to understand how updates to your Mendix PWA are handled. A Service Worker goes through several distinct phases: + +1. Registration: + This is the initial step. The browser downloads the Service Worker file. If the code contains syntax errors, registration fails, and the Service Worker is discarded. +2. Installation + During this phase, the Service Worker typically caches static assets your PWA needs to function offline. If all assets are successfully precached, the installation succeeds. If installation fails the service worker is discarded. + Once installed: + - It becomes activated immediately if no other Service Worker is currently controlling the page. + - If there is already an active Service Worker, the new one will be installed but enters a waiting state. + The "waiting" state, ensures that updates to your application are delivered smoothly and without interrupting your users' current interactions. +3. Activation: + Once installed, the Service Worker enters the activating state and then becomes activated. An activated Service Worker takes control of pages within its scope, that means it is ready to intercept requests. +4. Redundant: + A Service Worker can become redundant if a new version replaces it, or if it fails to install. + +## Service Worker Update + +When you deploy a new version of your Mendix PWA, a new Service Worker file is generated with updated caching strategies and assets list. +The browser detects this update and initiates a new life cycle for the updated Service Worker. + +1. New Service worker installation: The new Service Worker starts to install and cache assets. +2. Waiting state: Once the new Service Worker was successfully installed, it enters a waiting state. The old Service Worker remains active and in control of your PWA. +3. Activation of the new service worker: The new Service Worker will only activate and take control when all instances of your PWA (all open tabs or windows) that are controlled by the old Service Worker are closed. + +## Detecting and Handling Updates in Your PWA + +The browser's ServiceWorkerRegistration interface provides properties and methods to monitor its state and detect updates. Starting from Mendix 11.9.0, a client API is available to skip the waiting phase and immediately activates the new service worker version. +You can implement a custom update mechanism to provide users with a clear notifications and an option to update to the latest version of your app without requiring them to close all tabs. + +Implementation Steps: + +1. Listening for Service Worker updates +Create a JavaScript Action to Listen for Service Worker Updates. This action should run when your application starts up to monitor for available updates. + +```javascript +export async function JS_ListenForPWAUpdates() { + if (!('serviceWorker' in navigator)) { + console.warn('Service Workers are not supported in this browser.'); + return; + } + + try { + const registration = await navigator.serviceWorker.getRegistration(); + + if (registration) { + + if (registration.waiting) { + console.log('An update is already available and waiting. Notify the user.'); + // Show a confirmation dialog or call your custom update flow + // to notify the user that an update is available + } + + // Detect when a new Service Worker update is found + registration.addEventListener('updatefound', () => { + const newWorker = registration.installing; + + if (newWorker) { + // Listen for state changes in the new Service Worker + newWorker.addEventListener('statechange', () => { + // When the new Service Worker becomes 'installed', it means precaching is complete and it is ready to take control. + // It enters the waiting state because an existing controller (old SW) is active. + if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { + console.log('A new update is available. Notify the user.'); + // Show a confirmation dialog or implement your custom update UI + // to notify the user that an update is available + } + }); + } + }); + } + } catch (error) { + console.error('Error setting up Service Worker update listener:', error); + } +} +``` + +2. Notifying users +Implement a custom flow that prompts users to confirm updates when a new version becomes available. This avoids interrupting users during critical operations. + +3. Activating the new Service Worker +When the user confirms the update, use the Client API `skipWaiting()` to activate the new Service Worker. + +```javascript +import { skipWaiting } from "mx-api/pwa"; + +/** + * @returns {Promise} A promise that resolves to true if the update was successfully activated and page reloaded, false otherwise. + */ +export async function JS_ActivatePWAUpdate() { + const activated = await skipWaiting(); + + if (activated) { + console.log("New service worker activated and controlling the page."); + + return true; + } else { + console.warn("No waiting Service Worker found or activation failed via Mendix API."); + return false; + } +} +``` + +4. Reload the page to load the new app version with the newly activated Service Worker, providing the user with the latest features and fixes. From 1faae4a87b6f99ac9f3be8faabe5ffc99c357847 Mon Sep 17 00:00:00 2001 From: Enas Gaber Date: Mon, 16 Mar 2026 17:27:12 +0100 Subject: [PATCH 02/16] Some improvements --- .../progressive-web-app.md | 2 +- .../service-worker.md | 83 ++++++++++--------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md index 4c6260aee29..110c47c3803 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md @@ -109,7 +109,7 @@ When forcing a specific profile on a cloud deployment, it can be necessary to fi ## Managing PWA Updates -To learn more about the Service Worker life cycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/service-worker). +To learn more about the service worker life cycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/service-worker). ## Advanced Settings diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index eb0888914cb..cfab3f305d6 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -6,58 +6,58 @@ weight: 20 ## Introduction -A Service Worker is a powerful type of web worker, essentially a JavaScript file that runs in the background, separate from your main web page. It can control pages within its [scope](#scope), and acts as a proxy, sitting between your PWA and the network. +A service worker is a specialized type of web worker, essentially a JavaScript file that runs in the background, separate from your main web page. It can control pages within its [scope](#scope), and acts as a proxy between your PWA and the network. -Its primary role is to intercept network requests made by your PWA, allowing it to decide whether to fetch resources from the network or retrieve them from the cache. This interception capability is crucial for providing robust offline experiences, enabling your PWA to function even when the user has no network connectivity. +Its primary role is to intercept network requests made by your PWA and decide whether to fetch resources from the network or serve them from the cache. This interception capability is crucial for providing robust offline experiences, enabling your PWA to function even when the user has no network connectivity. ## Service worker Scope {#scope} A service worker’s scope is determined by the location of its JavaScript file on the web server. -If a service worker runs on a page located at /subdir/index.html, and is located at /subdir/sw.js, the service worker's scope is /subdir/ +For example, if a service worker runs on a page located at /subdir/index.html, and is located at /subdir/sw.js, the service worker's scope is /subdir/ Scope limits which pages are controlled by a service worker, not which requests it can intercept. Once a service worker controls a page, it can intercept any network request that page makes, including requests to cross-origin resources. -## The Service Worker Life Cycle +## The service worker Lifecycle -Understanding the Service Worker life cycle is key to understand how updates to your Mendix PWA are handled. A Service Worker goes through several distinct phases: +Understanding the service worker life cycle is key to understand how updates to your Mendix PWA are handled. A service worker goes through several distinct phases: 1. Registration: - This is the initial step. The browser downloads the Service Worker file. If the code contains syntax errors, registration fails, and the Service Worker is discarded. + This is the initial step. The browser downloads the service worker file. If the code contains syntax errors, registration fails and the service worker is discarded. 2. Installation - During this phase, the Service Worker typically caches static assets your PWA needs to function offline. If all assets are successfully precached, the installation succeeds. If installation fails the service worker is discarded. + During this phase, the service worker typically caches static assets your PWA needs to function offline. If all assets are successfully precached, the installation succeeds. If installation fails, the service worker is discarded. Once installed: - - It becomes activated immediately if no other Service Worker is currently controlling the page. - - If there is already an active Service Worker, the new one will be installed but enters a waiting state. + - It becomes activated immediately if no other service worker is currently controlling the page. + - If there is already an active service worker, the new one will be installed but enters a waiting state. The "waiting" state, ensures that updates to your application are delivered smoothly and without interrupting your users' current interactions. 3. Activation: - Once installed, the Service Worker enters the activating state and then becomes activated. An activated Service Worker takes control of pages within its scope, that means it is ready to intercept requests. + Once installed, the service worker enters the activating state and then becomes activated. An activated service worker takes control of pages within its scope, that means it is ready to intercept requests. 4. Redundant: - A Service Worker can become redundant if a new version replaces it, or if it fails to install. + A service worker can become redundant if a new version replaces it, or if it fails to install. -## Service Worker Update +## service worker Update -When you deploy a new version of your Mendix PWA, a new Service Worker file is generated with updated caching strategies and assets list. -The browser detects this update and initiates a new life cycle for the updated Service Worker. +When you deploy a new version of your Mendix PWA, a new service worker file is generated with updated caching strategies and assets list. +The browser detects this update and initiates a new lifecycle for the updated service worker. -1. New Service worker installation: The new Service Worker starts to install and cache assets. -2. Waiting state: Once the new Service Worker was successfully installed, it enters a waiting state. The old Service Worker remains active and in control of your PWA. -3. Activation of the new service worker: The new Service Worker will only activate and take control when all instances of your PWA (all open tabs or windows) that are controlled by the old Service Worker are closed. +1. New service worker installation: The new service worker starts to install and cache assets. +2. Waiting state: Once the new service worker is successfully installed, it enters a waiting state. The old service worker remains active and in control of your PWA. +3. Activation of the new service worker: The new service worker will only activate when all instances of your PWA (all open tabs or windows) that are controlled by the old service worker are closed. ## Detecting and Handling Updates in Your PWA -The browser's ServiceWorkerRegistration interface provides properties and methods to monitor its state and detect updates. Starting from Mendix 11.9.0, a client API is available to skip the waiting phase and immediately activates the new service worker version. -You can implement a custom update mechanism to provide users with a clear notifications and an option to update to the latest version of your app without requiring them to close all tabs. +The browser's `ServiceWorkerRegistration` interface provides properties and methods to monitor its state and detect updates. Starting from Mendix 11.9.0, a client API is available to skip the waiting phase and immediately activate the new service worker version. +You can implement a custom update mechanism to notify users when a new version is available and allow them to update the application without closing all tabs/windows. Implementation Steps: -1. Listening for Service Worker updates -Create a JavaScript Action to Listen for Service Worker Updates. This action should run when your application starts up to monitor for available updates. +1. Listen for service worker updates +Create a JavaScript Action to Listen for service worker updates. This action should run when your application starts up, for example, calling the JavaScript action via nanoflow that triggers by [Events](/appstore/widgets/events/) widget ```javascript export async function JS_ListenForPWAUpdates() { if (!('serviceWorker' in navigator)) { - console.warn('Service Workers are not supported in this browser.'); + console.warn('service workers are not supported in this browser.'); return; } @@ -65,22 +65,15 @@ export async function JS_ListenForPWAUpdates() { const registration = await navigator.serviceWorker.getRegistration(); if (registration) { - - if (registration.waiting) { - console.log('An update is already available and waiting. Notify the user.'); - // Show a confirmation dialog or call your custom update flow - // to notify the user that an update is available - } - - // Detect when a new Service Worker update is found + + // Detect when a new service worker update is found registration.addEventListener('updatefound', () => { const newWorker = registration.installing; if (newWorker) { - // Listen for state changes in the new Service Worker + // Listen for state changes in the new service worker newWorker.addEventListener('statechange', () => { - // When the new Service Worker becomes 'installed', it means precaching is complete and it is ready to take control. - // It enters the waiting state because an existing controller (old SW) is active. + // New service worker is installed and ready, but waiting because an existing service worker is active if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { console.log('A new update is available. Notify the user.'); // Show a confirmation dialog or implement your custom update UI @@ -89,18 +82,21 @@ export async function JS_ListenForPWAUpdates() { }); } }); + + if (registration.waiting) { + console.log('An update is already available and waiting. Notify the user.'); + // Show a confirmation dialog or call your custom update flow + // to notify the user that an update is available + } } } catch (error) { - console.error('Error setting up Service Worker update listener:', error); + console.error('Error setting up service worker update listener:', error); } } ``` -2. Notifying users -Implement a custom flow that prompts users to confirm updates when a new version becomes available. This avoids interrupting users during critical operations. - -3. Activating the new Service Worker -When the user confirms the update, use the Client API `skipWaiting()` to activate the new Service Worker. +2. Create JavaScript Action to activate the new service worker +When the user confirms the update, use the Client API `skipWaiting()` to activate the new service worker. ```javascript import { skipWaiting } from "mx-api/pwa"; @@ -116,10 +112,15 @@ export async function JS_ActivatePWAUpdate() { return true; } else { - console.warn("No waiting Service Worker found or activation failed via Mendix API."); + console.warn("No waiting service worker found or activation failed via Mendix API."); return false; } } ``` -4. Reload the page to load the new app version with the newly activated Service Worker, providing the user with the latest features and fixes. +3. Notifying users +To avoid interrupting users during critical operations, it is recommended to notify them when an update becomes available. +For example, you can implement a nanoflow that prompts users to confirm the update when a new version is detected. If the user confirms, the nanoflow can call JS_ActivatePWAUpdate to update. +This nanoflow can be passed as a parameter to `JS_ListenForPWAUpdates`, which will invoke it when an update is detected. + +4. Reload the app, or ask users to reload all open tabs or windows to ensure the application loads with the newly activated service worker. From fcea0e52be9d3cf60e98360672483776effda531 Mon Sep 17 00:00:00 2001 From: Enas Gaber Date: Mon, 16 Mar 2026 17:28:33 +0100 Subject: [PATCH 03/16] Some improvements --- .../introduction-to-mobile-technologies/service-worker.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index cfab3f305d6..090acb0c93b 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -10,7 +10,7 @@ A service worker is a specialized type of web worker, essentially a JavaScript f Its primary role is to intercept network requests made by your PWA and decide whether to fetch resources from the network or serve them from the cache. This interception capability is crucial for providing robust offline experiences, enabling your PWA to function even when the user has no network connectivity. -## Service worker Scope {#scope} +## Service Worker Scope {#scope} A service worker’s scope is determined by the location of its JavaScript file on the web server. @@ -18,7 +18,7 @@ For example, if a service worker runs on a page located at /subdir/index.html, a Scope limits which pages are controlled by a service worker, not which requests it can intercept. Once a service worker controls a page, it can intercept any network request that page makes, including requests to cross-origin resources. -## The service worker Lifecycle +## Service Worker Lifecycle Understanding the service worker life cycle is key to understand how updates to your Mendix PWA are handled. A service worker goes through several distinct phases: @@ -35,7 +35,7 @@ Understanding the service worker life cycle is key to understand how updates to 4. Redundant: A service worker can become redundant if a new version replaces it, or if it fails to install. -## service worker Update +## Service Worker Update When you deploy a new version of your Mendix PWA, a new service worker file is generated with updated caching strategies and assets list. The browser detects this update and initiates a new lifecycle for the updated service worker. From b161738293e590b8ee32a5719598361848e57d3b Mon Sep 17 00:00:00 2001 From: Enas Gaber Date: Mon, 16 Mar 2026 21:28:13 +0100 Subject: [PATCH 04/16] Document Waiting for Service Worker Readiness --- .../service-worker.md | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index 090acb0c93b..34283fe374c 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -35,6 +35,25 @@ Understanding the service worker life cycle is key to understand how updates to 4. Redundant: A service worker can become redundant if a new version replaces it, or if it fails to install. +## Waiting for Service Worker Readiness + +You may want to wait until the Service Worker is ready before performing operations that rely on it, such as interacting with the app while offline. +The browser provides the [ready](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready) property, which returns a Promise that resolves when a service worker is active, to ensure that the service worker is fully initialized and that precaching of assets is complete so the app can work offline. + +```javascript +export async function waitForAppReady() { + if (!('serviceWorker' in navigator)) { + console.warn('service workers are not supported in this browser.'); + return; + } + const registration = await navigator.serviceWorker.ready; + + console.log('A Service Worker is active:', registration.active); + // At this point, a service worker is active. + // A page reload is necessary to ensure all assets are served by the new service worker and the app is fully offline ready +} +``` + ## Service Worker Update When you deploy a new version of your Mendix PWA, a new service worker file is generated with updated caching strategies and assets list. @@ -46,7 +65,7 @@ The browser detects this update and initiates a new lifecycle for the updated se ## Detecting and Handling Updates in Your PWA -The browser's `ServiceWorkerRegistration` interface provides properties and methods to monitor its state and detect updates. Starting from Mendix 11.9.0, a client API is available to skip the waiting phase and immediately activate the new service worker version. +The [ServiceWorkerRegistration](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration) interface provides properties and methods to monitor its state and detect updates. Starting from Mendix 11.9.0, a client API is available to skip the waiting phase and immediately activate the new service worker version. You can implement a custom update mechanism to notify users when a new version is available and allow them to update the application without closing all tabs/windows. Implementation Steps: @@ -65,7 +84,6 @@ export async function JS_ListenForPWAUpdates() { const registration = await navigator.serviceWorker.getRegistration(); if (registration) { - // Detect when a new service worker update is found registration.addEventListener('updatefound', () => { const newWorker = registration.installing; @@ -73,11 +91,18 @@ export async function JS_ListenForPWAUpdates() { if (newWorker) { // Listen for state changes in the new service worker newWorker.addEventListener('statechange', () => { - // New service worker is installed and ready, but waiting because an existing service worker is active - if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { - console.log('A new update is available. Notify the user.'); - // Show a confirmation dialog or implement your custom update UI - // to notify the user that an update is available + // New service worker is installed and ready. + if (newWorker.state === 'installed'){ + // The new service worker is waiting because an existing service worker is active + if(navigator.serviceWorker.controller) { + console.log('A new update is available. Notify the user.'); + // Show a confirmation dialog or implement your custom update UI + // to notify the user that an update is available + } else { + console.log("Service Worker installed and ready."); + // This is the first time a service worker is installed and activated for this page. + // A page reload is necessary to ensure all assets are served by the new service worker and the app is fully offline ready + } } }); } @@ -123,4 +148,5 @@ To avoid interrupting users during critical operations, it is recommended to not For example, you can implement a nanoflow that prompts users to confirm the update when a new version is detected. If the user confirms, the nanoflow can call JS_ActivatePWAUpdate to update. This nanoflow can be passed as a parameter to `JS_ListenForPWAUpdates`, which will invoke it when an update is detected. -4. Reload the app, or ask users to reload all open tabs or windows to ensure the application loads with the newly activated service worker. +4. Reload the Application +Trigger a reload, or ask users to reload all open tabs or windows to ensure the application loads with the newly activated service worker. From f58b14f4863262631f4898b838af79322c72adfa Mon Sep 17 00:00:00 2001 From: Enas Gaber Date: Mon, 16 Mar 2026 21:33:04 +0100 Subject: [PATCH 05/16] Fix typo --- .../progressive-web-app.md | 2 +- .../introduction-to-mobile-technologies/service-worker.md | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md index 110c47c3803..956908614a3 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md @@ -109,7 +109,7 @@ When forcing a specific profile on a cloud deployment, it can be necessary to fi ## Managing PWA Updates -To learn more about the service worker life cycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/service-worker). +To learn more about the service worker lifecycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/service-worker). ## Advanced Settings diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index 34283fe374c..d8880bd90f8 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -20,7 +20,7 @@ Scope limits which pages are controlled by a service worker, not which requests ## Service Worker Lifecycle -Understanding the service worker life cycle is key to understand how updates to your Mendix PWA are handled. A service worker goes through several distinct phases: +Understanding the service worker lifecycle is key to understand how updates to your Mendix PWA are handled. A service worker goes through several distinct phases: 1. Registration: This is the initial step. The browser downloads the service worker file. If the code contains syntax errors, registration fails and the service worker is discarded. @@ -145,8 +145,7 @@ export async function JS_ActivatePWAUpdate() { 3. Notifying users To avoid interrupting users during critical operations, it is recommended to notify them when an update becomes available. -For example, you can implement a nanoflow that prompts users to confirm the update when a new version is detected. If the user confirms, the nanoflow can call JS_ActivatePWAUpdate to update. -This nanoflow can be passed as a parameter to `JS_ListenForPWAUpdates`, which will invoke it when an update is detected. +For example, you can implement a nanoflow that prompts users to confirm the update when a new version is detected. If the user confirms, the nanoflow can call JS_ActivatePWAUpdate to update. This nanoflow can be passed as a parameter to `JS_ListenForPWAUpdates`, which will invoke it when an update is detected. 4. Reload the Application Trigger a reload, or ask users to reload all open tabs or windows to ensure the application loads with the newly activated service worker. From 22f6ad9e7abadf063248696b6217961174d84087 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 14:34:39 +0200 Subject: [PATCH 06/16] Edit --- .../service-worker.md | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index d8880bd90f8..24315dd1ae4 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -6,39 +6,31 @@ weight: 20 ## Introduction -A service worker is a specialized type of web worker, essentially a JavaScript file that runs in the background, separate from your main web page. It can control pages within its [scope](#scope), and acts as a proxy between your PWA and the network. +A service worker is a specialized type of web worker, essentially a JavaScript file that runs in the background, separate from your main web page. It can control pages within its [scope](#scope), and acts as a proxy between your progressive web app (PWA) and the network. -Its primary role is to intercept network requests made by your PWA and decide whether to fetch resources from the network or serve them from the cache. This interception capability is crucial for providing robust offline experiences, enabling your PWA to function even when the user has no network connectivity. +A service worker's primary role is to intercept network requests made by your PWA and decide whether to fetch resources from the network or serve them from the cache. This interception capability is crucial for providing robust offline experiences, and enables your PWA to function even when the user has no network connectivity. ## Service Worker Scope {#scope} -A service worker’s scope is determined by the location of its JavaScript file on the web server. - -For example, if a service worker runs on a page located at /subdir/index.html, and is located at /subdir/sw.js, the service worker's scope is /subdir/ +A service worker’s scope is determined by the location of its JavaScript file on the web server. For example, if a service worker runs on a page located at `/subdir/index.html`, and is located at `/subdir/sw.js`, the service worker's scope is `/subdir/`. Scope limits which pages are controlled by a service worker, not which requests it can intercept. Once a service worker controls a page, it can intercept any network request that page makes, including requests to cross-origin resources. ## Service Worker Lifecycle -Understanding the service worker lifecycle is key to understand how updates to your Mendix PWA are handled. A service worker goes through several distinct phases: - -1. Registration: - This is the initial step. The browser downloads the service worker file. If the code contains syntax errors, registration fails and the service worker is discarded. -2. Installation - During this phase, the service worker typically caches static assets your PWA needs to function offline. If all assets are successfully precached, the installation succeeds. If installation fails, the service worker is discarded. - Once installed: - - It becomes activated immediately if no other service worker is currently controlling the page. - - If there is already an active service worker, the new one will be installed but enters a waiting state. - The "waiting" state, ensures that updates to your application are delivered smoothly and without interrupting your users' current interactions. -3. Activation: - Once installed, the service worker enters the activating state and then becomes activated. An activated service worker takes control of pages within its scope, that means it is ready to intercept requests. -4. Redundant: - A service worker can become redundant if a new version replaces it, or if it fails to install. +To understand how updates to your Mendix PWA are handled, you need to understand the service worker lifecycle. A service worker goes through several distinct phases: + +1. **Registration** — In this step the browser downloads the service worker file. If the code contains syntax errors, registration fails and the service worker is discarded. +2. **Installation** — During this phase, the service worker typically caches static assets your PWA needs to function offline. If all assets are successfully pre-cached, the installation succeeds. If installation fails, the service worker is discarded. + * Once installed: + - It becomes activated immediately if no other service worker is currently controlling the page. + - If there is already an active service worker, the new one will be installed but enters a **Waiting** state. The **Waiting** state, ensures that updates to your application are delivered smoothly and without interrupting your users' current interactions. +3. **Activation** — Once installed, the service worker enters the **Activating** state, and then becomes **Activated**. An **Activated** service worker takes control of pages within its scope (meaning it is ready to intercept requests). +4. **Redundant** — A service worker can become redundant if a new version replaces it, or if it fails to install. ## Waiting for Service Worker Readiness -You may want to wait until the Service Worker is ready before performing operations that rely on it, such as interacting with the app while offline. -The browser provides the [ready](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready) property, which returns a Promise that resolves when a service worker is active, to ensure that the service worker is fully initialized and that precaching of assets is complete so the app can work offline. +You may want to wait until the Service Worker is ready before performing operations that rely on it, such as interacting with the app while offline. The browser provides the [ready](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready) property, which returns a Promise that resolves when a service worker is active, to ensure that the service worker is fully initialized and that precaching of assets is complete so the app can work offline. ```javascript export async function waitForAppReady() { From a2c83f76ffeff02a2a65818f863e8ea31e065ec5 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 14:38:26 +0200 Subject: [PATCH 07/16] Edit --- .../introduction-to-mobile-technologies/service-worker.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index 24315dd1ae4..d89cfebcb5d 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -30,7 +30,9 @@ To understand how updates to your Mendix PWA are handled, you need to understand ## Waiting for Service Worker Readiness -You may want to wait until the Service Worker is ready before performing operations that rely on it, such as interacting with the app while offline. The browser provides the [ready](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready) property, which returns a Promise that resolves when a service worker is active, to ensure that the service worker is fully initialized and that precaching of assets is complete so the app can work offline. +Mendix recommends waiting until the service worker is ready before performing operations that rely on it, such as interacting with the app while offline. + +The browser provides the [ready](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready) property, which returns a **Promise** that resolves when a service worker is active to ensure that the service worker is fully initialized and that precaching of assets is complete so the app can work offline: ```javascript export async function waitForAppReady() { From aeabf27df7b0d096787fa965d031a775cecdfe52 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 14:48:08 +0200 Subject: [PATCH 08/16] edit --- .../service-worker.md | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index d89cfebcb5d..f73d45b336e 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -59,13 +59,11 @@ The browser detects this update and initiates a new lifecycle for the updated se ## Detecting and Handling Updates in Your PWA -The [ServiceWorkerRegistration](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration) interface provides properties and methods to monitor its state and detect updates. Starting from Mendix 11.9.0, a client API is available to skip the waiting phase and immediately activate the new service worker version. -You can implement a custom update mechanism to notify users when a new version is available and allow them to update the application without closing all tabs/windows. +The [ServiceWorkerRegistration](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration) interface provides properties and methods to monitor its state and detect updates. In Mendix 11.9.0 and above, a Client API ____ is available to skip the waiting phase and immediately activate the new service worker version. -Implementation Steps: +You can implement a custom update mechanism to notify users when a new version is available. This allows them to update the application without closing all tabs or windows: -1. Listen for service worker updates -Create a JavaScript Action to Listen for service worker updates. This action should run when your application starts up, for example, calling the JavaScript action via nanoflow that triggers by [Events](/appstore/widgets/events/) widget +1. **Listen for service worker updates** — Create a JavaScript Action to listen for service worker updates. This action should run when your application starts up, for example, calling the JavaScript action via nanoflow that triggers by [Events](/appstore/widgets/events/) widget: ```javascript export async function JS_ListenForPWAUpdates() { @@ -114,8 +112,7 @@ export async function JS_ListenForPWAUpdates() { } ``` -2. Create JavaScript Action to activate the new service worker -When the user confirms the update, use the Client API `skipWaiting()` to activate the new service worker. +2. **Create a JavaScript Action to activate the new service worker** — When the user confirms the update, use the Client API `skipWaiting()` to activate the new service worker: ```javascript import { skipWaiting } from "mx-api/pwa"; @@ -137,9 +134,5 @@ export async function JS_ActivatePWAUpdate() { } ``` -3. Notifying users -To avoid interrupting users during critical operations, it is recommended to notify them when an update becomes available. -For example, you can implement a nanoflow that prompts users to confirm the update when a new version is detected. If the user confirms, the nanoflow can call JS_ActivatePWAUpdate to update. This nanoflow can be passed as a parameter to `JS_ListenForPWAUpdates`, which will invoke it when an update is detected. - -4. Reload the Application -Trigger a reload, or ask users to reload all open tabs or windows to ensure the application loads with the newly activated service worker. +3. **Notifying users** — To not interrupt users during critical operations, Mendix recommends notifying them when an update becomes available. For example, you can implement a nanoflow that prompts users to confirm the update when a new version is detected. If the user confirms, the nanoflow can call `JS_ActivatePWAUpdate` to update. This nanoflow can be passed as a parameter to `JS_ListenForPWAUpdates`, which will invoke it when an update is detected. +4. **Reload the Application** — Trigger a reload, or ask users to reload all open tabs or windows to ensure the application loads with the newly activated service worker. From cd85695292d5b7a755040b26ac6ebd64e282a27d Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 15:00:09 +0200 Subject: [PATCH 09/16] resolve question --- .../introduction-to-mobile-technologies/service-worker.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index f73d45b336e..9a0acf6611c 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -59,9 +59,9 @@ The browser detects this update and initiates a new lifecycle for the updated se ## Detecting and Handling Updates in Your PWA -The [ServiceWorkerRegistration](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration) interface provides properties and methods to monitor its state and detect updates. In Mendix 11.9.0 and above, a Client API ____ is available to skip the waiting phase and immediately activate the new service worker version. +The [ServiceWorkerRegistration](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration) interface provides properties and methods to monitor its state and detect updates. In Mendix 11.9.0 and above, a Client API [method](https://apidocs.rnd.mendix.com/11/client-mx-api/module-mx-api_pwa.html) is available to skip the waiting phase and immediately activate the new service worker version: `SkipWaiting()`. -You can implement a custom update mechanism to notify users when a new version is available. This allows them to update the application without closing all tabs or windows: +With `SkipWaiting()`, you can implement a custom update mechanism to notify users when a new version is available. This allows them to update the application without closing all tabs or windows: 1. **Listen for service worker updates** — Create a JavaScript Action to listen for service worker updates. This action should run when your application starts up, for example, calling the JavaScript action via nanoflow that triggers by [Events](/appstore/widgets/events/) widget: From 94297ab67ac3ee7cf01f22c4898f34d0f562283e Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 15:07:11 +0200 Subject: [PATCH 10/16] Update title --- .../introduction-to-mobile-technologies/service-worker.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index 9a0acf6611c..a052a5507d3 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -1,5 +1,5 @@ --- -title: "Service Worker and PWA Updates" +title: "PWA Service Worker" url: /refguide/mobile/introduction-to-mobile-technologies/service-worker weight: 20 --- @@ -12,7 +12,7 @@ A service worker's primary role is to intercept network requests made by your PW ## Service Worker Scope {#scope} -A service worker’s scope is determined by the location of its JavaScript file on the web server. For example, if a service worker runs on a page located at `/subdir/index.html`, and is located at `/subdir/sw.js`, the service worker's scope is `/subdir/`. +A service worker’s scope is determined by the location of its JavaScript file on the web server. For example, if a service worker runs on a page located at `/subdir/index.html` and is located at `/subdir/sw.js`, then the service worker's scope is `/subdir/`. Scope limits which pages are controlled by a service worker, not which requests it can intercept. Once a service worker controls a page, it can intercept any network request that page makes, including requests to cross-origin resources. From c81dc37468f2b9b094f33a8d6cd9f404373f6f93 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 15:13:40 +0200 Subject: [PATCH 11/16] Remove skip waiting and make text closer to Enas' --- .../introduction-to-mobile-technologies/service-worker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index a052a5507d3..10ca3f535e8 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -61,7 +61,7 @@ The browser detects this update and initiates a new lifecycle for the updated se The [ServiceWorkerRegistration](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration) interface provides properties and methods to monitor its state and detect updates. In Mendix 11.9.0 and above, a Client API [method](https://apidocs.rnd.mendix.com/11/client-mx-api/module-mx-api_pwa.html) is available to skip the waiting phase and immediately activate the new service worker version: `SkipWaiting()`. -With `SkipWaiting()`, you can implement a custom update mechanism to notify users when a new version is available. This allows them to update the application without closing all tabs or windows: +You can implement a custom update mechanism to provide a clear notification and an option to update to the latest version of your app in that same notification. This allows them to update the application without closing all tabs or windows: 1. **Listen for service worker updates** — Create a JavaScript Action to listen for service worker updates. This action should run when your application starts up, for example, calling the JavaScript action via nanoflow that triggers by [Events](/appstore/widgets/events/) widget: From 8a8a5a02e3ee7151787a5cec58bd607e5515df01 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 15:37:37 +0200 Subject: [PATCH 12/16] tweak links --- .../progressive-web-app.md | 4 ++-- .../introduction-to-mobile-technologies/service-worker.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md index 956908614a3..8f72ca2e1bd 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md @@ -13,7 +13,7 @@ Progressive web apps (PWAs) are an evolution of traditional web apps. Overall, P Progressive web apps have three main characteristics: * **Installable** – PWAs let you add your app to your user's home screen and start a full screen app. This makes PWAs feel more fully-capable native apps. -* **Reliable** – Using service workers, PWAs can work offline or partially offline. Mendix PWAs can work partially offline (resources like styling, pages, and images are cached) or fully offline (like native mobile apps). +* **Reliable** – Using [service workers](/refguide/mobile/introduction-to-mobile-technologies/pwa-service-worker/), PWAs can work offline or partially offline. Mendix PWAs can work partially offline (resources like styling, pages, and images are cached) or fully offline (like native mobile apps). * **Capable** – PWAs can leverage several device capabilities like the camera and location, and can offer support for web push notifications. Note that support for features depend on which browser is used. ## Enabling PWA Features @@ -38,7 +38,7 @@ To be able to fully test PWA functionalities, the app needs to be deployed to th ### Publishing as a Progressive Web App -When checked and deployed to the cloud, the app registers a [service worker](https://developers.google.com/web/fundamentals/primers/service-workers) that is the basis for PWAs. On offline navigation profiles, this option is always enabled. In online navigation profiles, enabling this option will also give the end-user a custom page when the device has no connection. Where desired, this page can be customized by adding an *offline.html* page to the theme folder (for example, *theme/offline.html*). Note that this page should not load any other resources over the network. +When checked and deployed to the cloud, the app registers a [service worker](/refguide/mobile/introduction-to-mobile-technologies/pwa-service-worker/) that is the basis for PWAs. On offline navigation profiles, this option is always enabled. In online navigation profiles, enabling this option will also give the end-user a custom page when the device has no connection. Where desired, this page can be customized by adding an *offline.html* page to the theme folder (for example, *theme/offline.html*). Note that this page should not load any other resources over the network. ### Allowing "Add to Home Screen" Prompt diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md index 10ca3f535e8..b444da92e20 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md @@ -1,6 +1,6 @@ --- title: "PWA Service Worker" -url: /refguide/mobile/introduction-to-mobile-technologies/service-worker +url: /refguide/mobile/introduction-to-mobile-technologies/pwa-service-worker/ weight: 20 --- From 766c4c922ca243bda0ba26e630b9ad571e127a5f Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 15:45:00 +0200 Subject: [PATCH 13/16] Make doc into a child --- .../{progressive-web-app.md => progressive-web-app/_index.md} | 0 .../pwa-service-worker.md} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename content/en/docs/refguide/mobile/introduction-to-mobile-technologies/{progressive-web-app.md => progressive-web-app/_index.md} (100%) rename content/en/docs/refguide/mobile/introduction-to-mobile-technologies/{service-worker.md => progressive-web-app/pwa-service-worker.md} (100%) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md similarity index 100% rename from content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app.md rename to content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/pwa-service-worker.md similarity index 100% rename from content/en/docs/refguide/mobile/introduction-to-mobile-technologies/service-worker.md rename to content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/pwa-service-worker.md From 91919ea8391b9bba9974dff8b53bbc1fc8ec5019 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 15:56:30 +0200 Subject: [PATCH 14/16] fix last link --- .../progressive-web-app/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md index 8f72ca2e1bd..56f4c08d2f3 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md @@ -109,7 +109,7 @@ When forcing a specific profile on a cloud deployment, it can be necessary to fi ## Managing PWA Updates -To learn more about the service worker lifecycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/service-worker). +To learn more about the service worker lifecycle and how to detect and handle PWA updates to provide users with the latest version, see [Service Worker and PWA Updates](/refguide/mobile/introduction-to-mobile-technologies/pwa-service-worker/). ## Advanced Settings From c529dc974f71ab2970c8e2a73a2060866a276dd2 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 16:04:19 +0200 Subject: [PATCH 15/16] text change --- .../progressive-web-app/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md index 56f4c08d2f3..b63623ee758 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md @@ -34,7 +34,7 @@ Within the navigation profiles the following PWA features can be configured: {{< figure src="/attachments/refguide/mobile/progressive-web-app/settings.png" alt="PWA settings" width="350" class="no-border" >}} -To be able to fully test PWA functionalities, the app needs to be deployed to the cloud. This is because the service worker is only enabled in the cloud over HTTPS. +To fully test PWA capabilities, the app needs to be deployed to the cloud. This is because the service worker is only enabled in the cloud over HTTPS. ### Publishing as a Progressive Web App From b0090755e6f6318b9da44823e0964595059364f8 Mon Sep 17 00:00:00 2001 From: ConnorLand Date: Wed, 15 Apr 2026 16:14:51 +0200 Subject: [PATCH 16/16] Fix merge conflict --- .../progressive-web-app/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md index e93445f67cc..93b8a5ec63c 100644 --- a/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md +++ b/content/en/docs/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/_index.md @@ -34,7 +34,7 @@ Within the navigation profiles the following PWA features can be configured: {{< figure src="/attachments/refguide/mobile/progressive-web-app/settings.png" alt="PWA settings" width="350" class="no-border" >}} -To fully test PWA capabilities, the app needs to be deployed to the cloud. This is because some PWA features are only available over HTTPS protocol. For more information, see [Accessing Device Features](#accessing-device-features) below. +To fully test PWA functionality, the app needs to be deployed to the cloud. This is because some PWA features are only available over HTTPS protocol. For more information, see [Accessing Device Features](#accessing-device-features) below. ### Publishing as a Progressive Web App