0.3.0 (2026-10-10)
Features
- jellyfin: keep a user separate, on a sign-in address of their own (c0e1167)
- smart-tv: set the webOS app's resolution to 1280x720 (af70648)
- ui: add a right-side sheet to the modal (c0e1167)
- web: add a follow hero that keeps its artwork in the top corner (c0e1167)
- web: add a frame-rate matching setting on Android TVs (c0e1167)
- web: add a solid navigation bar background and put navigation settings in one card (c0e1167)
- web: add a tooltip to the rating button (c0e1167)
- web: add a touch rail for wide touch screens (c0e1167)
- web: add a tunneled playback setting on Android TVs (c0e1167)
- web: add a TV layout (c0e1167)
- web: add a voice search button on Android TVs (c0e1167)
- web: add an Android app section to the settings (c0e1167)
- web: add an Automatic player engine and make it the default (c0e1167)
- web: add an only-on-Wi-Fi download setting for the Android app (c0e1167)
- web: add data-nav-exit focus boxes (c0e1167)
- web: add floating and corner side rails (c0e1167)
- web: add picture-in-picture and background playback settings for the Android app (c0e1167)
- web: allow the following hero on TVs (c0e1167)
- web: blur liquid glass without its bend while it resizes (c0e1167)
- web: bring the page to its top for focus in the item header (c0e1167)
- web: choose the Android app's player engine (c0e1167)
- web: draw ExoPlayer's statistics over the player (c0e1167)
- web: drop copying stream links on TVs (c0e1167)
- web: drop downloads on Android TV (c0e1167)
- web: drop the follow hero's buttons on TVs (c0e1167)
- web: drop the Shortcuts settings tab on TVs (c0e1167)
- web: drop the versions filter on TVs (c0e1167)
- web: enter a focus group from outside at the start of its row (c0e1167)
- web: export the watch history through the Android app (c0e1167)
- web: fill focused list rows instead of outlining them (c0e1167)
- web: fit the sign-in pickers to a remote (c0e1167)
- web: float a TV's top bar over the page on glass (c0e1167)
- web: focus an item page's Play when keys open it (c0e1167)
- web: focus the first item on Select with nothing focused (c0e1167)
- web: give liquid glass a wider, stronger rim and edge highlights (c0e1167)
- web: give the Android and Android TV apps their own client names (c0e1167)
- web: glide keyed scrolls on a spring of our own (c0e1167)
- web: hear back from external players in the Android app (c0e1167)
- web: hide an episode's buttons on TVs and add Details to its menu (c0e1167)
- web: hide external links and skip the hero's dots on TVs (c0e1167)
- web: hide scrollbars on TVs (c0e1167)
- web: hide the player's controls on Back before leaving on a TV (c0e1167)
- web: keep a show's Play button in place while its next episode loads (c0e1167)
- web: keep subtitles above the player's controls while they show (c0e1167)
- web: land focus where it last was in rows, grids and lists (c0e1167)
- web: leave volume out of the player on TVs and touch screens (c0e1167)
- web: let a held key's action run until the key is let go (c0e1167)
- web: list versions in a drawer over the player and on short screens (c0e1167)
- web: list versions in a side sheet over the player (c0e1167)
- web: mark a focused settings tab on its sliding marker (c0e1167)
- web: mark webOS and Tizen as TVs (c0e1167)
- web: offer the other engine on the Android app's error screen (c0e1167)
- web: open a TV's keyboard on Select rather than on focus (c0e1167)
- web: open a user's own address on their sign-in (c0e1167)
- web: play full screen in landscape in the Android app (c0e1167)
- web: play full screen on tablets in the app (c0e1167)
- web: put a TV's keyboard away on its own Enter (c0e1167)
- web: remove a recent search from its context menu (c0e1167)
- web: rework the player's controls (c0e1167)
- web: run a button's hold action on a held Select (c0e1167)
- web: say which picture fit the button picked (c0e1167)
- web: scroll to the top when the rotating hero takes focus (c0e1167)
- web: seek with a double tap and swipe for brightness and volume on touch (c0e1167)
- web: send Back into a TV's navigation from the pages it leads to (c0e1167)
- web: send the backdrop as now-playing artwork (c0e1167)
- web: show the display's HDR types and the Dolby Vision route in ExoPlayer's statistics (c0e1167)
- web: show the passthrough switch in the Android app (c0e1167)
- web: show the picture-in-picture setting only where the device has it (c0e1167)
- web: show the player's controls on Up and Down on TVs (c0e1167)
- web: skip row headers and hide minor buttons on TVs (c0e1167)
- web: slide a TV's top bar away while focus is in the following hero's rows (c0e1167)
- web: start Discover's focus on its first card (c0e1167)
- web: start the version picker on the first version for keys (c0e1167)
- web: take ordered audio and subtitle language lists (c0e1167)
- web: take the Android app's Back (c0e1167)
- web: thicken card focus rings on TVs (c0e1167)
- web: toggle the player's controls with a tap (c0e1167)
- web: wrap focus across card grid rows (c0e1167)
Bug Fixes
- ui: focus a combobox's list when keys open it (c0e1167)
- ui: ignore a loading button's presses instead of disabling it (c0e1167)
- ui: keep a modal's overlay and content on their own layers (c0e1167)
- ui: show a controlled Select's value again after a pick it didn't take (c0e1167)
- ui: size a modal's column to its box rather than its widest text (c0e1167)
- ui: transition a tab's colours rather than all its properties (c0e1167)
- web: bring a focused field into view when the Android app's keyboard opens (c0e1167)
- web: copy mpv's decoded frames back on TVs (c0e1167)
- web: drop a page's focus spot only when the pointer leaves it (c0e1167)
- web: fade each hero backdrop in as a layer over the last (c0e1167)
- web: fade the backdrop's left edge in landscape (c0e1167)
- web: fade the item page's backdrop out at its bottom edge (c0e1167)
- web: fall back to the title when the hero's logo fails to load (c0e1167)
- web: fix TV focus around the rail, page starts, grids and rows (c0e1167)
- web: give focus back to what opened the version picker (c0e1167)
- web: go up or down to the nearest row when nothing is in line (c0e1167)
- web: hand a remote's Back in a list to the back action (c0e1167)
- web: hide the volume step on TVs (c0e1167)
- web: jump rather than restart a smooth scroll that's still going (c0e1167)
- web: keep every arrow key on a TV (c0e1167)
- web: keep fading hero backdrops on their own layers (c0e1167)
- web: keep keyed scroll steps off the page behind a dialog (c0e1167)
- web: keep Left and Right on focus's own line (c0e1167)
- web: keep the page still for focus in a dialog or bar (c0e1167)
- web: keep the player's controls awake while keys move in them (c0e1167)
- web: keep the player's TV layout on TVs that report a touch pointer (c0e1167)
- web: leave row posters room only for the caption lines shown (c0e1167)
- web: list ExoPlayer before mpv in the player engine setting (c0e1167)
- web: make the next episode card opaque and lower it while the controls hide (c0e1167)
- web: mark a focused episode on its thumbnail in rows and its row in lists (c0e1167)
- web: measure an episode's title as its whole card for focus moves (c0e1167)
- web: measure focus moves from where scrolls under way end (c0e1167)
- web: move focus sideways into the nearest bar (c0e1167)
- web: narrow row cards to the height left under the following hero (c0e1167)
- web: press Enter in a field on a gamepad's A (c0e1167)
- web: retry rate-limited download version searches after Retry-After (c0e1167)
- web: reveal the outermost nav box and make rows nav boxes (c0e1167)
- web: rework the download rows for phones (c0e1167)
- web: ring a focused season poster inside its image (c0e1167)
- web: ring a focused version inside its card (c0e1167)
- web: ring focused menu items and options inside their edges (c0e1167)
- web: scroll a focused episode's whole card into view (c0e1167)
- web: scroll the player menu's list and footer together on short screens (c0e1167)
- web: set the item menu's width on phones and clamp where it opens (c0e1167)
- web: skip inert elements when returning focus to a page (c0e1167)
- web: skip rows scrolled out of their own scroller when moving focus (c0e1167)
- web: take a held key's quick presses as repeats (c0e1167)
- web: treat sticky bars like fixed ones in arrow navigation (c0e1167)
Performance Improvements
- ui: glide a carousel to focus with a CSS transition (c0e1167)
- web: ask for a show's next episode, seasons and opening episodes as its page starts to draw (c0e1167)
- web: ask the Android app's mpv for direct MediaCodec decoding (c0e1167)
- web: check a row's end in a frame rather than in its effect (c0e1167)
- web: count saved bytes so a prune reads every entry only near the limit (c0e1167)
- web: draw a home library row's cards only once it nears the screen (c0e1167)
- web: draw a title's page from a loaded list's copy of it while it loads (c0e1167)
- web: draw only the cards near a long row's view (c0e1167)
- web: ease keyed page and hero row scrolls on the compositor on TVs (c0e1167)
- web: fade card overlays rather than colouring them in (c0e1167)
- web: fade cards in with the Web Animations API (c0e1167)
- web: give focus transitions on cards the keyed glide's duration (c0e1167)
- web: hold placeholders still in rows not loading yet (c0e1167)
- web: keep React from listening for transition and animation events (c0e1167)
- web: keep saved artwork as Blobs (c0e1167)
- web: keep the home page while others are open (c0e1167)
- web: keep the playhead out of the player's React state (c0e1167)
- web: leave the touch navigation bar out on TVs (c0e1167)
- web: make form-less buttons submit buttons on Android (c0e1167)
- web: measure nearness by hand and keep link addresses in data-href on TVs (c0e1167)
- web: measure only cards near the screen when moving focus (c0e1167)
- web: open a settings tab once focus rests on it (c0e1167)
- web: open item menus without blocking the page (c0e1167)
- web: open the docked TV rail with a fade rather than a widening (c0e1167)
- web: pace a held key's repeats to the screen (c0e1167)
- web: pause the rotating hero while it is out of sight (c0e1167)
- web: put a submit button before the page's first control on Android (c0e1167)
- web: read fewer layouts when moving focus (c0e1167)
- web: save the small copies of shrunk artwork (c0e1167)
- web: scale artwork at rest and look for open dialogs only in portals (c0e1167)
- web: scale focused artwork in 200 ms (c0e1167)
- web: scroll TV rows natively with a compositor glide (c0e1167)
- web: share intersection observers between elements (c0e1167)
- web: share one item menu between all cards (c0e1167)
- web: show artwork as images kept in memory (c0e1167)
- web: shrink artwork in a pool of workers (c0e1167)
- web: start gamepad support in the Android app only with a controller attached (c0e1167)
- web: start the artwork workers with the page and make blob addresses in them (c0e1167)