Skip to content

Releases: GLinnik21/plx-native

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 18:39

v0.5.0 — Auto

Until now you picked one quality and lived with the consequences: choose Original on a connection that cannot carry it and the film stalls. Auto measures the connection while you watch and moves between qualities as it changes. It is not on by default — Original still is, and you choose Auto per playback.

What's new

  • Auto quality, in the playback menu. It starts at a quality it has evidence your connection can carry, watches how long each piece of video actually takes to arrive, and moves up or down as that changes. Moving up is tried in the background first: it fetches a sample at the higher quality and only switches if that sample arrives in time, so a quality your link cannot sustain is refused before you see it rather than after.
  • It prefers your original file, and goes back to it. Auto is not a bitrate ladder with Original bolted on top. If the connection recovers enough to carry the file as it sits on your server, Auto returns to it — no re-encoding, the original picture and soundtrack, Dolby Vision and Atmos included. It only checks when it has enough buffered to pay for the check, so a marginal connection is not repeatedly interrupted by attempts to leave it.
  • It will not switch for a change you cannot see. Most of the qualities it can choose between are the same frame size, and a switch costs a rebuilt picture — so a small gain late in a film is declined outright rather than paid for.

Original and the five fixed qualities are unchanged. If you never open the Quality menu, nothing in this release changes what your television does.

Fixed

  • A quality change no longer stalls and then races. After switching down, playback could stop for a second, sprint through what it had missed, stop again, and repeat, sometimes for a minute — the switch spent the whole remaining buffer on its own transfer and handed the player an empty queue. On the case that reproduced it, the longest stall went from 8 seconds to none and the stutter from 14 affected seconds to 1.
  • A failed transfer can no longer make your connection look faster than it is. An abandoned fetch was folded into the measurement as though it had completed, so the estimate rose at the exact moment the link collapsed and the next decision was made on a number that could be an order of magnitude too high.

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television: an LG 49SM9000PLA, which reports platform release 4.10.2 (LG markets this generation as webOS 4.5). The on-device suites run against a live Plex Media Server before every release, and a further tier exercises Auto over a deliberately throttled link.
  • Plays video, reported by someone else — one 2021 set. mariotaku of webosbrew ran v0.2.1 on an LG 65UP7560AUD (platform release 6.5.2) on 2026-08-11 and got a picture: issue #22. Six of eight attempts played. That is one set, one firmware, one report, and it remains the only time video has been seen on anything but the developer's own television.
  • Starts, and nothing further is known — every other firmware from webOS 4.0 up. The loader resolves this binary's libraries and symbols cleanly against all nine firmware images webosbrew has at 4.0 or newer, webOS 4.4.2 through 11.2.0. That grades startup and says nothing at all about whether video plays; the matrix is in the technical audit.
  • Does not start — webOS 3.9.2 and older. Symbols the app needs are missing from those firmwares, so the process is killed before anything appears. Installing it there gets you a tile that does nothing.

If your set is in the middle two groups, tell us what happened. It working is as useful a report as it failing.

Known issues

  • Every server transcode fails on platform release 10.3.1 — which means Auto and the five fixed qualities, leaving only Original. Measured on a rented set on 2026-08-27: that television refuses an H.264 stream at the dimensions the app declares, before a frame is decoded. HEVC at the same ceiling plays, so direct play of an HEVC file is unaffected. Not fixed in this release.
  • Auto has only been exercised in a laboratory — one television, one server, and a link throttled on purpose. A link that degrades slowly, or a server already busy transcoding for somebody else, has not been observed anywhere.
  • Playback on webOS 5, 7, 8, 9 and 11 is unverified. The app starts there and nobody has reported watching anything.
  • Servers behind Plex's relay, and servers that require an encrypted connection, are reached but have not been watched end to end.
  • The app ignores the frame-rate limit in your television's own codec table, so a set that decodes 4K only at 30 frames per second is not told about it.

Help test this release

If your connection to your server is slow, congested or over Wi-Fi, try Auto and say what you saw. Whether the picture settled, how long it took, and whether it ever went backwards are all useful — a real link is the one thing nobody here can reproduce. Open an issue. It working is as useful a report as it failing.

If a friend has shared a library with you, try it. Unchanged from v0.4.0 and still true: a share reached at a public address, one that requires an encrypted connection, one behind Plex's relay, and an account with several shares at once are all paths nobody here can reproduce.

Installing

Download com.beb.plxnative_0.5.0_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.

Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:

