Dev.to · 10 min read

PlxNative: A Fast Native Plex Client for LG webOS TVs, Built in Rust

PlxNative: A Fast Native Plex Client for LG webOS TVs, Built in Rust

Most smart-TV apps are web pages. On LG's webOS that usually means JavaScript running inside a browser engine, which then hands its output to a compositor before anything reaches the screen. PlxNative is a Plex client for LG webOS TVs that takes that layer out. Its developer, Gleb Linnik, writes in the README: "No Chromium, no JavaScript, no web view. It just draws." This is an explainer, built from the project's README, its docs, its source and its release notes. I don't own an LG TV, so nothing here was tested on a real television. What I did run is the project's own Linux desktop simulator against its mock Plex server, and that section near the end shows exactly what that does and doesn't tell you. What PlxNative is An unofficial Plex client for LG webOS TVs. It is not made by or affiliated with Plex or LG; the project says so on its site and in TRADEMARKS.md. Open source under GPL-3.0-or-later, © 2026 Gleb Linnik. The PlxNative name and brand artwork are excluded from the licence. One person's project. The README calls it "one person's spare time". Current release: v0.8.0, published on GitHub on 7 October 2026. Nightly builds already report 0.9.0-nightly. Young and active. The repository was created on 3 July 2026, and when I checked on 16 October it had 969 stars and 95 forks, with commits landing the same morning. Free. There's no paid tier. You need a Plex account and a Plex Media Server, and the FAQ confirms a free Plex server works. Why it exists The origin story is short. The developer's 2019 LG TV still had a great picture, but browsing a Plex library on it "felt slower than it needed to." Rather than tune a web app, he wrote a native one. In his words: "I use it every day to watch things off my server in the next room." The site makes the argument with a pair of stacks. A typical TV app goes: The app (a web page) -> JavaScript -> Browser engine -> Compositor -> OpenGL -> GPU -> Screen PlxNative goes: The app (native code) -> OpenGL -> GPU -> Screen The claimed result is 60 fps on that 2019 set. I couldn't measure that, and the project itself says the simulator can't either. More on that below. The architecture Mostly Rust, with a thin C shell The repository is overwhelmingly Rust. A rough line count on the current main gives about 576,000 lines of .rs files against about 7,300 lines of C and C++. That count includes tests and generated data, so treat it as a ratio, not a measure of features. The structure is spelled out in rust-modules/Cargo.toml. It's a Cargo workspace whose root crate is linked into a small C app as a static library: # Static library linked into the C app (hybrid migration): each ported module # exposes the same C ABI its src/*.h declares, so the C code calls it unchanged. [lib] name = "plxnative_modules" The workspace is split into layer crates: base, machine, net, platform, gfx, ui, plex, telemetry, data, session, media, appkit, screens and storage. docs/module-layers.md describes how they depend on one another. A GPU-drawn interface The UI goes through SDL2 and OpenGL ES (both are listed in the repo's topics), so there's no DOM and no layout engine. The design language is translucent "glass" panels over your own posters and backdrops, with text sized for reading across a room. The docs folder holds design notes on liquid glass, backdrop blur and a hardware budget for the glass effect, which gives a sense of how much of the work goes into making that look cheap enough for TV silicon. Video on the TV's own decoder Playback doesn't decode video in software. The README says the app "hands video to the same silicon the built-in apps use". In the code, that goes through a video-sink trait in the platform crate. On the TV it's implemented by a StarfishSink, which talks to LG's Starfish media APIs, and on the desktop by a HostSink. What it can direct-play, per the README: H.264 and HEVC, including 4K and 10-bit Dolby Vision profiles 5 and 8 E-AC-3 with Atmos AV1 or VP9 (10-bit VP9 only on webOS 4 sets), on TVs whose codec table lists that decoder Anything else is transcoded by your Plex server. Before you press Play, the detail page shows whether a title will play directly or be converted on the server. The app also ships its own LGPL build of FFmpeg. Features From the README, the site and the 0.8.0 release notes: Sign in on the TV by scanning a QR code with your phone, then pick a Plex Home profile. PIN-protected profiles are supported. Browse your own and shared libraries, with Continue Watching, Recently Added, sort, filters (including unwatched-only) and an A–Z rail. Search across every server you can reach, with results grouped by kind. A full player with resume, seek and scrub, chapters, audio and subtitle tracks (image subtitles included), Skip Intro, Skip Credits, Up Next with auto-advance, and progress synced back to Plex. New in 0.8.0: subtitle search from inside the player, ASS/SSA subtitles that keep their styling, browsing Plex collections, Boost dialog and Normalize loudness on servers with Plex Pass, a Settings section for playback, and Spanish and Belarusian translations. Works without internet after the first sign-in. The app talks to your server directly, so the library keeps working on your home network when the internet is down. Privacy defaults. Crash reports and usage analytics are two separate opt-in questions, both off until you say yes. The README says no title, search term, subtitle line, server name or address can appear in any report. The app talks to your Plex server, to plex.tv to sign in, and to discover.provider.plex.tv for cast biographies. 0.8.0 also changes one security behaviour. Some home servers only answer over plain HTTP. Earlier versions refused to send your Plex sign-in that way. 0.8.0 will connect, but only after asking "Connect without encryption?", and only for a server on the same network at a private address after every secure route, Plex's relay included, has failed. How to install it PlxNative isn't in the LG Content Store yet; the site says it's "in the process of review" with no confirmed date. There are two routes, and neither needs root. Route 1: LG Developer Mode The installation guide needs an LG TV on webOS 4.0 or newer, a Plex account with a server, and a Mac, Windows or Linux computer on the same network. In short: Create or sign in to an account on LG's developer site. Install the Developer Mode app on the TV, sign in, turn on Dev Mode Status (the TV restarts) and then Key Server. Note the TV's IP address and passphrase, and connect to it from webOS Dev Manager on your computer. Install the .ipk directly, or install Homebrew Channel first and get PlxNative from its catalogue. For a manual download, verify the package first: sha256sum -c ipk.sha256 The catch is renewal. Developer Mode sessions expire, and if one lapses LG removes the apps installed through it. The guide's advice is to open the Developer Mode app and press EXTEND before the remaining time runs out, with a calendar reminder. An expired session can't be extended. Route 2: Homebrew Channel If your TV already runs Homebrew Channel, open it, find PlxNative (a 19.6 MB download, listed as version 0.8.0) and select Install. Updates arrive there too, and the Channel checks the download's checksum before installing. Nightlies Adding https://plxnative.com/nightly/repo.json to Homebrew Channel installs PlxNative Nightly as a separate app with its own tile and sign-in. The README is blunt about these builds: "It is not tested on a television." Limits and current status The README has a section titled "The honest scope", and it's worth taking at its word: Movies and TV shows only. No music, no photos, no Live TV or DVR. No typing in server addresses. Servers come from your Plex account. Relay and secure-only servers are supported but "haven't been watched end to end." Not all TVs work. It needs webOS 4.0 or newer. A 2016 set on webOS 3.4.3 has been tested and works. The known issues list is specific: Some 2019 sets on LG's k5lp or k3lp chip, installed through Developer Mode, won't play video. The sandbox withholds a device the video path needs; Kodi and Moonlight hit the same wall. Without root there's no fix. 2018 sets on webOS 3.9.3: sign-in and browsing work, but the prebuilt v0.8.0 never starts video (#249). A source build at or after commit 60f99c7 fixes it. webOS 3.x restarts the stream on every seek instead of jumping in place. Sets on the k6hp chip show a crash in opt-in reports that the developer can't reproduce without the hardware (#174). Building the simulator on Linux Since I couldn't put it on a TV, I built the desktop simulator the docs describe. The box runs Debian 13 on x86_64 with 8 vCPUs and no GPU. The only prerequisites were the SDL2, SDL2_ttf, Mesa, CMake and pkg-config dev packages plus a current stable Rust toolchain: git clone https://github.com/GLinnik21/plx-native && cd plx-native make sim-linux SIM_TDIR=rust-modules/target-sim Compiling plxnative-modules v0.8.0 (/workspace/plxnative/repo/rust-modules) Finished `release` profile [optimized] target(s) in 3m 08s real 3m57.100s That gave a 16 MB plxnative-sim binary on the first try. The extra 49 seconds went into fetching and building the libass stack (FreeType, FriBidi, HarfBuzz and friends). The project's screenshot tool then boots the simulator against tests/mock_pms.py. That's a synthetic Plex server that also stands in for plex.tv, so no account, token or real library is involved. I ran it headless under Xvfb with software OpenGL: python3 tools/demo_library.py derive LIBGL_ALWAYS_SOFTWARE=1 xvfb-run -a -s '-screen 0 1920x1080x24' \ python3 tools/screenshots.py --bin rust-modules/target-sim/release/plxnative-sim \ --out shots --only home-shelves,library-grid,search,detail,signin Each scene settled in 2.2 to 4.9 seconds. One hiccup: the home scene also renders the website's link-preview card, and that step failed because the box lacked the file utility, so I captured home-shelves instead. The sign-in screen is the QR flow, here pointed at the mock: The Movies grid, with the sort and filter chips and the A–Z rail, browsing the project's demo library of openly licensed films: And a title page, with the "Direct Play" label next to the runtime: Be clear about what this proves. The simulator runs the same UI and Plex code as the TV build, and it boots, signs in to a fake server and draws every screen I asked for. But docs/building.md says plainly that it "cannot answer frame rate (different GPU), text rasterization, or anything about LG's decoder and video plane. Those need the set." The Linux build also has no video path at all; the Makefile notes that Play "intentionally reaches the host seam's existing 'no video path' result." So the speed and the hardware decoding, the two things PlxNative exists for, are still unverified by me. Who it's for If you run Plex at home and own a fairly recent LG TV, PlxNative is a well-documented alternative to the official app. Expect a project that tells you about its rough edges in the README. You'll need to be comfortable with Developer Mode renewals or Homebrew Channel until the LG Content Store listing lands. If you need music, Live TV or a set from the known-issues list, the README itself says the official app will serve you better. If you're a developer, the repository is interesting on its own terms: a Rust UI stack drawing straight to GPU on TV-grade hardware, with design and performance notes for almost every decision. The simulator builds in a few minutes on plain Linux if you want to look around. Site: https://plxnative.com/ Source: https://github.com/GLinnik21/plx-native

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Cybersecurity News