Unofficial webOS TV homebrew store and root-related tooling
JavaScript
1,493
276 commits
updated Aug 3, 2026

Independent webOS package repository
Support for multiple repositories (outside of official repo.webosbrew.org
(root) Root execution service that can be easily used by webOS homebrew
developers without a need of separate privilege escalation handling (luna://org.webosbrew.hbchannel.service/exec)
(root) Disable some telemetry
(root) Startup user hooks (executable scripts present in /var/lib/webosbrew/init.d are run on bootup)
(root) Remote access
alpine password until
authorized keys are provisioned)(root) Failsafe mode
/var/luna/preferences/webosbrew_failsafe flag file.If you already have Homebrew Channel installed just launch Homebrew Channel and select "Homebrew Channel" on apps browser view. "Update" button should be clickable if an update is available for your installation.
If you need to reinstall any app for any reason press "5" button on app details screen and "Update" button should change to "Reinstall" (and get enabled if it wasn't before)
Latest Homebrew Channel version is automatically installed when rooting a TV with most of working exploits. See https://cani.rootmy.tv or https://www.webosbrew.org/rooting/ for compatability.
Execute the following snippet on target TV using SSH or Telnet:
curl -L https://raw.githubusercontent.com/webosbrew/webos-homebrew-channel/main/tools/install.sh | sh -
# Update startup script (assuming running as root)
cp /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/startup.sh /var/lib/webosbrew/startup.sh
.ipkares-install SDK command or using the following command
directly on a TV:
luna-send-pub -i 'luna://com.webos.appInstallService/dev/install' '{"id":"com.ares.defaultName","ipkUrl":"/tmp/path/to/hbchannel.ipk","subscribe":true}'
/media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/elevate-service
cp /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/startup.sh /var/lib/webosbrew/startup.sh
This application exposes a Luna service that may be used by other homebrew applications on Rooted devices:
luna://org.webosbrew.hbchannel.service/installDownload, verify and install an application.
Arguments:
ipkUrl [string] - HTTP(s) URL for ipk application to installipkHash [string] - SHA256 checksum of downloaded ipk applicationsubscribe [boolean] - subscribe for status updatesReturns:
finished [boolean] - returns true when application has been fully
installedstatusText [string] - current status/progress messageprogress [number] - percentage download progressluna://org.webosbrew.hbchannel.service/execRoot code execution - this may not execute as root, if a device is not rooted.
Arguments:
command [string] - command to executeReturns:
error [string] - error that may have occuredstdoutString [string] - stdout as a unicode string representationstdoutBytes [string] - stdout as a base64 representationstderrString [string] - stderr as a unicode string representationstderrBytes [string] - stderr as a base64 representationluna://org.webosbrew.hbchannel.service/spawnRoot code execution, spawn a long-running process - this may not execute as root, if a device is not rooted.
Arguments:
command [string] - command to executeReturns:
type [string] - one of stdoutData, stderrData, close, exit
stdoutData - data incoming on stdout pipe
stdoutString [string] - stdout as a unicode string representationstdoutBytes [string] - stdout as a base64 representationstderrData - data incoming on stderr pipe
stderrString [string] - stderr as a unicode string representationstderrBytes [string] - stderr as a base64 representationclose - child process closed all its stdio streams
closeCode [number] - exit codeexit - child proess ended
exitCode [number] - exit codeluna://org.webosbrew.hbchannel.service/getAppInfoluna://com.webos.applicationManager/getAppInfo call replicated using
devmode-only endpoints.
webOS application (or remote device, via SSAP) may request Homebrew Launcher to add an external repository, by launching it with the following launch params:
{
"launchMode": "addRepository",
"url": "https://url-to-repository.com"
}
This will automatically jump to Settings view and open up "Add repository" prompt with URL filled in.
This can be tested by using ares-launch as follows:
ares-launch org.webosbrew.hbchannel -p '{"launchMode":"addRepository","url":"https://google.com"}'
Some libraries used by this project are submodules of this repository. Use following command when cloning:
git clone --recursive https://github.com/webosbrew/webos-homebrew-channel
All required development packages are distributed via npm. In order to install them in a local directory run:
npm install
Frontend is based on last development version of enyo.
(dated january 2017) While this definitely is not the cool and jazzy latest
technology, it provides us with a sensible UI toolkit for TV-based application
that seems to work pretty well with versions of webOS as old as 1.x. We are
currently using enyo built-in enyo-dev packager. This requires us to write
code that'll be run directly on target platforms (no babel/transpilation of newer
ES dialects - no arrow functions, no const, no promises, etc.). In the future
we may migrate to some webpack-based solution around that.
Service is packaged using webpack & babel, thus, with enough shims and patches, we can write and use some modern ES features (like Promises, arrow functions, async functions, const, etc.) while targeting NodeJS 0.10 (used on earliest webOS versions)
This is partially based on: https://webostv.developer.lge.com/develop/app-test/using-devmode-app/
http://TV_IP:9991/webos_rsaares-setup-device (-a may need to be replaced with -m if device named webos is already configured)
PASSPHRASE is the 6-character passphrase printed on screen in developer mode appares-setup-device -a webos -i "username=prisoner" -i "privatekey=/path/to/downloaded/webos_rsa" -i "passphrase=PASSPHRASE" -i "host=TV_IP" -i "port=9922"
ssh-keygen)id_rsa.pub) to /home/root/.ssh/authorized_keys on TVares-setup-device (-a may need to be replaced with -m if device named webos is already configured)ares-setup-device -a webos -i "username=root" -i "privatekey=/path/to/id_rsa" -i "passphrase=SSH_KEY_PASSPHRASE" -i "host=TV_IP" -i "port=22"
Note: @webosose/ares-cli doesn't need to be installed globally - you can use a package installed locally after npm install in this repo by just prefixing above commands with local path, like so: node_modules/.bin/ares-setup-device ...
EnyoJS is able to watch for frontend changes, but does not expose a HTTP server.
npm run build -- --watch
# ...in a separate terminal:
python -m http.server -d dist/
rm -rf dist && npm run build -- --production && npm run build-service -- --env production && npm run package
rm -rf dist && npm run build && npm run build-service && npm run package && npm run deploy && npm run launch
ssh root@10.0.0.2 -p 9922 /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/elevate-service
npm run build-service && \
cat dist/services/service.js | ssh root@10.0.0.2 -p 9922 sh -c 'cat > /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/service.js && pkill -f org.webosbrew.hbchannel.service'
ssh root@10.0.0.2 /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/run-js-service -k -n /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service
cp /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/startup.sh /var/lib/webosbrew/startup.sh
npm version minor
git push origin main --tags
Before every release following features should be verified:
Releases with startup.sh updates:
Non-installed app info page:
Installed app info page:
Homebrew Channel Self-update - reinstall/update can be force-enabled by pressing remote button 5 on Homebrew Channel app page.
Settings page:
Root execution service:
/exec and other endpoints should work correctly. Good
testing target is "Custom Screensaver" app since it uses plain /exec calls
without going through its own service.Autostart:
193 followers · starred Jul 2026
186 followers · starred Feb 2025
82 followers · starred Sep 2026
30 followers · starred Jan 2024
Unofficial webOS TV homebrew store and root-related tooling
JavaScript
1,493
276 commits
updated Aug 3, 2026

