Repository navigation
Features
The full feature list, section by section. Playback and downloads have their own pages: Playback and Codecs and Downloads.
A first-run wizard after sign-in asks how the app should look: the navbar position, the bottom bar style on phones and tablets, the media bar style, the home row style, and which of the five detail screen styles to use. It ends with a theme pick and a short tour.
- Every choice shows a live preview built from your own library artwork rather than a description
- The last step has an optional Playback languages section under the themes, for the audio language, preferring the default audio track, the subtitle language and the subtitle mode. Only what you change is saved
- It only asks about things it can't work out on its own, and skips anything you have already chosen
- The answers are saved as one batch at the end instead of one push per tap
- Settings > About > Run setup again brings it back with every question
One Flutter codebase spans phones, tablets, desktop, Android TV, Fire TV, Apple TV, and web.
- Navigation tuned for touch on mobile, pointer and keyboard on desktop and web, and D-pad and remote on TV
- Reworked Siri Remote glide navigation on Apple TV, with a Touchpad swipe sensitivity setting
- A bottom bar on phones and tablets in three styles. Dock is a floating pill with labels, Split gives Search its own button and shrinks to the active tab while you scroll, and Strip is an edge to edge bar the content fades into. Up to three tabs can be pinned between Home and You, and the You tab opens a hub with everything else
- UI Scaling from Small up to Great-Grandparents, the largest size, for anyone who wants bigger text and buttons
- An Apple TV Top Shelf that shows your latest media or a Moonfin banner, and clears when you sign out
- A keyboard shortcut list on computers under Settings > About > Keyboard shortcuts. Pressing ? or F1 on any screen, including over a playing video, shows the keys that work there
- An optional gamepad navigation mode, off by default, so a connected controller can move focus and select items outside of games
- Play and Resume on the item long-press menu, so something can start without opening it first
- Settings search that finds screens and individual settings, shows where each result lives, and jumps straight to it
- Settings grouped into Account, General, Appearance, Playback, Storage & Downloads, Integrations and About
- Four keyboard styles on TV under Settings > General > Keyboard Style: Native, the TV's own keyboard, Classic, Glass, and Docked, the default, which fills the bottom of the screen. A key inside the keyboard switches style on the spot
- Platform-specific build and release scripts for Android, Android TV, iOS, Apple TV, Linux, macOS, Windows (x64 and ARM64), and web
Moonfin signs in to Plex Media Server as well as Jellyfin and Emby.
- Add Server > Sign in with Plex, with a code to enter at plex.tv/link, a QR code on TV, or your Plex password. Typing a Plex server's address opens Plex sign-in too
- Plex Home users each sign in with their own access to the server
- Every address the server lists is tried each time Moonfin starts, local first and relays last, so the connection follows you between home and away
- Home, libraries, search, collections and playlists, Live TV and DVR, and playback that direct plays or goes through Plex's transcoder
- Downloads are always the original file
- Anything that needs the Moonbase plugin, like Settings Sync, Seerr and custom rows, isn't available on Plex, and neither are the admin panel, SyncPlay or Quick Connect
Five layouts for the page a title or person opens on, picked in the setup wizard or under Appearance > Details Page > Details Screen Style.
- Classic: the original layout, with everything centered in one stack
- Modern: a responsive cinematic layout with tabs, and the default
- Spotlight: a hero over a full-bleed rotating backdrop, with Play and a few actions up front and the rest behind More Actions. Summary cards take the place of tabs and open pop-up grids. Person pages lead with a filmography still and keep library titles and Seerr titles on separate cards
- Nouveau: full screen, with every section stacked down the page instead of behind tabs
- Minimalist: artwork, one play button and the episodes. Anything it doesn't cover, such as a person or an album, opens in Spotlight
Every style shares a few things:
- A Metadata Row you can reorder and trim, synced through Moonbase, including upcoming episode air dates from Sonarr with TMDB as a fallback
- Action Buttons on Screen sets how many buttons show before the rest fold into More Actions
- Sections hides parts of the page, such as chapters, extras, More Like This or the Seerr sections. It only lists what the current style draws, one switch hides a section in every style, and the choice is kept per kind of device and synced through Moonbase
- TMDB user reviews for movies and series after More Like This, when the Moonbase plugin has a TMDB key
- A trailer picker with thumbnails when a title has more than one trailer
Ebooks: read EPUB, MOBI, AZW/AZW3, and PDF in the app. Comic archives (CBZ, CBR, CB7, CBT) render with a two-page spread on desktop, zoom and pan, and page caching. Reader themes include Light, Dark, and Sepia. The EPUB reader turns pages, with a Scroll switch for continuous scrolling, and keeps your position in sync with Jellyfin in the same format jellyfin-web uses. Comic and PDF progress syncs with your server too.
Book libraries come in three styles under Settings > Appearance > Libraries > Book Library Style: Classic, Bookstore (the default) and Reading Room.
Audiobooks: play M4B and multi-file audiobooks with chapter navigation, position bookmarks, and resume tracking. Download whole audiobooks for offline listening.
Books and audiobooks always download in their original format, with no transcoding.
Browse and play retro game libraries hosted by the Moonbase server plugin, right inside the app. See Retro Games for setup, cores, and platform support.
- Native libretro playback on Android, desktop, iOS, and Apple TV, with an EmulatorJS web player as a fallback
- Gamepad, keyboard, on-screen touch, and Siri remote input, plus save states that sync across devices
- Controller remapping with a capture screen that reads your actual controller, on Android and desktop
- Arcade support through FBNeo, with the server matching ROMs against pinned FBNeo and MAME data files
- Hardware rendering for native cores on Android, so N64 plays on Shield and Fire TV Cube class devices
- Emulator settings can be changed before a game launches
- Battery saves sync between devices along with save states, on the native player and EmulatorJS
- Your own RomM account can be linked when a game library is backed by RomM, so saves for RomM games carry over to and from RomM's own player
- PlayStation discs as a loose cue/bin, a
.zipor a.7z, with plugin 2.5.0..7zworks on Jellyfin, not on Emby - Touch controls laid out per console on phones and tablets, with analog sticks for PS1, N64 and PSP and the DS lower screen, plus a Game orientation setting for playing in portrait
- Native Google Cast, DLNA, and AirPlay integration
- Remote Control for other Jellyfin apps on your server, with a D-pad, OK, Back and Home for moving around their menus, and a Search button that types into the other device from your phone's keyboard
- Other Jellyfin apps can steer Moonfin in return: pause, seek, volume, mute, audio and subtitle tracks, D-pad navigation and search on every platform, and fullscreen on desktop
- Playback controls with track selection, delay adjustments, and picture-in-picture support
- Queue and next-up behavior that works across local and remote playback
A native view of the third-party Achievement Badges plugin for Jellyfin, under Settings > Integrations > Achievement Badges. The entry appears once the server answers, and Emby servers don't have it. Moonbase isn't involved.
- Your rank, a badge showcase, and badge pages with progress and suggested titles to watch
- Daily and weekly quests, each with one reroll
- A score bank, power-ups (XP Boost, Double Credit, Streak Freeze), and a shop for avatars and rank titles
- Stats, a leaderboard, a recap, library completion, and an activity feed
- Unlock notifications, a banner when you earn a badge, following the plugin's own per-user setting
- Friends and chat, when the plugin has friends turned on: who's online and what they're watching, friend requests, blocking, and one to one and group chats with photos and emoji. An optional Friends button in the navigation counts requests and unread messages
When your server admin turns them on in the Moonbase plugin, anime episodes and seasons carry small markers.
- Filler, Recap, Mixed, Manga Canon and Anime Canon, so you can tell which episodes move the story along
- Subbed, Dubbed or Subbed/Dubbed, going by the audio tracks in the file
- They show on episode and season cards, on the detail screen, and on the Next Up card in the player
Messages your admin sends through Moonbase arrive in a messages window rather than a dialog that blocks the app.
- An unread badge on the navigation, with a Mark all as read action
- Markdown is supported, and the order your admin set is kept
- Links inside a message are held to web addresses before they reach the system launcher
- The messages button is off by default and turned on under navigation settings
Manage your server without leaving the client.
- Views for settings, users, libraries, logs, devices, and analytics, grouped into Overview, Library, Playback, People and System
- A search across every admin setting, with a Save and Discard bar for unsaved edits
- It's there for admins on phones, tablets, desktop and web, on Jellyfin and on Emby 4.9 and later
- An Identify dialog for admins to match items to the correct metadata
- A local search field finds items inside a library without leaving it
- Quick Return jumps back to the top, through the back button on a controller or a floating button on desktop and mobile
- Group By options for Movie and TV libraries, including Decade, Genre, and Parental Rating
- Libraries can scroll horizontally instead of as a grid
- Folder View, right under Show Alphabet in a library's Sort & Filter, lists the library one folder at a time. Home Videos and libraries with no type start in it, and each device remembers the choice per library
- Titles Under Posters, under Settings > Appearance > Libraries, turns off the title and details under library cards and syncs through Moonbase
- Video Library Style, in the same place, picks the header of movie, show and playlist grids: Classic, the original, Modern, with search and labeled Sort, Group and Show pills in one bar, or Docked, with everything in a side panel on TV and desktop and a floating bottom bar on phones
- Music Library Style picks Classic, Quick Access or Immersive, the default
- An A to Z scrub rail on phones to jump to a letter
- Show Libraries Individually, under Settings > Appearance > Navigation Bar, gives every library its own button instead of the Libraries menu
- Library Order sets the order of your libraries for My Media, the recently added rows and the navigation, saved to your server account so other apps follow it too
- Sort & Filter has a Clear for each category, and a search box on any list of ten or more values, so a TV remote can undo one filter without scrolling the whole panel
Advanced: every sort and filter
- Sorts for Date Added, Date Episode Added, Premiere Date, Rating, Runtime, Critic Rating, Community Rating, Last Played, Play Count, Artist, Track Number, Genre, and Folders First. Each library only offers the sorts its items can answer.
- Filters for In Progress, Unreleased, Trailers, Extras, Theme Songs, Theme Videos, picture quality, DVD, Blu-ray and ISO sources, year ranges, audio language, and subtitle language, plus a Clear Filters button.
Connect to multiple Jellyfin and Emby servers at the same time, under one UI.
- The unified library view merges content from all servers, so you browse, search, and play without switching
- Libraries display as "Library Name (Server Name)" when multiple servers are active
- Continue Watching, Next Up, and Latest rows pull from every connected server
- Search covers every signed-in server, with each result labeled by its server
- Unified mode can be toggled on or off, independently per server type
- Every playlist type shows up, including music, audiobook, book, photo, and mixed playlists
- A Group by Type option with per-type filters in the library display settings
- Chapter markers work when playing from a playlist
- Playlists can resume where you left off and show watched state on their tracks
- View Details on a playlist item's menu opens its page, and Back returns to the playlist
Rotating featured content on the home screen with rich backdrop presentation.
- Six layouts to choose from: Moonfin, MakD, Bookshelf, Gallery, Banner, and Aya
- Aya is a rounded hero with the title logo, an ambient background taken from the artwork, expanding focus, and slide transitions
- Can feature your Collections or trending and library content, with optional in-bar trailer previews
- Shows quick-glance metadata like ratings, genres, runtime, and overview, with its own Ratings settings apart from Home rows and the details page
- External Lists mixes titles from the IMDb and TMDB charts and your custom rows into the bar, or fills it with them
- Peek Home Rows shows the top half of your first row along the bottom of the bar on TV and desktop
- OLED Mode renders true black backgrounds for deeper blacks on OLED screens
- A full theming system with a built-in Theme Store to browse and manage themes
- An in-browser theme editor for building and previewing themes, with sync back to the server plugin
- Navbar icon color cycling and a range of bundled themes, including Neon Pulse
- Seasonal effects on Home: Snow, Christmas, Fireworks, Confetti, Spring Petals, Fireflies, Falling Leaves, Halloween, Valentine's Day, Easter, Pride, Lunar New Year and Diwali, with a Light, Normal or Heavy density. They pause behind the screensaver and respect the system's reduce motion setting
- Focus Follower: with Halloween, Valentine's Day, Fireworks, Christmas, Easter, Pride, Lunar New Year or Diwali on, a holiday piece like Halloween's planchette follows the focused card on TV Home and takes the mouse pointer's place on desktop Home. It's on by default and can be turned off under Settings > Appearance > Seasonal Effects
- A custom loading animation under Appearance > Loading Animation: the Moonfin logo, a spinner, the runner, or moon phases, in one of nine spots or bouncing around the screen, with its own size, speed and optional text
- Skeleton placeholders while content loads
- Page Transitions and Navigation Speed under Appearance, and Modern Cards Transition Speed under Appearance > Home Screen, on desktop and TV
- A screensaver on TV with grouped settings and a live preview. It shows library art filtered by content type, library, collection, genre and age rating, or a black or gradient backdrop (Moonfin, Calm, Neon Pulse, Aurora), with an optional Moonfin logo, clock or runner that has its own speed, position and size. Its settings sync through Moonbase
- Cinema Mode pre-rolls and intros play before movies and TV episodes, and are excluded from progress reporting
- Cinema Mode Skip Button, off by default, shows a Skip button for ten seconds on each pre-roll longer than that
- Skip intro and skip credits controls, with a skip action settable per media segment type
- Skip buttons can hide themselves automatically instead of sitting on screen for the whole segment
- SponsorBlock integration to skip sponsor and promo segments during trailer playback
Seerr lives inside the normal media details screen, so requesting something new feels the same as opening something you already have.
- Titles that aren't in your library open the same details screen, showing the Cast and Seerr tabs
- Continuing TV series can be requested again as new seasons arrive, and seasons you already have are marked
- Optional Seerr discovery rows on the home screen: Trending, Popular, Upcoming, Recently Added, and Requests
- Browse by Genres, Studios, and Networks, with request status overlays and media type badges
- HD and 4K requests can be made independently
- Collection pages can list the titles you don't have yet, each with a badge that opens its request page, when Show Missing Collection Items is on
- Season tiles show their Seerr availability, when Show Seerr Availability Badges is on
- Your requests show as a poster grid on desktop and TV, with a progress bar for anything still downloading that reports real byte counts
- Seerr navigation and settings hide automatically when a Seerr instance isn't configured
Watch together in sync with other people on your server, with entry points in the app navigation and settings.
Rate an item as a like or dislike, out of five stars, or as a score out of ten. The style you pick is what the rest of the app speaks.
- Your rating shows in the ratings row on the detail screen alongside the other sources
- Libraries can be sorted by My Rating and filtered by liked or disliked, which the Moonbase plugin serves since neither server has that sort of its own
- A rating set while offline is queued and synced when you reconnect
- Works on Emby servers as well as Jellyfin
- Optional MDBList ratings with multiple rating sources shown in item details, including Roger Ebert
- Episode ratings routed through TMDB where available
- Rating display customizable through settings, with a reset button to restore the defaults
Trickplay previews show while scrubbing, as a single thumbnail, a filmstrip of the frames either side of where you are, or full screen.
- Preview size, distance from the seekbar, and whether the preview slides along with your scrub are all configurable, with a live preview in settings you can drag
- Frames are prefetched so scrubbing stops waiting on the network
- Pause While Scrubbing decides whether seeking pauses playback or keeps it running
- Works on Emby servers as well as Jellyfin, using the preview images the server already generates
- Built-in Live TV browsing and playback
- Embedded CEA-608/708 closed captions during Live TV on all platforms
- An EPG-style program guide that fits more channels on screen, fades programs that have ended, marks programs that started before the visible window, and shows program artwork, episode titles and numbering
- Category filters (Movies, Series, Sports, News, Kids, Premiere, Favorites) that cover the whole lineup
- The guide opens on the channel you watched last, and Rewind and Fast forward page through it on a TV remote
- A quick channel changer on TV: press Up during live playback, or pick Channels next to Guide, for a strip of channel cards in guide order that wraps around
- An optional Live TV button in the navigation, off by default
- A stalled channel recovers on its own with up to three paced attempts, showing Reconnecting while it works and a Retry card if it can't. On-demand transcodes that run dry get the same limited retries
- Rewind and Jump to Live on channels whose stream keeps at least a minute of rewind window, with Media3 on Android and on iPhone, iPad, Mac and Apple TV
- A record button in the Live TV player for the program or its whole series
- Record Series asks for All Episodes, Episodes Not Already Recorded or New Episodes Only, and Series Settings changes it later
- An optional On Now section of its own in the Home rows, off by default
- DVR recordings and schedule management in-app
Play trailers right in the app from the detail screen, with resilient trailer source resolution for better reliability. YouTube trailers play at up to 1080p and keep their original soundtrack rather than one of YouTube's automatic dubs.
Six configurable slots around the progress bar, above and below it on the left, center, and right. Each slot shows time elapsed, total duration, time remaining, the wall clock time the item ends at, the current time, or nothing. The video and music players have separate layouts.
- Fine-grained subtitle and audio delay adjustment during playback
- Pre-playback track selection and ongoing track control
- Show, hide, and reorder player OSD buttons and details screen action buttons per device type, synced across devices
- Still-watching flow and next-up handling
- Two subtitle tracks at once on every player, after turning on Settings > Playback > Subtitles > Secondary Subtitles
- An Episodes button in the player with season tabs for every episode of the season you're watching
- A mini player on macOS, Windows and Linux that keeps the video playing in a bar along the bottom while you browse
- Crop black bars finds letterbox bars encoded into the picture, crops them and fills the screen, on Windows, Linux and Android. Recrop Interval can scan again every 1, 5 or 10 seconds for films that change aspect ratio
- Windows plays every title in mpv's own window by default, which keeps motion smooth and sends HDR to the display untouched. Video Renderer can switch to the native window for HDR only, or to the in-app path
- Transcode Audio Codecs has the server convert only the audio codecs you pick, such as DTS, while the video plays untouched
- A Passthrough output choice on Android TV between the system packer and the app's own, for receivers where passthrough is silent or glitchy
- Fifteen subtitle colors for the text, its outline and the background, with a separate style for HDR
- Chapter Marks, off by default, mark where each chapter starts on the seek bar
- Reorder and toggle home sections, for example Continue Watching, Next Up, and Latest
- A Max days in Next Up setting controls how far back Next Up reaches
- A seasonal row of holiday movies from your library, with Seerr suggestions when Seerr is set up, for New Year's, Valentine's Day, Easter, Pride, Halloween, Thanksgiving, Christmas, Lunar New Year and Diwali. Each holiday can be switched off, the country follows the device unless you pick one, and it needs the Moonbase plugin
- Home rows and the media bar each have their own Ratings section, apart from the details page
- A Default Action for Continue Watching and Next Up can make selecting a card start playing right away
- Home Screen Backdrop picks Off, Full Screen, Corner or Top on TV and desktop
- Home row preferences sync through the plugin
- A reset button restores the defaults
- PIN code protection for sensitive settings and actions. With the Moonbase plugin, a sign-in PIN follows you to your other devices, and the device keeps a copy for when the server can't be reached
- Blocked ratings, under Settings > Account > Parental Controls, work as a ceiling: blocking a rating blocks everything stronger too, and ratings Moonfin can't rank sit in their own list and only block themselves
- Blocked titles are hidden everywhere, including search, suggestions, favorites, libraries, folders, the media bar and multi-server rows, and they won't open or play. Episodes go by their series rating
- Blocked ratings are stored per server and per user
Kids Mode strips the app back to what a child needs and locks the way out behind its own PIN, set fresh each time from Settings > Account > Kids Mode.
- Settings collapse to a single Exit Kids Mode entry, and admin, Seerr, Live TV, SyncPlay and the libraries menu leave the navigation
- Home keeps library tiles, the latest additions, and a combined Continue Watching and Next Up row, and search drops the Seerr tab
- Detail screens use Minimalist, without ratings, the description, technical details, or admin, download, delete and request buttons. Trailers stay in the app
- Links into admin, Seerr or Live TV land back on Home
- Wrong PINs cost a growing wait after five tries, up to 15 minutes
- It's off by default and doesn't sync to other devices
See Parental controls and Kids Mode for the how-to.
The full details are on Downloads.
- Auto-download for series you follow, keeping a set number of unwatched episodes and removing watched ones after a delay you choose. It checks when Moonfin connects or comes back to the front, when the server adds episodes, when you tap Check now, and in the background on iOS and Android
- A Downloads home with an Active Downloads tab, a screen per show, a storage strip, search, and sorting by size, name or date added
- Smart downloads on phones and tablets keep the next episodes of a show you're watching downloaded and delete each one once it's watched
- Remove Watched Downloads deletes movies and episodes you downloaded yourself once you've watched them, with a Keep Downloaded switch to protect a title or series
- Series, seasons and collections can download just what you haven't watched
- Original quality downloads show their transfer rate and time left
- A download that won't fit is refused before it starts
- The Downloads button in the navigation only appears once something is saved
Crash reports are captured on the device and uploaded to your own server, never anywhere else. See Collecting Logs for how to capture a report.
Advanced: how capture works
- Reports are written at capture time, so a hard kill loses nothing, and they are held until a server that accepts them is reachable
- A switch in Diagnostics settings stops reports ever leaving the device, while capture itself stays local
- Playback diagnostics name who declined direct play, the device's video codec capabilities, and the subtitle track mapping
- On Android 11 and later, a crash, ANR, failed start or memory kill from the previous run is reported on the next launch, and Android 12 and later add the crashing thread and its last error logs
The app checks for updates on a configurable cadence and surfaces availability in-app, so you don't have to track versions yourself.
Using Moonfin
Going deeper
For developers