webOS TV 24 KICKR PoC
Minimal webOS TV web app (HTML/CSS/JS) that connects to a Wahoo KICKR via BLE on device, with simulator-mode data for local UI testing. This app is developed on an LG TV with WebOS 24. It may not work on other platform (but you're welcome to try it out there, feed back on what does and does not work on other TVs would be great).
Requirements
- webOS CLI (
ares-*) installed and onPATH - Node.js 16.x
- webOS TV 24 Simulator and/or a real LG TV
Reccomended for devlopment work
- VS Code with the WebOS Studio extension installed
Project Layout
index.html,styles.css,main.js- app UI and logicappinfo.json- app metadata and permissionsscripts/deploy.ps1- packaging + deploy automation
Run in Simulator
The app auto-detects simulator mode when window.webOS is missing and generates mock power/cadence data.
Deploy (Simulator + TV)
From the project root:
.\scripts\deploy.ps1 -Target allSimulator only:
.\scripts\deploy.ps1 -Target simulatorTV only:
.\scripts\deploy.ps1 -Target tvCustom simulator path or version:
.\scripts\deploy.ps1 -Target simulator -SimulatorVersion 24 -SimulatorPath "C:\path\to\webOS_TV_24_Simulator"
If your device names differ from defaults, pass them explicitly:
.\scripts\deploy.ps1 -Target all -DeviceTv <yourTvName>
Tests (Vitest)
Install dependencies and run CI-style tests:
npm install npm run test:ci
Watch mode:
Tests mock the webOS BLE service so you can validate logic without a TV.
Notes
- BLE uses the Luna service
luna://com.webos.service.blegatt. - Required permission is set in
appinfo.json(access_bluetooth). - CI deploys require a self-hosted runner with webOS CLI + simulator/TV access.
- This has only been tested on an LG WebOS 24 TV with a Wahoo Kickr Core (2018 model).