<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://jellyfin.org/posts</id>
    <title>Jellyfin Blog</title>
    <updated>2026-01-06T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://jellyfin.org/posts"/>
    <subtitle>Jellyfin Blog</subtitle>
    <icon>https://jellyfin.org/images/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[State of the Fin 2026-01-06]]></title>
        <id>https://jellyfin.org/posts/state-of-the-fin-2026-01-06</id>
        <link href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06"/>
        <updated>2026-01-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Happy New Year and welcome to the State of the Fin!]]></summary>
        <content type="html"><![CDATA[<p>Happy New Year and welcome to the State of the Fin!
This new blog series will regularly basis highlight the ongoing development of Jellyfin and our official clients.
We aim to keep our community informed and engaged, so feel free to share your feedback or thoughts on our progress!</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="project-updates">Project Updates<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#project-updates" class="hash-link" aria-label="Direct link to Project Updates" title="Direct link to Project Updates" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jellyfin-turns-7">Jellyfin Turns 7<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#jellyfin-turns-7" class="hash-link" aria-label="Direct link to Jellyfin Turns 7" title="Direct link to Jellyfin Turns 7" translate="no">​</a></h3>
<p>December marked Jellyfin's 7th anniversary!
A lot has changed in 7 years, but we remain steadfast in our commitment to Open Source and to being the best personal media server out there.
Special thanks to our developers, testers, moderators, and supporters for your invaluable contributions!
Here's to many more years of collaboration and streaming!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="versioning">Versioning<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#versioning" class="hash-link" aria-label="Direct link to Versioning" title="Direct link to Versioning" translate="no">​</a></h3>
<p>We received a substantial amount of feedback regarding our versioning scheme following the 10.11 release, particularly concerning the stability of what are perceived as 'minor' version updates.
This has prompted internal discussions about potentially revising our versioning scheme in the next major release.
While nothing has been finalized yet, we are considering 'dropping' the major version 10, which would make the next release 12.0.
Stay tuned for further updates as we navigate this feedback!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="development-updates">Development Updates<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#development-updates" class="hash-link" aria-label="Direct link to Development Updates" title="Direct link to Development Updates" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1011-release-status">10.11 Release Status<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#1011-release-status" class="hash-link" aria-label="Direct link to 10.11 Release Status" title="Direct link to 10.11 Release Status" translate="no">​</a></h3>
<p>Jellyfin 10.11 introduced a major <a href="https://jellyfin.org/posts/efcore-refactoring-incoming/" target="_blank" rel="noopener noreferrer" class="">EF Core refactor</a>, consolidating the legacy <code>library.db</code> into a single unified <code>jellyfin.db</code>.
Following more than six months of development and an additional six months of release candidate testing, version <a href="https://jellyfin.org/posts/jellyfin-release-10.11.0/" target="_blank" rel="noopener noreferrer" class="">10.11.0</a> was released last year.
This extended testing period allowed us to mitigate most <a href="https://github.com/jellyfin/jellyfin/issues/13047" target="_blank" rel="noopener noreferrer" class="">refactoring</a> and <a href="https://github.com/jellyfin/jellyfin/issues/14350" target="_blank" rel="noopener noreferrer" class="">RC</a>-related issues prior to release.</p>
<p>Even with this level of testing, issues were expected given the scale of the database change and the limited number of users reporting bugs.
These issues are currently being tracked on GitHub across three categories:</p>
<ol>
<li class=""><a href="https://github.com/jellyfin/jellyfin/issues/15045" target="_blank" rel="noopener noreferrer" class="">General bugs</a></li>
<li class=""><a href="https://github.com/jellyfin/jellyfin/issues/15685" target="_blank" rel="noopener noreferrer" class="">Performance bugs</a></li>
<li class=""><a href="https://github.com/jellyfin/jellyfin/issues/15686" target="_blank" rel="noopener noreferrer" class="">Migration and database bugs</a></li>
</ol>
<p>We have been moving quickly to address these issues, delivering four additional point releases with over <a href="https://github.com/jellyfin/jellyfin/compare/v10.11.0...v10.11.5" target="_blank" rel="noopener noreferrer" class="">100 changes</a> since the initial 10.11.0 release.
To date, most point releases have focused on resolving general and migration-related issues.
The remaining migration issues are largely isolated, one-off cases and are unlikely to be resolved.
Most general issues have already been fixed, and the next bug-fix release is expected to include additional fixes for music metadata display issues and for watched status not being preserved when media is replaced or renamed.</p>
<p>We are continuing to investigate ways to mitigate performance issues caused by client-side enumeration and filtering of large datasets.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jellyfin-web-vnext-aka-1012--120">Jellyfin Web vNext (aka 10.12 / 12.0)<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#jellyfin-web-vnext-aka-1012--120" class="hash-link" aria-label="Direct link to Jellyfin Web vNext (aka 10.12 / 12.0)" title="Direct link to Jellyfin Web vNext (aka 10.12 / 12.0)" translate="no">​</a></h3>
<ul>
<li class=""><strong>Default 'Experimental' Layout</strong>: The 'Experimental' layout is now enabled by default for all non-TV devices, introducing a new navigation layout and updated UI components.</li>
<li class=""><strong>Theming Support Overhaul</strong>: We are improving theming support by enabling easier runtime customization of default themes through CSS variables and simplifying the process for creating new bundled themes.</li>
<li class=""><strong>Community Acknowledgment</strong>: Huge thanks to those reviewing, testing, and providing feedback on web pull requests. Your contributions are immensely helpful, as the review burden largely falls on me alone!</li>
</ul>
<p>- <a href="https://github.com/thornbill" target="_blank" rel="noopener noreferrer" class="">thornbill</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="client-corner">Client Corner<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#client-corner" class="hash-link" aria-label="Direct link to Client Corner" title="Direct link to Client Corner" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jellyfin-desktop">Jellyfin Desktop<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#jellyfin-desktop" class="hash-link" aria-label="Direct link to Jellyfin Desktop" title="Direct link to Jellyfin Desktop" translate="no">​</a></h3>
<p>We're rebranding the desktop application from Jellyfin Media Player to Jellyfin Desktop.
The most noteworthy change is the migration from Qt 5 to Qt 6.
This seems to have improved overall performance, though we're still working out issues regarding memory leaks due to the migration.</p>
<p>Apart from the Qt migration, other noteworthy updates.</p>
<ul>
<li class="">Saved servers and settings will not be migrated from Jellyfin Media Player.</li>
<li class="">We've laid the foundation for switching servers with the addition of profiles CLI options. The long-term goal is to have a UI for this as well, but the timeline is TBD.</li>
<li class="">A slew of bug fixes are included.</li>
</ul>
<p>The release is currently available on <a href="https://github.com/jellyfin/jellyfin-desktop" target="_blank" rel="noopener noreferrer" class="">Flathub</a> and in the <a href="https://aur.archlinux.org/packages/jellyfin-desktop" target="_blank" rel="noopener noreferrer" class="">Arch Linux AUR</a>.
Stable builds for Windows and macOS builds are not currently available.
Other Linux distributions will likely be added, though we recommend using Flathub for the time being.
We are not currently supporting Ubuntu 24.04 LTS due to it being stuck on the older Qt 6.4 series, while our new dependency, mpvqt, requires at least Qt 6.5.</p>
<p>- <a href="https://github.com/andrewrabert" target="_blank" rel="noopener noreferrer" class="">Andrew Rabert</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jellyfin-for-android-tv">Jellyfin for Android TV<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#jellyfin-for-android-tv" class="hash-link" aria-label="Direct link to Jellyfin for Android TV" title="Direct link to Jellyfin for Android TV" translate="no">​</a></h3>
<p>Two versions of the Android TV app have been released: <a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.19.5" target="_blank" rel="noopener noreferrer" class="">v0.19.5</a> and <a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.19.6" target="_blank" rel="noopener noreferrer" class="">v0.19.6</a>!
These updates contain various improvements to music transcoding. The app now properly displays durations again and allows for seeking when music is transcoding. These changes also solve the issue of lyrics not scrolling in certain cases.</p>
<p>For video playback, we have improved the stability of Live TV and now support direct play for the VC-1 and AV1 codecs (if your device supports them). The AV1 support was already available on Android 10 and newer but now works on older Fire TV devices as well.</p>
<p>- <a href="https://github.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">Niels van Velzen</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jellyfin-for-xbox">Jellyfin for Xbox<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#jellyfin-for-xbox" class="hash-link" aria-label="Direct link to Jellyfin for Xbox" title="Direct link to Jellyfin for Xbox" translate="no">​</a></h3>
<p>The last two updates brought the long awaited full gamepad support and fixes for 4K and HDR.</p>
<ul>
<li class=""><strong>Gamepad support</strong>: Gamepad navigation is now the default navigation type for the Jellyfin for Xbox app and requires a server version of 10.11 or higher to work. However as we cannot switch the input mode type while the app is running, the Jellyfin for Xbox app can no longer connect to older versions than 10.11. As this is a fundamental change in how the app works, there are still a few hiccups like the app not loading correctly and users reporting that the gamepad does not work at all. In those instances we recommend uninstalling and reinstalling the app.</li>
<li class=""><strong>Web UI TV mode</strong>: For versions of Jellyfin earlier than 10.11.5 the web UI still runs in the desktop mode, which might look a bit odd. However, with Jellyfin 10.11.5, we have fixed a bug that now correctly sets the web UI to TV mode, so the UI should work a lot better.</li>
<li class=""><strong>4K and HDR</strong>: For the last few versions, we have been working on enabling 4K and HDR for the app. This is done by integrating with the web UI and switching the HDMI modes. Sadly, this also comes at the cost of not being allowed to run in the background. To enable 4K support, we had to use a feature flag that allocates more video memory to the Jellyfin for Xbox app, making it incompatible with running in the background.</li>
<li class=""><strong>General Improvements</strong>: Alongside the shiny new headline features, we have also been working on the code in general, adding small improvements and cleaning up a lot of code. The latest versions added log files and their upload to the Jellyfin server, tighter integrations with the web UI, a settings view that can be expanded for future features, version compatibility checking, a better server connection experience, and more.</li>
<li class=""><strong>Future</strong>: When I took over the for the previous maintainer almost a year ago, I made a rough plan for the general development of the app. I always planned on keeping the app as a web wrapper because while the app is certainly more popular than most think, it does not have enough support in development to be a full UWP app. Nevertheless, there are a few features left on my to-do list:<!-- -->
<ul>
<li class="">Localization to other languages</li>
<li class="">Server discovery</li>
<li class="">Desktop support</li>
<li class="">Better decoder support</li>
<li class="">Subtitle storage on-device</li>
</ul>
</li>
</ul>
<p>- <a href="https://github.com/JPVenson" target="_blank" rel="noopener noreferrer" class="">JPVenson</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jellyfin-for-roku">Jellyfin for Roku<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#jellyfin-for-roku" class="hash-link" aria-label="Direct link to Jellyfin for Roku" title="Direct link to Jellyfin for Roku" translate="no">​</a></h3>
<p><a href="https://github.com/jellyfin/jellyfin-roku/releases/tag/3.0.15" target="_blank" rel="noopener noreferrer" class="">3.0.15</a> was released on 2025-12-18 and is our last release before Roku's year-end publishing blackout. It fixes a bug with HDHomeRun Tuners.</p>
<p>- <a href="https://github.com/1hitsong" target="_blank" rel="noopener noreferrer" class="">1hitsong</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="swiftfin">Swiftfin<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#swiftfin" class="hash-link" aria-label="Direct link to Swiftfin" title="Direct link to Swiftfin" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="swiftfin-14-is-out-now">Swiftfin 1.4 is out now!<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#swiftfin-14-is-out-now" class="hash-link" aria-label="Direct link to Swiftfin 1.4 is out now!" title="Direct link to Swiftfin 1.4 is out now!" translate="no">​</a></h4>
<p>This is a large release with a lot of changes under the hood. Our three highlight changes are:</p>
<ol>
<li class=""><a href="https://github.com/jellyfin/Swiftfin/pull/1602" target="_blank" rel="noopener noreferrer" class="">Navigation &amp; Routing Overhaul</a></li>
<li class=""><a href="https://github.com/jellyfin/Swiftfin/pull/1772" target="_blank" rel="noopener noreferrer" class="">Jellyfin 10.11 Support</a></li>
<li class=""><a href="https://github.com/jellyfin/Swiftfin/pull/1581" target="_blank" rel="noopener noreferrer" class="">Revamped Media Player Manager</a></li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="swiftfin-roadmap">Swiftfin Roadmap<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#swiftfin-roadmap" class="hash-link" aria-label="Direct link to Swiftfin Roadmap" title="Direct link to Swiftfin Roadmap" translate="no">​</a></h4>
<p>A <a href="https://github.com/orgs/jellyfin/projects/68" target="_blank" rel="noopener noreferrer" class="">roadmap / project board</a> for Swiftfin is now available!</p>
<p>Follow <a href="https://github.com/jellyfin/Swiftfin/discussions/1294" target="_blank" rel="noopener noreferrer" class="">this discussion</a> for information about the next tvOS release.</p>
<p>To help organize Issues &amp; PRs, Swiftfin now has milestones to help users identify which changes will be included in each release:</p>
<ul>
<li class=""><a href="https://github.com/jellyfin/Swiftfin/milestone/2" target="_blank" rel="noopener noreferrer" class="">Version 1.5</a>
<ul>
<li class="">Contains issues that should be resolved in version 1.5 of Swiftfin iOS.</li>
</ul>
</li>
<li class=""><a href="https://github.com/jellyfin/Swiftfin/milestone/3" target="_blank" rel="noopener noreferrer" class="">tvOS Resync</a>
<ul>
<li class="">Contains tvOS-specific issues that will be resolved as part of our next <a href="https://github.com/jellyfin/Swiftfin/discussions/1294" target="_blank" rel="noopener noreferrer" class="">tvOS Release</a>.</li>
<li class=""><em>Issues that impact tvOS but are part of 1.4 or 1.5 will end up in the version milestone instead of this one. Once tvOS is released, it should mirror our existing 1.X structure and iOS.</em></li>
</ul>
</li>
</ul>
<p>A more detailed post about these changes can be found <a href="https://github.com/jellyfin/Swiftfin/discussions/1832" target="_blank" rel="noopener noreferrer" class="">on GitHub</a>!</p>
<p>- <a href="https://github.com/JPKribs" target="_blank" rel="noopener noreferrer" class="">JPKribs</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-tv-platforms">Other TV Platforms<a href="https://jellyfin.org/posts/state-of-the-fin-2026-01-06#other-tv-platforms" class="hash-link" aria-label="Direct link to Other TV Platforms" title="Direct link to Other TV Platforms" translate="no">​</a></h3>
<ul>
<li class="">The Tizen app was submitted for review, but unfortunately <a href="https://github.com/jellyfin/jellyfin-tizen/issues/222#issuecomment-3621581689" target="_blank" rel="noopener noreferrer" class="">failed testing</a>. Additional work is needed to replicate the reported issues and correct them.</li>
<li class="">Support for multiple <strong>new</strong> platforms is currently underway, and we will provide updates as progress is made.</li>
</ul>
<p>Wishing you all happy streaming in 2026 and beyond!
We look forward to another year filled with exciting updates and features for Jellyfin.</p>
<p>- thornbill and the Jellyfin Team</p>]]></content>
        <author>
            <name>Bill Thornton</name>
        </author>
        <category label="state-of-the-fin" term="state-of-the-fin"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin for Android TV 0.19]]></title>
        <id>https://jellyfin.org/posts/androidtv-v0.19.0</id>
        <link href="https://jellyfin.org/posts/androidtv-v0.19.0"/>
        <updated>2025-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[From refreshed user interface elements to playback improvements, there are many changes across the board in the latest update of Jellyfin]]></summary>
        <content type="html"><![CDATA[<p>From refreshed user interface elements to playback improvements, there are many changes across the board in the latest update of Jellyfin
for Android TV.</p>
<!-- -->
<p>I'm glad to announce a brand new release of Jellyfin for Android TV. This time, we've made progress in many aspects of the app. Some more
visible than others. This blog post will highlight some of the most notable changes. A complete list is available in the
<a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.19.0" target="_blank" rel="noopener noreferrer" class="">GitHub changelog</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-search">🔍 Search<a href="https://jellyfin.org/posts/androidtv-v0.19.0#-search" class="hash-link" aria-label="Direct link to 🔍 Search" title="Direct link to 🔍 Search" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Screenshot of the new search with voice input active" src="https://jellyfin.org/assets/images/search-42d87c4c406a5b084480b2590b44e1f9.png" width="1920" height="1080" class="img_ev3q"></p>
<p>The search functionality of the app was redesigned based on the new style of the app. This new look also introduces voice search! And
this is only a first step of many to come. Future updates are planned to add search suggestions, in-library search and a revamp of how
results are shown.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-are-you-still-watching">📺 Are you still watching?<a href="https://jellyfin.org/posts/androidtv-v0.19.0#-are-you-still-watching" class="hash-link" aria-label="Direct link to 📺 Are you still watching?" title="Direct link to 📺 Are you still watching?" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Screenshot of the inactivity popup asking if the user is still watching" src="https://jellyfin.org/assets/images/stillwatching-06f143027549aa006890faae57c33c83.png" width="1920" height="1080" class="img_ev3q"></p>
<p>By popular request, we now have a new inactivity popup. When enabled in the app preferences it will ask you if you're still watching TV when
no input has been detected for a configurable amount of time or number of episodes. If you don't choose to continue watching the app will
automatically close the video player, preventing entire series from being marked as watched overnight when you fall asleep!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-video">📹 Video<a href="https://jellyfin.org/posts/androidtv-v0.19.0#-video" class="hash-link" aria-label="Direct link to 📹 Video" title="Direct link to 📹 Video" translate="no">​</a></h2>
<p>A lot of effort was put into improving our video player. While not all our work was ready for this release yet, a lot of it was. We've
made significant improvements in the detection of device HDR capabilities to more accurately transcode or direct play content. For Dolby
Vision content we do require Jellyfin 10.11 and media has to be rescanned for these changes to fully work. Additionally we now support the
VobSub and DVDSub subtitle formats without transcoding.</p>
<p>To both improve our detection algorithms and help troubleshoot playback issues we added a new troubleshoot mechanic. You'll find a new
button in the advanced playback preferences to send a "media capability report" to the server. This report contains information about your
device and its capabilities, together with the "device profile" that is sent to the Jellyfin server to decide whether transcoding or
remuxing is necessary.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-music">🎶 Music<a href="https://jellyfin.org/posts/androidtv-v0.19.0#-music" class="hash-link" aria-label="Direct link to 🎶 Music" title="Direct link to 🎶 Music" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Screenshot of the music player to showcase the new fast forward and rewind buttons" src="https://jellyfin.org/assets/images/music-69dac189563bf3bad9bd3ee89fd56725.png" width="1920" height="1080" class="img_ev3q"></p>
<p>It's now possible to fast forward, rewind or manually seek through your playing music. Various issues with managing the
queue have been fixed, including remote control support.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-photos">🖼️ Photos<a href="https://jellyfin.org/posts/androidtv-v0.19.0#%EF%B8%8F-photos" class="hash-link" aria-label="Direct link to 🖼️ Photos" title="Direct link to 🖼️ Photos" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Screenshot of the new picture viewer" src="https://jellyfin.org/assets/images/pictures-4cd49bd8f209547f7eb01cc2c25ce0ac.png" width="1920" height="1080" class="img_ev3q"></p>
<p>The photo viewer got upgrades with a fresh coat of paint. It now shows the file and album name too, making it easier to see what you're
looking at. This also gives a small glimpse of how the video player will look in the future.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-jellyfin-1011">✨ Jellyfin 10.11<a href="https://jellyfin.org/posts/androidtv-v0.19.0#-jellyfin-1011" class="hash-link" aria-label="Direct link to ✨ Jellyfin 10.11" title="Direct link to ✨ Jellyfin 10.11" translate="no">​</a></h2>
<p>Jellyfin server version 10.11 just released, but don't be alarmed: this app release supports both Jellyfin 10.10 and 10.11, giving you the
time to upgrade at your own pace. Some features, like the HDR improvement, do rely on Jellyfin 10.11, so upgrading is advised for
the best experience.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-android-5-and-below">🫳 Android 5 and below<a href="https://jellyfin.org/posts/androidtv-v0.19.0#-android-5-and-below" class="hash-link" aria-label="Direct link to 🫳 Android 5 and below" title="Direct link to 🫳 Android 5 and below" translate="no">​</a></h2>
<p><strong>The 0.19.x releases will be the last ones supporting Android 5 and Android 5.1</strong> due to updated vendor requirements. Based on our limited
statistics, this affects less than 1% of our users. You will be able to keep using Jellyfin, but won't be able to receive future app
updates. We recommend upgrading your device or using an external Android TV set-top box to receive future app updates.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="made-possible-by-you">Made possible by you<a href="https://jellyfin.org/posts/androidtv-v0.19.0#made-possible-by-you" class="hash-link" aria-label="Direct link to Made possible by you" title="Direct link to Made possible by you" translate="no">​</a></h2>
<p>Jellyfin is completely developed by volunteers, and couldn't be made without their great skills and dedication. Consider donating if you
appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">@nielsvanvelzen</a> - Donate via <a href="https://github.com/sponsors/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a> or
<a href="https://buymeacoffee.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">Buy Me a Coffee</a></li>
<li class=""><a href="https://github.com/BotBlake" target="_blank" rel="noopener noreferrer" class="">@BotBlake</a></li>
<li class=""><a href="https://github.com/linkandzelda91" target="_blank" rel="noopener noreferrer" class="">@linkandzelda91</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/tal-sarid" target="_blank" rel="noopener noreferrer" class="">@tal-sarid</a></li>
<li class=""><a href="https://github.com/dtrexler" target="_blank" rel="noopener noreferrer" class="">@dtrexler</a></li>
<li class=""><a href="https://github.com/hdweiss" target="_blank" rel="noopener noreferrer" class="">@hdweiss</a></li>
<li class=""><a href="https://github.com/kylep09" target="_blank" rel="noopener noreferrer" class="">@kylep09</a></li>
<li class=""><a href="https://github.com/RubenTeixeira" target="_blank" rel="noopener noreferrer" class="">@RubenTeixeira</a></li>
<li class=""><a href="https://github.com/clams4shoes" target="_blank" rel="noopener noreferrer" class="">@clams4shoes</a></li>
<li class=""><a href="https://github.com/owochle" target="_blank" rel="noopener noreferrer" class="">@owochle</a></li>
<li class=""><a href="https://github.com/ferrarimarco" target="_blank" rel="noopener noreferrer" class="">@ferrarimarco</a></li>
<li class=""><a href="https://github.com/conihorse" target="_blank" rel="noopener noreferrer" class="">@conihorse</a></li>
<li class=""><a href="https://github.com/ConnorS1110" target="_blank" rel="noopener noreferrer" class="">@ConnorS1110</a></li>
<li class=""><a href="https://github.com/vahtos" target="_blank" rel="noopener noreferrer" class="">@vahtos</a></li>
<li class=""><a href="https://github.com/claireratigan" target="_blank" rel="noopener noreferrer" class="">@claireratigan</a></li>
<li class=""><a href="https://github.com/cani1see" target="_blank" rel="noopener noreferrer" class="">@cani1see</a></li>
<li class=""><a href="https://github.com/osiris86" target="_blank" rel="noopener noreferrer" class="">@osiris86</a></li>
<li class=""><a href="https://github.com/bin101" target="_blank" rel="noopener noreferrer" class="">@bin101</a></li>
<li class=""><a href="https://github.com/EMohlin7" target="_blank" rel="noopener noreferrer" class="">@EMohlin7</a></li>
<li class=""><a href="https://github.com/mkst" target="_blank" rel="noopener noreferrer" class="">@mkst</a></li>
</ul>
<p>And finally a big thank you to everyone who contributed translations, reported bugs, provided feedback and participated in beta testing!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/androidtv-v0.19.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have experience with Android TV development or with Kotlin and are interested in contributing yourself, feel free to dive into the
<a href="https://github.com/jellyfin/jellyfin-androidtv" target="_blank" rel="noopener noreferrer" class="">source code</a> and open a pull request. Alternatively, you can help with translating the app
into your own language on our <a href="https://translate.jellyfin.org/engage/jellyfin-android/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/androidtv-v0.19.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out all these changes! The app stores will auto-update your Jellyfin app if you're already using the app. For
new users, you can find the app on the app store of your platform.</p>
<a class="margin-right--md" href="https://play.google.com/store/apps/details?id=org.jellyfin.androidtv"><img width="153" alt="Jellyfin for Android TV on Google Play" src="https://jellyfin.org/images/store-icons/google-play.png"></a>
<a class="margin-right--md" href="https://www.amazon.com/gp/product/B07TX7Z725"><img width="153" alt="Jellyfin for Fire TV at Amazon Appstore" src="https://jellyfin.org/images/store-icons/amazon.png"></a>
<a href="https://f-droid.org/en/packages/org.jellyfin.androidtv/"><img width="153" alt="Jellyfin for Android TV on F-Droid" src="https://jellyfin.org/images/store-icons/fdroid.png"></a>
<p>Direct downloads are available at <a href="https://repo.jellyfin.org/releases/client/androidtv/" target="_blank" rel="noopener noreferrer" class="">repo.jellyfin.org</a> or in the
<a href="https://github.com/jellyfin/jellyfin-androidtv/releases/latest" target="_blank" rel="noopener noreferrer" class="">GitHub release</a>.</p>
<p>You can also join our <a href="https://play.google.com/apps/testing/org.jellyfin.androidtv" target="_blank" rel="noopener noreferrer" class="">beta program on Google Play</a> and help test new versions
before they're released to the public. <a class="" href="https://jellyfin.org/posts/android-betas">Read more</a> about our beta program.</p>]]></content>
        <author>
            <name>Niels van Velzen</name>
        </author>
        <category label="release" term="release"/>
        <category label="android-tv" term="android-tv"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin 10.11.0]]></title>
        <id>https://jellyfin.org/posts/jellyfin-release-10.11.0</id>
        <link href="https://jellyfin.org/posts/jellyfin-release-10.11.0"/>
        <updated>2025-10-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are pleased to bring you Jellyfin 10.11.0, our new stable release. This is probably one of, if not the, biggest and most impactful releases we've done yet, with some massive backend changes to improve performance and long-term expandability and maintainability. This release has been a long time coming, with over 6 months of development and another 6 months of RC testing, throwing our planned 6-month release schedule completely out of whack, but we definitely think the results are worth it - both for users right now, and for the long-term health of the project.]]></summary>
        <content type="html"><![CDATA[<p>We are pleased to bring you Jellyfin 10.11.0, our new stable release. This is probably one of, if not the, biggest and most impactful releases we've done yet, with some massive backend changes to improve performance and long-term expandability and maintainability. This release has been a long time coming, with over 6 months of development and another 6 months of RC testing, throwing our planned 6-month release schedule completely out of whack, but we definitely think the results are worth it - both for users right now, and for the long-term health of the project.</p>
<p>If you just want a quick summary of what you <strong>need to know</strong> (and you <strong>DO</strong> need to know!) to get your system upgraded and running, please read on to the "TL; DR" section just below, or keep reading for a full explanation of all the major features and improvements in Jellyfin 10.11.0! You can also view full changelogs on the <a href="https://github.com/jellyfin/jellyfin/releases/tag/v10.11.0" target="_blank" rel="noopener noreferrer" class="">server</a> and <a href="https://github.com/jellyfin/jellyfin-web/releases/tag/v10.11.0" target="_blank" rel="noopener noreferrer" class="">web</a> GitHub releases.</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tl-dr">TL; DR<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#tl-dr" class="hash-link" aria-label="Direct link to TL; DR" title="Direct link to TL; DR" translate="no">​</a></h2>
<p><strong>IT IS VERY IMPORTANT THAT YOU READ THIS SECTION BEFORE UPGRADING TO JELLYFIN 10.11.0!</strong> Failure to do so may cause issues! Always feel free to <a class="" href="https://jellyfin.org/contact">ask for help in our chat</a> if you are unclear or run into trouble.</p>
<ol>
<li class="">
<p>As always for major upgrades, ensure you <strong>STOP Jellyfin and take a <a class="" href="https://jellyfin.org/docs/general/administration/backup-and-restore/#manual-backup">FULL MANUAL BACKUP OF YOUR DATA AND CONFIG DIRECTORIES</a> before upgrading</strong>! While the upgrade process <em>should</em> be seamless and has guardrails, we've seen a lot of strange bugs during RC testing and it's better to be safe than sorry.</p>
</li>
<li class="">
<p>You <strong>MUST</strong> be running Jellyfin 10.10.7 before upgrading to 10.11.0! You <strong>may</strong> be fine with Jellyfin 10.9.11 but this is less-extensively tested. <strong>Upgrading from any other versions is NOT supported and WILL fail</strong>; upgrade to 10.10.7 <strong>first</strong>, then upgrade to 10.11.0.</p>
</li>
<li class="">
<p>The initial upgrade will include <strong>MULTIPLE LONG-RUNNING MIGRATIONS</strong> that may take up to several hours depending on your library size and state. <strong>DO NOT CANCEL OR INTERRUPT THE SYSTEM</strong> during these migrations; let them run overnight if possible on very large libraries. You can use the new Startup UI and Log Viewer (see below) from your local network to view the progress during the upgrade, and please see the section below for more details on "why".</p>
</li>
<li class="">
<p>The upgrade will make a backup of your existing <code>library.db</code> file named <code>library.db.old</code>. This file can be used to recover should the upgrade fail. Once you have successfully upgraded and Jellyfin 10.11.0 is running smoothly, you may delete this backup. If you need to try the migrations again due to a failure, stop Jellyfin, rename this file back to <code>library.db</code>, then start Jellyfin again, and the migration will be re-attempted.</p>
</li>
<li class="">
<p>If you have adjusted the Library Page Size to anything other than the default of 100, we recommend putting it back for performance reasons before upgrading.</p>
</li>
<li class="">
<p>After upgrading, we strongly recommend running a <strong>full library scan</strong> to ensure that all data is correctly populated. Failure to do so may result in weird bugs if any metadata entries were corrupt or not properly migrated (rare but possible). Additionally, users should also perform a scan for missing metadata on their Music libraries, as this may be necessary for proper music functionality after the upgrade. While it may not be strictly required, performing this additional scan on other libraries is recommended to ensure everything functions correctly.</p>
</li>
<li class="">
<p>Jellyfin 10.11.0 is <strong>NOT</strong> compatible with 32-bit ARM systems (<code>armhf</code>), like 1st and 2nd generation Raspberry Pis or other low-end or old SBCs, or any ARM system running a 32-bit operating system. You <strong>must</strong> be running an ARM64 operating system to run Jellyfin 10.11.0 on ARM systems. See below for more information.</p>
</li>
<li class="">
<p>This release also fixes several security bugs, both for ourselves and from upstream projects like DotNET. We do recommend upgrading to 10.11.0 <strong>as soon as possible</strong>.</p>
</li>
<li class="">
<p>As always with major Jellyfin releases, bugs will exist, even after 6 months of RC testing. This is a second reminder to <strong>take a full backup before upgrading</strong>, as this is the only way to downgrade back to a previous version if you find that you need to.</p>
</li>
</ol>
<p>And now on to the cool new features!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-library-database-conversion-to-ef-core-is-complete">The Library Database conversion to EF Core is complete!<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#the-library-database-conversion-to-ef-core-is-complete" class="hash-link" aria-label="Direct link to The Library Database conversion to EF Core is complete!" title="Direct link to The Library Database conversion to EF Core is complete!" translate="no">​</a></h2>
<p>For this one, a bit of backstory is required. For a long time, the backend of Jellyfin has been a mess of spaghetti, as historically pre-Jellyfin very little thought was put into long-term best-practices during development of new features and functionality. This manifested as a codebase completely littered with database calls, written as raw SQLite statements inside of other code, with effectively zero centralization of the database management functionality into an ORM (object-relational model system).</p>
<p>This had three major negative effects: (1) doing any changes to the database schemas required complex, error-prone manual migrations that were bespoke for each change, with little in the way of safeguards or guardrails and no downgrade support; (2) it was very difficult to add new functionality or change existing functionality without rewriting large swaths of unrelated code to take the new changes into account; and (3) it completely locked the system into the file-based SQLite system with no ability to support other database engines.</p>
<p>Enter EF Core, an ORM for .NET and C#, the framework and language Jellyfin is written in, that simplifies and helps manage the database for us, allowing us to remove all this legacy spaghetti and massively simplify the database handling within Jellyfin. It includes things like an automatic migration handler with versioning, standardized interfaces to the database calls, and the flexibility to use other backend database engines in the future.</p>
<p>The initial conversion work was started almost 5 years ago with some of the simpler databases, such as Users and Authentication, but the elephant of the conversion was the Library database: its massive complexity, sprawling reach, and reliance not only on the database but also on static XML files on-disk, meant that it was quite a thing to tackle, and the project stalled out for several years. Cue @JPVenson, who with less than 6 months involved in the project took on this massive project and drove it to completion.</p>
<p>The end result might not seem like much to a normal user: queries do get faster, and future changes should be less error-prone, but mostly this change is transparent. But on the backend and for the continued long-term development of Jellyfin, this is huge. The simplified database access will let us write cleaner, less error-prone code, implement new features, perform complex migrations, and more, much faster and with a minimum of effort, opening up a lot of new opportunities for advancement. We can then finally start tackling the absolutely massive mountain of open feature requests, many of which were nearly impossible before this change. For administrators, it also opens up new possibilities - not officially yet, but soon - for running Jellyfin backed by "real" database systems like PostgreSQL, providing new options for redundancy, load-balancing, and easier maintenance and administration. The future looks very bright!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="deduplication-and-migrations">Deduplication and Migrations<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#deduplication-and-migrations" class="hash-link" aria-label="Direct link to Deduplication and Migrations" title="Direct link to Deduplication and Migrations" translate="no">​</a></h3>
<p>The core of the migration involves a transfer of all Library data from the legacy <code>library.db</code> to the new structures within <code>jellyfin.db</code>. While this seems simple on the surface, as part of the conversion process we decided to actively try to improve the schema while we were at it, allowing us to simultaneously clean up a lot of the aforementioned spaghetti code. Thus the migration itself creates proper relational cross-references in the database, including foreign keys, for the first time.</p>
<p>The downside however is that inconsistent and logically corrupt library data is prone to cause problems during the migration, and this has been a source of many issues. The migration must not only restructure the data but fix these logical corruptions and clean up any data that "doesn't make sense" anymore, for example Media items with no parent or duplicated People data for multiple sets of media.</p>
<p>This deduplication and cleanup is very time intensive, and the scale of the cleanup depends heavily on how many logically inconsistent entries are present in the existing database. This essentially means that, the older your database is, and the more logically corrupted entries it has, the more the migration needs to work to clean all of it up, prolonging the migration process. This also makes it very hard to estimate how long the migration can take: a database with 300,000 entries but no issues can migrate in a matter of minutes, while one with just 30 series but severe inconsistencies can take multiple hours.</p>
<p>Thus, when it comes to running the migration, we reiterate letting it run during an off-peak period like overnight, and simply letting it run to completion; if it completes quickly, you're golden, and if not, you will avoid delaying users' access.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="startup-ui-and-log-viewer">Startup UI and Log Viewer<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#startup-ui-and-log-viewer" class="hash-link" aria-label="Direct link to Startup UI and Log Viewer" title="Direct link to Startup UI and Log Viewer" translate="no">​</a></h3>
<p>One nice little feature that grew out of the migration work and the corresponding long-running initial migration was our new Startup UI and Log Viewer. Before this feature, while Jellyfin was starting up and running through e.g. migrations, the system would appear dead - the UI would not load, and it appeared like very little was happening unless you had your log level set to debug. The Startup UI changes this by providing a simple startup WebUI which is only accessible in your configured local networks, and which will display the current status of the startup process and log messages while the system gets ready, giving you more peace of mind about what's going on. For small instances this might not even be visible, but for slow-to-start large instances this can be invaluable for tracking progress and debugging issues.</p>
<p><img decoding="async" loading="lazy" alt="Startup UI" src="https://jellyfin.org/assets/images/startup-ui-6cf63a796fdac9e8dbbc84c448bdefa0.png" width="1308" height="488" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="internal-backup--restore-support">Internal Backup &amp; Restore Support<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#internal-backup--restore-support" class="hash-link" aria-label="Direct link to Internal Backup &amp; Restore Support" title="Direct link to Internal Backup &amp; Restore Support" translate="no">​</a></h3>
<p>One of the first big benefits of the new backend is a very eagerly-awaited feature: internal, live Backup and Restore support! You can now take a full snapshot of your metadata database, back it up to external storage, and restore from it in the event of a major fault. You can also take regular backups just in case. This will greatly help both normal day-to-day maintenance, as well as upgrades in the future, always knowing that you have a good copy of the data.</p>
<p>The backup and restore system can only restore systems on which the backup was originally made, so this is not a tool to migrate from other OS's or 3rd party containers.</p>
<p><img decoding="async" loading="lazy" alt="Backups" src="https://jellyfin.org/assets/images/backups-133549505747b070fb5db6edbacd1ca6.png" width="1229" height="498" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="aggressive-in-memory-database-caching">Aggressive in-memory Database Caching<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#aggressive-in-memory-database-caching" class="hash-link" aria-label="Direct link to Aggressive in-memory Database Caching" title="Direct link to Aggressive in-memory Database Caching" translate="no">​</a></h3>
<p>The new database engine is tuned to aggressively cache metadata in memory, to prevent slow disk reads from bottlenecking the system; this was a frequent problem in previous versions of Jellyfin and a point of regular complaint. In practice, this means that Jellyfin will use more RAM than before, up to the full size of your Library database. This RAM is not wasted however, as the speed-up is very noticeable, especially with large libraries, and the system will try to be as efficient as possible if other tasks require memory. This means that the memory will be given back when other programs need more memory. Be aware of this as you upgrade, as it will look like a lot more resource utilization.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improved-locking-behavior">Improved Locking Behavior<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#improved-locking-behavior" class="hash-link" aria-label="Direct link to Improved Locking Behavior" title="Direct link to Improved Locking Behavior" translate="no">​</a></h3>
<p>The new database engine also enables several new locking modes; for most users, this is irrelevant, but users with frequent issues related to database locking can now tweak the settings. <strong>More detail about this functionality can be found <a class="" href="https://jellyfin.org/posts/SQLite-locking">in this blog post</a>.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="removal-of-arm32-armhf-support">Removal of ARM32 (armhf) support<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#removal-of-arm32-armhf-support" class="hash-link" aria-label="Direct link to Removal of ARM32 (armhf) support" title="Direct link to Removal of ARM32 (armhf) support" translate="no">​</a></h2>
<p>In Jellyfin 10.10.0, we deprecated ARM32 support and have fully removed it from Jellyfin 10.11.0; Jellyfin now requires an ARM64 operating system to run on ARM platforms. In practical terms, this means dropping support for very old or very low-end ARM SBCs (Raspberry Pi 1/2, etc.). We found consistently that these very old SBCs were absolutely terrible at running Jellyfin, even without transcoding, and we decided that dropping support would streamline our release processes and help ensure that users get the best experience out of the box. If you are still running on one of these systems, or on a newer ARM SBC that isn't running a 64-bit operating system, you will need to upgrade your hardware and/or reinstall a 64-bit operating system in order to upgrade to Jellyfin 10.11.0.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deprecation-of-internal-tlsssl-support">Deprecation of internal TLS/SSL support<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#deprecation-of-internal-tlsssl-support" class="hash-link" aria-label="Direct link to Deprecation of internal TLS/SSL support" title="Direct link to Deprecation of internal TLS/SSL support" translate="no">​</a></h2>
<p>We are announcing the deprecation of internal TLS/SSL support in Jellyfin, which we are planning to remove in Jellyfin 10.12.0. The current internal TLS mechanisms are cumbersome and do not integrate well with external systems e.g. Let's Encrypt's <code>certbot</code>, which means manual work and manual restarts whenever a certificate needs to be updated. In addition, compiling in TLS support means dependencies on external libraries that complicate our packaged Linux binaries. We have always recommended <a class="" href="https://jellyfin.org/docs/general/post-install/networking/reverse-proxy/">running Jellyfin behind a reverse proxy</a>, all of which provide far better integration for TLS/SSL, so with our next release we will be removing this functionality. For anyone running a production-grade Internet-facing instance using TLS without a reverse proxy, now is the time to get that set up. Even with this removal, we are planning to still provide manual configuration options for the built-in Kestrel TLS system, which would serve as an alternative way to configure TLS, but it will not be exposed through the frontend UX and would be recommended only for very advanced, specific usecases; normal instances should move to reverse proxies.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="free-space-checks">Free Space Checks<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#free-space-checks" class="hash-link" aria-label="Direct link to Free Space Checks" title="Direct link to Free Space Checks" translate="no">​</a></h2>
<p>Jellyfin now actively checks the available free space for its configuration and data directories. If you have less than 2GB of free space in each data directory, Jellyfin now refuses to start to prevent data corruption. Additionally, checks are implemented to prevent certain path misconfigurations that are known to cause issues.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features--enhancements">New Features &amp; Enhancements<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#new-features--enhancements" class="hash-link" aria-label="Direct link to New Features &amp; Enhancements" title="Direct link to New Features &amp; Enhancements" translate="no">​</a></h2>
<p>We have several new features and enhancements to look forward to:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="user-experience">User Experience<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#user-experience" class="hash-link" aria-label="Direct link to User Experience" title="Direct link to User Experience" translate="no">​</a></h3>
<ul>
<li class="">Our search performance has been greatly improved, making it much quicker to find what you need.</li>
<li class="">The Favorites page will now list Live TV channels, Music Videos, Photo Albums, Photos, and Seasons in addition to the existing media types.</li>
<li class="">We now have HEVC decoding support for Firefox 134+. More info is available on the <a class="" href="https://jellyfin.org/docs/general/clients/codec-support#video-compatibility">client support page</a>.</li>
<li class="">Native styling of subtitles can be disabled.</li>
<li class="">Shows can be displayed grouped in collections when viewing libraries.</li>
<li class="">Theme media will now play in random order.</li>
<li class="">Guest stars can be assigned roles, e.g., Kelsey Grammer as Captain Morgan Bateson.</li>
<li class="">A customizable "splash screen" image can be set as a background on the login page.</li>
<li class="">The experimental layout has a redesigned navigation and controls for filtering and sorting libraries.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="administrator-experience">Administrator Experience<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#administrator-experience" class="hash-link" aria-label="Direct link to Administrator Experience" title="Direct link to Administrator Experience" translate="no">​</a></h3>
<ul>
<li class="">The dashboard now displays stats for the number of media items on the server and available storage space.</li>
<li class="">Media segment providers can be configured per library similar to other metadata providers.</li>
<li class="">AV1 decoding can be enabled for VideoToolbox hardware acceleration.</li>
<li class="">M3U tuners can be configured to use the native framerate.</li>
<li class="">Branding options are greatly expanded, including "splash screen" image support, extended disclaimer support, and custom CSS; even more is planned for the future to allow administrators to fully customize their user experience to your branding.</li>
<li class="">The migration of dashboard pages to our new tech stack is nearly complete with most pages being converted, offering a much simpler and clearer organizational layout.</li>
<li class="">When replacing files, Jellyfin will now recognize this and prune related data (chapters, trickplay files and extracted subtitles and attachments) on scan, making sure that these data will be re-generated, matching the new file.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="transcoding-and-media-handling">Transcoding and Media Handling<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#transcoding-and-media-handling" class="hash-link" aria-label="Direct link to Transcoding and Media Handling" title="Direct link to Transcoding and Media Handling" translate="no">​</a></h3>
<ul>
<li class="">We have moved to the new upstream FFmpeg 7.1, which brings many improvements.</li>
<li class="">We now support 3D LUT-based HDR tone-mapping on Intel HD/UHD graphics and Rockchip RK3588, improving performance.</li>
<li class="">We now support Dolby Vision Profile 5 tone-mapping on Rockchip RK3588.</li>
<li class="">We now have more accurate rendering of ASS/SSA subtitles when using hardware transcoding.</li>
<li class="">We now support AV1 hardware decoding for Apple VideoToolbox.</li>
<li class="">We have improved our dynamic HDR metadata handling, which involves properly detecting HDR10+ videos and selectively removing DoVi or HDR10+ metadata to avoid black screen on devices that only support a single type of dynamic HDR metadata.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="client-development-changes">Client Development Changes<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#client-development-changes" class="hash-link" aria-label="Direct link to Client Development Changes" title="Direct link to Client Development Changes" translate="no">​</a></h2>
<p>The following changes apply to all client application developers. Please review thoroughly and update your applications as required.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="http-api">HTTP API<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#http-api" class="hash-link" aria-label="Direct link to HTTP API" title="Direct link to HTTP API" translate="no">​</a></h3>
<ul>
<li class="">We've added a new option for developers to test their client with deprecated authorization methods disabled. We're planning to remove old authorization methods in 10.12.0. More details about how to authorize and to test are available in <a href="https://gist.github.com/nielsvanvelzen/ea047d9028f676185832e51ffaf12a6f" target="_blank" rel="noopener noreferrer" class="">this document</a>.</li>
<li class="">The <code>OnPlaybackStart</code>, <code>OnPlaybackProgress</code> and <code>OnPlaybackStopped</code> operations are now deprecated. Use the <code>ReportPlaybackStart</code>, <code>ReportPlaybackProgress</code> and <code>ReportPlaybackStopped</code> operations instead, as the former will be removed in a future version.</li>
<li class="">A new <code>GetSystemStorage</code> operation has been added to retrieve information about the server storage.</li>
<li class="">A new <code>BackupApi</code> has been added to list, create, and restore backups.</li>
<li class="">Lyrics now contain cues to allow timing for individual words.</li>
<li class="">Parental ratings have now moved to the new <code>ratingScore</code> property which allows for subscores.</li>
<li class="">The server may now return <code>503 Service Unavailable</code> when a server startup/shutdown/restart is in progress. Clients should expect this code, react to the <code>Retry-After: sec</code> header, and retry the operation as needed.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="plugins">Plugins<a href="https://jellyfin.org/posts/jellyfin-release-10.11.0#plugins" class="hash-link" aria-label="Direct link to Plugins" title="Direct link to Plugins" translate="no">​</a></h3>
<ul>
<li class="">All database access <strong>must</strong> now be done through EF Core. Raw SQL will no longer be accepted by the server.</li>
<li class="">Plugins may now provide custom database access. This is a HIGHLY experimental API and is subject to changes, with a goal of stability in 10.12.0.</li>
<li class="">Metadata plugins should use the new interface for external URL providers to supply better naming for external metadata links.</li>
</ul>
<p>Happy Watching!</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="release" term="release"/>
        <category label="server" term="server"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[SQLite concurrency and why you should care about it]]></title>
        <id>https://jellyfin.org/posts/SQLite-locking</id>
        <link href="https://jellyfin.org/posts/SQLite-locking"/>
        <updated>2025-10-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[SQLite is a powerful database engine, but due to its design, it has limitations that should not be overlooked.]]></summary>
        <content type="html"><![CDATA[<p>SQLite is a powerful database engine, but due to its design, it has limitations that should not be overlooked.</p>
<p>Jellyfin has used a SQLite-based database for storing most of its data for years, but it has also encountered issues on many systems. In this blog post, I will explain how we address these limitations and how developers using SQLite can apply the same solutions.</p>
<p>This will be a technical blog post intended for developers and everyone wanting to learn about concurrency.</p>
<p>Also Jellyfin's implementation of locking for SQLite should be fairly easy to be implemented into another EF Core application if you are facing the same issue.</p>
<p>- JPVenson</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-premise">The Premise<a href="https://jellyfin.org/posts/SQLite-locking#the-premise" class="hash-link" aria-label="Direct link to The Premise" title="Direct link to The Premise" translate="no">​</a></h2>
<p>SQLite is a file-based database engine running within your application and allows you to store data in a relational structure.
Overall it gives your application the means of storing structured data as a single file and without having to depend on another application to do so.
Naturally this also comes at a price. If your application fully manages this file, the assumption must be made that your application is the sole owner of this file, and nobody else will tinker with it while you are writing data to it.</p>
<p>So an application that wants to use SQLite as its database needs to be the only one accessing it.
Having established this fact, an important thought arises: if only a single write operation should be performed on a single file at a time, this rule must also apply to operations within the same application.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-w-a-l-mode">The W-A-L mode<a href="https://jellyfin.org/posts/SQLite-locking#the-w-a-l-mode" class="hash-link" aria-label="Direct link to The W-A-L mode" title="Direct link to The W-A-L mode" translate="no">​</a></h2>
<p>SQLite has a feature that tries to get around this limitation: the Write-Ahead-Log (WAL).
The WAL is a separate file that acts as a journal of operations that should be applied to an SQLite file.
This allows multiple parallel writes to take place and get enqueued into the WAL.
When another part of the application wants to read data, it reads from the actual database, then scans the WAL for modifications and applies them on the fly.
This is not a foolproof solution; there are still scenarios where WAL does not prevent locking conflicts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sqlite-transactions">SQLite transactions<a href="https://jellyfin.org/posts/SQLite-locking#sqlite-transactions" class="hash-link" aria-label="Direct link to SQLite transactions" title="Direct link to SQLite transactions" translate="no">​</a></h2>
<p>A transaction is supposed to ensure two things.
Modifications made within a transaction can be reverted, either when something goes wrong or when the application decides it should and optionally a transaction may also block other readers from reading data that is modified within a transaction.
This is where it gets spicy and we come to the real reason why I am writing this blog post.
For some reason on some systems that run Jellyfin when a transaction takes place the SQLite engine reports the database is locked and instead of waiting for the transaction to be resolved the engine refuses to wait and just crashes.
This seems to be a not uncommon issue and there are many reports to be found on the issue.</p>
<p>The factor that makes this issue so bad is that it does not happen reliably. So far we only have one team member where this can be (somewhat) reliably be reproduced which makes this an even worse a bug.
From the reports this issue happens across all operating systems, drive speeds and with or without virtualization.
So we do not have any deciding factor identified that even contributes to the likelihood of the issue happening.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-jellyfin-factor">The Jellyfin factor<a href="https://jellyfin.org/posts/SQLite-locking#the-jellyfin-factor" class="hash-link" aria-label="Direct link to The Jellyfin factor" title="Direct link to The Jellyfin factor" translate="no">​</a></h2>
<p>Having established the general theory on how SQLite behaves, we also have to look at the specifics of Jellyfins usage of SQLite.
During normal operations on a recommended setup (Non-Networked Storage and preferably SSD) its unusual for any problems to arise, however the way Jellyfin utilises the SQLite db up to 10.11 is very suboptimal.
In versions prior to 10.11 Jellyfin had a bug in its parallel task limit which resulted in exponential overscheduling of library scan operations which hammered the database engine with thousands of parallel write requests that an SQLite engine is simply not able to handle.
While most SQLite engine implementations have retry behavior, they also have timeouts and checks in place to prevent limitless waiting so if we stress the engine enough, it just fails with an error.
That and very long running and frankly unoptimized transactions could lead to the database just being overloaded with requests and flaking out.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-solution">The solution<a href="https://jellyfin.org/posts/SQLite-locking#the-solution" class="hash-link" aria-label="Direct link to The solution" title="Direct link to The solution" translate="no">​</a></h2>
<p>Since we moved the codebase over to EF Core proper, we have the tools to actually do something about this as EF Core gives us a structured abstraction level.
EF Core supports a way of hooking into every command execution or transaction by creating <a href="https://learn.microsoft.com/en-us/ef/core/logging-events-diagnostics/interceptors" target="_blank" rel="noopener noreferrer" class="">Interceptors</a>.
With an interceptor we can finally do the straight forward idea of just "not" writing to the database in parallel in a transparent way to the caller.
The overall idea is to have multiple strategies of locking. Because all levels of synchronization will inevitably come at the cost of performance, we only want to do it when it is really necessary.
So, I decided on three locking strategies:</p>
<ol>
<li class="">No-Lock</li>
<li class="">Optimistic locking</li>
<li class="">Pessimistic locking</li>
</ol>
<p>As a default, the no-lock behavior does exactly what the name implies. Nothing. This is the default because my research shows that for 99% all of this is not an issue and every interaction at this level will slow down the whole application.</p>
<p>Both the optimistic and pessimistic behaviors use two interceptors—one for transactions and one for commands—and override <code>SaveChanges</code> in <code>JellyfinDbContext</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="optimistic-locking-behavior">Optimistic locking behavior<a href="https://jellyfin.org/posts/SQLite-locking#optimistic-locking-behavior" class="hash-link" aria-label="Direct link to Optimistic locking behavior" title="Direct link to Optimistic locking behavior" translate="no">​</a></h3>
<p>Optimistic locking means to assume the operation in question will succeed and only handle issues afterwards. In essence this can be boiled down to "Try and Retry and Retry ..." for a set number of times until either we succeed with the operation or fail entirely.
This still leaves the possibility that we will not actually be able to perform a write, but the introduced overhead is far less than the Pessimistic locking behavior.</p>
<p>The idea behind how this works is simple: every time two operations try to write to the database, one will always win. The other will fail, wait some time, then retry a few times.</p>
<p>Jellyfin uses the <code>Polly</code> library perform the retry behavior and will only retry operations it will find have been locked due to this exact issue.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pessimistic-locking-behavior">Pessimistic locking behavior<a href="https://jellyfin.org/posts/SQLite-locking#pessimistic-locking-behavior" class="hash-link" aria-label="Direct link to Pessimistic locking behavior" title="Direct link to Pessimistic locking behavior" translate="no">​</a></h3>
<p>Pessimistic locking always locks when a write to SQLite should be performed. Essentially every time an transaction is started or a write operation on the database is done though EF Core, Jellyfin will wait until all other read operations are finished and then block all other operations may they be read or write until the write in question has been performed.
This however means, that Jellyfin can only ever perform a single write to the database, even if it would technically does not need to.</p>
<p>In theory, an application should have no issue reading from table "Alice" while writing to table "Bob" however to eliminate all possible sources of concurrency related locking, Jellyfin will only ever allow a single write performed on its database in this mode.
While this will absolutely result in the most stable operation, it will undoubtedly also be the slowest.</p>
<p>Jellyfin uses a <a href="https://learn.microsoft.com/en-us/dotnet/fundamentals/runtime-libraries/system-threading-readerwriterlockslim" target="_blank" rel="noopener noreferrer" class="">ReaderWriterLockSlim</a> to lock the operations, that means we allow an unlimited number of reads to happen concurrently while only one write may ever be done on the database.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-future-smart-locking-behavior">The future Smart locking behavior<a href="https://jellyfin.org/posts/SQLite-locking#the-future-smart-locking-behavior" class="hash-link" aria-label="Direct link to The future Smart locking behavior" title="Direct link to The future Smart locking behavior" translate="no">​</a></h3>
<p>In the future we might also consider combining both modes, to get the best of both worlds.</p>
<h1>The result</h1>
<p>Initial testing showed that with both modes, we had great success in handling the underlying issue. While we are not yet sure why this happens only on some systems when others work, we at least now have an option for users previously left out of using Jellyfin.</p>
<p>When I was researching this topic, I found many reports all over the internet facing the same error but nobody was able to provide a conclusive explanation whats really happening here.
There have been similar proposals made to handle it but there wasn't a "ready to drop in" solution that handles all the different cases or only code that required massive modifications to every EF Core query.
Jellyfin's implementation of the locking behaviors should be a copy-paste solution for everyone having the same issues as its using interceptors and the caller has no idea of the actual locking behavior.</p>
<p>Best of luck,</p>
<p>- JPVenson</p>]]></content>
        <author>
            <name>Jean-Pierre Bachmann</name>
            <uri>https://github.com/JPVenson</uri>
        </author>
        <category label="SQLite" term="SQLite"/>
        <category label="jellyfin" term="jellyfin"/>
        <category label="locked-database" term="locked-database"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin for iOS 1.7.0]]></title>
        <id>https://jellyfin.org/posts/ios-v1.7.0</id>
        <link href="https://jellyfin.org/posts/ios-v1.7.0"/>
        <updated>2025-09-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Download support is (finally) coming to Jellyfin for iOS!]]></summary>
        <content type="html"><![CDATA[<p>Download support is (finally) coming to Jellyfin for iOS!</p>
<!-- -->
<p>Jellyfin for iOS version 1.7.0 delivers the long-awaited downloads feature. This update introduces global download support complete with
Files app integration and sharing capabilities. Alongside this major new feature, the release brings additional technical improvements and
expanded localization support. A complete list of changes, including their respective pull requests, can be found on
<a href="https://github.com/jellyfin/jellyfin-expo/releases/tag/v1.7.0.8" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="download-support-is-here">Download support is here!<a href="https://jellyfin.org/posts/ios-v1.7.0#download-support-is-here" class="hash-link" aria-label="Direct link to Download support is here!" title="Direct link to Download support is here!" translate="no">​</a></h3>
<p>Direct downloads of all media types are now supported, working similarly to the Jellyfin web client and Android app. The download option
will be presented in the standard UI for users with appropriate server permissions. When selected, an entry will appear in the new
Downloads tab.</p>
<p>From the Downloads tab, users can:</p>
<ul>
<li class="">Open downloaded media in the Files app</li>
<li class="">Share directly to other apps (like VLC) for viewing/playing</li>
<li class="">Delete downloaded content</li>
</ul>
<center><img src="https://jellyfin.org/assets/images/downloads-03ffef9654dea38923ea3a8f47b508f5.png" alt="Downloads tab with context menu showing downloaded item options" style="max-height:600px"></center>
<p>Additionally, downloaded media can be browsed directly from within the Files app by locating the Jellyfin directory under Downloads.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="transcoded-downloads">Transcoded downloads<a href="https://jellyfin.org/posts/ios-v1.7.0#transcoded-downloads" class="hash-link" aria-label="Direct link to Transcoded downloads" title="Direct link to Transcoded downloads" translate="no">​</a></h4>
<p>Transcoded downloads have transitioned from an experimental to an alpha setting, allowing for broader community testing of this emerging
capability. This feature enables transcoding of audio and video that cannot be played directly by the iOS media engine. The Jellyfin server
will convert these files to a compatible format, also enabling playback of compatible videos directly within the app.</p>
<p><strong>Important notes for users:</strong> Server-side support for transcoded downloads is currently very basic. You may encounter various issues, and
the feature should be approached with this in mind. Currently, there are no options to control download quality, and in some cases,
transcoded files may be significantly larger than the original source files. Please report any issues you encounter on
<a href="https://github.com/jellyfin/jellyfin-ios/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="technical-improvements">Technical improvements<a href="https://jellyfin.org/posts/ios-v1.7.0#technical-improvements" class="hash-link" aria-label="Direct link to Technical improvements" title="Direct link to Technical improvements" translate="no">​</a></h3>
<p>This release features several technical enhancements:</p>
<ul>
<li class=""><strong>State Management Upgrade</strong>: State management within the app has been migrated to <a href="https://github.com/pmndrs/zustand" target="_blank" rel="noopener noreferrer" class="">zustand</a> from
mobx, resolving a major blocker for upgrading to the latest Expo and React Native versions.</li>
<li class=""><strong>TypeScript Migration</strong>: Continued migration to TypeScript improves overall code quality and maintainability.</li>
<li class=""><strong>App Naming Consistency</strong>: Updates made to the app name to ensure
<a href="https://github.com/jellyfin/jellyfin-meta/discussions/100" target="_blank" rel="noopener noreferrer" class="">consistent branding</a>.</li>
<li class=""><strong>Expanded Localization</strong>: Added support for Afrikaans and Basque languages, thanks to our community translators.</li>
<li class=""><strong>Code Optimization</strong>: Removed unused resources from the app.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="supported-ios-versions">Supported iOS versions<a href="https://jellyfin.org/posts/ios-v1.7.0#supported-ios-versions" class="hash-link" aria-label="Direct link to Supported iOS versions" title="Direct link to Supported iOS versions" translate="no">​</a></h3>
<p><strong>This release of the Jellyfin app will be the last major update to support iOS 12.</strong> The next major release is planned to include an
updated version of React Native, which will require us to increase the minimum supported iOS version to at least 15.1. Users with devices
running older iOS versions will still be able to use the Jellyfin web interface, though future app updates will not be available for these
devices.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributors">Contributors<a href="https://jellyfin.org/posts/ios-v1.7.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<p>Jellyfin is completely developed by volunteers, and could not be made without their great skills and dedication. Consider donating if you
appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/thornbill" target="_blank" rel="noopener noreferrer" class="">@thornbill</a> - Donate via <a href="https://github.com/sponsors/thornbill" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a> or
<a href="https://coff.ee/thornbill" target="_blank" rel="noopener noreferrer" class="">BuyMeACoffee</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/enigma0Z" target="_blank" rel="noopener noreferrer" class="">@enigma0Z</a></li>
</ul>
<p>And finally a big thank you to everyone who contributed translations, reported bugs, provided feedback and participated in beta testing!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/ios-v1.7.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have experience with React Native development and are interested in contributing, feel free to dive into the
<a href="https://github.com/jellyfin/jellyfin-ios" target="_blank" rel="noopener noreferrer" class="">source code</a> and open a pull request. Likewise, if you have experience with
JavaScript/TypeScript and React, <a href="https://github.com/jellyfin/jellyfin-web" target="_blank" rel="noopener noreferrer" class="">jellyfin-web</a> is always looking for additional contributors.
Alternatively, you can help with translating the app into your own language on our
<a href="https://translate.jellyfin.org/projects/jellyfin/jellyfin-expo/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/ios-v1.7.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out these exciting new features! The AppStore will automatically update your Jellyfin app if you're already
using it. New users can find the app on the Apple App Store.</p>
<a href="https://apps.apple.com/us/app/jellyfin-mobile/id1480192618"><img width="153" alt="Download on the App Store" src="https://jellyfin.org/images/store-icons/app-store.svg"></a>
<p>You can also join our <a href="https://testflight.apple.com/join/jJP75akQ" target="_blank" rel="noopener noreferrer" class="">TestFlight</a> and help test new versions before they're released to the
public.</p>]]></content>
        <author>
            <name>Bill Thornton</name>
        </author>
        <category label="release" term="release"/>
        <category label="ios" term="ios"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin for Xbox 0.9.0]]></title>
        <id>https://jellyfin.org/posts/xbox-v0.9.0</id>
        <link href="https://jellyfin.org/posts/xbox-v0.9.0"/>
        <updated>2025-04-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Better late then never. The Xbox app for Jellyfin now has a new maintainer and its first release in 5 years.]]></summary>
        <content type="html"><![CDATA[<p>Better late then never. The Xbox app for Jellyfin now has a new maintainer and its first release in 5 years.</p>
<p>- JPVenson</p>
<!-- -->
<p>The Jellyfin app on Xbox has been unmaintained for quite a while.
While it was on lifesupport for the last couple of years, we were occasionally fixing bugs.</p>
<p>With the last release now 5 years old, and the continued interest in Jellyfin being available on Xbox overall, I decided to take over at least the superficial duties of keeping it operational and releasing when there are new features or bug fixes.</p>
<p>This new release has now been approved and is available as a new version on the Microsoft store for up-to-date Xbox consoles.</p>
<p>It contains a number of bug fixes, but the main change is the switch of the web browser engine the Xbox app is using, to a newer and more feature rich Chromium-based browser implementation instead of the old, legacy Edge one.
This allows us to expand support to formats such as HEVC/4K and HDR on supported devices, in future releases after further testing.</p>
<h1>What to expect</h1>
<p>I will be actively managing pull requests and try my best with bug reports, though we are still very reliant on your help with new features and bugfixes.
If there are enough features and bug fixes done and merged, you can expect more releases in the future, though I will not give a definitive timeline for that.</p>
<p>- JPVenson.</p>]]></content>
        <author>
            <name>Jean-Pierre Bachmann</name>
            <uri>https://github.com/JPVenson</uri>
        </author>
        <category label="release" term="release"/>
        <category label="xbox" term="xbox"/>
        <category label="uwp" term="uwp"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Roku Version 3.0.0]]></title>
        <id>https://jellyfin.org/posts/roku-300</id>
        <link href="https://jellyfin.org/posts/roku-300"/>
        <updated>2025-03-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[You Wanted the Best, You Got the Best!!]]></summary>
        <content type="html"><![CDATA[<p>You know the feeling when the assignment was to write a 500 word paper, but you have so much to cover that your first draft is 25,000 words?</p>
<p>...what? Just me?</p>
<p>That's exactly how I feel attempting to condense all the new features, bug fixes, refreshed UI components, and improvements found in Jellyfin for Roku 3.0.0 into a single blog post.</p>
<p>But I'll do my best, here goes.</p>
<p>- 1hitsong</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="trickplay-images">Trickplay Images<a href="https://jellyfin.org/posts/roku-300#trickplay-images" class="hash-link" aria-label="Direct link to Trickplay Images" title="Direct link to Trickplay Images" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of trickplay images in the Jellyfin Roku channel" src="https://jellyfin.org/assets/images/trickplay-e090dcc06923a3ee010f629dfc5503a7.jpg" width="1920" height="1080" class="img_ev3q">
When seeking through your videos, if you've enabled and generated trickplay images on your server, you will see a small still frame image from the video at that timestamp. This image allows you to easily find the exact time in the video you're looking for.</p>
<p><strong>Note:</strong> Older Roku devices and lower powered Roku devices (such as Roku TVs) will likely require your trickplay tiles be a 5x5 grid and not the default 10x10 grid. <a href="https://github.com/jellyfin/jellyfin-roku/issues/14" target="_blank" rel="noopener noreferrer" class="">Click here</a> for more information and detailed instructions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="timed-lyrics">Timed Lyrics<a href="https://jellyfin.org/posts/roku-300#timed-lyrics" class="hash-link" aria-label="Direct link to Timed Lyrics" title="Direct link to Timed Lyrics" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of a song playing and displaying lyrics timed with the audio track" src="https://jellyfin.org/assets/images/timedLyrics-1ce0269da6c382c5660ae733ea319f5a.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Support for timed lyrics has been added. If you have lrc files with timestamps, the music player will display the lyrics and move the highlight along automatically. Just in time for your next karaoke party!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="media-segments">Media Segments<a href="https://jellyfin.org/posts/roku-300#media-segments" class="hash-link" aria-label="Direct link to Media Segments" title="Direct link to Media Segments" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Skip Intro button displayed over TV show introduction" src="https://jellyfin.org/assets/images/skipIntro-5127407ffc0c7f7f9ace2dda4738559a.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Stop manually skipping intros and outros! Jellyfin on Roku now supports media segments. If you have media segments configured on your server, the video player will recognize the segments and take whatever action you set in the Roku settings. Auto-skip? Display a skip button? Nothing? You have the power to decide.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="audio-mini-player">Audio Mini Player<a href="https://jellyfin.org/posts/roku-300#audio-mini-player" class="hash-link" aria-label="Direct link to Audio Mini Player" title="Direct link to Audio Mini Player" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Audio mini player on the bottom of the home screen" src="https://jellyfin.org/assets/images/audioMiniPlayer-5675c8152999cc68ad386992c2061c5f.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>You can now play audio and navigate around the channel. Simply start playing audio and press the back button. The audio mini player will appear at the bottom of your screen and continue playing the audio queue.</p>
<p>To move your cursor into the audio mini player, press the replay button on your remote. You can then select the playback buttons to move back/forward, play/pause, or stop. You can also return to the full audio player screen by selecting the music note icon.</p>
<p>To move the cursor back out of the audio mini player, simply press the replay button again. Your cursor will then move back to the last item you had focused.</p>
<p><strong>Note:</strong> The audio mini player will only appear if only audio media is in the queue. If any other type of media is in the queue it will not appear and pressing back will simply stop playback.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="my-list---your-own-personal-watch-later-list">My List - Your Own Personal "Watch Later" list<a href="https://jellyfin.org/posts/roku-300#my-list---your-own-personal-watch-later-list" class="hash-link" aria-label="Direct link to My List - Your Own Personal &quot;Watch Later&quot; list" title="Direct link to My List - Your Own Personal &quot;Watch Later&quot; list" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Home screen showing the My List row" src="https://jellyfin.org/assets/images/myList-72e9a39863b67f40322081190e66e834.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Want to mark a video to watch later? Add it to your list. From the detail screen click on the add to My List button or using the new item option menu, move the cursor over an item on the home screen or in a library and press the * button on your remote and choose add to My List.</p>
<p>There are two easy ways to view your list. On the home screen, scroll down to the My List row, or select the My List item from the my media row.</p>
<p>Currently, only video files are supported by My List.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="item-option-menu">Item Option Menu<a href="https://jellyfin.org/posts/roku-300#item-option-menu" class="hash-link" aria-label="Direct link to Item Option Menu" title="Direct link to Item Option Menu" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Option menu displayed when you have an item focused and press the * button" src="https://jellyfin.org/assets/images/itemOptionMenu-2bff6f77936af81aae342ab9d92aadbc.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>On Roku you can't right-click on an item to get an option menu, so we made one using the * button.</p>
<p>With the cursor on an item, press * on your remote to get the option menu. Depending on the context of the screen you are on, an assortment of functions will be presented to you.</p>
<p>Options such as add to My List, add to playlist, mark as played/unplayed, go to series/season, remove from playlist, and more.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="audiosubtitle-track-selection-updates">Audio/Subtitle Track Selection Updates<a href="https://jellyfin.org/posts/roku-300#audiosubtitle-track-selection-updates" class="hash-link" aria-label="Direct link to Audio/Subtitle Track Selection Updates" title="Direct link to Audio/Subtitle Track Selection Updates" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Popup dialog showing user selecting subtitles prior to playing a movie" src="https://jellyfin.org/assets/images/selectSubtitles-5e1d45db16e34003e384100658c9eab3.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>A much requested feature, you can now select your subtitle and audio tracks prior to playing a video. Simply click on the options button from the detail screen and make your selections.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="remote-subtitle-management">Remote Subtitle Management<a href="https://jellyfin.org/posts/roku-300#remote-subtitle-management" class="hash-link" aria-label="Direct link to Remote Subtitle Management" title="Direct link to Remote Subtitle Management" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Popup dialog showing user searching for subtitles to download to their server" src="https://jellyfin.org/assets/images/remoteSubtitles-b23531a3ac762187cfa56e8b50bf6221.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Ever start watching a movie and realize you need subtitles, but find you don't have any loaded in Jellyfin?</p>
<p>Previously you would either have to just watch without them, or get on your server to download them.</p>
<p>Now you can click the manage subtitles button on the detail screen and search for subtitle files to download and use.</p>
<p>Simply choose your language and press search. A list of found subtitles will display and allow you to choose one to download. The selected subtitle file will download to your server and will be selectable from the subtitle selection functions.</p>
<p><strong>Note:</strong> The manage subtitles button will only display for users who are allowed to edit subtitles.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="audiobook-support">Audiobook Support<a href="https://jellyfin.org/posts/roku-300#audiobook-support" class="hash-link" aria-label="Direct link to Audiobook Support" title="Direct link to Audiobook Support" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Audio player playing Salem&amp;#39;s Lot (Part 2) audiobook" src="https://jellyfin.org/assets/images/audioBook-a0a284fb4bc4622f2d417d87851d3dcb.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Audiobooks are books (though there's <a href="https://github.com/jellyfin/jellyfin-meta/discussions/87" target="_blank" rel="noopener noreferrer" class="">discussion</a> about changing that in Jellyfin), but not all books are audiobooks. Jellyfin on Roku now has basic audiobook support so you can listen to your collection.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="force-transcoding-options">Force Transcoding Options<a href="https://jellyfin.org/posts/roku-300#force-transcoding-options" class="hash-link" aria-label="Direct link to Force Transcoding Options" title="Direct link to Force Transcoding Options" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Popup dialog showing Force Transcoding option" src="https://jellyfin.org/assets/images/forceTranscoding-14dd3b630242381009fc7bfc5e08a46f.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Sometimes you have media Roku believes it can directplay, but can't. In the past the only method to get it to play was to force low bitrate limits, or other weird hurdles to make it transcode.</p>
<p>Now you can click the options button on the detail screen and force transcoding on this one item.</p>
<p>Or, if you prefer, you can enable the new user setting to force transcoding for all playback. <em>TRANSCODE ALL THE THINGS!</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="search-updates">Search Updates<a href="https://jellyfin.org/posts/roku-300#search-updates" class="hash-link" aria-label="Direct link to Search Updates" title="Direct link to Search Updates" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Search results showing songs and people" src="https://jellyfin.org/assets/images/searchUpdates-5c6ed3fb31d02fdf48f65e81c9cbcbfb.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Live TV programs, people, and playlists are now included in search results.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="refreshed-ui-on-many-screens">Refreshed UI on many screens<a href="https://jellyfin.org/posts/roku-300#refreshed-ui-on-many-screens" class="hash-link" aria-label="Direct link to Refreshed UI on many screens" title="Direct link to Refreshed UI on many screens" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Redesigned TV episode screen" src="https://jellyfin.org/assets/images/refreshedUI-07a624413c3637a74473d64d4afe6b95.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>As you navigate around the channel you'll see both major and minor UI changes. Some were necessary to support new features. Some were necessary to remove minor annoyances. ...and some were necessary to stop all of us yelling at our TVs. 😆</p>
<p>There are simply too many amazing things in this release to name them all! To read the full list of changes, please read the full <a href="https://github.com/jellyfin/jellyfin-roku/releases/tag/3.0.0" target="_blank" rel="noopener noreferrer" class="">release notes</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-contributors">👥 Contributors<a href="https://jellyfin.org/posts/roku-300#-contributors" class="hash-link" aria-label="Direct link to 👥 Contributors" title="Direct link to 👥 Contributors" translate="no">​</a></h2>
<p>Jellyfin is developed by volunteer contributors, and we couldn't do without their great skills and dedication.
They don't get paid by any organizations, so consider donating if you appreciate their work.
A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/1hitsong" target="_blank" rel="noopener noreferrer" class="">@1hitsong</a> - Sponsor via <a href="https://github.com/sponsors/1hitsong" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/jimdogx" target="_blank" rel="noopener noreferrer" class="">@jimdogx</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/K-Money" target="_blank" rel="noopener noreferrer" class="">@K-Money</a></li>
<li class=""><a href="https://github.com/Insprill" target="_blank" rel="noopener noreferrer" class="">@Insprill</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-downloads--changelog">💾 Downloads &amp; Changelog<a href="https://jellyfin.org/posts/roku-300#-downloads--changelog" class="hash-link" aria-label="Direct link to 💾 Downloads &amp; Changelog" title="Direct link to 💾 Downloads &amp; Changelog" translate="no">​</a></h2>
<p>The complete list of changes for this release, including all merged pull requests, can be found on
<a href="https://github.com/jellyfin/jellyfin-roku/releases/tag/3.0.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<p>Your installed Jellyfin channel should automatically update once available or you can install Jellyfin
from the <a href="https://channelstore.roku.com/en-ca/details/4d9e526a7d972d4decf98ea6a84000f7:c617f4902629cc0bd1e1411db1775cf3/jellyfin" target="_blank" rel="noopener noreferrer" class="">Roku Channel Store</a>.</p>]]></content>
        <author>
            <name>1hitsong</name>
            <uri>https://github.com/1hitsong</uri>
        </author>
        <category label="release" term="release"/>
        <category label="roku" term="roku"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin for iOS 1.6.0]]></title>
        <id>https://jellyfin.org/posts/ios-v1.6.0</id>
        <link href="https://jellyfin.org/posts/ios-v1.6.0"/>
        <updated>2025-02-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Jellyfin for iOS is back with the first release in nearly 3 years!]]></summary>
        <content type="html"><![CDATA[<p>Jellyfin for iOS is back with the first release in nearly 3 years!</p>
<!-- -->
<p>Version 1.6.0 of the Jellyfin app for iOS marks a new milestone for the development of the app. A complete list of changes, including their
respective pull requests, can be found on <a href="https://github.com/jellyfin/jellyfin-expo/releases/tag/v1.6.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>. An update on the
development of the app, a summary of included changes, and some future plans can be found below.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="renewed-development-with-more-frequent-releases">Renewed development with more frequent releases<a href="https://jellyfin.org/posts/ios-v1.6.0#renewed-development-with-more-frequent-releases" class="hash-link" aria-label="Direct link to Renewed development with more frequent releases" title="Direct link to Renewed development with more frequent releases" translate="no">​</a></h3>
<p>I'm sure a lot of people are curious why it has been so long since the last app release. There are a few reasons for this. First, we have
not released any breaking changes to Jellyfin that required an app update. Perhaps most significantly the toolkit we use to build the app
made some changes that essentially prevented my continued development of the app without access to a modern Mac. However, thanks to the
generosity of contributors to <a href="https://opencollective.com/jellyfin" target="_blank" rel="noopener noreferrer" class="">Jellyfin's open collective</a>, I was able to expense the majority of the
cost to purchase a new Mac Mini for development. Finally, the build system provided by the toolkit we were using had been discontinued. We
have now replaced that build system with a fully automated GitHub Action workflow that builds and publishes the app to
<a href="https://testflight.apple.com/join/jJP75akQ" target="_blank" rel="noopener noreferrer" class="">TestFlight</a> on demand.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="longstanding-bugs-squashed">Longstanding bugs squashed<a href="https://jellyfin.org/posts/ios-v1.6.0#longstanding-bugs-squashed" class="hash-link" aria-label="Direct link to Longstanding bugs squashed" title="Direct link to Longstanding bugs squashed" translate="no">​</a></h3>
<p>This release features fixes for the following longstanding bugs:</p>
<ul>
<li class="">Improved video player UI by allowing the video to cover the entire screen and hiding the home screen indicator.</li>
<li class="">Removed an incorrect check for (e)ac3 audio support.</li>
<li class="">Fixed an issue that caused the app to display a blank screen sometimes when left open in the background.</li>
<li class="">Added user device name entitlement so the app can report the correct device name on iOS 16+.</li>
<li class="">Excluded unused features from the build so the app no longer requests access to permissions it doesn't need (like fitness data).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-next">What is next?<a href="https://jellyfin.org/posts/ios-v1.6.0#what-is-next" class="hash-link" aria-label="Direct link to What is next?" title="Direct link to What is next?" translate="no">​</a></h3>
<p>While the primary focus of the next couple releases will be to do some dependency maintenance and updates, you can also expect work to
continue on some exciting new features. Few people are probably aware that I started working on offline support
<a href="https://github.com/jellyfin/jellyfin-expo/pull/366" target="_blank" rel="noopener noreferrer" class="">3 years ago</a>! Unfortunately it
<a href="https://github.com/jellyfin/jellyfin-expo/issues/372" target="_blank" rel="noopener noreferrer" class="">wasn't quite ready</a> for this release, but my goal is to make it available as a
general alpha/beta feature later this year. I have some other ideas to address some well-known limitations of the app and a new contributor
has expressed interest in developing some new features also. You can track all new developments on the
<a href="https://github.com/orgs/jellyfin/projects/40/views/4" target="_blank" rel="noopener noreferrer" class="">project roadmap</a> on GitHub.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="supported-ios-versions">Supported iOS versions<a href="https://jellyfin.org/posts/ios-v1.6.0#supported-ios-versions" class="hash-link" aria-label="Direct link to Supported iOS versions" title="Direct link to Supported iOS versions" translate="no">​</a></h3>
<p>The Jellyfin app currently supports iOS versions as old as iOS 12. Over the next few releases, we will be updating our core dependencies
which will force us to increase our minimum supported version to iOS 15.1. If you are using a device that cannot be updated to a newer
iOS version, you will still be able to use the Jellyfin web interface but future app updates will be unavailable.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributors">Contributors<a href="https://jellyfin.org/posts/ios-v1.6.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<p>Jellyfin is completely developed by volunteers, and couldn't be made without their great skills and dedication. Consider donating if you
appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/thornbill" target="_blank" rel="noopener noreferrer" class="">@thornbill</a> - Donate via <a href="https://github.com/sponsors/thornbill" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/anthonylavado" target="_blank" rel="noopener noreferrer" class="">@anthonylavado</a> - Donate via <a href="https://github.com/sponsors/anthonylavado" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/Bond-009" target="_blank" rel="noopener noreferrer" class="">@Bond-009</a> - Donate via <a href="https://github.com/sponsors/Bond-009" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/JPKribs" target="_blank" rel="noopener noreferrer" class="">@JPKribs</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/Drew-Daniels" target="_blank" rel="noopener noreferrer" class="">@Drew-Daniels</a></li>
<li class=""><a href="https://github.com/fidoriel" target="_blank" rel="noopener noreferrer" class="">@fidoriel</a></li>
<li class=""><a href="https://github.com/Cyberbeni" target="_blank" rel="noopener noreferrer" class="">@Cyberbeni</a></li>
</ul>
<p>And finally a big thank you to everyone who contributed translations, reported bugs, provided feedback and participated in beta testing!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/ios-v1.6.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have experience with React Native development and are interested in contributing yourself, feel free to dive into the
<a href="https://github.com/jellyfin/jellyfin-expo" target="_blank" rel="noopener noreferrer" class="">source code</a> and open a pull request. Likewise, if you have experience with
JavaScript/TypeScript and React, <a href="https://github.com/jellyfin/jellyfin-web" target="_blank" rel="noopener noreferrer" class="">jellyfin-web</a> is always looking for additional contributors.
Alternatively, you can help with translating the app into your own language on our
<a href="https://translate.jellyfin.org/engage/jellyfin-expo/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/ios-v1.6.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out all these changes! The AppStore will auto-update your Jellyfin app if you're already using the app. For
new users, you can find the app on the Apple App Store.</p>
<a href="https://apps.apple.com/us/app/jellyfin-mobile/id1480192618"><img width="153" alt="Download on the App Store" src="https://jellyfin.org/images/store-icons/app-store.svg"></a>
<p>You can also join our <a href="https://testflight.apple.com/join/jJP75akQ" target="_blank" rel="noopener noreferrer" class="">TestFlight</a> and help test new versions before they're released to the
public.</p>]]></content>
        <author>
            <name>Bill Thornton</name>
        </author>
        <category label="release" term="release"/>
        <category label="ios" term="ios"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[EFCore refactoring is here]]></title>
        <id>https://jellyfin.org/posts/efcore-refactoring</id>
        <link href="https://jellyfin.org/posts/efcore-refactoring"/>
        <updated>2025-01-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EFCore, Jellyfin and me.]]></summary>
        <content type="html"><![CDATA[<p>EFCore has landed in unstable, and this will have consequences.</p>
<p>We have finally reached our first milestone in cleaning up the legacy database access code. This means that all SQL builders that targeted SQLite directly have been removed from code. This marks the first step towards a completely new database design, but we now need to take a quick look ahead and see what's next.</p>
<p>Unstable builds will be temporarily turned off this week, skipping the 20250127 unstable to provide a full week of in-master testing, and will be re-enabled for the 20250203 unstable next week, so ensure you have backups ready this week if you run unstable builds.</p>
<p>Otherwise please read on to see what exactly that means and what the future brings.</p>
<p>- JPVenson</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-exactly-have-we-done">What exactly have we done<a href="https://jellyfin.org/posts/efcore-refactoring#what-exactly-have-we-done" class="hash-link" aria-label="Direct link to What exactly have we done" title="Direct link to What exactly have we done" translate="no">​</a></h2>
<p><a class="" href="https://jellyfin.org/posts/efcore-refactoring-incoming">Joshua’s blog post</a> in November 2024 outlined much of what we aimed to achieve, and I want to take this opportunity to address the feedback and questions we've received, clarifying a few key points.</p>
<p>The old code included many instances of direct access to the underlying SQLite database.
SQLite is a file-based database where Jellyfin stores most of its important data.
This has been an issue for 4 reasons.</p>
<ol>
<li class="">The old code was very poorly written</li>
<li class="">The old code was very complex</li>
<li class="">The old code was explicitly written to support SQLite only and nothing else</li>
<li class="">The old code migration handling was manual and error-prone</li>
</ol>
<p>Because of this, we have been unable to quickly and reliably extend the database to add new features or improve existing ones. The new code uses EntityFramework migrations, which is the industry standard for database migrations in the C# ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-havent-we-done">What haven't we done<a href="https://jellyfin.org/posts/efcore-refactoring#what-havent-we-done" class="hash-link" aria-label="Direct link to What haven't we done" title="Direct link to What haven't we done" translate="no">​</a></h2>
<p>While we are currently working on it, the current code does <strong>not</strong> add support for alternative database providers on its own.
Adding support for other database providers will be a significant change beyond just the refactor, and when introduced, will likely remain highly experimental for quite some time.</p>
<p>Very importantly, we have not yet optimized the rest of Jellyfin to work with the new database access. That means it is possible that unstable builds may be significantly slower while we are rewriting the rest of the code to utilize the new structures.</p>
<p>The new architecture also allows for a proper way of backing up Jellyfin instances while they are running, something that was previously impossible to do reliably.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-future">The Future<a href="https://jellyfin.org/posts/efcore-refactoring#the-future" class="hash-link" aria-label="Direct link to The Future" title="Direct link to The Future" translate="no">​</a></h2>
<p>Unstable builds have been active for some time, but we will be temporarily turning them off this week, skipping the 20240127 unstable to provide a full week of in-master testing as originally stated by Joshua. We will re-enable unstable builds for the 20240203 unstable week with these changes, so ensure you have backups ready this week if you run unstable builds.</p>
<p>The migration will aggregate the old <code>library.db</code> into the <code>jellyfin.db</code> file and then rename it to <code>library.db.old</code>, so the unstable builds will no longer be compatible with the previous versions.</p>
<p>To migrate, we explicitly <strong>do not support versions older than 10.10.3</strong>. This means that if you want to test the migrations, you must start with an up-to-date database from the 10.10.z release train or current unstable.</p>
<p>Thank you, and if you have questions, please don't hesitate to join our matrix channels for assistance.</p>
<p>- JPVenson.</p>]]></content>
        <author>
            <name>Jean-Pierre Bachmann</name>
            <uri>https://github.com/JPVenson</uri>
        </author>
        <category label="unstable" term="unstable"/>
        <category label="warning" term="warning"/>
        <category label="efcore" term="efcore"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin for Android TV 0.18]]></title>
        <id>https://jellyfin.org/posts/androidtv-v0.18.0</id>
        <link href="https://jellyfin.org/posts/androidtv-v0.18.0"/>
        <updated>2024-11-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Version 0.18 of our Jellyfin for Android TV app is ready! Exciting features like lyrics and media segments are now available, along with]]></summary>
        <content type="html"><![CDATA[<p>Version 0.18 of our Jellyfin for Android TV app is ready! Exciting features like lyrics and media segments are now available, along with
significant improvements to subtitles and more.</p>
<!-- -->
<p>This release marks another milestone in our journey to delivering the best media app on Android TV. Jellyfin 10.10 or newer is required. A
complete list of changes, including their respective pull requests, can be found on
<a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.18.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>. I've listed a subset of all changes below.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="skipping-intros-outros-and-more-with-media-segments">Skipping intros, outros and more with media segments<a href="https://jellyfin.org/posts/androidtv-v0.18.0#skipping-intros-outros-and-more-with-media-segments" class="hash-link" aria-label="Direct link to Skipping intros, outros and more with media segments" title="Direct link to Skipping intros, outros and more with media segments" translate="no">​</a></h3>
<p>Media segments are a new feature added in Jellyfin 10.10. A segment provides metadata for specific parts of a video or audio file. This can
be used to mark an intro in your episode or the credits of a movie. The Android TV app can now use those segments to skip parts. By default,
the app will ask to skip intros and outros, but you can fine-tune this to your liking within the app preferences. All media segment types
are supported: intro, outro, preview, recap and commercial with three actions to choose from:</p>
<ul>
<li class="">
<p><strong>Skip</strong><br>
<!-- -->Immediately skips the playback forward to the end of the segment, or the next episode</p>
</li>
<li class="">
<p><strong>Ask to skip</strong><br>
<!-- -->Shows a popup that the segment can be skipped by pressing the OK button on your remote and disappears after 8 seconds or when pressing the
back button.</p>
<p><img decoding="async" loading="lazy" alt="Ask to skip button shown during video playback" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAAA8CAYAAABo3+Q5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAA8QSURBVHja7VxHbxzJFaZh2Lvrv+CD4YNvPvgX+GDD8M32ZZ1W0rDZwzyMYk4jJpFiHpEUgxhEkQorStRagUkUSVE0tKKV4yoBhtfeP7ECyvVqpnuquyu8anIXOnCAh5npru6ufl+9WK8qI0PwWV29+RGlzyjNU/o3pW8pkX363ujbFN/nUzh8lIH50IZ/pvT1PgM/KAI8/qIC7YeUhvYZ9UHTMOAkAi8F3DrXeJ3Mzp4lXd39JB5vIY1NSWpKkfufnWtm1MQda+KugXPxI63Ja1Pnmrh7Of/5a73Xe5/nXh8XHI8H2yf752tP+8P6FE+3cfrovI/02fE0L4RtUt/xeKv03UT3aqLt29uPkfHxSXL9+jLD4caNDQ+AIlXJwHIazp05Tw5X1JCDh7I8dCji/Radc37zJGvjv4foOf52omOq47p7m1wna6867r2PpeQhTzm5heTEyDhZXl7zS+BfeefkawdhoPGTUySSGVV2KvBimTb6ZdKdtwMvggUNB6qcUX4gMODpBoMKbOhLmrK4b/2zW1o7/OD9j9LHGSlvxhXP+fnLxI7mCl/aZOSpGOIej5hLi+d5mbawf7J+q7SHl8lmQJsNAivU4Ojq7vMDeCgj5Y6yAysrN6mqrNaqDSxzVepUN3Ix9xOBIjonGljy+1oaCVIPahFYemAtLXigQpeWVnnwFjJS8QQ7cP78RbQo60aejLFC8FwJslz161fDOsnC2EIViBgtEsbmYfiEUcFAiePDPHj/yeAD8JHRk1ImaW2eT43JXhjjyGBe1AV5F2pzN2Sq6nUDAvPM4pJyHrz3GbweHUgMyUdLChjsg1RSJwMPC0hYkDDaYa+AU3m2YQdRhPKHx8sDXv/AoFj9RLxqDGujdPYonARYRh6qzp6FVXmmQLNvpF+gIil4A4lhuZqM4EYT5mWTUqYC33I9UZ0DoBsU6d9pNz3MoDEFDxMqKU0Op+l4koIHBhGjl6Wut0S1qjoTAI0jld0LaIZIUP2aeMG6Y7oBgnFgMIOcV5EiG79r8HabeQiqOUvr2puEKBgv0h8jhrVpJpKHyQzpPGOtzfOPaJWzgrFl8B9GkpWVTaLZuR6y7RyWzcGEGQcNYz2s+gsLlipuw8azugSE/z2V4IVxKlSgZVpRkp9fSIqKipUUixWRLAqk0otEhDCYQFwnmSYhkuj6A5xTZZKo0JkpLXgYL05l85xjlpUtBa20tJRUVFQKzxUWxkh2Tp6b9wyQIIcqiv30gFkhc5Rq9SeTPBMpVAEp9zZTkqeTOtXIAPWYk5svlbCamjpy6dIlcvv2bdLV1S1pV0IKCmJMakNlRyTZGd0MSRgP0lVxTM3ZXq8W2Q+TPqHUpsk0C88wlYosKysnK6urDLitrS32PTQ87AImApEHEMPo3XiDunhQHXzbSgnFDj5dOKSI84bQ8ZOICXn5BVLgqqqqaOJ7hQE2OTVFWlvb6CzGDbK5ucl+84B51Ci1hQ6A2HSYiY3BBvmmGSV/CBNmHtEozpOBh+k42CmVQ1JaWkYuXLhARsfG3WOtbe302Dyprq5RXgsARgTTPyYMz87JJ/UNcfrMDtLW3klnrZvpfUsC9xpIDJJ3796R7e1/au8L3nNzSxuppqaAt6N6m4jP7hiBh8kT+n/DS4hUnlgVFkvtnOpYTm6eJkdqCTIqSXXeeayHfPXVK/L27VsGDBD8fvXqFbPz/Lvw4OkGRCLV9smTp1TrxELN7osdKUt6L3ycJ7MhfCqH/lapSz1AOIrFiukgiaLKMfg2w8MjDCSgzz+/QCc1e8mxrh5amzNHnj17xkCcmJxy2ycMwCsrryS3t7fJpYXLbACbJNB1qnTPwAs+0HYBBHX2XQPnXJ+bV4CeWGXOU0GRCxCA5h+QdfVN5M2bN+x8dU29FLwwKS6RE4N1pFTlJWjwlPUiqZvmIQLw3QOXDuTdzIMkpuOporKaSdy9e/elTFqmThSANTNzmv0fUIAHjhNIf6Zlc1mjaMAjhv/OMWjT0tpOevsGSBGdj4v48q5Yh8VY8jARPzDU61VWk8rKKikAWeW15Lcto+TX7VPk09qj0nYlJaXUqWgKHHcZpchNOlR+uIrZOpC+7JwCIXNqqMSBVILk+cHj7584PkRev35NXrx4QeqpxMK5+JEW1vbBw4euQ2XTlB/8v3fvHpmYmKT28IlrZ0HK126uM40QJv5UOywKtSkCFXKSPHjgNS4uLZFr164x5vsZ/2lNO/nJ9BOSMffWpV91z5NYcVAyOzo6WFhx/PigR3rBa8QG7tB2Z+dfjHHrGxuknNqoiE9i/dek1ea2ayJa244yCX7+/DmprWtw24rAy7IpeA8esuNwzQK1h/0Dx8nk5DS5f/8BO3737g5rFyZ/igoVMEVIIAUOsysqqmh9YTKOm5qeDoBhl1WTH8289AAH9IPZN+RP9V2B9nV19WR9fZ3cunWL9PT0ucchCaAKhP0vHYuVkkePHjOmvXz5kmzS+/X1JzwOBk8wgHm1CQABCCB1EBbw10CBrgNeMrviBQ9Aj3AJ5lhRKesDnOvo7DLO0WrSY0PIDLjlAQ9iuIWFBQbctAA4oD829ASAc+hnQ2vCa1paWpnEbFBqaoqzY5A2C5RnZKpHb0npYVpEfI48ffrUVWGgSi9f/oJKUqPn3XiHBcACaQOHpqe3PzDj4kjeQwDPUZvRJHigIkWDfmJiil1z9uy5UMkALXiiMgg/eCy+S4FXXn6YrK2tMfAGB4eEQPyhsU8K3k9PbAqvqaC2E+4LqbQ2GtALwZPkMkU2G6QApG5jY5OB59ihzmPdAbX55Zd3GSjwG0rPRWpWbPPyGHgwUER9aWhoYoNh9cba3oOHnTVOTvekg/OGhkam5iDdlXDtVJoiFQ1S8H53ZDjQHpyepaVlNiDGaFamOGUXmdoUFCopVXxAJdksuzI7d9a1TTW1DR61ydPDR4+EQfiRZrnaBPBEtrmmtp68pgNm89aWUdn/LsGzAtKXdFjSDG9vP8rylYuLi0yV+gH5TcsI+fHMCw9wPx9cIYXFQeems7NTqIZhxgJTp+J4m5AS4707/1wjSDULFU7PetQm0PT0DOXLDfZ7fv4Sxw9L67Dw4PEZE1DTzOtcu4mTNjx4g6gFJHwQ6g8V6usbpHN1QAcq4+SXvZfJLxJL5PfxQWUuFDzOQKhhZ/vAk88AgE0D5o6MjElH9+zcGdbm4sUFT6gADopTKwl2D45BuMA/2wtelgc8cExEGquvf8AdDLpAXdRn49ymKoOQX1C4JwE4NkhHZfNT1EaT0GBf7ty5w6TMfx14nBDAM7t2ctIXKqSD9EbqLAGYYCcBTEdt8+CJvE3wLnmeQaXAzs4OO9fd0x+qOkFegERL/8SqKCjGzo0hw/DdAeaN//JS6TH1Io50f6PZ+cxbBWYBgJDlADUKqqutvYPGo9ddb9FhdEISpJ+muVDHkQE17A/S0wClwYMQBfKoVdV1pKExTtfbLaae94ja7iJ0SIbKbfIz6SbTLgWhpa/EKI3G17iYzLN98Y8rTHL8jsgbKpWPHz+mtrHSva8/w8IvR9uiNhjOwTSWCDxebUImZmtr2zOT4cxAFFEbbzL3iCpA8sd5urVtzn9g6t4np8VSF5jyQfQzk6o5cF4gMD41M0vO0JgPZhtACp2MjXMNSCDkIutSKTD+HEgcxH4AGjhruXmFrG1TvDkgeeCwQBt4xkmqkufmzrE0XFFxmXmpIWomnYvzsEW3zjcwVwUOuPqDg4PUCel0wamtraNMPMHiRBV4MTabbqMnOKV22pMPtQwKgyyUSmPgRdPgHTRYFoDJcaJmFQ4p8n/yijKbzXjLwAOgwPUHGhhIMDCdOK67u0cphU4qS6pOjFflWiiVpVqSLAORl7ywy6u972Thq8cwS5NkHYdYBzIgMhCam1tYfAP5SgjoWRx36pQbgIukz47mKKUBs9R5r0a9at2G0x87mivNsODmSuWLUtRrFQZPoGeqZS8e0cysN9OsxPJyUuJGR8ek6hKkGCQOk4HYdXl6RF/PqYvH0t53Ni20WmVTP074YFL6rnu2cq2Cqo6Cr1EUzfTyKgkkJiZRo2DjYNZA5pzk5hYoMijBFT8Ok4Kq0ZKGPfxmBiZr0l3eSMrRnakyZ0OG4H1so/J3fOnfwJBRtZNeOm0GIlRBYwJwSH05wbRqjbduuRYbUMjSBU+biH4DgrRNUq+3M1XdqNXAEaTDousIvoDUUadREqX2ALxSSC47BCWDsrk1dam6ZbRzhH5JlyUvbRet2NWsmfc4OZzzERZc/FoFg1VBSfVqoxZuYEedvAzOMtpQB5ujVb2bKEzQLfmW7QWjWz2EcQxRZRCy5K9qbZ1U1UXk6k10D5PtLvA7D8kkxsdQpRqzQuUjTXZv0mk8NHiYERp4AKIDYdeia7M9hnbOLxkHNGrN73CYTOV4B48VajsS1HyeyPvCFrnKyibM6h1DDpwQq1w975hphww3LKONFVBr1E1rWBLchgLmAO3NcmCs66wK1rFOStjdj3bV/0yzLT+8Azy4lYe7ic7wiXHFqLfQkqf1HCPhXx5jS1ReodgpyeLW1uHLQEIBqUnlqUKF/ILiwCY67vZVkPkWeXn+HKbp7gom8Y9JCOLEW7KBJpUkSdUybkGpJXDG7KANNQxPMGr2WFevZ/dbAO+ic2BxcYUUFJYYqQ5MUhi7NydWsjwMjOx+XxXs7n1hdj7COzeWNuF99epiYOO4g7wePUM3Sc0UBOlmqsLCS46krBDHPJNpHZP1cjbatQ/rH+D4kn4/2A13ecWzaWomgPcxpf/yWxT39iUUMZmms4Z7nGBXvKrizrBbZmCDd0y/sOoXvzVXmoewjuLatSUeuG8ofeLsdvs370ac63St+CgzkGFGGjZINcm6iHdKUgwIw818TFbc8rlN02XgJiodppegpP7qVQrcDbqF9Jq71/Rn/n2mR/g9ppObp67RZcgTtHK5ht4IcpA5CMpm36CjoTzCfx6OOSS6nh23vfdSkew+srYw081fw/fF/617huz9/Pf1ns9N/rZlfKOzMUVlrLrsypXrqR2I190tpOn/MdnW/KP7299/0DQm3JqfA/HvKZ26z6wPh74JqEoFgJ9QioA7mtr5/f0+A79Xep/iO/A/03VOfJ//AzpR2wDsToszAAAAAElFTkSuQmCC" width="111" height="60" class="img_ev3q"></p>
</li>
<li class="">
<p><strong>Do nothing</strong><br>
<!-- -->The segment will be ignored, with no skips or popups.</p>
</li>
</ul>
<p>More actions and functionality related to media segments is already in the works for future releases, like a "mute" action that temporarily
silences audio.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="revamped-subtitles">Revamped subtitles<a href="https://jellyfin.org/posts/androidtv-v0.18.0#revamped-subtitles" class="hash-link" aria-label="Direct link to Revamped subtitles" title="Direct link to Revamped subtitles" translate="no">​</a></h3>
<p>This release completely redesigns the way subtitles are loaded and shown on screen, resolving a large number of issues reported over the
past few years.</p>
<p>Previously the app did not support embedded subtitles and forced the server to extract them from video files first. This is a resource-heavy
process and often causes subtitles to not show up or with a big delay. A workaround for this was to use the "Subtitle Extract" plugin that
will do this extraction ahead of time, this was cumbersome and is now no longer necessary.</p>
<p>Together with these loading changes, the app now reliably supports Presentation Graphic Stream (PGS) subtitles and positioning tags in the
SubRip Subtitle Format (SRT), a much requested feature!</p>
<p>To make these changes happen, the preferences for subtitles have also slightly changed. It is now possible to choose your own background and
outline colors.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sing-along-with-lyrics">Sing along with lyrics<a href="https://jellyfin.org/posts/androidtv-v0.18.0#sing-along-with-lyrics" class="hash-link" aria-label="Direct link to Sing along with lyrics" title="Direct link to Sing along with lyrics" translate="no">​</a></h3>
<p>Not only did video playback improve, playing music has gotten some upgrades as well! The most exciting change here is support for lyrics.
Whenever your song has lyrics available (added by a plugin or on your file system), they will be shown in the app. This works especially
well when combined with our screensaver, which will show lyrics fullscreen.</p>
<p><img decoding="async" loading="lazy" alt="Screensaver showing lyrics for the playing song" src="https://jellyfin.org/assets/images/lyrics-d54f89bb591bfe3fbcd6fcb116fc48b2.png" width="1920" height="1080" class="img_ev3q"></p>
<p>Currently, 2 types of lyrics are supported: timed lyrics, which will highlight the current line of the vocal track, and untimed lyrics,
which will automatically scroll based on the track duration.</p>
<p>In addition to the lyric changes, some bugs have been fixed where a music queue would never disappear when the last track ends and some text
elements did not update properly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-changes">Other changes<a href="https://jellyfin.org/posts/androidtv-v0.18.0#other-changes" class="hash-link" aria-label="Direct link to Other changes" title="Direct link to Other changes" translate="no">​</a></h3>
<p>In addition to the previously mentioned changes there's a lot more to enjoy. The video player will no longer randomly show its controls and
they stay hidden when the video is loading for a smoother experience. An issue where sorting libraries by "last played" did not work for TV
shows was fixed. And finally, a lot of improvements under the hood were made to make the app faster, easier to maintain, and more stable
than ever.</p>
<p>There are as also two new experimental options for playback. The first one is related to decoding audio codecs, while normally the app will
automatically fall back to using a different decoding approach using FFmpeg, this might not always work. You can now enable the "Prefer
FFmpeg for audio playback" preference to force the fallback approach.</p>
<p>The second experimental option adds support for previews when scrubbing, once "Enable trickplay in video player" is checked you'll see image
previews above the progress bar while scrubbing through your videos! There are some issues and annoyances with the current implementation
which will be resolved before this feature will be enabled by default and marked non-experimental. Make sure the Trickplay feature is
enabled on your libraries for the previews to show up.</p>
<p><img decoding="async" loading="lazy" alt="Video scrubbing previews in the video player" src="https://jellyfin.org/assets/images/trickplay-85d6d97879f3446a61dce356d28bd7c0.png" width="1280" height="155" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributors">Contributors<a href="https://jellyfin.org/posts/androidtv-v0.18.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<p>Jellyfin is completely developed by volunteers, and couldn't be made without their great skills and dedication. Consider donating if you
appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">@nielsvanvelzen</a> - Donate via <a href="https://github.com/sponsors/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/MichaelRUSF" target="_blank" rel="noopener noreferrer" class="">@MichaelRUSF</a></li>
<li class=""><a href="https://github.com/JagerSprinkles" target="_blank" rel="noopener noreferrer" class="">@JagerSprinkles</a></li>
<li class=""><a href="https://github.com/pascalwei" target="_blank" rel="noopener noreferrer" class="">@pascalwei</a></li>
<li class=""><a href="https://github.com/kabel2" target="_blank" rel="noopener noreferrer" class="">@kabel2</a></li>
<li class=""><a href="https://github.com/starsep" target="_blank" rel="noopener noreferrer" class="">@starsep</a></li>
<li class=""><a href="https://github.com/rickysixx" target="_blank" rel="noopener noreferrer" class="">@rickysixx</a></li>
<li class=""><a href="https://github.com/ericleb010" target="_blank" rel="noopener noreferrer" class="">@ericleb010</a></li>
<li class=""><a href="https://github.com/reacocard" target="_blank" rel="noopener noreferrer" class="">@reacocard</a></li>
</ul>
<p>And finally a big thank you to everyone who contributed translations, reported bugs, provided feedback and participated in beta testing!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/androidtv-v0.18.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have experience with Android TV development or with Kotlin and are interested in contributing yourself, feel free to dive into the
<a href="https://github.com/jellyfin/jellyfin-androidtv" target="_blank" rel="noopener noreferrer" class="">source code</a> and open a pull request. Alternatively, you can help with translating the app
into your own language on our <a href="https://translate.jellyfin.org/engage/jellyfin-android/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/androidtv-v0.18.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out all these changes! The app stores will auto-update your Jellyfin app if you're already using the app. For
new users, you can find the app on the app store of your platform.</p>
<a class="margin-right--md" href="https://play.google.com/store/apps/details?id=org.jellyfin.androidtv"><img width="153" alt="Jellyfin for Android TV on Google Play" src="https://jellyfin.org/images/store-icons/google-play.png"></a>
<a class="margin-right--md" href="https://www.amazon.com/gp/product/B07TX7Z725"><img width="153" alt="Jellyfin for Fire TV at Amazon App Store" src="https://jellyfin.org/images/store-icons/amazon.png"></a>
<a href="https://f-droid.org/en/packages/org.jellyfin.androidtv/"><img width="153" alt="Jellyfin for Android TV on F-Droid" src="https://jellyfin.org/images/store-icons/fdroid.png"></a>
<p>Direct downloads are available for sideloading at <a href="https://repo.jellyfin.org/releases/client/androidtv/" target="_blank" rel="noopener noreferrer" class="">repo.jellyfin.org</a>
or in the <a href="https://github.com/jellyfin/jellyfin-androidtv/releases/latest" target="_blank" rel="noopener noreferrer" class="">GitHub release assets</a>.</p>
<p>You can also join our <a href="https://play.google.com/apps/testing/org.jellyfin.androidtv" target="_blank" rel="noopener noreferrer" class="">beta program on Google Play</a> and help test new versions
before they're released to the public. <a class="" href="https://jellyfin.org/posts/android-betas">Read more</a> about our beta program.</p>]]></content>
        <author>
            <name>Niels van Velzen</name>
        </author>
        <category label="release" term="release"/>
        <category label="android-tv" term="android-tv"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Warning for Unstable - EFCore refactoring is coming]]></title>
        <id>https://jellyfin.org/posts/efcore-refactoring-incoming</id>
        <link href="https://jellyfin.org/posts/efcore-refactoring-incoming"/>
        <updated>2024-11-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you are running unstable builds, please read this post carefully to avoid breaking your database!]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Brace yourselves, EFCore refactoring is coming" src="https://jellyfin.org/assets/images/refactoring-4fc341e400c20851abe795701a42936e.jpeg" width="622" height="477" class="img_ev3q"></p>
