Quick start

This assumes you already have the repository. If not, ask your Promethist contact for access first — First, the code has the one command.

npm install
npm run dev        # reference app on http://localhost:5173
npm run build      # library to packages/kiosk-tablet/dist, app to apps/tablet/dist

Deploying means copying apps/tablet/dist somewhere it can be served. On a standard Promethist kiosk, the Unreal host serves it directly, requiring no further installation on the box.

Opening it on the tablet

Point the tablet’s browser at the kiosk’s HTTP port:

http://<kiosk-ip>:8080/#token=<your AuthToken>

The #token= fragment provides the token to the tablet. It matters that it is a fragment: browsers never send fragments to servers, ensuring the token reaches the page without being fetchable from it. The page then derives its own socket address — ws://<same host>:9010/link — so no address configuration is needed anywhere.

In the example launch scripts, tablet.bat builds that URL from a TABLET_TOKEN variable and opens it in a locked-down browser window. This is the supported way to launch a kiosk’s own tablet; on a separate tablet device, typing the URL once is enough.

Configuring the host channel

The Unreal side is on by default — a packaged build serves the page on 8080 and listens for a tablet on 9010 without an ini file. Write one to change a port, set AuthToken, or run the channel in the editor.

This file belongs in the project’s Saved/PromethistLinkConfig.ini. For a packaged build, that is <archive root>\StreamingDemo\Saved\, one level below the launched StreamingDemo.exe. In the workspace, it is StreamingDemo\Saved\. An ini placed anywhere else is silently ignored, leaving settings at their defaults.

Comments go on their own line. The parser splits on the first = and keeps the rest of the line, stripping only surrounding whitespace and one layer of quotes. Thus, AuthToken= ; none on a LAN configures a token valued ; none on a LAN, refusing every connecting tablet.

[PromethistKioskTablet]
; on by default; false turns the whole channel off
Enabled=true
; the WebSocket control channel
Port=9010
; HTTP server for the page itself; 0 disables it
WebPort=8080
; simultaneous tablets; further connections are refused with a log line
MaxClients=4
; Ships pre-filled and matched by TABLET_TOKEN in tablet.bat, so a two-box install
; works with no setup. Checked ONLY for connections arriving over a network - a
; tablet on this machine is trusted by its peer address and never presents it.
; The default is published in our partner documentation, so replace it on any network that
; is not exclusively yours; the host warns until you do. Never in config.json,
; which this host serves to anyone who asks. Never logged.
AuthToken=promethist-kiosk-default
; Demand the token from local connections too. For when a tunnel or reverse proxy
; on THIS box forwards the channel, which makes remote traffic look local.
RequireTokenFromLocal=false
; Optional hard lockdown. Empty (the default) = every interface, which is correct
; for a tablet on another machine. 127.0.0.1 makes the port unreachable entirely.
; This is NOT the access control - the peer-address rule above is.
BindAddress=
; empty = three fallbacks in order, listed below the table
WebRoot=
; the editor is gated separately, so two PIE sessions cannot fight over the port
EnableInEditor=false

The component itself writes one more key into this section: VolumePercent. It saves this value a second after the operator releases the slider and restores it at start-up, returning the kiosk to its previous volume. Here, 100 means MaxVolumeMultiplier on the component (2.0 by default), not "unity".

Choosing a token and deciding who can reach this port is covered in locking the control channel.

The command line overrides the file, making a launcher .bat the single place a box is configured: -KioskTablet, -KioskTabletPort=, -KioskTabletWebPort=, -KioskTabletWebRoot=, -KioskTabletToken=, -KioskTabletBind=. Asking for a port implies -KioskTablet.

Except -KioskTabletToken=. It works, but the engine writes the full command line to the startup log (LogInit: Command Line: …). This copies the token into every rotated and retained log file the build produces. Instead, use AuthToken= in the ini, which is read without being echoed. Passing it on the command line triggers a warning saying the same thing.

In the editor you also need EnableInEditor=true; without it, the log says Tablet channel is enabled but suppressed in the editor and nothing binds.

deploy_extras.bat copies apps/tablet/dist into <archive root>\Samples\kioskTablet, beside StreamingDemo.exe. This is one of three places an empty WebRoot checks, making the ini the only manual step on a packaged kiosk. (The other two are the same folder under the project directory, and the workspace’s own apps/tablet/dist for a build run out of the depot. If none exist, the log says Not serving the tablet page: '<path>' does not exist. and names the first.)

One catch: the page derives its socket URL as ws://<same-host>:9010/link with that port hard-coded. Therefore, changing Port also requires setting url in config.json.