Repository navigation
v0.8.0 — subtitle search and styled subtitles, collections, and settings for how you watch
LatestThis is the first release from the main line since 0.7.0. You can now search for a subtitle and add it from the player, styled ASS and SSA subtitles keep their styling, Plex collections can be browsed, servers with Plex Pass get Boost dialog and Normalize loudness, and there are Settings for how you watch. Home and the Library no longer cut off your shelves, and the interface is available in Spanish and Belarusian. Everything fixed in 0.7.1 is included.
If your server answers only without encryption: you will now be asked before PlxNative connects that way
Some servers answer on the home network only over plain HTTP. Earlier versions refused to send your Plex sign-in that way and stopped at "Couldn't sign in". 0.8.0 can connect, but only after you answer Connect without encryption? with yes, and only when every secure route to that server, Plex's relay included, has failed. The question appears on the sign-in screen, on the Home or Library screen that reports the failure, and in Settings → Unencrypted connections.
It is offered only for a server that plex.tv lists as being on the same network as the television, at a private numeric address. It is never offered for a remote address, for the relay, or for a server set to require secure connections.
What to do: nothing, unless you are asked. If you say yes, your Plex sign-in for that server travels without encryption across your home network, to that server only, so anyone who can observe that network could read it. Settings → Unencrypted connections turns it off again at once.
What is fixed, and what is not: the permission itself is never stored. It ends when you sign in or out, when you switch to a profile that does not use that server at that address, and when the app comes back from the background, and the app keeps retrying a secure connection and switches back as soon as one verifies. Not fixed: your answer, allowed or declined, is kept per server for your Plex account and is still on the television after you sign out or choose Delete all local data, although the privacy text says signing out removes it (issue #385). The same account signing in again gets its earlier answer back without being asked; another account is asked afresh.
If OK on a Continue Watching card used to start the video: it now opens the page
OK on a card in a Continue Watching row, on Home or in a Library, now opens that movie or episode page by default. What to do: to get the old behaviour back, choose Play under Continue Watching in Settings → Playback → Video & playback. With the default, holding OK on the card opens a menu that leads with Continue or Play. Cards outside Continue Watching, the Home hero's Play button and the episode strip do not follow this setting.
What's new
- Search for subtitles. While a video plays, the Subtitles menu ends with Search for subtitles. Pick a language, and OK on a result asks your server to download it; PlxNative turns it on when the server lists it. A result the item already has reads Added. Downloading adds the subtitle to that item in your server's library, so everyone who uses that library sees it, and your server may refuse it for an account that is not allowed to add subtitles. Long subtitle names scroll while focused. Thanks to Frank Muller.
- Styled subtitles. ASS and SSA subtitles keep their styles, positions, fonts and effects instead of showing as plain text, when a video plays directly or the server only repackages it on your local network. A server re-encode still draws subtitles into the picture itself.
- A subtitle menu that scales. Tracks are grouped by language, your own languages come first and the rest sit under Other languages, and picture-based subtitles carry a badge. Style sets size, position and colour, and Timing shifts captions earlier or later; the timing you chose is remembered for that item. Settings → Playback → Video & playback has default subtitle size and position. Subtitle timing began as a contribution from Jacopo.
- Collections. A Plex collection opens its own page with its artwork, its item count, its summary and its members in your server's order. Find collections under TYPE in a library, in Search, from a collection's shelf heading on Home and in a Library, and from the collection row on a movie's own page. A collection without its own poster is drawn as a fan of its first three posters.
- Boost dialog and Normalize loudness. In the player's Audio menu, on a server that has Plex Pass, when the video plays at Original quality. The server does the work, which can mean converting the audio, and with a subtitle showing it draws that subtitle into the picture, so Style and Timing wait until you turn the option off. Nothing is shown on a server without Plex Pass.
- Settings for how you watch. Settings → Playback → Video & playback sets your default quality and Direct Play, which is Auto unless you choose Force or Disabled; Force asks you to confirm every time, because it can mean no sound, a wrong picture or a freeze. It also sets Next episode (the Up Next countdown, After credits, or Off) and Skip interval. Up Next now appears only for credits that run to the end of the video, so an after-credits scene is no longer skipped. Audio & subtitles shows and changes the audio and subtitle language preferences that plex.tv holds for the Plex profile you are using. DTS audio is now played by the television when it says it can decode it, instead of always being converted by the server.
- Spanish and Belarusian. PlxNative follows the television's language and offers a language choice in Settings → System → Language, which applies the next time you start the app; the page says how to restart it. Thanks to Nacho for the Spanish translation and its review and to Zmicier Kachkou for reviewing the Belarusian.
- The Library remembers your view, and nothing is cut off. Each profile's sort, Unwatched switch, genre and listing type are remembered for every library. The type menu offers Seasons and Episodes in TV libraries, and Collections in both kinds. Home and the Library no longer stop at a small fixed number of shelves, and a shelf is shown in full or not at all.
- First run asks which libraries you want, on every profile. The first time a profile reaches Home, a Which libraries do you want? page lets it switch libraries on or off, on one server as well as on several; your own household's libraries start on, and Start watching keeps your choice. A server with a single library has nothing to choose and is not asked. 0.7.0 and 0.7.1 asked only when more than one server was in play, so after updating, a profile that was never asked meets the page once. Settings → Favorite libraries changes the choice later.
- Long captions and cast names scroll. On a focused card the line under the title, such as the year, an episode or a role, now glides together with the title instead of ending in an ellipsis, and so do the name and role under a cast photo. At the end of a row, a long caption ends on the card's own right edge instead of running off the screen. A cast photo that is not focused still ends a long line in an ellipsis.
- Hold OK for options. A resting Home card shows a short hint that holding OK opens its menu. It stops once you have opened an item menu, and comes back the next time you start the app.
- Artwork is kept between runs. Posters, backdrops, cast photos and profile pictures are stored in a bounded cache on the television so they do not download again after a restart. Signing out removes the cache.
- Clearer sign-in problems. The sign-in screen now says whether plex.tv or your server could not be reached, and account calls retry a few times before giving up. If your account has no server, the screen names the account you signed in as, so a wrong account is easy to spot; the name is shown on screen only and is never logged or sent. Failure screens carry a symbol and are centred.
- Look and feel. A focused tile looks like a raised pane of glass, menus are as wide as their content, the player's menus slide between pages, and Settings is reordered with About last.
Fixed
- A film whose default audio the television cannot decode played a different track instead, such as a commentary. The server now converts the audio of the track you were meant to hear and copies the picture. The film page reads "Original · audio converted", and the Audio menu marks every track the television cannot decode as converted by your server.
- A downloaded subtitle was lost the next time you played the film, and a subtitle flashed at the start. The subtitle the server selected stays selected, and the app draws an embedded subtitle itself on a repackaged video on a local connection, so Style and Timing work there.
- The screen froze after picking another audio track, subtitle or quality while a video played, until a slow server answered. The server calls now happen off the screen's thread, and a seek during a transcode pauses the old picture under the Seeking spinner while the server prepares the new stream.
- The who's-watching picker opened on the last profile instead of the first when you have more than one, and a correct PIN showed the profile list for a moment before Home.
- Posters that blinked back to grey after startup, sign-in or a profile pick, a row under the tab bar that lost its artwork one tile at a time, and a Home hero that blinked when you flipped it left or right.
- Focus that landed in the wrong place in the Library (Down, Right, Up did not return to the tile above, and focus sometimes jumped to the All heading), plus a batch of smaller focus and layout defects across Settings, Library, the item pages and failure screens.
- Home tiles drawn at the top of the screen over the hero for a frame when the shelves arrived while a menu was open, and a Home shelf heading that popped in instead of sliding with the page.
- A TV show page with many episodes ran slowly, and moving between pages hitches less.
- Signing in could say "This is taking longer than usual" when nothing was wrong. If one of your server's addresses did not answer, such as a public address your router will not loop back to, finding the server waited out that address's whole timeout, up to ten seconds, even after another route had answered. It now moves on a second and a half after a working route answers when a better-ranked one has not, and the message and its way out appear after twenty seconds of looking instead of twelve.
- BACK deep in a Library jumped to the top. It now glides back, as it does on Home.
- After closing another server's copy of the same title (the Also available button on a movie or episode page), the page you came from could be left empty. Closing the copy no longer clears the page under it. Some rare sequences still can, see Known issues.
- Everything fixed in 0.7.1: servers whose certificate the television could not verify, which 0.7.0 reported as every profile having no access, and a television with a wrong clock reaching a server it had verified before. See the 0.7.1 notes. New since 0.7.1: when a wrong clock stops the app reaching a server and it cannot help, the failed Home or Library screen now says the clock looks wrong and to connect the television to the internet once.
Changed
- The app's logs can now be read by the app's group. The event, crash and error logs are mode 0640, so webOS Dev Manager can fetch them from a Developer Mode television that is not rooted and a bug report no longer needs root. The event log is scrubbed of tokens and local addresses before it is written, but a few lines written by the C part of the app and what the television's own libraries print skip that scrubbing, as SECURITY.md states, and another app on the same television that runs in PlxNative's group can read the files too. Read a log before you share it. This came in 0.7.1, so it is new only if you are updating from 0.7.0.
- If you share error reports or analytics, a few more fixed-value fields can be sent when your server refuses a playback: the server's refusal codes, the route the app tried, and the kind of video and audio, as short fixed codes, never the server's own wording, file names or addresses. Nobody is asked the reporting question again by this update. Sign-in steps are now held in memory while the question is unanswered, sent only if you answer yes, and dropped if you sign out. Every field is listed in the reporting question's preview and in the privacy policy.
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). Several changes in this version were checked on it while they were written; the audit says which, and which were not.
- Plays video, reported by someone else — one 2019 set and one 2021 set. Robert got playback back on a 2019 set built on LG's k5lp chip after repairing its video sandbox, running v0.6.3, on 2026-09-11: issue #74. 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. Neither report has been repeated on this version.
- Starts, and nothing further is known — every other firmware from webOS 4.0 up is expected to start. This binary's libraries and symbols are checked against the firmware images webosbrew has; the result for this build is in the technical audit. That grades startup and says nothing 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.
Separately, opt-in usage reports from 0.6.6 show video starting, directly and by transcode, on sets from platform release 4.4.2 up to 11.2.0. That is a count of starts, not a person watching a named set, so it moves none of the lines above and has not been repeated on this version.
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
- Some choices outlive signing out. Your answers to Connect without encryption? (issue #385), and the Library views and subtitle timings added in this version, are kept in preferences that signing out does not clear. They hold server, library and item identifiers, not your sign-in.
- Some 2019 sets on LG's k5lp or k3lp chip, installed through Developer Mode, cannot play video. LG's sandbox can withhold a device the video path needs. The app says so instead of crashing, and on a rooted television the failure screen offers Repair, which has not been run on an affected set (issue #74).
- 2018 sets on firmware that reports platform release 3.9.3 sign in and browse, but video has never been seen to start on one, and no error is reported either (issue #249).
- A crash on televisions built on LG's k6hp chip, seen only in opt-in crash reports and not reproduced, because no such set is available (issue #174). No report from 0.7.0 or later had arrived when it was closed.
- A library with many recommended shelves has no shortcut to its grid (issue #425), now that no shelf is cut off.
- DTS audio has not been heard on a television. The app sends DTS to the television only when its own codec table lists it, and the pipeline accepts it, but nobody has confirmed sound or sync.
- An empty page can still happen in rare sequences. Opening another server's copy from inside a copy that is itself open, doing something within about half a second of pressing BACK on a copy, and reopening the same copy in the very frame its closing fade ends can still leave a page empty.
- Home can still miss a refresh while you flip the hero or move between shelves, which reads as a small hitch. In a counted bench it was a few flips in every hundred, and most of the waits were the television's own compositor being late rather than the app.
- Several features were checked in the simulator or in tests only, not on a television: collections, Continue Watching's new default, the Library's remembered view, the new sign-in messages and timing, the first-run library question on one server, scrolling captions and cast names, and the Library's BACK glide. The wrong-clock toast has not been seen on a television either.
- Some Spanish and Belarusian wording added late has not been reviewed by a native speaker, including the new reporting-preview labels and the Home hold hint.
- Auto quality has only been exercised in a laboratory, and servers behind Plex's relay, and servers that require an encrypted connection, are reached but have not been watched end to end.
Help test this release
If you are updating from 0.7.0 or 0.7.1, install over it and tell us whether you were still signed in, on the same profile. If your server has Plex Pass, turn Boost dialog on and then off in the middle of a film and tell us whether the picture and sound carry on and whether playback returns to direct play. If you have collections, open one from the Library's TYPE menu, from Search and from a movie page. If your server has one library or several and you had not been asked before, tell us whether the first-run libraries page appeared when it should and whether Start watching kept your choice. If you use Spanish or Belarusian, tell us any wording that reads wrongly. If you have DTS files and a television that decodes DTS, tell us whether you hear them. Open an issue. It working is as useful a report as it failing.
Installing
Download com.beb.plxnative_0.8.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:
150737a0395276f10f283192f9dc97193bf8c5e61ed58745037eee2a7195d3e2 com.beb.plxnative_0.8.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. PlxNative is licensed GPL-3.0-or-later and bundles FFmpeg under LGPL-2.1-or-later and the libass subtitle renderer with its own libraries under their licences; the complete corresponding source is attached to this release. Exactly what was built, verified and shipped is in the technical audit for v0.8.0.
What's Changed
- Player: subtitle timing offsets (lands #243) by @GLinnik21 in #247
- Plaintext on the home network, with consent (PLX-NATIVE-10) by @GLinnik21 in #251
- Add TV library type filtering and compact All rows by @GLinnik21 in #258
- Render styled ASS and SSA subtitles on the TV by @GLinnik21 in #255
- Close the focus square on card rows; give each Library section its own heading by @GLinnik21 in #259
- Persist artwork in a bounded global disk cache by @GLinnik21 in #260
- Retire hub workers through every reset entry point by @GLinnik21 in #250
- Record preview effects and restore the controlled replay fixtures by @GLinnik21 in #252
- Gate committed recordings through real simulator replay by @GLinnik21 in #253
- Derive poster admission from final card placement by @GLinnik21 in #256
- Grade poster deferral and preserve explicit Home grid seating by @GLinnik21 in #257
- Fix pointer scrub release and add held-pointer harness input by @GLinnik21 in #254
- README: add a star history chart by @GLinnik21 in #261
- Say what failed when sign-in discovery cannot finish (PLX-NATIVE-12) by @GLinnik21 in #263
- Add playback defaults, Plex account languages, and DTS direct play by @GLinnik21 in #264
- Fix CI by syncing the credits generator with site icons by @GLinnik21 in #267
- Stop treating Plex collections as movies by @GLinnik21 in #270
- Add a typed data layer for Plex collections by @GLinnik21 in #269
- Give every page failure read-out a glyph by @GLinnik21 in #268
- Address review findings on the collections data layer and mock by @GLinnik21 in #272
- Extract the linked shelf heading; move Person's Filmography entry onto it by @GLinnik21 in #271
- Draw collections' generated artwork as a fan of their first three posters by @GLinnik21 in #274
- Add the collection page by @GLinnik21 in #273
- Browse a library's collections from its TYPE menu by @GLinnik21 in #275
- Resolve the collection FPS scenes' targets through the local manifest by @GLinnik21 in #277
- Find collections in search by @GLinnik21 in #276
- Link collection shelves on Home and the Library to their collection by @GLinnik21 in #280
- Show a movie's collection on its detail page by @GLinnik21 in #281
- Record device baselines for the collections FPS scenes and fix the fps listing by @GLinnik21 in #282
- Add Spanish and Belarusian localization with webOS language settings by @GLinnik21 in #265
- Give the nightly build its own NIGHTLY launcher icon by @GLinnik21 in #284
- Size the poster-gate FPS scenes to the catalog, and draw the dive's ground in one pass by @GLinnik21 in #283
- Reclaim build trees automatically, driven by free-space pressure by @GLinnik21 in #287
- ci: stop spending runners on docs-only changes and stale nightly dry runs by @GLinnik21 in #288
- Warm transition text and fonts off the frame; grade benches on missed refreshes by @GLinnik21 in #286
- Group the Subtitles menu by language and add the Timing capsule by @GLinnik21 in #285
- Remember each library's sort across restarts by @GLinnik21 in #290
- Simplify the Plex Collections code by @GLinnik21 in #291
- Match the collection fan tile to the G1 mockup: rounded members and a name by @GLinnik21 in #292
- Site: refresh community quotes with sources, add a Featured in block by @GLinnik21 in #294
- Audio enhancements (#266) 1/4: data layer, no behaviour change by @GLinnik21 in #293
- Audio enhancements (#266) 2/4: Plex Pass gating, resolve, fallback, persistence by @GLinnik21 in #296
- Draw a Home shelf's heading while its cards are still below the screen by @GLinnik21 in #297
- Match the Collections screens to the design mockups by @GLinnik21 in #295
- Serialize make check machine-wide with a flock queue by @GLinnik21 in #298
- Audio enhancements (#266) 3/4: live toggle state machine by @GLinnik21 in #299
- Boost Dialog / Normalize Loudness: the Audio-tab rows, diagnostics, and the release/reload fixes the TV found (#266) by @GLinnik21 in #302
- Simplify the #266 audio-enhancement code: one refusal helper, one route snapshot, a named Audio row map by @GLinnik21 in #303
- Fix a batch of UI defects across focus, Settings, Library, detail and the failure screen by @GLinnik21 in #301
- Add tools/build-gc.sh --stale: sweep superseded per-hash cargo artifacts by @GLinnik21 in #305
- Lit-glass focus on every art tile, with a risen shadow by @GLinnik21 in #306
- Fix track menu focus desync when the audio-enhancement toggle rows rebuild live by @GLinnik21 in #304
- Simplify #301's card-row label measurement and hub_title::Scope by @GLinnik21 in #307
- Never evict on-screen textures: TexCache refuses the arrival instead of cycling the top row by @GLinnik21 in #308
- Navigation frame drops: invisible walks stop doing visible-walk work by @GLinnik21 in #312
- Keep subtitles working under the Plex Pass audio enhancement (issue #266 M7 follow-up) by @GLinnik21 in #309
- Move a live track pick / enhancement toggle / quality change's PMS I/O off the frame thread by @GLinnik21 in #310
- Simplify the #309/#310 claim, hold and track-menu code by @GLinnik21 in #314
- Text blocks lift on focus like a card: one scoped Painter zoom by @GLinnik21 in #313
- Localized text fit: declared priority, ownership-checked fit tests, short readouts by @GLinnik21 in #311
- Declarative forms: ui/form.rs (Settings form migration 1/5) by @GLinnik21 in #315
- Reorder the Settings root: About last, Playback first by @GLinnik21 in #316
- feat(playback): add subtitle size/position preferences; raise subtitle sync offset ceiling to 60s by @jacksilv in #318
- Settings root on a form: keyed focus (Settings form migration 2/5) by @GLinnik21 in #317
- Tab bar glass: sample the page the dip shows on its capture frames by @GLinnik21 in #319
- Home hero: a manual left/right flip no longer blinks by @GLinnik21 in #323
- Popover menus hug their content; table rows end on one right edge by @GLinnik21 in #325
- Posters no longer blink back to placeholders after startup, sign-in or a profile pick by @GLinnik21 in #326
- Build: stop emitting a host staticlib and an ARM rlib of the app crate by @GLinnik21 in #328
- One Settings navigation path: pickers are stack pages (Settings form migration 3/5) by @GLinnik21 in #331
- feat(playback): persist the subtitle sync offset across resumes of the same item by @jacksilv in #324
- Keep the PIN pad up through a correct PIN's handoff to Home by @GLinnik21 in #330
- Build: plxnative-storage is its own workspace package by @GLinnik21 in #333
- Centre the failed read-out on the screen by @GLinnik21 in #337
- Player sub-menus 1/5: table groundwork — wrapped notes, title band, nested clips, form Nav/choice/disabled by @GLinnik21 in #335
- Build: pass --gc-sections on the ARM link (#322) by @GLinnik21 in #338
- Replay: record text readiness so a slow runner cannot delay a held panel (fixture 12) by @GLinnik21 in #340
- Tests: the ci/check-deps.sh self-tests run in parallel on a private copy of the tree by @GLinnik21 in #341
- Language, Legal, Consent and the menus on forms (Settings form migration 4/5) by @GLinnik21 in #336
- The track menu and source list on forms (Settings form migration 5/5) by @GLinnik21 in #339
- Simplify the Settings form migration by @GLinnik21 in #344
- Build: stop build.rs making the app crate dirty on every cargo invocation by @GLinnik21 in #343
- Player sub-menus 2/5: Style page with Size/Position/Color pickers by @GLinnik21 in #345
- Player sub-menus 3/5: languages and image-subtitle badges by @GLinnik21 in #346
- Check: make the structure and localization gates several times faster by @GLinnik21 in #349
- Check: run the cargo and the Python halves of make check at once by @GLinnik21 in #350
- Build: seed a new lane's cargo target dirs with an APFS clone of third-party output by @GLinnik21 in #353
- Tooling: every TV ssh/scp goes through tools/tv-ssh, key first, nothing identifying printed by @GLinnik21 in #348
- Player sub-menus 4/5: animated panel resize and page slide (Tracks, More) by @GLinnik21 in #347
- Player sub-menus 5/5: More → Quality drill-in page by @GLinnik21 in #352
- CI: drop the steps that repeat make check; cache the FFmpeg tree the script actually keys by @GLinnik21 in #354
- Telemetry: a refused playback plan reports unknown delivery and requested quality by @GLinnik21 in #355
- Build: make and bare cargo present the same PLX_* environment by @GLinnik21 in #356
- Simplify the player sub-menu code: one popover focus-stop implementation, shared geometry and language helpers by @GLinnik21 in #357
- Settings: Next episode and Skip interval preferences, Up Next only on final credits by @GLinnik21 in #359
- CI: run the host gates as four parallel jobs behind one aggregator by @GLinnik21 in #360
- Player Tracks/More open frame: keep and preload the underlay envelope, warm the root page at mount by @GLinnik21 in #365
- Shelves: place a focused tile's label for where it will rest, not where it is mid-scroll by @GLinnik21 in #364
- CI: the cargo-driving meta-tests read cargo's resolved plan instead of compiling by @GLinnik21 in #362
- CI: keep the SDL/GL .deb download off the network in the host-unit jobs by @GLinnik21 in #366
- tv-session down: close the tested app instead of relaunching it by @GLinnik21 in #369
- Player HUD clock prewarm, plus the capture kit for the back-buffer waits by @GLinnik21 in #370
- make test-fast: opt-in incremental host unit loop by @GLinnik21 in #371
- Simplify the menu-open frame and frame-probe code, and wire the underlay preload debounce by @GLinnik21 in #372
- Telemetry: hold sign-in events until the consent question is answered by @GLinnik21 in #367
- Telemetry: a server-refused playback reports why, as closed codes (PLX-NATIVE-14) by @GLinnik21 in #358
- Privacy: say that pre-answer sign-in events are held in memory and sent only on a yes by @GLinnik21 in #373
- Bound the player's text prewarm drain by time, not string count by @GLinnik21 in #376
- tv-sched-trace: bounded trace_pipe read-back, and what the 2026-10-02 back-buffer-wait capture showed by @GLinnik21 in #377
- CI: bound every job, apt refresh and download (no more multi-hour hangs) by @GLinnik21 in #375
- Diagnostics: say why TLS peer verification failed, not that the CA store is old by @GLinnik21 in #381
- Simplify the prewarm drain budget and the sched-trace tool (#376, #377 follow-up) by @GLinnik21 in #382
- Sign-in: the no-server read-out names the signed-in account by @GLinnik21 in #383
- Remember each server's certificate public key from a verified identity probe by @GLinnik21 in #384
- CI build health: cargo timings artifact, duration trends and deterministic budgets by @GLinnik21 in #386
- CI: a module-cycle ratchet that stops the top-level module cycle absorbing more modules by @GLinnik21 in #387
- Move the base64 helper out of keymanager so spki stays off the module cycle by @GLinnik21 in #389
- Add make build-bench: a repeatable local build benchmark by @GLinnik21 in #388
- Reach a server by its remembered key when a wrong clock fails its certificate's date check by @GLinnik21 in #390
- Simplify the wrong-clock key fallback: one eligibility predicate, no placeholder attempt, shared test helpers by @GLinnik21 in #391
- CI: a live build-time chart at plxnative.com/ci, fed by a ci-metrics data branch by @GLinnik21 in #393
- Tell the viewer when a wrong clock puts a server in key mode: one system toast, and a reason on the failed read-out by @GLinnik21 in #392
- CI chart: PR numbers on every marker, per-range marker numbering, tidy tiles by @GLinnik21 in #394
- Make the Rust module graph layered and acyclic, and fence the webOS port by @GLinnik21 in #397
- Split: the base layer is its own crate (plx_base) by @GLinnik21 in #398
- Split: the machine layer is its own crate (plx_machine) by @GLinnik21 in #400
- site: Ko-fi support links in the header, footer and install guide by @GLinnik21 in #399
- github: Sponsor button for GitHub Sponsors and Ko-fi by @GLinnik21 in #401
- github: quote the Ko-fi handle; skip CI for FUNDING.yml by @GLinnik21 in #402
- Split: the platform layer is its own crate (plx_platform) by @GLinnik21 in #403
- mock_pms: --home-hubs N serves an arbitrary number of Home hubs by @GLinnik21 in #404
- Home: per-frame cost no longer follows the row count by @GLinnik21 in #405
- Home: the grid is sized to the published rows, not a fixed 16-slot array by @GLinnik21 in #408
- Home: no shelf cap; a shelf is published whole or not at all by @GLinnik21 in #409
- Split: the gfx and net layers are their own crates (plx_gfx, plx_net) by @GLinnik21 in #407
- Home: key cards through a hash index, not a scan of the key table by @GLinnik21 in #410
- Home: count each source's card-budget demand from what it can publish by @GLinnik21 in #411
- setup-environment: dev setup without a Plex account or token by @GLinnik21 in #406
- Home: bound the key table and share it with memory() (#395) by @GLinnik21 in #413
- Split: the ui and plex layers are their own crates (plx_ui, plx_plex) by @GLinnik21 in #415
- tests: run the fps scenes against the synthetic mock, and a deep Home scene (#395) by @GLinnik21 in #417
- Home: park a settled, released row by snapping its springs to rest (#395) by @GLinnik21 in #414
- Home: cards are shared (Arc), so a publication clones pointers (#395) by @GLinnik21 in #416
- Home: the card bound is 2,048, applied in the merge; every row the server sends reaches Home by @GLinnik21 in #418
- plx_ui: the tex pending-bytes test no longer races other tests on the shared counter by @GLinnik21 in #419
- Split: the telemetry layer is its own crate (plx_telemetry) by @GLinnik21 in #421
- Home: simplify the grid and hub-merge code left by the #395 sequence by @GLinnik21 in #420
- tests:
--section-hubson the mock and a deep Library fps scene (library-shelves-deep) by @GLinnik21 in #424 - plx_platform: the umask test runs in a child process, so it cannot make other tests' files unreadable by @GLinnik21 in #423
- Split: the data and session layers are their own crates (plx_data, plx_session) by @GLinnik21 in #422
- Library: the shelf run is sized to the published shelves; resting rows are not stepped by @GLinnik21 in #429
- Library: no shelf cap; a shelf is published whole or not at all by @GLinnik21 in #428
- Split: the media layer is its own crate (plx_media) by @GLinnik21 in #432
- Split: the appkit layer is its own crate (plx_appkit) by @GLinnik21 in #433
- Continue Watching: a setting decides what OK does on a card (default: open details) by @GLinnik21 in #430
- CI: don't run the app gates for site-build tooling edits by @GLinnik21 in #435
- site: target "Plex for webOS" searches by @GLinnik21 in #434
- site: say "unofficial" in the hero and title by @GLinnik21 in #436
- site: say "unofficial" in install and troubleshooting page metadata by @GLinnik21 in #437
- Split: the screens layer is its own crate (plx_screens) by @GLinnik21 in #438
- site: put Plex, LG and webOS in the install page H1 by @GLinnik21 in #439
- README: lead with the plxnative.com website and install links by @GLinnik21 in #440
- Library: remember the whole view (sort, Unwatched, genre, listing type) per profile by @GLinnik21 in #444
- net: verify plex.direct against bundled Let's Encrypt roots; follow media redirects per hop by @GLinnik21 in #443
- Tests: run the per-crate test binaries side by side (83.6 s -> 15.9 s); add make test-crate by @GLinnik21 in #446
- build: a plain local ARM build uses a fast cargo profile (tvdev) by @GLinnik21 in #447
- ci: cut pull-request wall time without dropping a check by @GLinnik21 in #448
- Feat/add subtitle search by @frank-m in #445
- Tests: make check-python 408 s -> 170 s; the harness's gate self-tests ran the whole gate 73 times by @GLinnik21 in #450
- Home: a "Hold OK for options" live-glass hint, retired after the first item menu by @GLinnik21 in #455
- tools: resolve the TV address and MAC from one shared lookup, with a per-user directory by @GLinnik21 in #452
- Build: rustc's parallel front end (-Zthreads) for the local host test builds by @GLinnik21 in #454
- Player: every route-changing PMS call runs on a worker flight, never the frame thread by @GLinnik21 in #457
- libass: fall back to a SourceForge mirror when the FreeType host is down by @GLinnik21 in #459
- Tests: four defects two concurrent make check runs exposed by @GLinnik21 in #458
- check lock: two slots instead of one, and an exclusive mode for the benchmarks by @GLinnik21 in #460
- Profiles: a cold start opens the picker on the first profile by @GLinnik21 in #464
- Home: lay the grid out when the catalog lands, not only on the next Tick by @GLinnik21 in #467
- Subtitle search: a subtitle the item already has is "Added", and a re-download never lists it twice by @GLinnik21 in #469
- Home pill seats the hero; tab arrival pops the head tile once visible by @GLinnik21 in #470
- Release candidates: rc.yml publishes the stable package as X.Y.Z-rc.N prereleases by @GLinnik21 in #471
- nightly: serve nightlies as a Homebrew Channel repository, with a guide by @GLinnik21 in #472
- Playback: the intended audio track is converted, not swapped; subtitles stay styled and selected; the app says so by @GLinnik21 in #474
- Settings: BACK keycap hint for restarting after a language change by @GLinnik21 in #473
- Release notes and audit for v0.8.0 by @GLinnik21 in #475
- RC.1 nits: Settings pill and fade, hold pop, Library BACK glide, empty Detail, cast marquee, Collection lift, login timing, managed first-run by @GLinnik21 in #480
- First run asks every profile which libraries it wants by @GLinnik21 in #481
- Focused card captions marquee with their title instead of eliding by @GLinnik21 in #482
- Label new issues automatically by @GLinnik21 in #479
- Hold menu: the card springs back while the item menu opens instead of snapping by @GLinnik21 in #484
- Captions at the end of a row end on the card's right edge instead of being cut off by @GLinnik21 in #485
- docs: v0.8.0 notes and audit cover the release candidates' follow-ups by @GLinnik21 in #486
New Contributors
Full Changelog: v0.7.0...v0.8.0