b1d01621d40b11518b9f9ecd6574d31f7b1ccf9357e05e02051d2c676c0048bb  com.beb.plxnative_0.5.0_arm.ipk

Installing and checking a download covers the other assets, how to check the hash on each platform, and the Developer Mode expiry that uninstalls your apps. This package bundles FFmpeg under LGPL-2.1-or-later and its complete corresponding source is attached to this release. Exactly what was built, verified and shipped is in the technical audit for v0.5.0.

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 22 Aug 16:03

v0.4.1 — the buttons answer

This release is for the presses that went nowhere. Four transport keys on the remote were bound to numbers this television does not send, so Fast-forward and Rewind did nothing at all. Every control but a card activated on the key-down with no sign it had been pressed. And any sung line of subtitle drew its music note as an empty box. None of the three was visible from inside the code; all three were found by looking at a television.

What's new

  • The remote's transport keys work. Fast-forward and Rewind seek, Play/Pause toggles, Exit closes the app. None of them did anything before, and the reason is worth stating because it is the kind of mistake that hides for a year: they were bound to the wrong numbering system. LG's televisions report two different sets of key codes — the web keyCodes a browser app sees, and the native scancodes a native app sees — and four of this app's constants had been taken from the first while everything that actually worked came from the second.
  • Every control answers a press. The dip-and-ring the design system specifies — the control sinks under your thumb, rings as you release, and acts a beat later so the ring is on screen — was implemented and reachable from exactly one place, so every other button acted on the key-down with no feedback at all. Seven rows have it now: the Home and detail hero rows, the player's transport row, the Info card's actions, the exit alert's two answers, the profiles footer and the onboarding pill — on the pointer as well as the keyboard. The detail page's season strip gained the control face it was specified to have. One consequence worth knowing: the exit alert no longer quits on the key-down, so the sheet stays up through the whole animation, which is right for the one press in the app that ends the process.
  • The player says what the transport is doing. A small mark beside the elapsed clock: a pause bar while paused, a rewind or fast-forward mark while you are travelling, and a play mark for about two seconds after you resume. Nothing at all while it is simply playing — it reports state, it is not a row of buttons — and the direction is read from where the playhead is going rather than from which key you pressed, so a chapter jump gets it too.
  • The television confirms Dolby Vision. v0.4.0 declared it for the first time and deliberately would not claim the set acted on it. It acts on it: on the 2019 set, a Profile 5 film moves the panel into its Dolby Vision picture mode and a Profile 8 film does the same, while a Profile 7 film — the dual-layer kind this pipeline cannot feed — is refused for direct play and the panel lands on HDR10 instead, which is exactly what refusing it is supposed to produce. Three files, three states the television reports for itself. This is one television; whether yours does the same is worth telling us.

Fixed

  • A sung line of subtitle showed two empty boxes instead of music notes. Neither the shipped font nor any font on the television contains the music-note characters subtitle files use to mark singing, so every song lyric in every library rendered them as the "missing glyph" box. The four characters are now drawn into the font the app ships.
  • The splash screen was very nearly black, which is what a television looks like when it has not started. Its black point is lifted to the app's own background colour, so it also stops stepping brighter the moment the interface appears.
  • The app declared it needed 60 MB and peaks at about 150. webOS substitutes 120 MB when an app declares nothing, so the old figure asked the television for less room than saying nothing would have. It declares 160 now.

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television: an LG 49SM9000PLA, which reports platform release 4.10.2 (LG markets this generation as webOS 4.5). A 21-case suite runs on that set against a live Plex Media Server before every release.
  • Plays video, reported by someone else — one 2021 set. mariotaku of webosbrew ran v0.2.1 on an LG 65UP7560AUD (platform release 6.5.2) on 2026-08-11 and got a picture: issue #22. Six of eight attempts played. That is one firmware, one set, one report, and it remains the only time video has been seen on anything but the developer's own television.
  • Starts, and nothing further is known — every other firmware from webOS 4.0 up. The loader resolves this binary's libraries and symbols cleanly against all nine firmware images webosbrew has at 4.0 or newer, webOS 4.4.2 through 11.2.0. That grades startup and says nothing at all about whether video plays.
  • Does not start — webOS 3.9.2 and older. Symbols the app needs are missing there, so the process is killed before anything appears.

If your set is in the middle two groups, tell us what happened. It working is as useful a report as it failing.

Help test this release

