# 🌐 Offline Mobile web apps

**URL:** <https://discourse.nodered.org/t/offline-mobile-web-apps/100238>\
**Category:** Share Your Projects\
**Tags:** uibuilder\
**Created:** [24 January 2026 15:23 UTC](https://discourse.nodered.org/t/offline-mobile-web-apps/100238 "2026-01-24T15:23:28Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [24 January 2026 15:23 UTC](https://discourse.nodered.org/t/offline-mobile-web-apps/100238/1 "2026-01-24T15:23:28Z")

</div>

Oh boy, I was really triggered me with this thread! 🤣

> [@How "difficult" is it to install NR on an Android phone?](https://discourse.nodered.org/t/how-difficult-is-it-to-install-nr-on-an-android-phone/100234):
>
> (Ok, I have been offered this topic) Android V14. That thread I mentioned shows how to install it, but I am missing something. To me, I would need CLI access at/in/to the phone. That's beyond me. (Maybe not for this forum, but......) But as I'm kinda known here, I thought I'd ask. I'm asking because I used to use another program and wrote apps for it, but then THEY stuffed up the O/S and my apps stopped working/are no longer supported. This (maybe/probably) leads to the next obvious que…

So I decided to have another go at doing an offline capable mobile web app using UIBUILDER.

But this time, instead of trying to do the horrible, complex manifest and worker's, I used Vite with the `vite-plugin-pwa` plugin which uses Google Workbox to do some of the heavy lifting.

A couple of hours later - shazam! I have a working (very simplistic) version.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/4/341310b81987be43d2259a792ef6e08825dda62e.png)

Complete with a call to the browser's location API.

No frameworks involved, just using Vite to do the build process.

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [24 January 2026 18:06 UTC](https://discourse.nodered.org/t/offline-mobile-web-apps/100238/2 "2026-01-24T18:06:53Z")

</div>

Im expected great things now Julian! 😉

Nice work 🙏

---

<div class="post-metadata">

**Author:** ![Jibun-no-Kage](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/jibun-no-kage/32/99316_2.png) [@Jibun-no-Kage](https://discourse.nodered.org/u/Jibun-no-Kage)\
**Post date:** [25 January 2026 18:38 UTC](https://discourse.nodered.org/t/offline-mobile-web-apps/100238/3 "2026-01-25T18:38:54Z")

</div>

Why NR on a phone? Just asking about the use case. Typically NR on a 'server' and phone access to dashboard, I would think.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [25 January 2026 19:24 UTC](https://discourse.nodered.org/t/offline-mobile-web-apps/100238/4 "2026-01-25T19:24:21Z")

</div>

Sorry, while the original thread was about NR on a phone, I rather went off at a tangent. This thread is about using a Node-RED server with UIBUILDER to deliver offline capable web apps. Not about running Node-RED on a phone.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [26 January 2026 13:19 UTC](https://discourse.nodered.org/t/offline-mobile-web-apps/100238/5 "2026-01-26T13:19:53Z")

</div>

For anyone interested, the approach used here (using Vite as a build engine) also uses vanilla web components.

For example, the location component:

```html
<!-- Watch for changes, send updates when moved 50+ meters (default) -->
<app-location data-watch></app-location>

<!-- Watch with 100 meter threshold and show UI -->
<app-location data-watch="100" data-display></app-location>

<!-- High accuracy mode (uses GPS) -->
<app-location data-watch data-high-accuracy></app-location>

```

I will actually extract this one and add it to my web components library as I've just updated the test to include battery saving features. It is, of course, enhanced for uibuilder but does not need it. If uibuilder is present, movement will be sent back to Node-RED for connected clients.

Another component that I will likely extract to the core uibuilder client library is `<uib-connection-status>`. If you add that to the page, you get a visual indicator on the page if uibuilder's [socket.io](http://socket.io) connection goes offline (even if the page itself still believes it is online).