<p><strong>Unstable users: we are planning to merge our pending EFCore conversion of <code>library.db</code> in the next couple of weeks. It is imperative that all unstable users understand what is going on, what the plan is, and how to mitigate issues that will inevitably arise from this.</strong> Stable (<code>10.y.z</code>) users require no action.</p>
<p>Unstable builds are currently paused for roughly 4 weeks post-release of 10.10.0, and during this time, we plan to merge these extensive database changes. There will be breakage - bugs, fixes, and database migrations - during this time. This is your fair warning to either (a) prepare yourself with <a class="" href="https://jellyfin.org/docs/general/administration/backup-and-restore">a good backup and recovery strategy</a> and disable automatic upgrades; or (b) move off of unstable onto 10.10.0 stable until the dust settles (but, please don't, as we need your help to test!)</p>
<p>Please read on for a more detailed overview if you are interested.</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-efcore-and-why-are-we-migrating-to-it">What is EFCore, and why are we migrating to it?<a href="https://jellyfin.org/posts/efcore-refactoring-incoming#what-is-efcore-and-why-are-we-migrating-to-it" class="hash-link" aria-label="Direct link to What is EFCore, and why are we migrating to it?" title="Direct link to What is EFCore, and why are we migrating to it?" translate="no">​</a></h2>
<p>EFCore is the C#/.NET database handling framework, which simplifies database query handling in the Jellyfin codebase.</p>
<p>Our original database code was written by Emby in a time long before .NET Core existed, when Mono ruled the world in terms of cross-platform C# compatibility. As such, it handled the database poorly: SQLite queries embedded directly in the code, and a fairly horrific schema with no migration capabilities. This has caused us a lot of problems over the years as we try to change and improve the codebase and add new features, and as such, the team began migrating to EFCore quite a while ago.</p>
<p>We were able to move many of the databases quickly, mostly due to the diligent work of <a href="https://github.com/barronpm" target="_blank" rel="noopener noreferrer" class="">@BarronPM</a>; those have been live for several major releases now. But the Library database has remained as it was, due to its massive complexity and exceptionally poor schema. This has caused a lot of problems, for instance very slow search, problems adding new media types (or deprecating old ones), and lots of complexity inside the codebase around handling "non-standard" (i.e. not Movies/TV Shows/Music Albums) media types, resulting in bugs.</p>
<p>Now, thanks to <a href="https://github.com/JPVenson" target="_blank" rel="noopener noreferrer" class="">@JPVenson</a>, we finally have the library database EFCore implementation ready to go. But there is a big catch.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="there-will-be-bugs">There Will Be Bugs<a href="https://jellyfin.org/posts/efcore-refactoring-incoming#there-will-be-bugs" class="hash-link" aria-label="Direct link to There Will Be Bugs" title="Direct link to There Will Be Bugs" translate="no">​</a></h2>
<p>Once we merge this massive change set, there will be bugs. This is certain. And these bugs may completely trash your library database. So first and foremost, it is incredibly important that everyone running the Unstable builds understands that this is coming and how to prepare yourself.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-will-be-focusing-on">What we will be focusing on<a href="https://jellyfin.org/posts/efcore-refactoring-incoming#what-we-will-be-focusing-on" class="hash-link" aria-label="Direct link to What we will be focusing on" title="Direct link to What we will be focusing on" translate="no">​</a></h2>
<p>Our primary goal will be to ensure that stable-to-stable migrations between 10.10.x and 10.11.x will work without a hitch, as we want and need this transition to be as seamless as possible for the majority of users running stable builds when 10.11.0 drops.</p>
<p>But to do this, we need to both test the changes in unstable, and ensure that our migrations are valid for data coming from the 10.10.x stable.</p>
<p>The downside of this is, though, that we might not be able to cleanly implement unstable-to-unstable migrations in a way that will work properly. While we will try to do this, we cannot guarantee it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="our-timeline">Our timeline<a href="https://jellyfin.org/posts/efcore-refactoring-incoming#our-timeline" class="hash-link" aria-label="Direct link to Our timeline" title="Direct link to Our timeline" translate="no">​</a></h2>
<ol>
<li class="">
<p>This blog post starts the process to provide the warning to all unstable users that this is coming. Note that as of posting, unstable builds are disabled due to the recent 10.10.0 release, and will remain off for a little while.</p>
</li>
<li class="">
<p>About 1-2 weeks after this blog post, we will merge the Library EFCore migration into our <code>master</code> branch and begin preliminary testing. If you want to help here, you will have to <a class="" href="https://jellyfin.org/docs/general/installation/advanced/source">build Jellyfin from source</a>, and the more people who can help here the better!</p>
</li>
<li class="">
<p>About 2 weeks after merging, assuming everything looks generally OK, we will <strong>re-enable unstable builds for the general public</strong>. At this point, all unstable builds will apply the initial migrations on startup. That will bring us to about 4 weeks (give or take a week) from the 10.10.0 release.</p>
</li>
<li class="">
<p>Over the following weeks, we will take bug reports and try to correct them. This is the possible sticking point: if it's not possible for us to implement a clean set of migrations, we may decide to only focus the migration on stable-to-unstable conversions, rather than unstable-to-unstable. If this happens, you may need to restore a previous version and apply the new migrations to it.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-this-actually-means-for-you">What this actually means for you<a href="https://jellyfin.org/posts/efcore-refactoring-incoming#what-this-actually-means-for-you" class="hash-link" aria-label="Direct link to What this actually means for you" title="Direct link to What this actually means for you" translate="no">​</a></h2>
<p>First and foremost, if this is too much for you, this is your warning for the off-ramp. Switch away from unstable <strong>now</strong> before we restore the unstable builds in a few weeks.</p>
<p>Second, <strong>ensure you have a robust backup strategy <a class="" href="https://jellyfin.org/docs/general/administration/backup-and-restore">based on our suggested backup process</a></strong>. Take backups regularly, and, to help us test, try to also have a backup of your last stable release so you can run that through the migrations as well. Take backups <strong>before</strong> applying the next unstable build, every time.</p>
<p>Third, <strong>ensure you disable automatic upgrades</strong>. We generally recommend this anyways, but if you're still doing this, now is the time to stop.</p>
<p>Fourth, <strong>if you run into trouble, please ensure you report the bug with a title containing <code>[EFCore Library]</code></strong>. This will help us find and fix the bugs.</p>
<p>Fifth and finally, <strong>if you have a failing migration, restore an older database version first and try to re-run it</strong>. If it still fails, try your oldest (ideally, 10.9.11 or 10.10.0 stable) backup as well. If <em>that</em> one doesn't work, it's a new bug to report.</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="unstable" term="unstable"/>
        <category label="warning" term="warning"/>
        <category label="efcore" term="efcore"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin 10.10.0]]></title>
        <id>https://jellyfin.org/posts/jellyfin-release-10.10.0</id>
        <link href="https://jellyfin.org/posts/jellyfin-release-10.10.0"/>
        <updated>2024-10-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are pleased to announce the latest stable release of Jellyfin, version 10.10.0!]]></summary>
        <content type="html"><![CDATA[<p>We are pleased to announce the latest stable release of Jellyfin, version 10.10.0!</p>
<p>This major release brings several new features, improvements, and bugfixes to improve your Jellyfin experience. With our faster release cadence between 10.9.0 and 10.10.0, this release should be far less daunting, so please read on for a quick peek at what's new and some important-to-know breaking changes!</p>
<p>You may upgrade your Jellyfin instances at any time now. For those who were running Unstable builds for testing, we thank you immensely, and you may now switch back to the Stable repository and forcibly reinstall/repull the latest version. As always, <strong>ensure you <a class="" href="https://jellyfin.org/docs/general/administration/backup-and-restore">back up your Jellyfin data and configuration directories</a> before upgrading</strong>. With a major release, it's possible you will hit a bug and want to revert, and to do so, you will need to restore from a backup.</p>
<p>Happy watching!</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-changes">Breaking Changes<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<ul>
<li class="">
<p>Most clients should continue to work as-is without any issues or any forced upgrades, though this may change in the future. The sole exception is Jellyfin4Kodi, which currently has issues due to point 5 below, though a fix is hopefully forthcoming shortly.</p>
</li>
<li class="">
<p>We have deprecated Raspberry Pi V4L2 hardware transcoding support, and are looking to deprecate 32-bit ARM support (i.e. <code>armv7</code> or <code>armhf</code>) in general for 10.10.0 and later, with a goal to remove 32-bit ARM support in 10.11.0. Older, slow ARM systems have always been tricky platforms for us: they're popular but extremely poor in performance, and this has caused a lot of people a lot of headaches. With the RPi5 entirely removing a hardware acceleration engine, and most ARM single-board computers now supporting ARM64, we are taking this action now to ensure it's widely known.  If you are running Jellyfin on old ARM hardware, now is the time to start <a href="https://jellyfin.org/docs/general/administration/hardware-selection" target="_blank" rel="noopener noreferrer" class="">looking at an upgrade</a>. See <a href="https://github.com/jellyfin/jellyfin.org/pull/1148" target="_blank" rel="noopener noreferrer" class="">PR #1148</a>.</p>
</li>
<li class="">
<p>We now use the system temporary storage engine (e.g. <code>/tmp</code> on Linux) for storing short-lived transient temporary files, to allow us to leverage temporary ramdisks and the like and avoid cluttering potentially slow storage. This may cause issues if you specifically depended on the previous behaviour. Note that this does not include transcoding temporary files. See <a href="https://github.com/jellyfin/jellyfin/pull/12226" target="_blank" rel="noopener noreferrer" class="">PR #12226</a>.</p>
</li>
<li class="">
<p>The server will now refuse to start if <code>ffmpeg</code> cannot be found, is an incorrect version, or does not function properly (missing extensions, etc.). With how critical <code>ffmpeg</code> is to Jellyfin, this has become very important to avoid mis-reported issues. This can be explicitly bypassed if needed. See <a href="https://github.com/jellyfin/jellyfin/pull/12463" target="_blank" rel="noopener noreferrer" class="">PR #12463</a>.</p>
</li>
<li class="">
<p>Network paths in libraries have been fully removed and will no longer work. This functionality has been deprecated for a long time, and most of it was removed in 10.9.0, but this removes the remainder. See <a href="https://github.com/jellyfin/jellyfin/pull/12446" target="_blank" rel="noopener noreferrer" class="">PR #12446</a>. Third-party clients relying on this functionality should be able to re-implement it as required.</p>
</li>
<li class="">
<p>Systems with Trickplay enabled may see a relatively long migration occurring during the upgrade. If Jellyfin seems to hang starting up after upgrading, please observe the logs and wait for the migration to complete. This helps enable the functionality below.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cool-new-features">Cool New Features<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#cool-new-features" class="hash-link" aria-label="Direct link to Cool New Features" title="Direct link to Cool New Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="media-segments">Media Segments<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#media-segments" class="hash-link" aria-label="Direct link to Media Segments" title="Direct link to Media Segments" translate="no">​</a></h3>
<p>The Jellyfin server now supports the management of Media Segments. This means that we store some additional information for certain time-spans on a video that clients can then use to provide additional actions. For example, when there is a Media Segment of the type intro, a client may display a button to skip that particular segment. For 10.10, we only provide the general structure to store those Media Segments, and you will still require a plugin to create them. We have created one plugin that does this, based on the Chapter names of a movie or Episode, which you can find in the Plugin catalogue, and others may be implemented in the future. The Web interface fully supports skipping segments; other client support is pending.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="trickplay">Trickplay<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#trickplay" class="hash-link" aria-label="Direct link to Trickplay" title="Direct link to Trickplay" translate="no">​</a></h3>
<p>We have significantly improved extraction by implementing optional keyframe extraction, which can boost image generating time significantly (around 100x, depending on configuration) at the cost of some frame accuracy, which should be fine for most users with longer trickplay frame durations. This should mean no more multi-day Trickplay jobs! Note that this <strong>must be explicitly enabled</strong> in the Trickplay settings.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="playbacktranscoding">Playback/Transcoding<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#playbacktranscoding" class="hash-link" aria-label="Direct link to Playback/Transcoding" title="Direct link to Playback/Transcoding" translate="no">​</a></h3>
<p>Many major enhancements to transcoding and playback, including support for software tonemapping of HDR10, HLG and DoVi, preliminary support for DoVi Profile 10, support for Dolby AC-4 audio, more stereo downmixing algorithms, QSV device selection, and more! Our FFmpeg is also now based off the upstream FFmpeg 7.0 release for additional features and improvements there.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="metadata">Metadata<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#metadata" class="hash-link" aria-label="Direct link to Metadata" title="Direct link to Metadata" translate="no">​</a></h3>
<p>It is now possible to select which plugins can provide lyrics to your music libraries, similar to how you can select the plugins providing metadata. This will provide more variety to Lyrics support.</p>
<p>Audio tag scanning has been significantly improved, and will thus hopefully be much more reliable and consistent.</p>
<p>Home videos should also now keep their rotation metadata.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web">Web<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#web" class="hash-link" aria-label="Direct link to Web" title="Direct link to Web" translate="no">​</a></h3>
<p>We have added support for CBT and CB7 books, client-side rendering of PGS subtitles, and auto-scrolling lyrics as well as a lyrics editor interface.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="full-changelogs">Full Changelogs<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#full-changelogs" class="hash-link" aria-label="Direct link to Full Changelogs" title="Direct link to Full Changelogs" translate="no">​</a></h2>
<p>Full changelogs are available on the various release pages:</p>
<ul>
<li class=""><a href="https://github.com/jellyfin/jellyfin/releases/tag/v10.10.0" target="_blank" rel="noopener noreferrer" class="">Server</a></li>
<li class=""><a href="https://github.com/jellyfin/jellyfin-web/releases/tag/v10.10.0" target="_blank" rel="noopener noreferrer" class="">Web</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-next-version">The Next Version<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#the-next-version" class="hash-link" aria-label="Direct link to The Next Version" title="Direct link to The Next Version" translate="no">​</a></h2>
<p>Our faster release cadence has generally been received fairly positively within the team, though lack of structure has been a bit of a problem. So right now, we are outlining the development roadmap for 10.11.0. This may change as time goes on, but this should give everyone an idea of roughly when 10.11.0 is coming.</p>
<p>Target 10.11.z development window: November 2024 to March 2025<br>
<!-- -->Target feature freeze: second week of April 2025<br>
<!-- -->Target release date: end April 2025</p>
<p>A more detailed roadmap will be published closer to the feature freeze date.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-thoughts">Final Thoughts<a href="https://jellyfin.org/posts/jellyfin-release-10.10.0#final-thoughts" class="hash-link" aria-label="Direct link to Final Thoughts" title="Direct link to Final Thoughts" translate="no">​</a></h2>
<p>We want to thank everyone who contributed to the 10.10.0 release; Jellyfin wouldn't be what it is without your help. We're really proud of this project we've built as a community, and hope to continue to be the go-to FLOSS media system solution for a long time to come. Happy watching!</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Release Roadmap for 10.10.0]]></title>
        <id>https://jellyfin.org/posts/release-roadmap-10.10.0</id>
        <link href="https://jellyfin.org/posts/release-roadmap-10.10.0"/>
        <updated>2024-09-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are about to start the 10.10.0 release cycle; here is the roadmap. Please help us test!]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Good heavens, look at the time!" src="https://jellyfin.org/assets/images/10.10.0-d622a4f23ccff6fc60bfa1db6314735d.jpg" width="300" height="364" class="img_ev3q"></p>
<p>We are pleased to announce that we are now beginning the process for the 10.10.0 release, with a <em>planned</em> release date of Saturday, October 26th (updated - see below), 2024! We said 6 months in our 10.9.0 release posts, and we're sticking by that! The feature freeze proper starts next week, with a soft "new PR freeze" today, so here's what you need to know about the timeline and a recap of how to help us test 10.10.0 before release. Remember, the more people who help test it out before release, the less bugs we're likely to find <em>after</em> release, so fire up those secondary servers and warn your users: 10.10.0 is coming!</p>
<p>Developers/contributors, and those users who want a bit more information, please read on!</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-release">The Release<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#the-release" class="hash-link" aria-label="Direct link to The Release" title="Direct link to The Release" translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-different-this-time">What's Different This Time?<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#whats-different-this-time" class="hash-link" aria-label="Direct link to What's Different This Time?" title="Direct link to What's Different This Time?" translate="no">​</a></h2>
<p>Not much at all! We're following the same general process as the 10.9.0 release, though with a slightly tweaked timeline and with more defined steps.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-release-timeline">The Release Timeline<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#the-release-timeline" class="hash-link" aria-label="Direct link to The Release Timeline" title="Direct link to The Release Timeline" translate="no">​</a></h3>
<ul>
<li class="">Monday, September 9th, 2024 (unstable <code>20240909</code>): Feature PR last-call, first beta. Any <em>new</em> feature PRs should get in right now to avoid missing the feature freeze. This is your 1 week warning! Developers/contributors <strong>please keep on top of your PR review feedback</strong> or your PR may <strong>miss the following deadlines and have to wait</strong> until 10.11.0.</li>
<li class="">Monday, September 16th, 2024 (unstable <code>20240916</code>): Feature freeze, second beta. Any <em>new</em> feature PRs after this point must wait until 10.11.0 (in another ~6 months). In-flight feature PRs will likely make it assuming that all feedback is resolved before the API freeze. Again <strong>developers/contributors, please keep on top of your PR review feedback</strong>. New PRs should be <strong>bugfixes only</strong> after this point. Users <strong>should be safe to begin testing in earnest</strong> with this unstable.</li>
<li class="">Monday, September 23rd, 2024 (unstable <code>20240923</code>): API freeze, third beta. <strong>All feature PRs should be merged by this point</strong>. If they're not, they will be moved to the 10.11.0 project and only merged to <code>master</code> once 10.10.0 is released. API is now soft-frozen so that <strong>client developers can begin confidently working on any client support changes needed for 10.10.0</strong>.</li>
<li class="">Monday, September 30th, 2024 (unstable <code>20240930</code>): API lock, first release candidate. <strong>Major bugfix PRs should hopefully be either be merged or well in-flight</strong> by this point. Only <strong>non-API-changing bugfixes</strong> after this point. We should have a feature overview blog post in draft state by this point.</li>
<li class="">Monday, October 7th, 2024 (unstable <code>20241007</code>): Final planned unstable, second release candidate. <strong>The release should basically be ready to go</strong>, and any remaining bugfix PRs <strong>should be merged before this unstable</strong>.</li>
<li class="">Saturday, October 12th, 2024: Release of 10.10.0!</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="possible-timeline-changes">Possible Timeline Changes<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#possible-timeline-changes" class="hash-link" aria-label="Direct link to Possible Timeline Changes" title="Direct link to Possible Timeline Changes" translate="no">​</a></h3>
<p>EDIT 2024-10-12: We have opted to take the <strong>two week</strong> delay due to pending changes in Web that must get in. We are currently planning for a release on October 26th.</p>
<p>Since this is a much smaller and quicker release than 10.8.0 or 10.9.0 were, hopefully this is enough time to get everything sorted and ready to go. But if we find it's <strong>not</strong>, we reserve the right to add an extra week in one or both of the following places:</p>
<ul>
<li class="">After the Feature freeze, if we find that there are any outstanding <strong>major</strong> bugfixes that require additional time to merge before the API freeze.</li>
<li class="">After the API lock, if we find that there are any outstanding <strong>non-API-breaking</strong> bugfixes that require additional time to merge before the final unstable.</li>
</ul>
<p>If neither of those happen, the release will proceed as planned; otherwise, an extra step will be added into the timeline after the given points that matches the previous stage. This might push the final unstable back to either October 14th or October 21st, and the final release to either October 19th or October 26th. If this is relevant to your interests, please keep an eye on our <a href="https://matrix.to/#/#jellyfin-announce:matrix.org" target="_blank" rel="noopener noreferrer" class="">Announcements Matrix channel</a> for announcements.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="information-for-3rd-party-clients">Information for 3rd Party Clients<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#information-for-3rd-party-clients" class="hash-link" aria-label="Direct link to Information for 3rd Party Clients" title="Direct link to Information for 3rd Party Clients" translate="no">​</a></h3>
<p>After the API freeze, our API should ideally remain stable, though it's possible there might be minor changes up until the API lock step. Please feel free to begin testing compatibility and report any issues to us now, and keep an eye out on those dates for the final API specification.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="information-for-contributors">Information for Contributors<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#information-for-contributors" class="hash-link" aria-label="Direct link to Information for Contributors" title="Direct link to Information for Contributors" translate="no">​</a></h3>
<p>If you're contributing to Jellyfin and your feature PRs miss the deadline, <strong>please don't fret</strong>. We are committed to this shorter major release timeline going forward, so 10.11.0 is at most about 6 months away. Your feature should eventually make it in.</p>
<p>If you wish to help by submitting a bugfix, please do so as soon as you can, as we'd like to get as many fixes in and tested before the API lock as possible, to give at least 2 weeks of final testing before the release. Ensure you clearly specify that it is a bugfix, and ensure you keep your changes to an absolute minimum needed to fix the bug. <strong>Bugfix PRs will target the <code>master</code> branch until the final release</strong>, at which point they will target the <code>release-10.10.z</code> branch for upcoming point releases.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-you-can-test">How You Can Test<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#how-you-can-test" class="hash-link" aria-label="Direct link to How You Can Test" title="Direct link to How You Can Test" translate="no">​</a></h2>
<p>Testing this release should be very easy, identical to 10.9.0. Since our pre-releases are "just" our unstable releases here, that means that following our normal "unstable" installation process is all you need to do.</p>
<p>To find that, visit our <a href="https://jellyfin.org/downloads/server" target="_blank" rel="noopener noreferrer" class="">main server downloads page</a>, select the platform you require along the top centre, then on the top right, select "Unstable". The instructions and links will now be for the unstable release. You can also find <a href="https://jellyfin.org/docs/general/testing/" target="_blank" rel="noopener noreferrer" class="">additional testing documentation in the docs</a>.</p>
<p>For Docker this simply means pulling the <code>unstable</code> tag on the image. For Debian and Ubuntu repositories, this means adding <code>unstable</code> to your existing <code>jellyfin.sources</code> entry. For other platforms, please review the provided instructions as not all platforms will support unstable.</p>
<p>Next, before installing an unstable release, ensure that you <strong>back up your existing server configuration</strong>. It is <strong>not possible to downgrade in-place</strong> as there are database changes. Just making a simple copy of your configuration directories <strong>with Jellyfin stopped</strong> is sufficient, and where those can be found depends on the platform.</p>
<p>Next, if you use plugins, install the unstable plugin repository. Due to compatibility issues, we distribute plugins for unstable in a separate manifest, so this must be added manually, and on first start all incompatible plugins (i.e. all existing plugins on an upgrade) will be upgraded. To add the repository, navigate to the Administration Dashboard, Advanced, Plugins, then click the Repositories tab at the top. Click the "+" Add button, and enter "Unstable" for the name and "<a href="https://repo.jellyfin.org/files/plugin-unstable/manifest.json" target="_blank" rel="noopener noreferrer" class="">https://repo.jellyfin.org/files/plugin-unstable/manifest.json</a>" for the Repository URL. We also recommend that you disable/remove the Stable repository at this time, as it's possible they will conflict. After the initial update you may need to manually restart your Jellyfin instance one further time to ensure all plugins are activated properly.</p>
<p>Finally, install the unstable version and run it. The upgrade should happen seamlessly in the background, and you'll be able to log in to your Jellyfin instance normally after this point. Ensure you perform a <em>hard</em> refresh in your browser, and restart all clients.</p>
<p>Once 10.10.0 is fully released, you can switch back easily by reinstalling the new stable version, and changing back to the stable plugin manifest (URL "<a href="https://repo.jellyfin.org/files/plugin/manifest.json" target="_blank" rel="noopener noreferrer" class="">https://repo.jellyfin.org/files/plugin/manifest.json</a>"). Unstable releases will be <strong>paused for at least 2 weeks</strong> after the release to give you plenty of time to switch.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-report-bugs">How To Report Bugs<a href="https://jellyfin.org/posts/release-roadmap-10.10.0#how-to-report-bugs" class="hash-link" aria-label="Direct link to How To Report Bugs" title="Direct link to How To Report Bugs" translate="no">​</a></h2>
<p>While running the unstable prereleases, reporting bugs is important. After all, if we don't know about bugs, we can't work to fix them!</p>
<p>First, if you encounter a bug, ensure you're running the latest unstable version, and try to reproduce it a couple times. If you can't, it's always possible it was a one-off occurrence, but if it happens again, definitely report it!</p>
<p>Bugs can be reported on <a href="https://github.com/jellyfin/jellyfin" target="_blank" rel="noopener noreferrer" class="">our GitHub issues page</a> or <a href="https://forum.jellyfin.org/" target="_blank" rel="noopener noreferrer" class="">on our Forums</a>.</p>
<p>You'll want to include two important pieces of information in your bug report, beyond the standard asks. First, ensure you include the "Build Version" as shown in the main dashboard page. This reports the exact unstable build you're using to help narrow down what might have caused the issue. This is doubly important if you see a new bug turn up in a future unstable build. Second, please make clear that you are running the unstable builds and not stable builds, as well as if this is an upgrade or fresh install, as that can be an important piece of information.</p>
<p>Once your bug is reported, please check back diligently to see if any additional information has been requested, and we hope to get it fixed soon.</p>
<p>Thanks, and happy watching!</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="release" term="release"/>
        <category label="testing" term="testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Android TV version 0.17]]></title>
        <id>https://jellyfin.org/posts/androidtv-v0.17.0</id>
        <link href="https://jellyfin.org/posts/androidtv-v0.17.0"/>
        <updated>2024-08-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The latest Android TV app release features enhanced stability, improved navigation with a new home button, and an updated screensaver with]]></summary>
        <content type="html"><![CDATA[<p>The latest Android TV app release features enhanced stability, improved navigation with a new home button, and an updated screensaver with
age rating filters. Check out the full blog post to see all the new features and update now!</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="notable-changes">Notable changes<a href="https://jellyfin.org/posts/androidtv-v0.17.0#notable-changes" class="hash-link" aria-label="Direct link to Notable changes" title="Direct link to Notable changes" translate="no">​</a></h2>
<p>This release comes with over 100 changes from 13 contributors. The complete list of changes, including their respective pull requests, can
be found on <a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.17.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>. I've listed the most important/noticeable changes
below.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigation">Navigation<a href="https://jellyfin.org/posts/androidtv-v0.17.0#navigation" class="hash-link" aria-label="Direct link to Navigation" title="Direct link to Navigation" translate="no">​</a></h3>
<p>It might seem like just one button, but it solves a significant issue. A new 'home' button in the top-right corner lets you return to the
Jellyfin home screen easily, instead of pressing the back button repeatedly. Additionally, the layout of the item details has been slightly
tweaked to fit more useful information.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of item details in the Android TV app" src="https://jellyfin.org/assets/images/item-details-9d29d22edaa4d656dca1109953b5f01e.png" width="1280" height="720" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="playback">Playback<a href="https://jellyfin.org/posts/androidtv-v0.17.0#playback" class="hash-link" aria-label="Direct link to Playback" title="Direct link to Playback" translate="no">​</a></h3>
<p>The current video player was improved by adding support for more audio codecs, including WAV, Vorbis and PCM. Additionally, timeouts for
player errors were increased to give transcode and remux tasks more time to start. This improves playback for media stored on network
drives and BDMV files that require unpacking.</p>
<p>Audio normalization support was added to automatically adjust volume levels for music playback. This feature prevents sudden volume changes
between songs. To activate this feature, you'll need to enable the LUFS scan for your music library.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="screensaver">Screensaver<a href="https://jellyfin.org/posts/androidtv-v0.17.0#screensaver" class="hash-link" aria-label="Direct link to Screensaver" title="Direct link to Screensaver" translate="no">​</a></h3>
<p>The screensaver now includes a feature to filter items based on their age rating. By default, only items with an age rating up to 13 will
be displayed, ensuring a family-friendly environment. Age rating options can be changed in the preferences under the customization tab.</p>
<p>Additionally, the screensaver has been enhanced to display a logo of the movie or series being shown.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of the updated screensaver design in the Android TV app" src="https://jellyfin.org/assets/images/screensaver-feead886895a59e259ddacfb07df9998.png" width="1280" height="720" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-changes">Other changes<a href="https://jellyfin.org/posts/androidtv-v0.17.0#other-changes" class="hash-link" aria-label="Direct link to Other changes" title="Direct link to Other changes" translate="no">​</a></h3>
<p>Series and seasons now display their respective special features, which were previously available only for movies. Additionally, the search
function has been improved to include results for Live TV channels, playlists, collections, photo albums, and individual photos.</p>
<p>Invisible but noteworthy, a significant amount of work was invested in reworking the communication between the app and the server. This
has resulted in a faster and more reliable app, with improved performance and the groundwork laid for the development of exciting new
features. As a consequence of these changes, the app now requires Jellyfin 10.9 or newer and older versions are no longer supported.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributors">Contributors<a href="https://jellyfin.org/posts/androidtv-v0.17.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<p>Jellyfin is completely developed by volunteers, and we couldn't do without their great skills and dedication. Consider donating if you
appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">@nielsvanvelzen</a> - Sponsor via <a href="https://github.com/sponsors/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/Bond-009" target="_blank" rel="noopener noreferrer" class="">@Bond-009</a> - Sponsor via <a href="https://github.com/sponsors/Bond-009" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/pascalwei" target="_blank" rel="noopener noreferrer" class="">@pascalwei</a></li>
<li class=""><a href="https://github.com/haydenzeller" target="_blank" rel="noopener noreferrer" class="">@haydenzeller</a></li>
<li class=""><a href="https://github.com/DoggoOfSpeed" target="_blank" rel="noopener noreferrer" class="">@DoggoOfSpeed</a></li>
<li class=""><a href="https://github.com/bathompson" target="_blank" rel="noopener noreferrer" class="">@bathompson</a></li>
<li class=""><a href="https://github.com/VizuaaLOG" target="_blank" rel="noopener noreferrer" class="">@VizuaaLOG</a></li>
<li class=""><a href="https://github.com/3l0w" target="_blank" rel="noopener noreferrer" class="">@3l0w</a></li>
<li class=""><a href="https://github.com/mnsrulz" target="_blank" rel="noopener noreferrer" class="">@mnsrulz</a></li>
<li class=""><a href="https://github.com/MichaelRUSF" target="_blank" rel="noopener noreferrer" class="">@MichaelRUSF</a></li>
<li class=""><a href="https://github.com/efreet7" target="_blank" rel="noopener noreferrer" class="">@efreet7</a></li>
<li class=""><a href="https://github.com/ConnorS1110" target="_blank" rel="noopener noreferrer" class="">@ConnorS1110</a></li>
<li class=""><a href="https://github.com/cbeyls" target="_blank" rel="noopener noreferrer" class="">@cbeyls</a></li>
</ul>
<p>We'd also like to thank everyone who reported bugs, provided feedback and participated in beta testing!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/androidtv-v0.17.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have experience with Android TV development or with Kotlin and are interested in contributing yourself, feel free to dive into the
<a href="https://github.com/jellyfin/jellyfin-androidtv" target="_blank" rel="noopener noreferrer" class="">source code</a> and open a pull request.</p>
<p>Alternatively, you can help with translating the app into your language on our
<a href="https://translate.jellyfin.org/engage/jellyfin-android/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/androidtv-v0.17.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out all these changes! The app stores will auto-update your Jellyfin app if you're already using the app. For
new users, you can find the app here:</p>
<a class="margin-right--md" href="https://play.google.com/store/apps/details?id=org.jellyfin.androidtv"><img width="153" alt="Jellyfin for Android TV on Google Play" src="https://jellyfin.org/images/store-icons/google-play.png"></a>
<a class="margin-right--md" href="https://www.amazon.com/gp/product/B07TX7Z725"><img width="153" alt="Jellyfin for Fire TV at Amazon App Store" src="https://jellyfin.org/images/store-icons/amazon.png"></a>
<a href="https://f-droid.org/en/packages/org.jellyfin.androidtv/"><img width="153" alt="Jellyfin for Android TV on F-Droid" src="https://jellyfin.org/images/store-icons/fdroid.png"></a>
<p>Direct downloads are available for sideloading at <a href="https://repo.jellyfin.org/releases/client/androidtv/" target="_blank" rel="noopener noreferrer" class="">repo.jellyfin.org</a>
or in the <a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.17.0" target="_blank" rel="noopener noreferrer" class="">GitHub release assets</a>.</p>
<p>You can also join our <a href="https://play.google.com/apps/testing/org.jellyfin.androidtv" target="_blank" rel="noopener noreferrer" class="">beta program on Google Play</a> and help test new versions
before they're released to the public.</p>]]></content>
        <author>
            <name>Niels van Velzen</name>
        </author>
        <category label="release" term="release"/>
        <category label="android-tv" term="android-tv"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin 10.9.0]]></title>
        <id>https://jellyfin.org/posts/jellyfin-release-10.9.0</id>
        <link href="https://jellyfin.org/posts/jellyfin-release-10.9.0"/>
        <updated>2024-05-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are pleased to announce the latest stable release of Jellyfin, version 10.9.0!]]></summary>
        <content type="html"><![CDATA[<p>We are pleased to announce the latest stable release of Jellyfin, version 10.9.0!</p>
<p>This major release brings many new features, improvements, and bugfixes to improve your Jellyfin experience.</p>
<p>You may upgrade your Jellyfin instances at any time now, however please read on for a complete detailing of what's new and changed, including some very important release notes. For those who were running Unstable builds for testing, we thank you immensely, and you may now switch back to the Stable repository and forcibly reinstall/repull the latest version.</p>
<p>Happy watching!</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-release-notesbreaking-changes">Key Release Notes/Breaking Changes<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#key-release-notesbreaking-changes" class="hash-link" aria-label="Direct link to Key Release Notes/Breaking Changes" title="Direct link to Key Release Notes/Breaking Changes" translate="no">​</a></h2>
<p>There are several key changes with 10.9.0 that administrative users should be aware of, before getting into the more specific changes.</p>
<ul>
<li class="">
<p>As always, <strong>ensure you back up your Jellyfin data and configuration directories before upgrading</strong>. With a major release, it's possible you will hit a bug and want to revert, and to do so, you will need to restore from a backup.</p>
</li>
<li class="">
<p>Ubuntu users: We have dropped support for non-LTS Ubuntu releases with 10.9.0. That is, we have not built 10.9.0 packages for any releases except 20.04 LTS, 22.04 LTS, and 24.04 LTS, and we will not publish builds for any new non-LTS releases going forward. For an explanation of why, please see <a href="https://jellyfin.org/posts/new-ci-new-repo" target="_blank" rel="noopener noreferrer" class="">our previous blog post</a>. If you use another release, please upgrade to 24.04 LTS or switch to the Docker container.</p>
</li>
<li class="">
<p>Fedora/CentOS/RHEL/etc. users: We have dropped our official RPM packages and suggest switching to <a href="https://admin.rpmfusion.org/pkgdb/package/free/jellyfin/" target="_blank" rel="noopener noreferrer" class="">the 3rd-party RPMFusion repository</a> or the Docker container. Support for RHEL-like distributions has been a major pain point for us for a very long time, and we feel that letting the community over at RPMFusion handle this is in our best interest going forward, similar to how Arch, Gentoo, etc. packages are handled. For more details, please see <a href="https://jellyfin.org/posts/new-ci-new-repo" target="_blank" rel="noopener noreferrer" class="">our previous blog post</a>.</p>
</li>
<li class="">
<p>Docker users: We now offer GitHub Container Registry (GHCR) as an alternative container registry in addition to Docker Hub. You can pull images from the new registry via URIs like <code>ghcr.io/jellyfin/jellyfin:latest</code>. Don't worry, we have no plans to drop Docker Hub as a container registry, but we feel providing both gives users more choice and flexibility.</p>
</li>
<li class="">
<p>Docker users: If you encounter problems loading your homepage, you may need to remove the <code>DOTNET_SYSTEM_GLOBALIZATION_INVARIANT</code> environment variable from your container, as this is no longer valid in Jellyfin 10.9.0. For more details <a href="https://github.com/jellyfin/jellyfin/issues/11533" target="_blank" rel="noopener noreferrer" class="">please see</a> <a href="https://github.com/jellyfin/jellyfin/issues/11528" target="_blank" rel="noopener noreferrer" class="">these issues</a>.</p>
</li>
<li class="">
<p>Nginx reverse proxy users: If you have a block in your nginx config that begins with <code>location ~ ^/web/$ {</code> and the comment <code># location block for /web - This is purely for aesthetics [...]</code>, please remove that block as it will cause <a href="https://github.com/jellyfin/jellyfin/issues/11540" target="_blank" rel="noopener noreferrer" class="">occasional issues with 404's and/or slow performance</a> on 10.9.z.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-big-changes">The Big Changes<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#the-big-changes" class="hash-link" aria-label="Direct link to The Big Changes" title="Direct link to The Big Changes" translate="no">​</a></h2>
<p>This release has been over two years in the making, so we're really glad to finally get it out to you. The long cycle does mean quite an extensive changelog however, with well over 1100 pull requests merged into our <code>master</code> branch since 10.8.0 first dropped back in 2022. This section will detail all the big changes, broken up by general function and area of the system. In addition to these big items, there are hundreds of smaller bugfixes, quality-of-life tweaks, and other minor changes that we won't touch on here, but if you want to see the full list, you can do so over on the GitHub releases for <a href="https://github.com/jellyfin/jellyfin/releases/tag/v10.9.0" target="_blank" rel="noopener noreferrer" class="">the core server</a> and <a href="https://github.com/jellyfin/jellyfin-web/releases/tag/v10.9.0" target="_blank" rel="noopener noreferrer" class="">the Web UI</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="general">General<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#general" class="hash-link" aria-label="Direct link to General" title="Direct link to General" translate="no">​</a></h3>
<ul>
<li class="">
<p>We now support "trickplay" a.k.a. live video scrubbing. When scrubbing through a video with this enabled, you will be able to see a live preview of the video at that timestamp. Note that this requires explicit client support, which may require some time to become available depending on your client.</p>
</li>
<li class="">
<p>Web redirections are now handled more reliably, reducing the likelihood of hitting dead or invalid pages in the UI. Please ensure you force-refresh or clear any browser cache for your Jellyfin instance to see the full benefits.</p>
</li>
<li class="">
<p>DLNA support is now provided by a plugin and has been removed from the core server. This has several major benefits: first, it can be updated independently of the server to some degree; second, it will not be enabled for anyone unless they want it and explicitly install the plugin; and third, it reduces the potential of security holes around DLNA due to both previous benefits. If you wish to use (or continue to use) DLNA, please install the plugin after upgrading.</p>
</li>
<li class="">
<p>We now support AVIF and WEBP images for Pictures libraries.</p>
</li>
<li class="">
<p>Tags are now accounted for during searches, allowing one to search by tag.</p>
</li>
<li class="">
<p>We now support multiple simultaneous subtitle tracks (maximum of two, a primary and secondary) in the web player.</p>
</li>
<li class="">
<p>We've revamped the administrative dashboard UI to help improve usability and ease of finding options.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="api--security">API &amp; Security<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#api--security" class="hash-link" aria-label="Direct link to API &amp; Security" title="Direct link to API &amp; Security" translate="no">​</a></h3>
<ul>
<li class="">
<p>All API endpoints now return proper return codes, ensuring that API endpoint results can be reliably interpreted without additional parsing.</p>
</li>
<li class="">
<p>Parental ratings are significantly improved, with better enforcement, inheritable ratings, and more.</p>
</li>
<li class="">
<p>LiveTV and Collection permissions are now discrete and configurable per-user.</p>
</li>
<li class="">
<p>The EasyPassword (PIN) feature has been removed as this was a big security risk especially for administrator accounts; QuickConnect login is still supported however.</p>
</li>
<li class="">
<p>User permission handling has been unified and numerous bugs fixed, ensuring a more secure server from untrusted users.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-server--networking">Core Server &amp; Networking<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#core-server--networking" class="hash-link" aria-label="Direct link to Core Server &amp; Networking" title="Direct link to Core Server &amp; Networking" translate="no">​</a></h3>
<ul>
<li class="">
<p>The .NET version has been upgraded to version 8, the latest major and LTS release. This brings us many under-the-hood improvements and changes to help with our ongoing effort to streamline the codebase and improve overall performance.</p>
</li>
<li class="">
<p>Our minimum FFmpeg version has been bumped from 4.0 to 4.4 to take advantage of many new features. For users of our Jellyfin FFmpeg build (Docker, <code>.deb</code>/Debuntu repo, and Windows installs), you're already on a newer version with FFmpeg 6.0.1, but this minimum change would affect any other platforms.</p>
</li>
<li class="">
<p>The server now supports in-process restarting, and removes the old hacky <code>restart.sh</code> method. This should make things like installing plugins much more robust and ensure a consistent restart experience regardless of platform or install method.</p>
</li>
<li class="">
<p>Uploaded images are now subject to much more verification, helping plug several security holes in this feature.</p>
</li>
<li class="">
<p>The backend SQLite database now supports connection pooling, which should improve performance for database operations.</p>
</li>
<li class="">
<p>Support for the HappyEyeballs engine improving dual-stack IPv4/IPV6 network support.</p>
</li>
<li class="">
<p>Improved handling of IP binding to fully respect these settings (including DLNA and SSDP).</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="packaging">Packaging<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#packaging" class="hash-link" aria-label="Direct link to Packaging" title="Direct link to Packaging" translate="no">​</a></h3>
<ul>
<li class="">
<p>The <code>jellyfin</code> service user is now automatically added to the <code>render</code> and <code>video</code> groups on Debian/Ubuntu systems for new installs, helping improve the onboarding for hardware acceleration.</p>
</li>
<li class="">
<p>Packaging is now unified with a new CI system, as outlined in <a href="https://jellyfin.org/posts/new-ci-new-repo" target="_blank" rel="noopener noreferrer" class="">our previous blog post</a>. As a normal user you should see no change here, but this helps massively improve the build process, and if you are building your own packages please reference <a href="https://github.com/jellyfin/jellyfin-packaging" target="_blank" rel="noopener noreferrer" class="">the new packaging repository</a> for the updated process.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="transcoding--ffmpeg">Transcoding &amp; FFmpeg<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#transcoding--ffmpeg" class="hash-link" aria-label="Direct link to Transcoding &amp; FFmpeg" title="Direct link to Transcoding &amp; FFmpeg" translate="no">​</a></h3>
<ul>
<li class="">
<p>The <code>--ffmpeg</code> command-line flag is now the primary method of setting FFmpeg paths, and configuration of the FFmpeg paths via <code>encoding.xml</code> is now deprecated. All official packaging will revert to defaults unless explicitly set before upgrade.</p>
</li>
<li class="">
<p>Several audio improvements: support for Opus, FLAC, and ALAC codecs in the HLS engine; improved support and handling for transcoding DTS and TrueHD audio streams; new codec enforcement; better bitrate calculations; new audio normalization features; and stereo downmixing algorithm selection.</p>
</li>
<li class="">
<p>FFmpeg segments can now be automatically deleted after the client requests them, significantly reducing the space requirements of the transcoding temporary directory. This optional feature is disabled by default and can be enabled in the transcoding settings.</p>
</li>
<li class="">
<p>Support for direct stream playback of DVD and Blu-ray data folders, preferred over ISOs.</p>
</li>
<li class="">
<p>Support for AV1 hardware and software encoding.</p>
</li>
<li class="">
<p>Support for RK3588 hardware acceleration via MPP.</p>
</li>
<li class="">
<p>Support for Vulkan-based tonemapping with AMD VA-API.</p>
</li>
<li class="">
<p>Support for complete hardware acceleration on Apple systems (both Apple Silicon and Intel; previously was partial).</p>
</li>
<li class="">
<p>Support for Dolby Vision playback remuxing.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="scanning-library--playlist-management">Scanning, Library &amp; Playlist Management<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#scanning-library--playlist-management" class="hash-link" aria-label="Direct link to Scanning, Library &amp; Playlist Management" title="Direct link to Scanning, Library &amp; Playlist Management" translate="no">​</a></h3>
<ul>
<li class="">
<p>Support for scanning and displaying local lyric files (embedded or external files; Internet lyric provider searching is planned for 10.10).</p>
</li>
<li class="">
<p>Season names are now parsed from NFO files.</p>
</li>
<li class="">
<p>The MusicBrainz interface has been improved to better handle music libraries.</p>
</li>
<li class="">
<p>Support for hearing-impaired subtitles (sdh/hi./cc).</p>
</li>
<li class="">
<p>The visibility of playlists can now be made private</p>
<ul>
<li class="">User playlists are now private by default</li>
<li class="">We're working on playlist sharing for a future release</li>
</ul>
</li>
<li class="">
<p>Invalid items will be automatically removed from playlists.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="casting">Casting<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#casting" class="hash-link" aria-label="Direct link to Casting" title="Direct link to Casting" translate="no">​</a></h3>
<ul>
<li class="">Better local network detection</li>
<li class="">Connectivity improvements</li>
<li class="">Ability to self-host cast receiver</li>
</ul>
<p>We're looking for contributors for our <a href="https://github.com/jellyfin/jellyfin-chromecast/" target="_blank" rel="noopener noreferrer" class="">cast receiver</a>. This is the application that loads on a TV when using the "Google Cast" feature. Please reach out if you're interested.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-next-version">The Next Version<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#the-next-version" class="hash-link" aria-label="Direct link to The Next Version" title="Direct link to The Next Version" translate="no">​</a></h2>
<p>With our continuous integrations improvements outlined previously, we're quite confident that this will be our last "very long" release cycle. Our plan is for the next major version (10.10.0) to be released at most 6 months from now, some time in October. We hope this increased cadence will help alleviate the problems with large releases such as a very long time-to-stable for new features, translations, etc. and help lower the number of major bugs at each major release, streamlining the upgrade process. But this needs everyone's help. Back in October 2023, we made a call for developers, and we've gotten a lot of interest, but this is not a one-and-done event. We need contributions now more than ever, especially around the web frontend to help implement our planned design changes. If this interests you, please reach out and we can help get you set up.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-thoughts">Final Thoughts<a href="https://jellyfin.org/posts/jellyfin-release-10.9.0#final-thoughts" class="hash-link" aria-label="Direct link to Final Thoughts" title="Direct link to Final Thoughts" translate="no">​</a></h2>
<p>We want to thank everyone who contributed to the 10.9.0 release. According to GitHub over 100 people contributed across both repositories, and Jellyfin wouldn't be what it is without your help. We're really proud of this project we've built as a community, and hope to continue to be the go-to FLOSS media system solution for a long time to come. Happy watching!</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Testing 10.9.0]]></title>
        <id>https://jellyfin.org/posts/testing-10.9.0</id>
        <link href="https://jellyfin.org/posts/testing-10.9.0"/>
        <updated>2024-03-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are now in feature freeze for 10.9.0; here's how to help test!]]></summary>
        <content type="html"><![CDATA[<p>We are pleased to announce that we are now in our feature freeze window for the 10.9.0 release! That means that from now until the release, we'll be focusing only on merging bugfixes and other improvements, while all features will be on hold until the release is finalized.</p>
<p>That also means it's time to start testing. As outlined in our last blog post, we're doing things a bit differently this release, so this post will provide the steps one would need to take to help us test the new release.</p>
<p>If you want to help out, please read on!</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-different-and-the-release-plan">What's Different and The Release Plan<a href="https://jellyfin.org/posts/testing-10.9.0#whats-different-and-the-release-plan" class="hash-link" aria-label="Direct link to What's Different and The Release Plan" title="Direct link to What's Different and The Release Plan" translate="no">​</a></h2>
<p>First, a quick rundown on what's different from our previous releases. The last few major releases, we went back and forth between various versions of <code>-beta</code> and <code>-rc</code> tags, but ultimately due to the complexity of 10.8.0 nearly two years ago, we've decided to abandon that idea going forward. As nice as it is to publish pre-release tags, we feel that doing so is not worth the burden and headache during this period and after, when we already have a better solution in our weekly unstable builds.</p>
<p>So, in effect, our weekly unstable builds are now working double-duty as our beta/release candidate versions. Here's how they map over the coming weeks:</p>
<ul>
<li class=""><code>20240325</code>: The first "beta". Feature freeze has begun.</li>
<li class=""><code>20240401</code>: The second "beta". One week of freeze.</li>
<li class=""><code>20240408</code>: The third "beta". Two weeks of freeze, and we hope to have most glaring bugs fixed by this point.</li>
<li class=""><code>20240415</code>: The first "release candidate". We hope that by this point everything is in good shape for a release, with only a few lingering bugs.</li>
<li class=""><code>20240422</code>: The second and, ideally, final "release candidate".</li>
<li class=""><code>10.9.0</code>: The actual release, during the weekend of April 26th-28th.</li>
</ul>
<p>All of this, of course, assumes a smooth window, we we are fairly hopeful of, but any number of things could throw a wrench in this plan, so we are continuing to play things by ear and see how each week turns out.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p><strong>Update (2024-05-04):</strong> Due to some critical issues, we've decided to delay the release of 10.9.0 to ensure everything is working properly on release.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-you-can-test">How You Can Test<a href="https://jellyfin.org/posts/testing-10.9.0#how-you-can-test" class="hash-link" aria-label="Direct link to How You Can Test" title="Direct link to How You Can Test" translate="no">​</a></h2>
<p>Testing this release should be very easy, in a way that our previous releases weren't. Since our pre-releases are "just" our unstable releases here, that means that following our normal "unstable" install process is all you need to do.</p>
<p>To find that, visit our <a href="https://jellyfin.org/downloads/server" target="_blank" rel="noopener noreferrer" class="">main server downloads page</a>, select the platform you require along the top centre, then on the top right, select "Unstable". The instructions and links will now be for the unstable release. You can also find <a href="https://jellyfin.org/docs/general/testing/" target="_blank" rel="noopener noreferrer" class="">additional testing documentation in the docs</a>.</p>
<p>For Docker this simply means pulling the <code>unstable</code> tag on the image. For Debian and Ubuntu repositories, this means adding <code>unstable</code> to your existing <code>jellyfin.sources</code> entry. For other platforms, please review the provided instructions as not all platforms will support unstable.</p>
<p>Next, before installing an unstable release, ensure that you <strong>back up your existing server configuration</strong>. It is not possible to downgrade as there are a significant number of database changes. Just making a simple copy of your configuration directories is sufficient, and where those can be found depends on the platform.</p>
<p>Next, if you use plugins, install the unstable plugin repository. Due to compatibility issues, we distribute plugins for unstable in a separate manifest, so this must be added manually, and on first start all incompatible plugins (i.e. all existing plugins on an upgrade) will be upgraded. To add the repository, navigate to the Administration Dashboard, Advanced, Plugins, then click the Repositories tab at the top. Click the "+" Add button, and enter "Unstable" for the name and "<a href="https://repo.jellyfin.org/files/plugin-unstable/manifest.json" target="_blank" rel="noopener noreferrer" class="">https://repo.jellyfin.org/files/plugin-unstable/manifest.json</a>" for the Repository URL. We also recommend that you disable/remove the Stable repository at this time, as it's possible they will conflict, and under 10.9.0 the repository URL will change. After the initial update you may need to manually restart your Jellyfin instance one further time to ensure all plugins are activated properly.</p>
<p>Finally, install the unstable version and run it. The upgrade should happen seamlessly in the background, and you'll be able to log in to your Jellyfin instance normally after this point. Ensure you perform a <em>hard</em> refresh in your browser, and restart all clients.</p>
<p>Once 10.9.0 is fully released, you can switch back easily by reinstalling the new stable version, and changing back to the stable plugin manifest (URL "<a href="https://repo.jellyfin.org/files/plugin/manifest.json" target="_blank" rel="noopener noreferrer" class="">https://repo.jellyfin.org/files/plugin/manifest.json</a>").</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-report-bugs">How To Report Bugs<a href="https://jellyfin.org/posts/testing-10.9.0#how-to-report-bugs" class="hash-link" aria-label="Direct link to How To Report Bugs" title="Direct link to How To Report Bugs" translate="no">​</a></h2>
<p>While running the unstable prereleases, reporting bugs is important. After all, if we don't know about bugs, we can't work to fix them!</p>
<p>First, if you encounter a bug, ensure you're running the latest version, and try to reproduce it. If you can't, it's always possible it was a one-off occurrence, but if it happens again, definitely report it!</p>
<p>Bugs can be reported on <a href="https://github.com/jellyfin/jellyfin" target="_blank" rel="noopener noreferrer" class="">our GitHub issues page</a> or <a href="https://forum.jellyfin.org/" target="_blank" rel="noopener noreferrer" class="">on our Forums</a>.</p>
<p>You'll want to include two important pieces of information in your bug report, beyond the standard asks. First, ensure you include the "Build Version" as shown in the main dashboard page. This reports the exact unstable build you're using to help narrow down what might have caused the issue. This is doubly important if you see a new bug turn up in a future unstable build. Second, please make clear that you are running the unstable builds and not stable builds as well as if this is an upgrade or fresh install, as that can be an important piece of information.</p>
<p>Once your bug is reported, please check back diligently to see if any additional information has been requested, and we hope to get it fixed soon.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="information-for-3rd-party-clients">Information for 3rd Party Clients<a href="https://jellyfin.org/posts/testing-10.9.0#information-for-3rd-party-clients" class="hash-link" aria-label="Direct link to Information for 3rd Party Clients" title="Direct link to Information for 3rd Party Clients" translate="no">​</a></h2>
<p>At this point, with our feature freeze our APIs should be stable, though do please expect bugfixes to make minor changes over the next few weeks. Please feel free to begin testing compatibility and report any issues to us.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="information-for-contributors">Information for Contributors<a href="https://jellyfin.org/posts/testing-10.9.0#information-for-contributors" class="hash-link" aria-label="Direct link to Information for Contributors" title="Direct link to Information for Contributors" translate="no">​</a></h2>
<p>If you're contributing to Jellyfin and your existing feature PRs have not yet been merged, please don't fret. 10.9.0 was an abnormally long release cycle and something we do not wish to repeat, so your changes <em>will</em> get in soon for 10.10.0, which we expect to happen in about 6 months at most.</p>
<p>If you wish to help by submitting a bugfix, please do so as soon as you can, as we'd like to get as many fixes in and tested within the next ~3 weeks as possible, to give at least 2 weeks of final testing before the release. Ensure you clearly specify that it is a bugfix, and ensure you keep your changes to an absolute minimum needed to fix the bug. Bugfix PRs will target the <code>master</code> branch until the final release at which point they will target the <code>release-10.9.z</code> branch for upcoming point releases.</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New CI, New Repo, A Renewed Push for 10.9.0]]></title>
        <id>https://jellyfin.org/posts/new-ci-new-repo</id>
        <link href="https://jellyfin.org/posts/new-ci-new-repo"/>
        <updated>2024-03-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[There's some things about our repo we need to share as we prepare for 10.9.0]]></summary>
        <content type="html"><![CDATA[<p>Over the last several weeks, I've been driving a major push to revamp and improve our CI, in an effort to improve our release workflow, our velocity of releases, and the burden they have on me as the release manager. This post will detail the changes we've made, how they might affect you as a user or contributor, and how we're planning to proceed with our 10.9.0 release cycle.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-tldr">The TL;DR<a href="https://jellyfin.org/posts/new-ci-new-repo#the-tldr" class="hash-link" aria-label="Direct link to The TL;DR" title="Direct link to The TL;DR" translate="no">​</a></h2>
<ol>
<li class="">
<p>We have <a href="https://repo.jellyfin.org/" target="_blank" rel="noopener noreferrer" class="">a new repository browser UI</a> along with a new file layout, on a new master repository machine, built by new CI, that will hopefully make it nicer to look around and get right to what you need. This has now been cut over into production, but is still a bit of a work in progress, so please report any bugs you find to us! Note that quite a number of paths will have changed (anything under <code>/server</code> especially), but some will remain the same. If you get a 404 and can't find it through the browser UI, best to check in. <strong>3rd party packagers downloading files manually from us are advised to contact us if needed.</strong></p>
</li>
<li class="">
<p>We are dropping non-LTS Ubuntu packages, dropping our own Fedora/CentOS packages in favour of <a href="https://admin.rpmfusion.org/pkgdb/package/free/jellyfin/" target="_blank" rel="noopener noreferrer" class="">RPMFusion builds</a>, and adding <a href="https://ghcr.io/jellyfin/jellyfin" target="_blank" rel="noopener noreferrer" class="">GHCR as a container repository</a> for our Docker images.</p>
</li>
<li class="">
<p>For 10.9.0, we will not be producing explicit "beta" releases. Instead, we will test using our new Weekly Unstable builds. Once the master branch is sufficiently stable and good, we will release 10.9.0 directly from there (via our standard release branch process).</p>
</li>
<li class="">
<p>The 10.9.0 feature freeze (bugfix PRs only after this) will tentatively begin on <strong>Monday, March 18th</strong>. The hope is that all of the above will be ready by then so that obtaining Unstable builds for testing will be easy.</p>
</li>
<li class="">
<p>The 10.9.0 release itself is tentatively planned for the <strong>last weekend in April</strong>. To all <strong>3rd parties who build packages of our releases, please read until the end for an important note about this release</strong>.</p>
</li>
</ol>
<p>Read on for more details.</p>
<p>- Joshua</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-build-a-new-ci">Why build a new CI?<a href="https://jellyfin.org/posts/new-ci-new-repo#why-build-a-new-ci" class="hash-link" aria-label="Direct link to Why build a new CI?" title="Direct link to Why build a new CI?" translate="no">​</a></h2>
<p>Our old CI was assembled way back in 2019 by a few dedicated team members (mostly @EraYan) using Azure DevOps. While it was a major improvement over my self-built pure-BASH build system that we had used for the first year or so, it still had a number of drawbacks:</p>
<ol>
<li class="">It was a little difficult to understand, and relied on an external system (Microsoft Azure).</li>
<li class="">It still relied on a very complex, convoluted, and error prone <a href="https://github.com/jellyfin/jellyfin-metapackages" target="_blank" rel="noopener noreferrer" class="">BASH script to finalize the builds</a>, because...</li>
<li class="">It built the Server and Web components of Jellyfin independently, triggered independently off the different repository tag events, and then had to rely on a whole lot of shenanigans to combine the results into unified, user-friendly packages.</li>
</ol>
<p>There was also, though not a flaw with the CI system itself, the matter of Unstable builds. For a long time, they've been built on every merged PR, which was good for quickly seeing if things worked, but were effectively unusable for normal people as they changed so often. This was also something we wanted to fix.</p>
<p>At the time, GitHub Actions did not yet exist, and while we got everything to work, the CI as a whole was clunky and prone to failure. Major releases would often take me over 20 man-hours to prepare for and execute, while point releases would take at least 4-6 hours. It was a huge burden as a release manager, and also very cumbersome to fix if things broke in obscure ways, especially after the tag, because all the CI was in the code repos.</p>
<p>All this meant that our release velocity was extremely slow, as there was never a clear flow between master being tested and preparing for the next release.</p>
<p>Rather than continue incremental tweaking of this setup, about 2 years ago a project was started by @ferferga and @h1dden-da3m0n (who has since moved on) to move to GitHub Actions. While they did lay a lot of groundwork, that project ultimately stalled out and was effectively abandoned. Earlier this year, I took up the mantle to finally get this done in preparation for 10.9.0, and was able to get it working well, in a much easier to understand and hopefully much more consistent way.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-automation">More Automation<a href="https://jellyfin.org/posts/new-ci-new-repo#more-automation" class="hash-link" aria-label="Direct link to More Automation" title="Direct link to More Automation" translate="no">​</a></h2>
<p>The next part, besides just the CI itself, is an automation bot. As mentioned, releases took a long time, but only a fraction of that was spent actually dealing with Azure. The rest was administrative work: building changelogs, ensuring repos were in sync, running <code>bump-version</code> scripts, creating release drafts, checking them 3 times and still missing something, writing a release post for our Forum, etc. All of this added up to a significant time investment that I was rarely eager to do, which in turn trashed our velocity.</p>
<p>No project should be so dependent on one person, but we were, for a very long time. Part of the goal with this CI improvement is to streamline all these aspects as well using another piece of automation, a private chatbot.</p>
<p>The goal here is for us to tell our chatbot that we're ready for a release, for it to prepare all the text automatically, and then after review, tell it that it's ready to ship. Not only does this ease the process for myself, but it can easily be performed by others. And with the more reliable CI, this will hopefully mean a "set and forget" release process that helps us massively increase velocity.</p>
<p>While the bot isn't completely finished yet, the scaffolding is all there, and we definitely expect it to be ready to go in time for the actual 10.9.0 release.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="unifying-packages">Unifying packages<a href="https://jellyfin.org/posts/new-ci-new-repo#unifying-packages" class="hash-link" aria-label="Direct link to Unifying packages" title="Direct link to Unifying packages" translate="no">​</a></h2>
<p>One big drawback we mentioned of the previous CI was how it treated the server and web components of Jellyfin separately. It did this because these two components are indeed separate on the code side, in separate GitHub repositories and with different groups leading them. The problem is, that's not how Jellyfin is actually consumed by users. Users want just one package, installer, or archive to install and run out of the box. So we had to do a lot of complex shenanigans to combine the packages together.</p>
<p>No longer. With the updated CI, all our packaging is unified together, and split off into <a href="https://github.com/jellyfin/jellyfin-packaging" target="_blank" rel="noopener noreferrer" class="">its own dedicated repository</a>. This repository handles the two code repos via submodules and a simple Python script to synchronize what version is checked out of each before a build. Then, another Python script handles the actual building, which itself is then called from GitHub actions. It is still a little convoluted, but this is unavoidable for how complex our software ultimately is to package, and the hope is that having this in Python (a robust but easy-to-understand language) will help ensure this process isn't nearly as opaque as it previously was.</p>
<p>What this means depends on the different packaging types. For Debian and Ubuntu, it means that there is now one Debian source package for the three resulting binary packages (metapackage, web, and server) and thus all 3 can be built at once using a single <code>dpkg-buildpackage</code> command. For archives, this means that both the server and web components are built in sequence and then combined into one archive at build time, rather than haphazardly later, a process that failed more times than we could count. For installers, this means that the process is now simpler and can be automated. And lastly, for Docker, it means that we now provide just a single image, <code>jellyfin/jellyfin</code>, that was built all at once and does not rely on two intermediate images, another very error-prone process.</p>
<p>Related to this, and as part of the unified builds, each version of Debian and Ubuntu now has its own distinct package, with version suffixes like <code>-deb12</code> or <code>-ubu2204</code>. This will help ensure smooth dependency handling for shared libraries like LibSSL. This should only matter if you're downloading <code>.deb</code> packages from the repo directly: ensure you download the right one for your release.</p>
<p>As a normal end user, you shouldn't see anything different because of this: you'll still install the packages the same way as always through our repositories. But for anyone building their own versions, you are now advised to use the above repository, as all non-development packaging (e.g. the <code>debian/</code> and <code>fedora/</code> folders, the <code>deployment/</code> folder, etc.) will be removed from the main repositories, leaving just a simple Dockerfile for building testing and development images quickly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-new-repository-master-for-a-new-ci-system">A new repository master for a new CI system<a href="https://jellyfin.org/posts/new-ci-new-repo#a-new-repository-master-for-a-new-ci-system" class="hash-link" aria-label="Direct link to A new repository master for a new CI system" title="Direct link to A new repository master for a new CI system" translate="no">​</a></h2>
<p>One thing the ground-up CI and unified packages enables is a much cleaner repository structure. Our previous structure was based around the combining requirements, full of strange quirks and nested directories to try to make that simpler. With those out of the picture, we were able to settle on a much nicer layout, and thus, a brand new master server to house them for an easier transition.</p>
<p>Part of this also includes a revamped browser page to easily facilitate getting to the files you need, descending through the tree of the new layout in a much more user-friendly way.</p>
<p>The new browser and repository master is now live as of posting at <a href="https://repo.jellyfin.org/" target="_blank" rel="noopener noreferrer" class="">https://repo.jellyfin.org</a> for perusal, and still includes the stable release packages in the new layout for your convenience until 10.9.0 is released. So, as mentioned in the preamble, please test it out and let us know if you run into any trouble with it, any broken links, or similar issues.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="unstable-releases">Unstable Releases<a href="https://jellyfin.org/posts/new-ci-new-repo#unstable-releases" class="hash-link" aria-label="Direct link to Unstable Releases" title="Direct link to Unstable Releases" translate="no">​</a></h2>
<p>As mentioned a bit above, our previous "build things on every pull request merge" was quite cumbersome to use, as things would change very rapidly, and keeping testers up-to-date was nearly impossible during fast-moving days. Way back in the early days, we had experimented with daily builds before moving to this model, but even those felt a little too quick for both our current development pace, and for users to keep adequetly up-to-date.</p>
<p>Instead, going forward we are moving to a Weekly cycle for Unstable releases. The builds will occur on Monday mornings around midnight Eastern time (UTC-5/4-with-DST), a time chosen farily arbitrarily but ensuring each week starts with a fresh Unstable build. This process is completely automated, and the resulting builds will be available soon thereafter in all our normal places.</p>
<p>We hope that this slower pace will help ensure that users running our Unstable builds have more of a chance to actually test the current state of Jellyfin and not be overwhelmed by the speed of releases, while also providing fast enough movement for people to truly test the latest and greatest features and bugfixes.</p>
<p>One final note, mentioned in more detail below, is that these Unstable Weekly builds will act as our pre-release testing for 10.9.0: there will be no tagged "beta" or "rc" releases for this cycle. This is being done to avoid the major burden we found with 10.8.0 of trying to continually backport the fixes for the upcoming stable release back into master, while also forward-porting bugfixes in the other direction when they were accidentally mis-targeted.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cleaning-up-what-we-build">Cleaning up what we build<a href="https://jellyfin.org/posts/new-ci-new-repo#cleaning-up-what-we-build" class="hash-link" aria-label="Direct link to Cleaning up what we build" title="Direct link to Cleaning up what we build" translate="no">​</a></h2>
<p>As mentioned in the TL;DR, we are making three major changes to what we build, both for the Unstable releases and the upcoming 10.9.0 release:</p>
<ol>
<li class="">
<p>We are dropping all non-LTS Ubuntu releases from our official APT package repository.</p>
<p>The reason is simple: it's a huge burden to keep up with Ubuntu's 6 month release schedule, just to support what are in practice minor versions with a 9 month lifespan. While we understand people might want to run Jellyfin on desktops or ensure their servers have "the latest" stuff, this just isn't tenable for us long term. So, going forward, our packages will only target the LTS releases, starting with 20.04 "Focal", and including 22.04 "Jammy" and the new 24.04 "Noble" due to release in April.</p>
<p>If you are using a non-LTS version of Ubuntu, you still have options. First, you can always upgrade to 24.04 and use that going forward. However do note that 24.04 will be the latest release that we build for until 26.04 comes out. Alternatively, if you still want to keep your system on the 6-month update path, you can migrate to our Docker images instead, and these have the added benefit of additional long-term stability even as your base OS changes.</p>
</li>
<li class="">
<p>We are dropping our own "official" RPM builds for Fedora and CentOS(-like) distributions in favour of RPMFusion:</p>
<p>These builds have always been a bit of a red-headed-stepchild for us. They were poorly maintained (despite some valiant efforts and community contributions), broke frequently, and this all came to a head when we started working on a combined spec.</p>
<p>Luckily, a community member (@mooninite) has already been maintaning a stable combined RPMFusion build of Jellyfin. This seemed like a perfect time to switch to that, reducing another bit of packaging burden away from us, as well as (finally) providing a "real" repository for our RPM-based users. The RPMFusion build is now the official Fedora/CentOS build listed on our <a href="https://jellyfin.org/downloads/server" target="_blank" rel="noopener noreferrer" class="">downloads page</a> and will be going forward. We're also taking steps to get a packaged FFmpeg build provided there too, so stay tuned.</p>
<p>Unstable users on Fedora/CentOS are recommended to stick with the Docker container instead, as this both bundles FFmpeg today and helps ensure speedy upgrades.</p>
</li>
<li class="">
<p>We are finaly adding GHCR (ghcr.io) support for our Docker images. This will help ensure that, even if something were to happen to Docker Hub, there is another source for our Docker images. If you wish to, you can use this source immediately for Unstable builds, and for 10.9.0 when it is released.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-1090-release-cycle">The 10.9.0 release cycle<a href="https://jellyfin.org/posts/new-ci-new-repo#the-1090-release-cycle" class="hash-link" aria-label="Direct link to The 10.9.0 release cycle" title="Direct link to The 10.9.0 release cycle" translate="no">​</a></h2>
<p>As we outlined <a href="https://github.com/jellyfin/jellyfin/discussions/11051" target="_blank" rel="noopener noreferrer" class="">over in this GitHub discussion</a>, all these changes mean there will be some big changes for how we approach the 10.9.0 release cycle. To clarify things, the exact process will be as follows:</p>
<ol>
<li class="">
<p>Starting now, and moving forward indefinitely for all future releases, the Weekly Unstable builds will act as the "beta" versions. That is to say, if you want to help us test, or just keep up with all the latest and greatest features, use the Unstable releases. The instructions found on <a href="https://jellyfin.org/downloads/server" target="_blank" rel="noopener noreferrer" class="">our Downloads page</a> still apply for enabling Unstable builds, as well as listing all of our supported Unstable platforms.</p>
</li>
<li class="">
<p>As we approach the planned release date, we will begin a feature freeze. While in the feature freeze, only bugfix PRs will be accepted. We expect this to last between 3 and 5 weeks. Currently, the tentative start is <strong>Monday, March 18th</strong>. During the freeze, the Unstable builds should be consistent and working, with only the minor fixes being merged.</p>
</li>
<li class="">
<p>As users, please be diligent about reporting bugs in the Unstable releases. Our Triage team has been very diligent these last few months at ensuring issues are triaged and looked at, so it is vitally important that anyone using the Unstable releases properly reports their bugs!</p>
</li>
<li class="">
<p>As we approach stability, i.e. after the 3-5 weeks of frozen bug-fixing, we will make the decision to cut the actual final release. I am personally hoping to get this done during the weekend of April 27-28, but that may change depending on how things go during the freeze.</p>
</li>
<li class="">
<p>The release will actually happen. We will cut a fresh release branch, tag the version, and - using the new CI above - perform the release. We do want to ensure that <strong>any 3rd parties who might trigger off of a Tag event</strong> on our repositories <em>please turn this off</em> for this release, as we fully expect to hit at least one or two roadblocks as we run through the process "for real". Once the dust settles, we can ensure that your releases get built, just in case we need to do anything drastic like re-tagging the release. Longer-term, we'll also come up with a better coordination process, so we'd like to ensure we work with any 3rd party maintainers to assist here - please reach out.</p>
</li>
<li class="">
<p>At that point, master will resume normal operation, and we will begin the stable point bugfix cycle for 10.9.0. We hope that with the improvements, 10.10.0 will not be a very long ways away after that, perhaps 3-6 months, after which this process will start anew.</p>
</li>
</ol>
<p>We are very nearly there, over 2 years in the making, so we wanted to ensure we spread the word about this plan as far and wide as possible, especially to help get more people testing the new Unstable builds for bugs as we prepare for the final release!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-thoughts">Final thoughts<a href="https://jellyfin.org/posts/new-ci-new-repo#final-thoughts" class="hash-link" aria-label="Direct link to Final thoughts" title="Direct link to Final thoughts" translate="no">​</a></h2>
<p>That basically concludes my thoughts right now, both on the roadmap to 10.9.0 and the improvements we're making and have already made to the release process. Happy watching!</p>]]></content>
        <author>
            <name>Joshua Boniface</name>
            <uri>https://github.com/joshuaboniface</uri>
        </author>
        <category label="release" term="release"/>
        <category label="infrastructure" term="infrastructure"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jellyfin Android 2.6]]></title>
        <id>https://jellyfin.org/posts/android-v2.6.0</id>
        <link href="https://jellyfin.org/posts/android-v2.6.0"/>
        <updated>2023-12-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Improvements to the Jellyfin mobile experience are here. A new update for the Jellyfin Android app is ready! Read along to learn everything]]></summary>
        <content type="html"><![CDATA[<p>Improvements to the Jellyfin mobile experience are here. A new update for the Jellyfin Android app is ready! Read along to learn everything
new in this update!</p>
<p>- Niels &amp; Max</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-new">What's new<a href="https://jellyfin.org/posts/android-v2.6.0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<p>The focus of this update is maintenance. We've fixed various bugs and made sure the app works on newer Android versions. Noticeable is the
improved connection screen that now remembers your previously connected servers, making it a lot easier to switch between them.</p>
<center><img src="https://jellyfin.org/assets/images/server-selection-60beeb001ebc252ac09e92744c5200be.png" alt="Screenshot of the server selection in the Android app" style="max-height:600px"></center>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="full-release-notes">Full release notes<a href="https://jellyfin.org/posts/android-v2.6.0#full-release-notes" class="hash-link" aria-label="Direct link to Full release notes" title="Direct link to Full release notes" translate="no">​</a></h3>
<p>The complete list of changes for this release, including their respective pull requests, can be found on
<a href="https://github.com/jellyfin/jellyfin-android/releases/tag/v2.6.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributors">Contributors<a href="https://jellyfin.org/posts/android-v2.6.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<p>Jellyfin is developed by volunteer contributors, and we couldn't do without their great skills and dedication. They don't get paid by any
organizations, so consider donating if you appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/Maxr1998" target="_blank" rel="noopener noreferrer" class="">@Maxr1998</a> - Sponsor via <a href="https://github.com/sponsors/Maxr1998" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">@nielsvanvelzen</a> - Sponsor via <a href="https://github.com/sponsors/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/timm0e" target="_blank" rel="noopener noreferrer" class="">@timm0e</a></li>
<li class=""><a href="https://github.com/jmarcet" target="_blank" rel="noopener noreferrer" class="">@jmarcet</a></li>
</ul>
<p>We'd also like to thank everyone who reported bugs, provided feedback and participated in beta testing! The feedback we received made this
our most stable release to date.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/android-v2.6.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have some experience with Android development or with Kotlin and are interested in contributing yourself, feel free to dive into the
source code <a href="https://github.com/jellyfin/jellyfin-android" target="_blank" rel="noopener noreferrer" class="">on GitHub</a> and open pull requests.</p>
<p>Alternatively, you can help with translating the app into your language on our
<a href="https://translate.jellyfin.org/engage/jellyfin-android/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/android-v2.6.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out all these changes! The app stores will auto-update your Jellyfin app if you're already using the app. For
new users, you can find the app here:</p>
<a class="margin-right--md" href="https://play.google.com/store/apps/details?id=org.jellyfin.mobile"><img width="153" alt="Jellyfin on Google Play" src="https://jellyfin.org/images/store-icons/google-play.png"></a>
<a class="margin-right--md" href="https://www.amazon.com/gp/product/B081RFTTQ9"><img width="153" alt="Jellyfin at Amazon App Store" src="https://jellyfin.org/images/store-icons/amazon.png"></a>
<a href="https://f-droid.org/en/packages/org.jellyfin.mobile/"><img width="153" alt="Jellyfin on F-Droid" src="https://jellyfin.org/images/store-icons/fdroid.png"></a>
<p>Direct downloads are available for sideloading at <a href="https://repo.jellyfin.org/releases/client/android/" target="_blank" rel="noopener noreferrer" class="">repo.jellyfin.org</a>
or in the <a href="https://github.com/jellyfin/jellyfin-android/releases/tag/v2.6.0" target="_blank" rel="noopener noreferrer" class="">GitHub release assets</a>.</p>
<p>You can also join our <a href="https://play.google.com/apps/testing/org.jellyfin.mobile" target="_blank" rel="noopener noreferrer" class="">beta program on Google Play</a> and help test new versions
before they're released to the public.</p>]]></content>
        <author>
            <name>Niels van Velzen</name>
        </author>
        <author>
            <name>Max Rumpf</name>
            <uri>https://github.com/Maxr1998</uri>
        </author>
        <category label="release" term="release"/>
        <category label="android" term="android"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Roku Version 2.0.0]]></title>
        <id>https://jellyfin.org/posts/roku-200</id>
        <link href="https://jellyfin.org/posts/roku-200"/>
        <updated>2023-12-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I Want a Rokupotamus for Christmas]]></summary>
        <content type="html"><![CDATA[<p>When we say this 2.0.0 release is a major milestone, we honestly mean it. New features and bug fixes abound, but even behind the scenes the updates continue all the way to the foundation with us updating every single file in the app to support a new programming language. You can't get more monumental than that!</p>
<p>Read more to learn about some of the exciting new features.</p>
<p>- 1hitsong</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-user-select-screen--auto-login">👥 User Select Screen / Auto Login<a href="https://jellyfin.org/posts/roku-200#-user-select-screen--auto-login" class="hash-link" aria-label="Direct link to 👥 User Select Screen / Auto Login" title="Direct link to 👥 User Select Screen / Auto Login" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of the user select screen in the Jellyfin Roku app" src="https://jellyfin.org/assets/images/UserSelect-f867a0917a70e484d3f525d07b2de631.gif" width="925" height="519" class="img_ev3q"></p>
<p>When launching the Jellyfin app, it now presents you with the list of public users and any private users with saved credentials for you to login as.</p>
<p>If you prefer to have the app automatically login as a specific user, simply login as them and enable the new global Remember Me setting. With this global setting enabled, the app will automatically login as this user at the start of the Jellyfin app without needing to select them or enter a password.</p>
<p><strong>Note:</strong> Users upgrading from 1.6.6 will automatically have this global setting enabled and will automatically login as the last user logged in to the 1.6.6 app.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of the new Remember Me global setting" src="https://jellyfin.org/assets/images/RememberMe-5504b50c4c5f7097ef8178dd0999d6ad.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Additionaly the code behind the login form has been updated to remove several annoying bugs. Unlike before, access for all remembered users will continue to work even when other users log in and out. Also, the What's New popup will now appear for all users on their 1st login of a new app version.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-on-screen-display-osd">🎥 On Screen Display (OSD)<a href="https://jellyfin.org/posts/roku-200#-on-screen-display-osd" class="hash-link" aria-label="Direct link to 🎥 On Screen Display (OSD)" title="Direct link to 🎥 On Screen Display (OSD)" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of the new On Screen Display (OSD)" src="https://jellyfin.org/assets/images/OSD-a17e35ca2f898f6adcdf8f061a595c82.jpg" width="908" height="529" class="img_ev3q"></p>
<p>The new OSD provides quick access to the new chapter navigation functions, and is also the new way to access the playback info and subtitle section popups. This is only the start for the OSD. We have a lot of new and exciting functions we will be adding in the future!</p>
<p>To access the menu simply press either UP, DOWN, OK, or PAUSE while in the video player. Like we said, the menus you previously accessed by pressing UP or DOWN are now available from the OSD.</p>
<p><strong>Note:</strong> The video position bar is not currently selectable from the OSD. It is informational only for now.</p>
<p>If you want to step through the video position, simply press LEFT or RIGHT when the OSD is not on the screen, just like it's always been before. Rewind and Fast Forward also operate the same way. Simply press the button on the remote when the OSD is not shown.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-music-video-support">🎸 Music Video Support<a href="https://jellyfin.org/posts/roku-200#-music-video-support" class="hash-link" aria-label="Direct link to 🎸 Music Video Support" title="Direct link to 🎸 Music Video Support" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of Latest in Music Videos on the home view" src="https://jellyfin.org/assets/images/MusicVideos-80ce6988f1f7dc9787d9078e6deb2f5d.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Support for Music Videos has been added. If the user has access to the Music Videos library, it will appear in the My Media section and the Latest videos will show on the home view.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-quickplay-support-expanded-to-entire-app">🏎️ Quickplay Support Expanded To Entire App<a href="https://jellyfin.org/posts/roku-200#%EF%B8%8F-quickplay-support-expanded-to-entire-app" class="hash-link" aria-label="Direct link to 🏎️ Quickplay Support Expanded To Entire App" title="Direct link to 🏎️ Quickplay Support Expanded To Entire App" translate="no">​</a></h3>
<p>Stop wasting time and get your media playing ASAP!</p>
<p>Quickplay support is now across the entire app. Simply highlight an item and press play on your remote. The client will then queue up to 2000 items and start playing.</p>
<p>TV season? Check. Playlist? Check. Your favorite actor? Check. Your music library for a week long rager? Ya' better believe check.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-tv-show-season-extras-support">📺 TV Show Season Extras Support<a href="https://jellyfin.org/posts/roku-200#-tv-show-season-extras-support" class="hash-link" aria-label="Direct link to 📺 TV Show Season Extras Support" title="Direct link to 📺 TV Show Season Extras Support" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot showing access to TV show season extras" src="https://jellyfin.org/assets/images/Extras-0c56d1f628dff1324275b8a0883f7570.gif" width="921" height="514" class="img_ev3q"></p>
<p>You can now access TV show season extras in the Jellyfin Roku app. Simply navigate to a season of a TV show and if Jellyfin has found extras, a new button labeled Extras will appear on the left side of the screen under the Shuffle button. Clicking it will toggle between viewing a list of episodes and a list of extras. Simply click on an extra to start watching.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-tv-episode-version-support">📺 TV Episode Version Support<a href="https://jellyfin.org/posts/roku-200#-tv-episode-version-support" class="hash-link" aria-label="Direct link to 📺 TV Episode Version Support" title="Direct link to 📺 TV Episode Version Support" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot showing access to TV show season extras" src="https://jellyfin.org/assets/images/EpisodeVersions-7349125ba4b2c903239ea1218e0a0ad8.jpg" width="1920" height="1080" class="img_ev3q"></p>
<p>Have different versions of a TV episode? You can now select and watch the version you want. On the list of episodes, highlight the episode you want and press * on your remote. The option popup now provides not only audio options, but also version options.</p>
<p><strong>Note:</strong> If one of the Videos has different audio options, the user must select the desired video version, exit options, then press * again to see the updated audio options.</p>
<p><strong>Note:</strong> As of this writing, the only way to generate episode versions is in the Android app or using the API.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-search-honors-library-permissions">🔍 Search Honors Library Permissions<a href="https://jellyfin.org/posts/roku-200#-search-honors-library-permissions" class="hash-link" aria-label="Direct link to 🔍 Search Honors Library Permissions" title="Direct link to 🔍 Search Honors Library Permissions" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot showing before and after search view" src="https://jellyfin.org/assets/images/SearchPermissions-3d87908a7405d1dc62879850bebbec36.jpg" width="620" height="692" class="img_ev3q"></p>
<p>Search in Roku now honors library access permissions. If a user doesn't have access to a library, items in that library are no longer returned in search results.</p>
<p>The screenshot above shows what search results look like if a user does not have access to the movie library.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-use-web-clients-home-section-arrangement-setting">🔢 Use Web Client's Home Section Arrangement Setting<a href="https://jellyfin.org/posts/roku-200#-use-web-clients-home-section-arrangement-setting" class="hash-link" aria-label="Direct link to 🔢 Use Web Client's Home Section Arrangement Setting" title="Direct link to 🔢 Use Web Client's Home Section Arrangement Setting" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of Latest in Music Videos on the home view" src="https://jellyfin.org/assets/images/HomeSections-82790f25d5e23e06a12f2062c132faca.jpg" width="897" height="384" class="img_ev3q"></p>
<p>A new setting has been added under User Interface &gt; General &gt; Use Web Client's Home Section Arrangement. This setting causes the order of the home sections in the Roku app to match the order of the home sections as set in the server settings.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="and-on-and-on-and-on">...and on, and on, and on<a href="https://jellyfin.org/posts/roku-200#and-on-and-on-and-on" class="hash-link" aria-label="Direct link to ...and on, and on, and on" title="Direct link to ...and on, and on, and on" translate="no">​</a></h2>
<ul>
<li class="">Native support for the AV1 codec (no more user setting)</li>
<li class="">Boxsets now sorted by release date by default</li>
<li class="">View your music library by Album Artists</li>
<li class="">Custom subtitle support (required for CJK support) expanded</li>
<li class="">Alpha menu now wraps from bottom to top &amp; top to bottom</li>
<li class="">When connecting to a new server, automatically attempt connection using default protocols and ports if not specified</li>
<li class="">Updated loading spinner similar to the video player spinner</li>
<li class="">Use TV show posters (if available) instead of channel posters for the "On Now" home section</li>
<li class="">Device Profile has been rewritten and improved</li>
<li class="">Improved "Next Episode" button logic</li>
<li class="">Movie and music libraries now sorted A to Z by default</li>
<li class="">Fixed several bugs that could crash the app</li>
<li class="">Many (oh so many) bug fixes</li>
</ul>
<p>There are simply too many amazing things in this release to name them all! To read the full list of changes, please read the full <a href="https://github.com/jellyfin/jellyfin-roku/releases/tag/v2.0.0" target="_blank" rel="noopener noreferrer" class="">release notes</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-contributors">👥 Contributors<a href="https://jellyfin.org/posts/roku-200#-contributors" class="hash-link" aria-label="Direct link to 👥 Contributors" title="Direct link to 👥 Contributors" translate="no">​</a></h2>
<p>Jellyfin apps are developed by our great contributors and we couldn't do it without them. Everyone is a volunteer that
doesn't get paid by any organizations, so consider donating if you appreciate their work. A big shout-out to all
contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/1hitsong" target="_blank" rel="noopener noreferrer" class="">@1hitsong</a> - Sponsor via <a href="https://github.com/sponsors/1hitsong" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/cewert" target="_blank" rel="noopener noreferrer" class="">@cewert</a> - Sponsor via <a href="https://github.com/sponsors/cewert" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/jimdogx" target="_blank" rel="noopener noreferrer" class="">@jimdogx</a></li>
<li class=""><a href="https://github.com/neilsb" target="_blank" rel="noopener noreferrer" class="">@neilsb</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/alanazar" target="_blank" rel="noopener noreferrer" class="">@alanazar</a></li>
<li class=""><a href="https://github.com/ApexArray" target="_blank" rel="noopener noreferrer" class="">@ApexArray</a></li>
<li class=""><a href="https://github.com/arturocuya" target="_blank" rel="noopener noreferrer" class="">@arturocuya</a></li>
<li class=""><a href="https://github.com/candry7731" target="_blank" rel="noopener noreferrer" class="">@candry7731</a></li>
<li class=""><a href="https://github.com/iBicha" target="_blank" rel="noopener noreferrer" class="">@iBicha</a></li>
<li class=""><a href="https://github.com/JarodTAerts" target="_blank" rel="noopener noreferrer" class="">@JarodTAerts</a></li>
<li class=""><a href="https://github.com/Klikini" target="_blank" rel="noopener noreferrer" class="">@Klikini</a></li>
<li class=""><a href="https://github.com/matty-r" target="_blank" rel="noopener noreferrer" class="">@matty-r</a></li>
<li class=""><a href="https://github.com/pau1h" target="_blank" rel="noopener noreferrer" class="">@pau1h</a></li>
<li class=""><a href="https://github.com/photonconvergence" target="_blank" rel="noopener noreferrer" class="">@photonconvergence</a></li>
<li class=""><a href="https://github.com/sevenrats" target="_blank" rel="noopener noreferrer" class="">@sevenrats</a></li>
<li class=""><a href="https://github.com/tharvik" target="_blank" rel="noopener noreferrer" class="">@tharvik</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-downloads--changelog">💾 Downloads &amp; Changelog<a href="https://jellyfin.org/posts/roku-200#-downloads--changelog" class="hash-link" aria-label="Direct link to 💾 Downloads &amp; Changelog" title="Direct link to 💾 Downloads &amp; Changelog" translate="no">​</a></h2>
<p>Requires minimum server version of 10.8.1</p>
<p>The complete list of changes for this release, including all merged pull requests, can be found on
<a href="https://github.com/jellyfin/jellyfin-roku/releases/tag/v2.0.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<p>Your installed Jellyfin channel should automatically update once available or you can install Jellyfin
from the <a href="https://channelstore.roku.com/details/592369/jellyfin" target="_blank" rel="noopener noreferrer" class="">Roku store</a>.</p>]]></content>
        <author>
            <name>1hitsong</name>
            <uri>https://github.com/1hitsong</uri>
        </author>
        <category label="release" term="release"/>
        <category label="roku" term="roku"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Android TV version 0.16]]></title>
        <id>https://jellyfin.org/posts/androidtv-v0.16.0</id>
        <link href="https://jellyfin.org/posts/androidtv-v0.16.0"/>
        <updated>2023-12-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[It has been a busy year with a lot of work on the Android TV app. After an extended beta period today is finally the day to share this work]]></summary>
        <content type="html"><![CDATA[<p>It has been a busy year with a lot of work on the Android TV app. After an extended beta period today is finally the day to share this work
to the public. Read along to learn everything about improved music playback, the new screensaver and more!</p>
<p>- Niels</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="significant-changes">Significant changes<a href="https://jellyfin.org/posts/androidtv-v0.16.0#significant-changes" class="hash-link" aria-label="Direct link to Significant changes" title="Direct link to Significant changes" translate="no">​</a></h2>
<p>In this post I will focus on a few of the popular and significant changes. As always, a lot more changes were made both visible and
invisible; check out the full changelog to discover the full extent of this release.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="music-playback">Music playback<a href="https://jellyfin.org/posts/androidtv-v0.16.0#music-playback" class="hash-link" aria-label="Direct link to Music playback" title="Direct link to Music playback" translate="no">​</a></h3>
<p>Playing media is the key feature of Jellyfin. Up until now the Android TV app had many issues playing every possible format. The code
was also hard to work with making it challenging to fix the issues or implement new features. To counter this we decided to rewrite all
playback code completely from scratch. In this release the initial results are ready for daily use and playing music will use the new
playback code!</p>
<p>While a lot of this work is not directly noticable when using the app, some of it is. Crashes should now be uncommon, starting music is
faster and the remote control now responds more reliably. We've also added media sessions, this allows you to play/pause from other
applications on your TV or even your smartphone!</p>
<p>Improved codec detection should reduce transcoding and use direct play more often resulting in faster playback with less strain on the
Jellyfin server. We already have plans to improve this even more and add preferences to fine-tune this for your specific devices. Other
planned features include showing lyrics, enabling SyncPlay and gapless playback support.</p>
<p>Work has already started to rework video playback based on this new code so we can add all kinds of new features with ease in a shared
code base for both video and audio playback.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of the screensaver during music playback in the Android TV app" src="https://jellyfin.org/assets/images/screensaver-music-73aa0b25b0b7949c186e4280a25fc714.png" width="1920" height="1080" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="screensaver">Screensaver<a href="https://jellyfin.org/posts/androidtv-v0.16.0#screensaver" class="hash-link" aria-label="Direct link to Screensaver" title="Direct link to Screensaver" translate="no">​</a></h3>
<p>The screensaver has received some nice additions. It was redesigned to be faster, with better animations and a much nicer appearance.
Alongside this redesign, new functionality was added. Music playback has been added to the screensaver, replacing the old screensaver from
the 'now playing' screen. Additionally, the screensaver is now enabled by default when the app is open, eliminating the need to enable it
system-wide.</p>
<p>And the best part: the screensaver now works when the video player is paused!</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of the screensaver in the Android TV app" src="https://jellyfin.org/assets/images/screensaver-e638d28a53c0dc92704e88b3e903502a.png" width="1920" height="1080" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="search">Search<a href="https://jellyfin.org/posts/androidtv-v0.16.0#search" class="hash-link" aria-label="Direct link to Search" title="Direct link to Search" translate="no">​</a></h3>
<p>The search screen was partially rewritten to improve performance. It will now cancel any pending search requests while typing and use
a different method for getting the results. With these changes, a search on a large server is now noticeably faster and no flickering
occurs anymore.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of the search view in the Android TV app" src="https://jellyfin.org/assets/images/search-4453bc9525bf0cf46d379e18209a843e.png" width="1920" height="1080" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="full-release-notes">Full release notes<a href="https://jellyfin.org/posts/androidtv-v0.16.0#full-release-notes" class="hash-link" aria-label="Direct link to Full release notes" title="Direct link to Full release notes" translate="no">​</a></h3>
<p>The complete list of changes (over one hundred!) for this release, including their respective pull requests, can be found on
<a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.16.0" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributors">Contributors<a href="https://jellyfin.org/posts/androidtv-v0.16.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<p>Jellyfin is developed by volunteer contributors, and we couldn't do without their great skills and dedication. They don't get paid by any
organizations, so consider donating if you appreciate their work. A big shout-out to all contributors that made this release possible:</p>
<p><strong>Jellyfin Team</strong></p>
<ul>
<li class=""><a href="https://github.com/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">@nielsvanvelzen</a> - Sponsor via <a href="https://github.com/sponsors/nielsvanvelzen" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/thornbill" target="_blank" rel="noopener noreferrer" class="">@thornbill</a> - Sponsor via <a href="https://github.com/sponsors/thornbill" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
<li class=""><a href="https://github.com/1337joe" target="_blank" rel="noopener noreferrer" class="">@1337joe</a> - Sponsor via <a href="https://github.com/sponsors/1337joe" target="_blank" rel="noopener noreferrer" class="">GitHub sponsors</a></li>
</ul>
<p><strong>Other contributors</strong></p>
<ul>
<li class=""><a href="https://github.com/DoggoOfSpeed" target="_blank" rel="noopener noreferrer" class="">@DoggoOfSpeed</a></li>
<li class=""><a href="https://github.com/DavidFair" target="_blank" rel="noopener noreferrer" class="">@DavidFair</a></li>
<li class=""><a href="https://github.com/Clubfan22" target="_blank" rel="noopener noreferrer" class="">@Clubfan22</a></li>
<li class=""><a href="https://github.com/MWisBest" target="_blank" rel="noopener noreferrer" class="">@MWisBest</a></li>
<li class=""><a href="https://github.com/teobaranga" target="_blank" rel="noopener noreferrer" class="">@teobaranga</a></li>
<li class=""><a href="https://github.com/tim-vk" target="_blank" rel="noopener noreferrer" class="">@tim-vk</a></li>
<li class=""><a href="https://github.com/OctoNezd" target="_blank" rel="noopener noreferrer" class="">@OctoNezd</a></li>
<li class=""><a href="https://github.com/polson" target="_blank" rel="noopener noreferrer" class="">@polson</a></li>
<li class=""><a href="https://github.com/mohd-akram" target="_blank" rel="noopener noreferrer" class="">@mohd-akram</a></li>
<li class=""><a href="https://github.com/horizon1250" target="_blank" rel="noopener noreferrer" class="">@horizon1250</a></li>
<li class=""><a href="https://github.com/reacocard" target="_blank" rel="noopener noreferrer" class="">@reacocard</a></li>
</ul>
<p>We'd also like to thank everyone who reported bugs, provided feedback and participated in beta testing! The feedback we received made this
our most stable release to date.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="helping-out">Helping out<a href="https://jellyfin.org/posts/androidtv-v0.16.0#helping-out" class="hash-link" aria-label="Direct link to Helping out" title="Direct link to Helping out" translate="no">​</a></h3>
<p>If you have some experience with Android TV development or with Kotlin and are interested in contributing yourself,
feel free to dive into the source code <a href="https://github.com/jellyfin/jellyfin-androidtv" target="_blank" rel="noopener noreferrer" class="">on GitHub</a> and open pull requests.</p>
<p>Alternatively, you can help with translating the app into your language on our
<a href="https://translate.jellyfin.org/engage/jellyfin-android/" target="_blank" rel="noopener noreferrer" class="">Weblate</a> instance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="downloads">Downloads<a href="https://jellyfin.org/posts/androidtv-v0.16.0#downloads" class="hash-link" aria-label="Direct link to Downloads" title="Direct link to Downloads" translate="no">​</a></h2>
<p>Update your app now to check out all these changes! The app stores will auto-update your Jellyfin app if you're already using the app. For
new users, you can find the app here:</p>
<a class="margin-right--md" href="https://play.google.com/store/apps/details?id=org.jellyfin.androidtv"><img width="153" alt="Jellyfin for Android TV on Google Play" src="https://jellyfin.org/images/store-icons/google-play.png"></a>
<a class="margin-right--md" href="https://www.amazon.com/gp/product/B07TX7Z725"><img width="153" alt="Jellyfin for Fire TV at Amazon App Store" src="https://jellyfin.org/images/store-icons/amazon.png"></a>
<a href="https://f-droid.org/en/packages/org.jellyfin.androidtv/"><img width="153" alt="Jellyfin for Android TV on F-Droid" src="https://jellyfin.org/images/store-icons/fdroid.png"></a>
<p>Direct downloads are available for sideloading at <a href="https://repo.jellyfin.org/releases/client/androidtv/" target="_blank" rel="noopener noreferrer" class="">repo.jellyfin.org</a>
or in the <a href="https://github.com/jellyfin/jellyfin-androidtv/releases/tag/v0.16.0" target="_blank" rel="noopener noreferrer" class="">GitHub release assets</a>.</p>
<p>You can also join our <a href="https://play.google.com/apps/testing/org.jellyfin.androidtv" target="_blank" rel="noopener noreferrer" class="">beta program on Google Play</a> and help test new versions
before they're released to the public.</p>]]></content>
        <author>
            <name>Niels van Velzen</name>
        </author>
        <category label="release" term="release"/>
        <category label="android-tv" term="android-tv"/>
    </entry>
</feed>