If your remote has Fast-forward, Rewind or Play/Pause keys, tell us whether they work. This release binds them for the first time, to codes read out of the television's own key table rather than guessed — but LG's documentation says the Magic Remote has no transport keys at all, so the only remotes that can answer are the ones this project does not own. Press them during playback and say what happened. Open an issue. It working is as useful a report as it failing.

If a friend has shared a library with you, try it. Unchanged from v0.4.0 and still true: a share reached at a public address, one that requires an encrypted connection, one behind Plex's relay, and an account with several shares at once are all paths nobody here can reproduce.

Known issues

  • Text outside the Latin, Greek and Cyrillic ranges the shipped font covers — Chinese, Japanese, Korean, Arabic, Hebrew, Thai — draws as empty boxes, in titles and subtitles alike. The music notes fixed in this release were one instance of this; the general case needs a second font and is not done.
  • Plex Relay, servers that require secure connections, and servers reached by hostname or IPv6 — the app speaks plain HTTP to a numeric address and has no name resolver, so none of those can be dialled at all.
  • The app still asserts 10-bit decoding without asking, because the television's codec table has no column for bit depth. Codec and resolution are read from the set; this one claim is not.
  • Dolby Vision Profile 7's enhancement layer cannot be fed by this pipeline and is refused; those files play as HDR10. Whether a television other than the 2019 set tested here enters its Dolby Vision mode on this app's declaration is unconfirmed.
  • On webOS 5 and newer, seeking reloads the stream instead of moving within it. It works and it is slower, and nobody has yet watched it happen on hardware.

Installing

Download com.beb.plxnative_0.4.1_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.

Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:

4eef7d9fbb29e3b31b8180df0df5f07a92eb3c788fda93226681b70eddc79ad0  com.beb.plxnative_0.4.1_arm.ipk

Installing and checking a download covers the other assets, how to check the hash on each platform, and the Developer Mode expiry that uninstalls your apps. This package bundles FFmpeg under LGPL-2.1-or-later and its complete corresponding source is attached to this release. Exactly what was built, verified and shipped is in the technical audit for v0.4.1.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 22 Aug 09:28

v0.4.0 — a friend's library beside your own, and a picture that declares what it is

Until now this app browsed exactly one server: the first one your account owns that answered on your own network. This release uses the whole list your Plex account has — the servers you own and the ones friends have shared with you — puts them side by side on Home and in the library list, and adds a Search screen the television's own keyboard types into. It also tells the television when a file is Dolby Vision or Dolby Atmos, which it never did before, and it closes a way of getting past a profile's PIN.

If a PIN protects a profile on your television: install this one

A PIN on a Plex Home profile could be skipped at the television's who's-watching screen. From the boot picker, pressing BACK entered the app as whoever was signed in last — no code typed. In the ordinary arrangement the protected profile is the adult's, so this handed a child the adult's library, its watch history and its unrestricted content.

v0.1.0, v0.2.0, v0.2.1 and v0.3.0 are all affected. This release is not. Nothing left the television and no credential was exposed to anyone off it; what was wrong is who the app let in at its own front door.

What to do: install this release. There is nothing to rotate and nothing to sign out of, and your profiles and PINs on plex.tv were never involved.

What is fixed, and what is not: BACK at the boot picker now refuses to resume a protected profile, and the second road to the same place — a picker raised over no profile at all — is closed with it. BACK still resumes silently from the change-profile picker and from the picker inside sign-in, deliberately: in both of those the person holding the remote has just identified themselves. Plex's own parental controls are the server's and are untouched by any of this.

Before you use a server that is not on your own network

This app talks to your Plex server in plain text, with your access token in the address. That token is a password to that server: anyone who can see the traffic can browse and stream that library. Sign-in to your Plex account uses an encrypted connection; the traffic to a media server does not, and never has.

What changes here is where that traffic goes. v0.3.0 and earlier only ever dialled an address on your own network, so it stayed there. This is the first release that will reach a server over the internet — and that is normally how a friend's shared server is reached, because the address a share advertises is a public one.

What to do: if your own server is on the same network as the television, nothing changes for you — that address is still preferred and still used. If you use a library a friend has shared, treat it as you would any unencrypted connection over the internet, and share only with people and networks you are comfortable with. There is no setting for this yet.

What is fixed, and what is not: nothing here is a leak that has already happened, and no earlier release is affected — this is a new reach, disclosed because it is new. Encrypted connections to a media server are not implemented at all, which is also why servers that require them still cannot be reached.

What's new

  • A friend's library, beside your own. The app asks your Plex account for every server it can reach rather than stopping at the first one it recognised, and holds them all at once. Each is a separate authority with its own access grant, so a shared server is browsed with the access your friend gave you and nothing else. Home is a merge of every source, and a shelf that came from somebody else's server says whose it is beside its title. The library list holds their libraries next to yours, with a Source control for narrowing to one. An item page tells you whose copy you are looking at, and where the same film exists on more than one of your servers it offers the other copies as a list you can walk into. Playing an item goes to the server it came from, and so does marking it watched.
  • A server that does not answer is reported as a source that failed, naming whose it is, instead of taking Home down with it or spinning forever.
  • Search, as the strip's last pill. The television's own keyboard types into it, results come back grouped by kind — films, shows, episodes, people, collections — and every server you can reach is searched at once, so one query covers your library and a friend's together. A person found in both is folded into one result rather than listed twice. Recent searches are offered when the field is empty.
  • Dolby Vision and Dolby Atmos are declared to the television. The app reads the Dolby Vision configuration record out of the container and tells the pipeline what the stream is. It never did before: every file went down as ordinary HEVC, which is why a Profile 5 file played in visibly wrong colours — its base layer is not meant to be shown as-is, and nothing had said so. A Profile 5 file whose base layer cannot stand on its own is now refused for direct play rather than shown wrongly, and so are the enhancement-layer profiles this pipeline has no way to feed. Dolby Atmos is the audio half of the same envelope, forwarded the way LG's own applications do it.
  • A single material under the whole interface. The top bar, the menus, the popovers and the panels are drawn on one glass material that samples the page behind them, instead of each surface choosing its own weights and drifting from its neighbours. Four kinds of panel arrived with it: the app's one decision alert, an About sheet, a person's full biography, and a file inspector showing what a title's video and audio tracks actually are. Press and hold on any card opens its context menu.

What is not known about Dolby Vision: nobody has watched a television's own Dolby Vision indicator come on. What has been seen on the developer's set is the layer below that — the pipeline accepting the declaration, and its display-management stage running through a film without missing a lookup. That is good evidence and it is not the same claim, so it is not made here.

Fixed

  • A PIN on a profile could be skipped at the who's-watching screen. Above — it is a thing the release completes rather than a thing you do, so the whole of it is up there.
  • A Dolby Vision film played in the wrong colours. Nothing told the television the stream was Dolby Vision, so a Profile 5 file went down as ordinary HEVC and its base layer was shown raw.
  • Marking something watched went to whichever server you happened to be browsing. It goes to the item's own server now — and where more than one of your servers holds the same title, to every one of them, so the mark does not come back the next time you open the other copy.
  • Stopping playback always returned to Home, whatever page you had started it from.
  • A resume bar and a "1 min left" caption on something you had finished. Two copies of the same in-progress rule had drifted apart, and the grid read both in one pass.
  • The Home hero offered "Continue" and then played from the beginning. The label accepted any saved position while the press refused one under ten seconds or past 95%.
  • A library page that failed to load spun forever with nothing on screen admitting it. A failed page is a state now, and an empty answer is not treated as a failure.
  • The app could exit with no message at all. A shader that failed to compile printed to a file the event log is not, and then quit — so it vanished leaving no line and no crash. A refused detail fetch, a refused season or artwork fetch, a truncated response body and a non-2xx status were all silent in the same way; each says so now.

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television: an LG 49SM9000PLA, which reports platform release 4.10.2 (LG markets this generation as webOS 4.5). A 21-case suite runs on that set against a live Plex Media Server before every release.
  • Plays video, reported by someone else — one 2021 set. mariotaku of webosbrew ran v0.2.1 on an LG 65UP7560AUD (platform release 6.5.2) on 2026-08-11 and got a picture: issue #22. Six of eight attempts played. That is one firmware, one set, one report, and it remains the only time video has been seen on anything but the developer's own television.
  • Starts, and nothing further is known — every other firmware from webOS 4.0 up. The loader resolves this binary's libraries and symbols cleanly against all nine firmware images webosbrew has at 4.0 or newer, webOS 4.4.2 through 11.2.0. That grades startup and says nothing at all about whether video plays.
  • Does not start — webOS 3.9.2 and older. Symbols the app needs are missing there, so the process is killed before anything appears.

If your set is in the middle two groups, tell us what happened. It working is as useful a report as it failing.

Help test this release

If a friend has shared a library with you, try it. The whole of this release's main feature has been exercised against exactly one shared server, on one account, from one television. A share reached at a public address, one that requires an encrypted connection, one behind Plex's relay, and an account with several shares at once are all paths nobody here can reproduce.