Independent webOS package repository
Support for multiple repositories (outside of official repo.webosbrew.org
(root) Root execution service that can be easily used by webOS homebrew
developers without a need of separate privilege escalation handling (luna://org.webosbrew.hbchannel.service/exec)
(root) Disable some telemetry
(root) Startup user hooks (executable scripts present in /var/lib/webosbrew/init.d are run on bootup)
(root) Remote access
alpine password until
authorized keys are provisioned)(root) Failsafe mode
/var/luna/preferences/webosbrew_failsafe flag file.If you already have Homebrew Channel installed just launch Homebrew Channel and select "Homebrew Channel" on apps browser view. "Update" button should be clickable if an update is available for your installation.
If you need to reinstall any app for any reason press "5" button on app details screen and "Update" button should change to "Reinstall" (and get enabled if it wasn't before)
Latest Homebrew Channel version is automatically installed when rooting a TV with most of working exploits. See https://cani.rootmy.tv or https://www.webosbrew.org/rooting/ for compatability.
Execute the following snippet on target TV using SSH or Telnet:
curl -L https://raw.githubusercontent.com/webosbrew/webos-homebrew-channel/main/tools/install.sh | sh -
# Update startup script (assuming running as root)
cp /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/startup.sh /var/lib/webosbrew/startup.sh
.ipkares-install SDK command or using the following command
directly on a TV:
luna-send-pub -i 'luna://com.webos.appInstallService/dev/install' '{"id":"com.ares.defaultName","ipkUrl":"/tmp/path/to/hbchannel.ipk","subscribe":true}'
/media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/elevate-service
cp /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/startup.sh /var/lib/webosbrew/startup.sh
This application exposes a Luna service that may be used by other homebrew applications on Rooted devices:
luna://org.webosbrew.hbchannel.service/installDownload, verify and install an application.
Arguments:
ipkUrl [string] - HTTP(s) URL for ipk application to installipkHash [string] - SHA256 checksum of downloaded ipk applicationsubscribe [boolean] - subscribe for status updatesReturns:
finished [boolean] - returns true when application has been fully
installedstatusText [string] - current status/progress messageprogress [number] - percentage download progressluna://org.webosbrew.hbchannel.service/execRoot code execution - this may not execute as root, if a device is not rooted.
Arguments:
command [string] - command to executeReturns:
error [string] - error that may have occuredstdoutString [string] - stdout as a unicode string representationstdoutBytes [string] - stdout as a base64 representationstderrString [string] - stderr as a unicode string representationstderrBytes [string] - stderr as a base64 representationluna://org.webosbrew.hbchannel.service/spawnRoot code execution, spawn a long-running process - this may not execute as root, if a device is not rooted.
Arguments:
command [string] - command to executeReturns:
type [string] - one of stdoutData, stderrData, close, exit
stdoutData - data incoming on stdout pipe
stdoutString [string] - stdout as a unicode string representationstdoutBytes [string] - stdout as a base64 representationstderrData - data incoming on stderr pipe
stderrString [string] - stderr as a unicode string representationstderrBytes [string] - stderr as a base64 representationclose - child process closed all its stdio streams
closeCode [number] - exit codeexit - child proess ended
exitCode [number] - exit codeluna://org.webosbrew.hbchannel.service/getAppInfoluna://com.webos.applicationManager/getAppInfo call replicated using
devmode-only endpoints.
webOS application (or remote device, via SSAP) may request Homebrew Launcher to add an external repository, by launching it with the following launch params:
{
"launchMode": "addRepository",
"url": "https://url-to-repository.com"
}
This will automatically jump to Settings view and open up "Add repository" prompt with URL filled in.
This can be tested by using ares-launch as follows:
ares-launch org.webosbrew.hbchannel -p '{"launchMode":"addRepository","url":"https://google.com"}'
Some libraries used by this project are submodules of this repository. Use following command when cloning:
git clone --recursive https://github.com/webosbrew/webos-homebrew-channel
All required development packages are distributed via npm. In order to install them in a local directory run:
npm install
Frontend is based on last development version of enyo.
(dated january 2017) While this definitely is not the cool and jazzy latest
technology, it provides us with a sensible UI toolkit for TV-based application
that seems to work pretty well with versions of webOS as old as 1.x. We are
currently using enyo built-in enyo-dev packager. This requires us to write
code that'll be run directly on target platforms (no babel/transpilation of newer
ES dialects - no arrow functions, no const, no promises, etc.). In the future
we may migrate to some webpack-based solution around that.
Service is packaged using webpack & babel, thus, with enough shims and patches, we can write and use some modern ES features (like Promises, arrow functions, async functions, const, etc.) while targeting NodeJS 0.10 (used on earliest webOS versions)
This is partially based on: https://webostv.developer.lge.com/develop/app-test/using-devmode-app/
http://TV_IP:9991/webos_rsaares-setup-device (-a may need to be replaced with -m if device named webos is already configured)
PASSPHRASE is the 6-character passphrase printed on screen in developer mode appares-setup-device -a webos -i "username=prisoner" -i "privatekey=/path/to/downloaded/webos_rsa" -i "passphrase=PASSPHRASE" -i "host=TV_IP" -i "port=9922"
ssh-keygen)id_rsa.pub) to /home/root/.ssh/authorized_keys on TVares-setup-device (-a may need to be replaced with -m if device named webos is already configured)ares-setup-device -a webos -i "username=root" -i "privatekey=/path/to/id_rsa" -i "passphrase=SSH_KEY_PASSPHRASE" -i "host=TV_IP" -i "port=22"
Note: @webosose/ares-cli doesn't need to be installed globally - you can use a package installed locally after npm install in this repo by just prefixing above commands with local path, like so: node_modules/.bin/ares-setup-device ...
EnyoJS is able to watch for frontend changes, but does not expose a HTTP server.
npm run build -- --watch
# ...in a separate terminal:
python -m http.server -d dist/
rm -rf dist && npm run build -- --production && npm run build-service -- --env production && npm run package
rm -rf dist && npm run build && npm run build-service && npm run package && npm run deploy && npm run launch
ssh root@10.0.0.2 -p 9922 /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/elevate-service
npm run build-service && \
cat dist/services/service.js | ssh root@10.0.0.2 -p 9922 sh -c 'cat > /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/service.js && pkill -f org.webosbrew.hbchannel.service'
ssh root@10.0.0.2 /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/run-js-service -k -n /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service
cp /media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/startup.sh /var/lib/webosbrew/startup.sh
npm version minor
git push origin main --tags
Before every release following features should be verified:
Releases with startup.sh updates:
Non-installed app info page:
Installed app info page:
Homebrew Channel Self-update - reinstall/update can be force-enabled by pressing remote button 5 on Homebrew Channel app page.
Settings page:
Root execution service:
/exec and other endpoints should work correctly. Good
testing target is "Custom Screensaver" app since it uses plain /exec calls
without going through its own service.Autostart:
193 followers · starred Jul 2026
186 followers · starred Feb 2025
82 followers · starred Sep 2026
30 followers · starred Jan 2024