--- title: "Start here" description: "Set up a kiosk WebApp and find the window.mojoware authentication, card, and troubleshooting guides." canonical: "https://mojoware.net/docs/kiosk/home/" --- # 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](/docs/kiosk/llms-full.txt) · [LLM discovery index](/docs/kiosk/llms.txt) ## Start with the right interface | You want to… | Use | | --- | --- | | Identify the kiosk and sign it into your product | [Authentication](/docs/kiosk/authentication/) | | Pause ads or show a loading, jackpot, or service card | [Advertising cards](/docs/kiosk/advertising-cards/) | | Check a method, return value, or error | [Bridge reference](/docs/kiosk/bridge-reference/) | | Assign content, capture screenshots, inspect health, or restart a WebApp | The [Kiosk portal](https://kiosk.mojoware.net/), 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 1. In the Kiosk portal, choose the correct group and open **WebApps**. Create or select your app using its name and HTTPS URL. 2. Open **Fleet**, click the kiosk row, and select **Monitors**. 3. Choose the intended screen and use **Change content** to assign the WebApp. Check that the kiosk has applied the change. 4. The portal creates an application audience automatically. Only override it under Advanced when coordinating an explicit audience with your backend. 5. 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. ```js 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.