Kiosk WebApp integration
Run your HTTPS WebApp on a managed MojoWare kiosk, identify the device, and request approved cards on its Advertising display.
Reviewed against the current implementation on 16 October 2026. This guide describes the shipped window.mojoware bridge. It is intended for WebApp developers and the operators configuring their screens.
Download the complete Markdown guide · LLM discovery index
Start with the right interface
| You want to… | Use |
|---|---|
| Identify the kiosk and sign it into your product | Authentication |
| Pause ads or show a loading, jackpot, or service card | Advertising cards |
| Check a method, return value, or error | Bridge reference |
| Assign content, capture screenshots, inspect health, or restart a WebApp | The Kiosk portal, with operator permissions |
The browser bridge is intentionally small. It does not expose native management credentials, Wi-Fi configuration, reboot commands, or a general remote-management API.
Configure the WebApp
- In the Kiosk portal, choose the correct group and open WebApps. Create or select your app using its name and HTTPS URL.
- Open Fleet, click the kiosk row, and select Monitors.
- Choose the intended screen and use Change content to assign the WebApp. Check that the kiosk has applied the change.
- The portal creates an application audience automatically. Only override it under Advanced when coordinating an explicit audience with your backend.
- Run the app as the top-level page on the kiosk. Its actual HTTPS origin must be allowed by its assigned configuration. An iframe or an ordinary desktop browser is not a managed kiosk context.
Authentication and card permissions are separate. Assigning an app does not automatically let it interrupt Advertising.
Detect the bridge safely: window.mojoware.ready
No script tag or npm SDK is required. The managed browser injects the interface.
async function getKioskBridge() {
const bridge = window.mojoware;
if (!bridge) {
throw new Error("This page is not running in a managed kiosk browser.");
}
await bridge.ready;
return bridge;
}
try {
const bridge = await getKioskBridge();
const deviceId = bridge.device_id; // Public identifier; not a password.
// Continue with your product's kiosk login.
} catch {
// Show an appropriate non-kiosk or unavailable state.
// Do not invent a device ID or repeatedly reload the page.
}
ready is a Promise, not a function. Read device_id and sn after it resolves; both contain the same public device identifier. Readiness can reject after about five seconds when native access is unavailable.
Where to investigate
- Monitors → selected screen: applied content, captures, WebApp performance, and activity.
- Observations → Events: operational events, including card transitions and reported WebApp errors.
- Observations → Activity: who changed configuration or sent commands, when, and the recorded outcome.
- Network / Health: saved reports and explicit diagnostic tools.
Online describes the management WebSocket connection. Healthy describes the last reported health assessment; read its report age. Seen is the last recorded device contact. These timestamps are not interchangeable.
Documentation scope
Examples use placeholder app names and credentials. No real device, customer, credential, or fleet data is embedded here. The underlying contracts are maintained in the server repository at docs/web_developer/kiosk_api.md, the browser shim at apps/mojoware/kiosk/pi/bridge/page.js, and the native advertising control implementation.
This guide does not introduce a new devices/identify endpoint or define a product's brand-membership, inventory-stocking, or session policy. Those decisions belong to the integrating product.