If you have a Dolby Vision television, tell us whether it says so. This release is the first to declare Dolby Vision to the set, and the only evidence anyone has is from the pipeline's own log on one 2019 television. Play a Dolby Vision film and look at what your set reports on its own info screen. A photograph of that is the whole report. Open an issue. It working is as useful a report as it failing.

Known issues

  • **Plex Relay, servers that ...
Read more

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 16:24

v0.3.0 — it stops asking your server for something only a subscription can give

If your Plex Media Server does not have a Plex Pass, earlier releases could not play anything that was not an MKV file: the app asked the server for a conversion only a paid subscription can perform, and there was no second choice. This release asks for something every server can do, plays MP4 directly so most files need no conversion at all, and says plainly what happened when a server still refuses.

What's new

  • A server without a Plex Pass can play your library. When a file cannot be played as it is, the app asks the server to convert it and has to name the formats it will accept. It named exactly one — HEVC — and encoding HEVC is a Plex Pass feature, so on a server without the subscription there was nothing legal to ask for. The request is now a list in order of preference ending in H.264, which every server can encode: a server with a Plex Pass still gets the better format, and one without still gets a picture. Binge-watching was caught by the same rule and is fixed with it.
  • MP4 and M4V files play directly. Most of a normal library now never asks the server to convert anything at all. The direct-play rule had been MKV-only since long before the demuxer that made it necessary was replaced.
  • The app no longer assumes your television is the developer's. It used to claim HEVC, 4K and 10-bit because that is true of the one set this project owns. It now reads the codec table your television publishes for its own media stack and reports what that says — per codec, with the real maximum resolution and frame rate, and where two rows describe the same decoder with different numbers, the lower ones win. If the table cannot be read, the old assumptions are used unchanged and the choice is written to the log. The webOS version reported to Plex is your television's real one too, rather than a number compiled in from the developer's set.
  • A failure says what failed. Where a black screen used to be, there is now a full-screen message naming the cause — and where the server refused, it quotes the server's own sentence underneath, which is the line that actually identifies the problem. When a server refuses before sending anything, the app finds out before playback starts rather than after a stream has silently arrived with no video in it.
  • A page says how a title will play before you press anything — directly, as a container change, or as a conversion — and warns when a conversion will flatten HDR to SDR. Where a feature genuinely needs a Plex Pass on the server, the name is shown as a plain label beside it. This app sells nothing and links nowhere; a subscription is mentioned only where it changes what happens next, and never guessed at.

Fixed

  • Two of the app's three log files were readable by anything else on the television. They live in the shared /tmp, and plxnative-crash.log and plxnative-stderr.log were created mode 0644 rather than 0600. The crash log holds a faulting address and a memory map, the stderr log holds whatever an abort prints, and neither is known to carry anything about your server or your account — the event log, which does record your server's name, its address, profile names and episode titles, was already 0600 and is unchanged. All three are 0600 now, including one left behind by an earlier version, so installing this release completes the fix and there is nothing for you to do. Found by measuring the file modes on the television while checking this release's own claims about them.
  • Nothing but MKV files would play on a server without a Plex Pass. The conversion request named one format that requires the subscription.
  • MP4 and M4V files were converted rather than played directly.
  • The next episode would not start on a server without a Plex Pass. Same single-format request.
  • A stream that arrived with no video in it reported "no video stream". True, and useless — it is now named as what it was: the server sent audio only.
  • The app reported a hardcoded webOS version to Plex. Your server's device list showed the developer's television, not yours.

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television: an LG 49SM9000PLA, which reports platform release 4.10.2 (LG markets this generation as webOS 4.5). A 21-case suite runs on that set against a live Plex Media Server before every release.
  • Plays video, reported by someone else — one 2021 set. mariotaku of webosbrew ran v0.2.1 on an LG 65UP7560AUD (platform release 6.5.2) on 2026-08-11 and got a picture: issue #22. Six of eight attempts played — H.264 at 1080p and 4K, HEVC, AAC and AC3, an episode, and an item watched to the end. The two that failed were the server-side defect this release fixes, and neither was about the television. That is one firmware, one set, one report, and it is the first time video has been seen on anything but the developer's own television.
  • Starts, and nothing further is known — every other firmware from webOS 4.0 up. The loader resolves this binary's libraries and symbols cleanly against all nine firmware images webosbrew has at 4.0 or newer, webOS 4.4.2 through 11.2.0. That grades startup and says nothing at all about whether video plays.
  • Does not start — webOS 3.9.2 and older. Symbols the app needs are missing there, so the process is killed before anything appears.

If your set is in the middle two groups, tell us what happened. It working is as useful a report as it failing.

Help test this release

If you have a 2020, 2022 or 2023 LG set — webOS 5.x, 10 or 11 — try playing something. Video has now been seen on webOS 6.5.2, on the same code path those releases take, but nobody has run it on any of them and a static check cannot tell you whether a picture appears. Seeking on those sets also takes a slower route than on webOS 4.x, and nobody has watched that either. The diagnostics panel is designed to be photographed, so one photograph is a complete report. Open an issue. It working is as useful a report as it failing.

Known issues

  • Remote-only servers, Plex Relay, servers that require secure connections, and servers reached by hostname or IPv6 — the app finds a server on your own network by numeric address, and there is nowhere to type one in.
  • The app still asserts 10-bit decoding without asking, because the television's codec table has no column for bit depth. Codec and resolution are read from the set; this one claim is not.
  • On webOS 5 and newer, seeking reloads the stream instead of moving within it. It works and it is slower, and nobody has yet watched it happen on hardware.

Installing

Download com.beb.plxnative_0.3.0_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.

Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:

b9ffc0f4d957d57a291709620338c4e28aaaddad5d568333140b16b9740d5677  com.beb.plxnative_0.3.0_arm.ipk

Installing and checking a download covers the other assets, how to check the hash on each platform, and the Developer Mode expiry that uninstalls your apps. This package bundles FFmpeg under LGPL-2.1-or-later and its complete corresponding source is attached to this release. Exactly what was built, verified and shipped is in the technical audit for v0.3.0.

v0.2.1 — the diagnostics read-out

Choose a tag to compare

@GLinnik21 GLinnik21 released this 10 Aug 15:28

v0.2.1 — so a broken television can report itself

Playback does not start on webOS 5 and newer, and nobody working on this owns such a television. This release adds an on-screen diagnostics read-out you can photograph, and fixes the two ways the app used to fail with no message at all.

If you used v0.2.0 or earlier: rotate your Plex token

The app's diagnostic log recorded a URL containing your Plex access token in full, written whenever an audio track was switched. Anyone holding that token can reach your Plex account and your media as you. The log file was readable by any process on the television, and earlier release notes asked people to send that file in when reporting a problem — so nothing had to go wrong at your end for this to matter.

Every release up to and including v0.2.0 is affected. This one is not.

What to do: open https://app.plex.tv/desktop/#!/settings/devices, remove this device, and sign in again on the television. That invalidates the old token. It costs you one QR scan.

What is fixed, and what is not: the token is never written now, and every line the app's own logger emits passes a scrub on the way out, so the same mistake cannot recur through a different call site. The log still records your server's name, its address and what you have been watching — that is what it is for — so it is still not a file to post publicly. The new diagnostics panel is different: it carries none of that, by design.

What's new

  • A diagnostics read-out you can photograph. During playback press the button on the on-screen controls — the third round one, beside Subtitles and Audio — and tick Stats for nerds. A panel appears showing what the app is actually doing: which video-plane mechanism your firmware uses, how far the pipeline got, whether the demuxer produced anything, what was fed to the decoder and whether it was accepted, HTTP status, and the codec chain from your file through your server to what was declared to the decoder. It stays up while you watch, takes no buttons, and turns off by unticking the same box.
  • Two silent failures now say what happened. Both used to leave a spinner on screen forever with nothing in the log: a demuxer that opened the stream and produced no frames now reports a playback error, and a Load the television's media pipeline refused now reports one too, instead of waiting for a completion callback that can never arrive.

The panel deliberately shows no server name, no address, no account details and no media title, so it is safe to post publicly. The rest of the photograph is your television, though — pause on something you do not mind posting, or crop to the panel.

