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