Moonfin 2.3.0 Release Notes 
Moonfin 2.3.0 is one of our biggest releases yet. Apple users get a proper native experience, with iPhone, iPad, Mac, and Apple TV all picking up a true Apple look and feel. The home screen is now yours to build with fully custom rows. Ebooks and audiobooks finally get the players they deserve, and a new retro game library brings your ROM collection into Moonfin. On top of all that, the admin panel has been completely reworked, offline mode was rebuilt from the ground up, and subtitles, audio, Live TV, and Seerr all took big steps forward.
Important
In order for Seerr to continue to work, you must update to Plugin v2.0.0
Tip
Emby users can now also download the server plugin from the same link above and join in all the extra fun
Features
Apple Native Interface
- Moonfin now looks and feels like a normal Apple app on iPhone, iPad, Mac, and Apple TV. Settings, dialogs, sliders, and toggles all match the native Apple style, a floating glass tab bar sits at the bottom on iPhone, and you can swipe from the edge to go back, just like everywhere else on iOS. A new interface style setting lets you switch between the Apple look and the classic Moonfin look.
- Apple's own SF Symbols icons are now used throughout the app, including the player and book screens, and the Mac title bar was restyled to match.
- The Glass theme is now the default on Apple devices, and its blur effects were reworked behind the scenes so it runs smoother and lighter on the GPU.
Reading and Games
- The ebook and comic readers were overhauled with smooth vertical scrolling and faster page loads, and the reader now renders images inside books.
- The ebook reader now opens Kindle formats, including MOBI, AZW, AZW3, and KF8, EPUB navigation was updated, and the book library received a fresh redesign.
- A dedicated audiobook player view with its own playback engine controls landed, including a fix for single file audiobooks.
- A brand new retro game library, details screen, and player were added, so supported games can be launched right from Moonfin.
- To try it, create a library (doesn't matter the type) then add one folder per system with your games inside, either as a folder per game or loose ROM files. BIOS files can sit loose in the system folder. See the Retro Games wiki page for supported systems and full details.
Home Screen and Custom Rows
- Fully custom home rows arrived, with a custom row wizard, static rows for popular TMDb sources, an initial set of external rows, sorting controls, user ratings display, and visual groupings, enabled for servers with Moonbase plugin and Seerr access.
- IMDb lists were added as external home row sources, and Home Sections now auto-sort enabled rows above disabled ones.
- New Since You Watched recommendation sections, a Recently Released row, and Next Up between seasons were added.
- Recommendations are now selectable between a local library algorithm and online TMDb similarity, replacing the old Jellyfin Recommendations, and watched recommendations can show on detail screens.
- A Group Items into Collections setting groups movies and shows under their boxsets in the library view and hides the individual items.
- You can now hide items from Continue Watching and Next Up, locally or synced through the plugin.
Detail Screens and Search
- A new Modern detail screen style was added, with tabbed sections for movies, series, seasons, and more, plus a new set of Details Screen settings to configure it.
- The modern details screen pulls studio logos from the plugin's server side TMDB cache, and clicking a studio opens a global library of items from that studio.
- Search results gained a new segmented styling for faster access to specific results.
- People detail screens gained a Crew Contributions row from Seerr, plus sorting and filters, and back buttons were restored where they were missing.
Playback and Audio
- The Skip Intro/Outro, Next Up, and Are You Still Watching dialogs have been completely restyled.
- Audio track selection was refactored to resolve player compatibility issues, audio route classification now prioritizes active devices, and there is new handling for the headphone audio route.
- Built-in speaker detection was corrected so the app no longer advertises passthrough a TV speaker can't actually do and fixes issues where the audio might be mute for TV speaker users.
- Subtitles were reworked: preferences, logic, and native rendering were refactored, ASS and SSA now render through a Canvas overlay, and subtitles use OS fonts so non-Latin scripts display correctly.
- Added continuous touch and D-pad hold scrubbing on Apple TV.
- Desktop gained an independent, persisted player volume and fullscreen preference handling so it can be opened and closed from full screen and stay that way.
- Updated TrueHD decoding and Dolby Vision Profile 7 enhancement layer logic on Android.
- Android TV music playback integration with the OS was improved and audio keeps playing in the background when you exit the app.
- The music library and player UI were refreshed, and the music Favorites tab now opens a real library browse pinned to your favorites.
- Added MPRIS media controls for Linux desktops.
Live TV
- Live TV program loading now lazy loads in batches to avoid timeouts on large guides, with remux Live TV support, and the EPG UI was refreshed.
- Added brightness and volume gestures to Live TV, Android Picture in Picture for Live TV, and the OSD now auto hides after idle.
- Fixed the Live TV mini player in the EPG for the Media3 backend.
Seerr
- A dedicated Seerr requests screen is here along with collections, issue reporting, and request quotas. Seerr requests and media detail now show download progress.
- Seerr notifications are now delivered across platforms, including push and mobile request notifications, issue notifications, approve and deny actions directly from Android notifications, and iOS notifications as well as in-app for all other platforms.
- Seerr person results from search now open the person details screen, and the play button uses the Jellyfin id from Seerr.
- Seerr issues can now also be submitted via the Seerr media details screen AND responded to as well! All from in-app.
Offline
- Offline mode was rebuilt around the normal interface, so the full regular UI works offline with local first playback. The downloads dialog replaces the old Saved Media dialog and offline and server unreachable banners now appear as floating glass pills that auto dismiss. A cold boot on TV no longer forces the Saved Media screen and recovers when connectivity returns.
Admin Panel
- The admin panel has been completely reworked and restyled, with a dashboard running tasks widget, library settings pages, metadata Identify, backup options, and branding splash screen upload.
- The user editor now exposes parental controls, per device access, and auth and lockout options, alongside expanded networking, transcoding, Live TV tuner, provider, and recording settings.
- Added bulk device deletion, a severity filter on the activity log, library downloader ordering, and Quick Connect toggles.
Cars
- Android Auto and CarPlay now work as real clients with a proper media browse layer, now playing artwork, shuffle and repeat controls, and audiobook browsing.
Themes and Interface
- Settings were reorganized under section headers, with a round of cleanup across the panels.
- Added an Always Expand Navbar Labels preference (to make the tvOS users feel right at home), a new 8-Bit Hero theme, and an option to hide backdrops while browsing libraries.
Settings and Security
- Self-signed certificates can now be trusted under Account Security.
- Added an in-app image cache size limit with a setting to clear the cache, and an option to stop theme music from looping.
- The artwork updater is now restricted to admins with an added safety check.
Platforms
- The Windows updater now selects the correct architecture installer, and direct in-app update downloads returned on Windows desktop.
- Android TV gained Watch Next (Continue Watching) integration.
- Jellyfin connections now use the ApiKey query parameter, keeping Moonfin ready for Jellyfin 12's legacy auth removal.
- Improved desktop window management.
Bug Fixes
Playback, Audio, and Subtitles
- Fixed HTTP 500 errors on transcoded streams.
- Track selection now resolves to proper player ids, fixing playback errors when switching tracks on transcodes, along with series language overrides.
- Fixed offline playback position not persisting across sessions.
- Fixed the minimal and disabled Next Up display settings, the Next Up countdown running too fast on scaled animation settings, and Cinema Mode local intros failing to advance when autoplay is disabled.
- Fixed local trailers not playing fixed the blacked out YouTube trailer preview and improved resolution.
- Fixed external subtitles playing the wrong language, subtitle prioritization when SDH is off, and Android subtitles for CJK scripts by bundling a proper font.
- Fixed the SyncPlay buffering feedback loop that restarted group playback.
Apple Platforms
- Fixed HomePod audio desync and the current video not appearing in iOS media controls.
- Fixed Apple TV seeking, missing subtitles, the screensaver coming on during playback, and incorrect navbar library expansion.
- Fixed Apple TV scaling, remote sensitivity, and focus lift, plus video corruption on tvOS.
- Fixed lost surround sound when using tvOS Continuous Audio Connection (Dolby MAT), and iOS no longer advertises TrueHD it has no decoder for.
- iOS Picture in Picture was fixed, resolving the black PiP video with skip and timeline wired up, and the audio session stays active for remote controls like AirPods.
- Fixed subtitle track selection and rendering for the media_kit and tvOS mpv engines, and the blank gap at the top of the iOS home screen.
Android and Android TV
- Fixed a playback completion freeze and surface overlay leak on Android TV.
- Fixed Android TV playback freezing when trailer previews stole the player surface, Media3 restoring the wrong video on view swaps, and startup stalls from preview player churn.
- Stopped a failed TV check from dropping Android TV into the phone UI.
Live TV and Emby
- Live TV playback, routing, and search were fixed across Jellyfin and Emby.
- Server owned Live TV stream paths are now rebased to the connected base URL, fixing playback through reverse proxies.
- Fixed Emby Connect sign in, unified the Emby server probe, and Moonfin server events now work over the Emby websocket.
Library and Interface
- Home rows now stay visible when a refresh fetch fails, and opening and browsing large libraries is much faster.
- Collections keep their native order instead of being forced to sort by name, and the app stopped re-requesting libraries it was denied access to.
- Fixed pagination of the Favorites and Recently Added horizontal scroll when using touch and trackpad.
- The home screen now refreshes after Seerr finishes bootstrapping.
- Fixed genre and filename routes breaking from double decoded path parameters, outdated URL links, and the clock format now seeds from your system locale.
- The delete button is hidden when the user lacks delete permission, and saving item metadata only sends editable fields.
- Fixed custom download path cache invalidation, and empty series and seasons are cleaned up when deleting episodes.
Desktop and Linux
- Fixed Windows webview crashes and hardened the plugin config webview.
- Fixed the Linux AppImage missing libharfbuzz-icu on Steam Deck and local bundling on Bazzite and other Arch based systems.
Contributors
Huge thanks to everyone who contributed code this release:
- @mattsigal
- @jmawet
- @broken-droid
- @brendongl
- @Brady3035
- @matschi95
- @ctismer
- @d-alonso
- @LaurinSorgend
- @john5du
Translation Updates
Translations were updated across 65 languages through Weblate this cycle. Thanks to idezentas for Turkish, LoginRs and Gergo Szalai for Hungarian, Kisnov for Spanish and Catalan, TmFrs, Marvin, and Terrorwolf for German, wabisabi926 and john5du for Simplified Chinese, Silvio Vescovo and Axel for French, Mats Berg for Polish, Morten Møller for Danish, berd lamabeun for Italian, Alexandre Gomes for Brazilian Portuguese, Arif Budiman for Indonesian, and gerardolupo-cpu for Latin American Spanish, plus everyone who contributed anonymously. If you want to help translate Moonfin into your language, check out our Weblate project.