Fixed

  • The exported window was told a 4K stream was 1080p on webOS 5 and newer, so the video plane was set up for the wrong source size.
  • The on-screen controls were unreachable in exactly the state worth reporting. With playback stuck buffering and the controls timed out, the app treated them as hidden while still drawing them, so focus could never reach the buttons — including the new .

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television, which reports platform release 4.10 (LG markets this generation as webOS 4.5).
  • Starts, signs in and browses, but video does not start — webOS 6 and 10. Reported on real hardware by mariotaku of webosbrew on 2026-08-09, running v0.2.0 (apps-repo#224): the app opens and the library works, and pressing play leaves a spinner that never resolves. Nothing else there is known to be broken.
  • Starts, and nothing further is known — every other firmware from webOS 4.0 up. Checked against fourteen real firmware inventories. That grades whether the process starts and says nothing about whether video plays.
  • Does not start — webOS 3.9.2 and older.

If your set is in the middle two groups, tell us what happened. It working is as useful a report as it failing.

Help test this release

If you have a webOS 5, 6 or 10 television, one photograph settles what has been guesswork for weeks. Turn on the diagnostics panel as above, photograph it, and open an issue. That is the whole bug report. It working is as useful a report as it failing.

Known issues

  • Playback does not start on webOS 5 and newer. If you have such a set, the diagnostics panel turns that into a report we can act on.
  • Codec capability is asserted rather than probed. The app tells your server it can handle HEVC, 4K and 10-bit because the developer's television can. On a lower-end panel that is wrong, and so is the fallback.

Installing

Download com.beb.plxnative_0.2.1_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.

Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:

019b4e1405afb8cea88d99c7da5125e0bc9888294a71297938536309801a5ca3  com.beb.plxnative_0.2.1_arm.ipk

This release was built and published by hand rather than by GitHub Actions, which is why two things below are true of it and of no other release. Compare the hash yourself — the ipk.sha256 asset records a path rather than a bare filename, so sha256sum -c will not find your download. And the bundled FFmpeg libraries carry the directory they were built in, so this package is not reproducible by anyone else at all; a hash from your own rebuild will differ, and that is not tampering.

This package bundles FFmpeg under LGPL-2.1-or-later and its complete corresponding source — the pristine upstream tarball and the exact configure invocation — is attached to this release. Installing and checking a download covers the rest, and exactly what was built, verified and shipped — including which release gates did not run — is in the technical audit for v0.2.1.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 10:38

v0.2.0 — it brings its own FFmpeg, and starts on far more televisions

The app no longer depends on which FFmpeg your television happens to ship, and it starts on a much wider range of webOS releases than before.

If you used v0.2.0 or earlier: rotate your Plex token

The app's diagnostic log recorded a URL containing your Plex access token in full, written whenever an audio track was switched. Anyone holding that token can reach your Plex account and your media as you. The log file was readable by any process on the television, and this release's own notes asked people to send that file in when reporting a problem — so nothing had to go wrong at your end for this to matter.

Every release up to and including this one is affected. v0.2.1 and later are not.

What to do: open https://app.plex.tv/desktop/#!/settings/devices, remove this device, and sign in again on the television. That invalidates the old token. It costs you one QR scan.

What is fixed, and what is not: from v0.2.1 the token is never written, and every line the app's own logger emits passes a scrub on the way out, so the same mistake cannot recur through a different call site. The log still records your server's name, its address and what you have been watching — that is what it is for — so it is still not a file to post publicly.

What's new

  • The package brings its own FFmpeg. Previously the app read your media files with the television's copy — a version that changes with the firmware, and whose contents cannot be determined from outside, so on any set but the developer's it was a guess. It now ships its own build (FFmpeg 9.0, demux and subtitles only; video and audio are still decoded by your television's hardware). Playback behaves the same on every television, and a problem you hit is one that can be reproduced.
  • It starts on far more televisions. v0.1.0 could not launch at all past webOS 4.x — not "playback failed", but the dynamic loader refusing to start the process, because the app named libraries that exist only on 4.x. It resolves what it needs at run time now instead of demanding one exact version.
  • Groundwork for televisions whose interface surface is not 1080p, and a good deal of internal simplification.

Fixed

  • A latent black-screen bug. The app told SDL it was built against an older version than it was. Newer SDL rejects that and quietly hands back nothing, which would have left the interface opaque and video playing invisibly underneath it — sound, no picture, and nothing in the log.
  • The diagnostic log was corrupting itself. Two parts of the app wrote to it with different ideas of where the end of the file was, so lines were overwritten and lost. It also has sane permissions now; it used to be world-readable.

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television, which reports platform release 4.10 (LG markets this generation as webOS 4.5).
  • Starts, and nothing further is known — webOS 4.4.2 through 11.2.0. Checked against fourteen real firmware inventories. That grades whether the process starts and says nothing about whether video plays.
  • Playback is not expected to work on webOS 5.0 and newer. On 5.0 LG removed the mechanism that puts decoded video on the hardware plane. The replacement is implemented in this release and has never run on such a set — nobody working on this owns one.
  • Does not start — webOS 3.9.2 and older.

If you have a set in the middle two groups, tell us what happened. It working is as useful a report as it failing.

Known issues

  • Playback on webOS 5.0 and newer is unproven and expected to fail. The app starts, signs in and browses there.
  • Codec capability is asserted rather than probed. The app tells your server it can handle HEVC, 4K and 10-bit because the developer's television can. On a lower-end panel that is wrong, and so is the fallback.

Installing

Download com.beb.plxnative_0.2.0_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.

Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:

ef5983c8cd523187625b937f36fa0946145244f7cac4e902b499d9553e5d1968  com.beb.plxnative_0.2.0_arm.ipk

Compare it yourself — the ipk.sha256 asset on this release records a path rather than a bare filename, so sha256sum -c will not find your download. Two builds of this commit on one machine produce a byte-identical .ipk; it is not reproducible across machines, because the bundled FFmpeg records the directory it was built in, so a hash from your own rebuild will differ and that is not tampering.

This package bundles FFmpeg under LGPL-2.1-or-later and its complete corresponding source — the pristine upstream tarball and the exact configure invocation — is attached to this release. Installing and checking a download covers the rest, and exactly what was built, verified and shipped is in the technical audit for v0.2.0.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 18:40

v0.1.0 — the first native build

A native Plex client for LG webOS: the interface is drawn with OpenGL ES 2 and video is decoded by the television's own hardware, rather than everything running in a browser.

This version is superseded — install the latest release instead. It cannot start at all on webOS 5 or newer, and it reads your media through whichever FFmpeg your television happens to ship.

If you used v0.2.0 or earlier: rotate your Plex token

The app's diagnostic log recorded a URL containing your Plex access token in full, written whenever an audio track was switched. Anyone holding that token can reach your Plex account and your media as you. The log file was readable by any process on the television, so nothing had to be sent to anyone for this to matter.

Every release up to and including v0.2.0 is affected. v0.2.1 and later are not.

What to do: open https://app.plex.tv/desktop/#!/settings/devices, remove this device, and sign in again on the television. That invalidates the old token. It costs you one QR scan.

What is fixed, and what is not: from v0.2.1 the token is never written, and every line the app's own logger emits passes a scrub on the way out, so the same mistake cannot recur through a different call site. The log still records your server's name, its address and what you have been watching — that is what it is for — so it is still not a file to post publicly.

What's new

  • It signs in on the television. An on-screen QR code, then pick a Plex Home profile, browse and play.
  • Direct play wherever your television can decode the file. The server is asked to convert only when it genuinely cannot.
  • The playback you would expect. Resume, seek and scrub, chapters, audio and subtitle track switching, and progress reported back to your server.

Compatibility

  • Plays video, verified by watching it — 2019 LG sets. One television, which reports platform release 4.10 (LG markets this generation as webOS 4.5).
  • Starts — webOS 4.4.2 up to but not including 5.0. That range is the whole of it: this release links directly against libAcbAPI and against FFmpeg library names that exist only on webOS 4.x, and a linked library name is a hard requirement for one exact name.
  • Does not start — webOS 5.0 and newer. The dynamic loader kills the process before anything appears. Installing it there gets you a tile that does nothing.

This is why the package declares webosRelease: '>=4.0, <5.0'.

Known issues

  • Nothing at all on webOS 5.0 and newer — the app does not start.
  • Codec capability is asserted rather than probed. The app tells your server it can handle HEVC, 4K and 10-bit because the developer's television can. On a lower-end panel that is wrong, and so is the fallback.
  • Playback behaviour depends on your firmware, because the app reads your media through the television's own FFmpeg, and which parts of it LG compiled in cannot be determined from outside.

Installing

Download com.beb.plxnative_0.1.0_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.

Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:

fc0a67de5ff6e209f1ca36add1b34cb689fa71d50a5e47dfac3631c788995105  com.beb.plxnative_0.1.0_arm.ipk

Compare it yourself — the ipk.sha256 asset on this release records a path rather than a bare filename, so sha256sum -c will not find your download. shasum -a 256 com.beb.plxnative_0.1.0_arm.ipk on macOS or Linux, certutil -hashfile com.beb.plxnative_0.1.0_arm.ipk SHA256 on Windows. If the Homebrew Channel installs this for you from its catalogue it verifies the download on the television itself and you have nothing to do.

This release bundles no FFmpeg and no other third-party library, so no LGPL redistribution obligation arises from the package. Installing and checking a download is the longer version, and exactly what was built and shipped is in the technical audit for v0.1.0.