webOS IPTV Player icon

webOS IPTV Player

An IPTV player for LG webOS TVs. Supports M3U playlists, Xtream Codes accounts, XMLTV program guides, and catch-up/timeshift playback.

English | 简体中文

webOS 4+ Latest release GitHub downloads Project website

Screenshots

Channel list Live preview
Channel list Live preview
Recently watched Program guide
Recently watched Program guide
Catch-up resume Channel info
Catch-up resume Channel info
Playback overlays Subtitles
Playback overlays Subtitles
Subtitle search Movies
Subtitle search Movies
Movie detail Series detail
Movie detail Series detail
Search Settings
Search Settings
Theme picker Reminder manager
Theme picker Reminder manager
Parental controls LAN setup
Parental controls LAN setup

Features

Playlists & accounts

Live TV & on-demand

Playback

Navigation

Development

Unsupported features and limitations

Some features are unavailable because of webOS platform limits or design choices. See the full list.

Supported webOS versions

The app runs on webOS 4.0 (2018) and newer. Its baseline is the Chromium 53 engine on webOS 4; every later release ships a newer Chromium, so the app is forward-compatible. Features only newer engines support natively (flex gap, backdrop-filter, …) get feature-detected fallbacks on the older ones.

webOS version Released Chromium engine Bundled service Node.js Supported
webOS 4.x 2018–2019 53 0.12.2 ✅ (minimum)
webOS 5.0 2020 68 8.12.0 ✅
webOS 6.0 2021 79 8.12.0 ✅
webOS 22 2022 87 12.21.0 ✅
webOS 23 2023 94 12.22.2 ✅
webOS 24 2024 108 16.19.1 ✅
webOS 25 2025 120 16.20.2 ✅
webOS 26 2026 132 20.12.2 ✅

webOS 3.x and older (Chromium 38 and earlier) are not supported.

Prerequisites

Command-line installation and local builds require Node.js (v22+) and the webOS CLI tools:

npm install -g @webos-tools/cli

Adding the repository directly in Homebrew Channel does not require these tools.

Install on your TV

Homebrew Channel

Install the community webOS Homebrew Channel, then open Settings → Add repository and enter:

https://raw.githubusercontent.com/lennylxx/webos-iptv-player/main/homebrew-repository.json

To prefill the repository URL from a computer configured with ares-cli, run:

ares-launch --device tv org.webosbrew.hbchannel -p '{"launchMode":"addRepository","url":"https://raw.githubusercontent.com/lennylxx/webos-iptv-player/main/homebrew-repository.json"}'

Confirm Add repository on the TV. Homebrew Channel can then install the app and detect updates from later GitHub releases.

Developer Mode

  1. Download the app. On your computer, open the Releases page and download the latest .ipk file.

  2. Turn on Developer Mode on the TV.

    • Create a free account at the LG webOS Developer site.
    • On the TV, open the LG Content Store, search for Developer Mode, then install and open it.
    • Sign in with your LG developer account and switch Dev Mode Status to ON. The TV restarts. Note the IP address and passphrase the app shows.
  3. Register your TV. Add it as a device named tv (replace the IP with your TV's):

    ares-setup-device --add tv -i "username=prisoner" -i "host=127.0.0.1" -i "port=9922"

    Then fetch the device key, entering the passphrase from the Developer Mode app when prompted:

    ares-novacom --device tv --getkey
  4. Install the app.

    ares-install --device tv ./com.lennylxx.iptv_<version>_all.ipk

Development

Setup

npm install

Build

./build.sh

Build & Install to TV

./build.sh --install [device-name]

If no device name is given, the default device from ares-setup-device is used.

Debug on a TV

On Windows, use WSL 2; native Windows is not supported.

scripts/tv.sh reads the connection details for the default ares-setup-device device, so keys and passphrases do not need to be copied into commands.

scripts/tv.sh logs --app com.lennylxx.iptv       # Stream the app's DevTools console
scripts/tv.sh eval 'document.visibilityState'    # Evaluate JavaScript in the app page
scripts/tv.sh perf --duration 30                 # Sample CPU, heap, DOM, and layout
scripts/tv.sh diag                               # Capture a redacted diagnostics report
scripts/tv.sh capt screenshot screen.png         # Capture video and app OSD
scripts/tv.sh capt record screen.mp4             # Record 10 seconds, target 5 fps, no audio
scripts/tv.sh input key down ok red              # Press remote keys
scripts/tv.sh input click 700 450                # Move the Magic Remote pointer and click
scripts/tv.sh input wheel 3                      # Scroll the wheel 3 notches down at the pointer
scripts/tv.sh input key power                    # Turn the TV off
scripts/tv.sh input wake                         # Turn the TV on (Wake-on-LAN)
scripts/tv.sh run 'uname -a'                     # Run a TV command over SSH
scripts/tv.sh push ./file.txt /tmp/file.txt      # Copy a local file to the TV
scripts/tv.sh pull /tmp/file.txt ./file.txt      # Copy a TV file to this computer
scripts/tv.sh shell                              # Open an interactive SSH session
scripts/tv.sh reboot                             # Reboot the TV through Luna
TV_DEVICE=tv2 scripts/tv.sh logs                 # Select a non-default configured TV

Run scripts/tv.sh logs --help (or eval, perf, diag, capt, input) for options.

Preview in Browser

npm run preview

Opens at http://localhost:3000. Video playback uses HLS.js, mpegts.js, and Shaka on desktop.

Settings

Open with the Blue key or the Settings tab in the top bar. Sections:

Remote Control Mapping

Key Player Channel List EPG
Up/Down Channel +/- Navigate Navigate within pane
Left Open sidebar, then groups; seek −30s when available Move toward groups Previous pane or day
Right Open menu; seek +30s when available Move toward channels Next pane, day, or Reminder Manager
OK/Enter Toggle OSD; pause/resume; activate overlay Select channel Play channel/program or open Reminder Manager
Back Back out of sidebar/menu; stop & return Exit app (press twice) Close guide
Red Open EPG Open EPG —
Blue Open settings Open settings Open settings
Yellow Show OSD Edit channel list Search guide
Green Toggle favorite (in sidebar/menu) Toggle favorite (on focused channel) Jump to today
Play/Pause Pause/resume playback — —
Rewind/Fast-Forward To oldest / Go to live (live DVR) — —
Ch +/- Channel +/- Previous/next channel Jump 10 channels/programs
0-9 Direct channel entry Direct channel entry —

Movies, Series, Search, Settings, and Reminder Manager use standard D-pad navigation; Back returns to the previous view.

Docs

Implementation deep-dives for contributors — the webOS-specific behavior behind some of the features above:

License and third-party notices

This project is licensed under Apache-2.0. Third-party software and artwork retain their own licenses; see the attribution inventory. Every build includes LICENSE, THIRD_PARTY_NOTICES.txt, and a licenses/ directory in dist/, so the notices accompany the packaged app. This inventory covers the production IPK, not the additional playback libraries used only for local desktop preview.