webOS apps
Small, fast applications for a rooted LG webOS TV.
- Sideload / dev mode
- Stable
- Medium brick risk
- Reversible
This project hasn't been claimed by its maintainer yet, so its details come from the community. Is it yours? Claim it
Before you start
- How hard is it?
- HardUses the command line or developer tools.
- What you need
- Comfort with the command line
- A computer
- Another hack installed first
- Can it break my device?
- Small chance of trouble, with a way to recover.
- Can I undo it?
- Yes. You can go back to the official software.
Did it work for you?
Did webOS apps work on your LG OLED C3?
No reports yet.
One-tap reports from owners. Bricked reports are checked before they count.
Compatibility
Devices: LG OLED C3.
No compatibility information yet.
Getting started
From the project's README ("Install on a rooted TV"):
Copy .env.example to .env and fill in the TV's address and the name of your SSH key in ~/.ssh. .env is gitignored.
TVHOST=TVADDRESS TVSSHKEY=tvkey
Then install the apps:
scripts/deploy.sh apps/minimal-home scripts/deploy.sh apps/departures
deploy.sh runs npm install if needed, packages the app, uploads and installs it over root SSH, waits until the TV reports the new version, and launches it. Pass --no-launch to skip the launch. For Minimal Home it also handles the Home redirect described under "Upgrade Minimal Home safely".
Manual install
Without the script, upload and install one app at a time. is the version in the app's app/appinfo.json:
ssh -i ~/.ssh/tvkey root@TVADDRESS 'cat > /tmp/app.ipk'
< apps/departures/dist/org.webosbrew.departures<version>all.ipkssh -i ~/.ssh/tvkey root@TVADDRESS
"exec </dev/null; luna-send -n 1 -f 'luna://com.webos.appInstallService/dev/install'
'{"id":"org.webosbrew.departures","ipkUrl":"/tmp/app.ipk","subscribe":true}'"Check the installed version, then remove the uploaded file:
ssh -i ~/.ssh/tvkey root@TVADDRESS
"exec </dev/null; luna-send -n 1 -f 'luna://com.webos.service.applicationmanager/getAppInfo'
'{"id":"org.webosbrew.departures"}' | grep version; rm -f /tmp/app.ipk"exec </dev/null matters when these commands run from a script: without it luna-send can exit with no output before the TV replies.
Risk and recovery
- Brick risk
- Medium
- Reversible
- Yes
- Requires opening the device
- No
From the project's README ("Safety and recovery"):
Minimal Home's optional Home replacement is a runtime bind mount. It does not write to LG's system partition. A reboot clears the mount before the Homebrew boot hook reapplies it.
Restore LG Home over SSH with:
ssh -i ~/.ssh/tvkey root@TVADDRESS '/home/root/restore-stock-home.sh'
The recovery script removes the boot hook, unmounts the redirect, restores com.webos.app.home as the default Home app, and restarts the webOS application manager.
Keeping Minimal Home open
When an app starts cold (it isn't running), LG's memory manager (memchute) closes the app you leave, unless that one is in its KeepOnLaunchEx list, where LG's own Home is; this happens with plenty of memory free. Switching to an app that is already running closes nothing. The window manager then starts the closed app again in the background ("reason":"memoryReclaim" in getAppLifeEvents, "mode":"autoReload" in /var/log/messages; processFullscreenLaunchByClosingPolicy in /usr/lib/qml/WebOSCompositor/controllers/StarfishFullscreenController.qml). Without Minimal Home on the list, opening Departures closed Home and Back started Home cold and closed Departures, so every switch between them was a cold start.
Why a splash stays on screen (found on 2026-10-24; LG's code is in /usr/lib/qml/WebOSCompositor, and its log lines are kept when luna://com.webos.pmlogd/setAllowDevLog is on and land in /var/log/dbg-log when it is turned off again): …
Credits, license and support
- License
- MIT