Moonbase 2.1.0 Release Notes 
Moonbase 2.1.0 is mostly about the retro games backend, which got a proper arcade path with offline DAT matching, real ROM identification through the libretro databases, and a server side artwork pipeline that keeps working through library scans. Alongside that the plugin now serves your personal ratings so clients can sort and filter libraries by them, backs up audiobook bookmarks and notes, and the admin defaults page gained the home row toggles that were missing. The bundled Moonfin web app moves up to 2.5.0 with the setup wizard, the Aya media bar, and the full set of library sorts and filters.
Features
Retro Games Backend
- Arcade support. Arcade ZIPs are validated against FBNeo and MAME DAT files pinned locally on your server. The whole path is deliberately offline, so a client never picks a core from an external metadata service, and a DAT you replace is picked up without restarting the plugin.
- Admins can upload a DAT per core through the plugin, with clear errors for a file that isn't valid XML, a file that parses but holds no usable game sets, and a core name the plugin doesn't know.
- ROM matching through the libretro RDB databases. Games are identified from their actual contents rather than their filename, with a rebuilt reader, a platform index store, and deterministic matching rules.
- Per game core and backend overrides, so a title that needs a different core or a different playback backend can be pinned to one.
- A server side artwork pipeline. Clients read an artwork manifest instead of guessing, artwork can be prioritized per game and role, and derived thumbnails are generated and cached at the size and format that's actually being asked for.
- Artwork reconciliation runs on plugin startup and after every library scan. Jellyfin doesn't index raw ROM files as media items consistently, so hooking the built in library refresh is what picks up ROMs that only exist on disk.
- A delivery limiter bounds how many artwork response bodies stream at once, and a per user concurrency limiter keeps one user from monopolizing the work.
- The EmulatorJS web player got a real Moonfin bridge in place of its inline script, covering gamepad registration and retries, focus movement between rows, tabs, the gamepad panel and the footer, and escape handling.
- Archive hashing is capped at 512 MB per decompressed entry, so a zip bomb can't tie up a worker streaming an unbounded amount of data through SHA-1 and CRC32.
Personal Ratings API
- A new endpoint serves the calling user's personal ratings in one response, on both Jellyfin and Emby, so clients can sort and filter a library by them. Neither server has a user rating sort of its own, and their Likes and Dislikes filters are defined against the rating threshold, so their union is exactly the set of rated items.
Audiobook Bookmarks and Notes
- Audiobook bookmarks and notes are stored on the server and synced between clients, through a new user bookmarks API, so where you stopped and what you wrote down follows you between devices.
Download Progress
- A client can read its own transcode jobs, scoped by the device id on its own token, so a transcoded download can show real progress and an ETA instead of a bar that sits still. No elevated permissions are needed, since the device id is the same one the stream request carried.
Settings Sync
The sync profile picked up everything Moonfin 2.5.0 added, so these follow you between devices:
- The separate HDR subtitle style, including its own text color, stroke color, background color, size, offset, and weight.
- Per media segment skip actions, so each segment type can be set to a different action.
- Home row sort order for the Audio, Collections, Favorites, Genres, and Playlists rows.
- The Studios row, with its own sort by, sort order, and the studios you picked.
- Recently Released series type.
- The spoiler free toggles, covering details and home descriptions and whether the detail screen uses series thumbnails.
- Personal rating style, so likes, stars, or a score out of ten reads the same everywhere.
- Media type badge behavior, media segment auto hide, player swipe gestures, desktop scroll sensitivity, Cinema Mode for episodes, opening remote trailers externally, and the crash report toggle.
Admin Defaults Page
- Home row toggles are now on the defaults page, for Audio, Collections, Favorites, Genres, Playlists, Rewatch, and Since You Watched rows, each with its own sorting default.
- Pushing a genre, collection, or playlist row now switches that category's toggle on for you. A pushed row only renders for the user when its category toggle is on, so saving one without the other did nothing.
- Seerr Watchlist is available as a default home row.
- Aya was added to the media bar style options.
- The Seerr shortcuts row was added.
- A Recently Released series type default.
Naming
- The plugin reports itself as Moonbase rather than mixing Moonfin and Moonbase across the dashboard.
Bug Fixes
Emby
- The Emby config page loads again. The old h4 sub-tab builder was inserting its tab bar into the section rather than the panel's own parent, which throws now that the defaults tab nests its headings.
Studio Logos
- TV studios get their logos. TMDB serves networks separately from production companies, and only production companies were being read.
- Networks and production companies use separate id spaces, so a network could collide with an unrelated company in the logo cache. Network ids are now namespaced apart, and the cache index is versioned so entries written before this rebuild themselves.
Seerr
- Provisioning tells admins why it stopped, not just that it did. A bare status like NoAdminSession left admins with nowhere to go, so the message is carried through now, including on an attempt that was skipped because one ran recently.
External Lists
- IMDb charts stopped returning 403. The fetch now sends Origin and Referer headers.
Admin Defaults Page
- Setting the browsing blur or details screen blur defaults no longer fails the entire save. Both are text on the settings profile, and a JSON number won't deserialize into a string property, so the whole request failed rather than that one value being dropped.
- The theme music volume default is saved.
- The Continue Watching image type options send values the client understands. Poster and Backdrop were being sent as Primary and Backdrop, neither of which the client reads, so the setting did nothing.
- The admin page no longer reads controls that had been removed from it.
The Moonfin Web App
Moonbase serves the Moonfin web app at /Moonfin/Web/, and this release bundles Moonfin 2.5.0. The highlights for the browser:
New
- A setup wizard on first run, asking about the navbar position, media bar style, home row style, and detail screen style, with live previews built from your own library artwork.
- Aya, a new media bar style. A rounded hero with the title logo, an ambient background taken from the artwork, expanding focus, and trailer previews.
- The full set of library sorts. Date Added, Date Episode Added, Premiere Date, Rating, Runtime, Critic Rating, Community Rating, Last Played, Play Count, Artist, Track Number, Genre, and Folders First, with each library only offering the ones its items can answer.
- A lot of new filters. 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.
- Personal ratings across the app. Rate as a like or dislike, out of five stars, or out of ten, see it in the ratings row, sort a library by My Rating, and filter by liked or disliked.
- A Seerr Browse shortcuts row on the home screen, plus expanded browse sorting and filtering with Released, Minimum Rating, Minimum Votes, Original Language, and Runtime.
- Duotone genre backdrops on the Seerr rows, with a centered genre label.
- A Live TV favorites row, a Studio row, sort order toggles for the Audio, Collections, Favorites, Genres, and Playlists rows, and a media type badge visibility setting.
- Live TV series recording from the guide.
- Spoiler free toggles, with the details and home settings panels reorganized around them.
- The admin metadata editor gained its missing fields, including air days, per field metadata locks, series and collection display order, and dropdowns pulled from the server for ratings, metadata language, country, series status, 3D format, and person type.
- Vim style playback keys. K to play and pause, J and L to seek, H to exit, F for fullscreen, M to mute, C for subtitles, and comma and period for speed.
- A skip action per media segment type, and a separate subtitle style for HDR playback.
- Crash reports are caught and sent to your own server, with a switch to turn the upload off.
- Remote subtitle search and download works on Emby servers.
Fixed
- Playback controls no longer flicker on click, and the web page controls hide on click.
- The skip button no longer reappears alongside the controls overlay after the auto hide timer has hidden it.
- The subtitle offset reaches the bottom edge of the screen.
- Seerr rows have proper hover states on web and desktop, their titles are localized, and the browse buttons resize for longer translated strings.
- Seerr navigation is marked active when you're in it, and admin plugin filters stay usable when they come back empty.
- Continue Watching and Next Up page properly instead of stopping at eighteen items.
- Library search and filters apply when Group By is active.
- Search posters are requested at the size the other card grids use, so they stop looking blurry.
- The context menu opens where you clicked, and the row under the pointer lights up.
- Studio logos are matched on a shared name start, and the Studio row stops reading the entire studio list to build itself.
- The media bar gradient fades so a brief trailer stop stops flashing the screen, and media bar source collections save where the media bar actually reads them.
- Backdrops stop resetting their fade during rapid navigation.
- The source pickers no longer delete ids they couldn't display, which was losing data.
- Books show their summary and stop being described as audiobooks, and music track rows stop cutting off titles on narrow screens.
- Collections use a recursive query with a top level item filter again.
- Right to left layouts were reworked, covering D-pad focus, the top toolbar, tab bars, carousels, Quick Connect digit groups, and the details action bar.
- Servers with internationalized domain names connect properly.
- Emby is no longer sent a field name it rejects, which fixes the genres options.
Contributors
Huge thanks to everyone who contributed this release: