Moonbase 2.2.0 Release Notes 
Moonbase 2.2.0 adds server messages, so an admin can write something once and have it show up in people's apps even when they were offline while it was sent. The admin defaults page also grows a lot, with settings for another 96 options and fixes to the six controls that were writing values no client reads. Retro games find more of their artwork, and it now picks up new ROMs without a restart. Along the way, a reinstalled Seerr no longer strands you logged out, and a zipped game now arrives as the ROM it actually is. The bundled web client moves up to Moonfin 2.5.1.
Features
Server Messages
- A new Messages tab lets an admin write a message with a title and a body that takes Markdown, so headings, bold, italic, lists, and links all work.
- Pick a color for the message, white, green, blue, yellow, or red.
- Pick how it shows up. A count on the menu button, or the message window opening on its own once.
- Pick who sees it. Everyone, some selected users, or admins only. What someone can read is decided on the server, so a message meant for one person never reaches another.
- Schedule it. Set a start date so a message appears on its own, and an end date so it goes away without anyone having to remember to delete it.
- Add a button with a link at the end of a message.
- Order the list with up and down arrows, and the app shows them in the same order.
- Edit or delete any saved message.
- Broadcast now saves what it sends. The old broadcast only reached clients that were connected at that moment, and the message was gone once it was sent. Now it is stored too, so a user who was offline still finds it.
- An admin default for the Show Server Messages button, so you can set the starting point for whether the menu button appears.
- Older clients read a new
messagesSupportedflag on the ping and simply hide the button, so nothing breaks for a client that predates this.
Admin Defaults
The defaults page picks up the rest of the settings the clients offer, so an admin can set the starting point for a new user or enforce a value across existing ones. A setting left on Not set (user decides) still passes the user's own choice through.
- Discovery rows. Admins can now default the IMDb and TMDB chart rows, covering the Top 250, Most Popular, Top English, and Lowest Rated lists for movies and shows.
- Since You Watched. Source, content type, what it's based on, whether it includes watched items, and enable or disable up to five rows.
- Music rows. Toggles for the Latest, Recently Played, Favorites, Playlists, Album Artists, Artists, and Albums rows, plus the music sort order.
- Sort direction for the home rows. Collections, Favorites, Genres, Playlists, and the other rows each gained an ascending or descending direction, alongside the existing sort by.
- Player buttons. A picker for which buttons show around the player controls and in what order, the same thing the client's own setting offers.
- Media segments. What a client does when playback reaches an intro, recap, preview, commercial, or outro, the skip button countdown, how long before the skip button hides itself, and whether to replace skip outro with Next Up. This answers the long standing request to set segment skipping centrally after adding Intro Skipper.
- Cinema Mode for episodes.
- A lot more of the rest. Details screen options like personal rating style, hide description, open trailers externally, and use series thumbnails for episodes. Home screen options like row image type, media type badges, and hide descriptions on home. Library options like card size for libraries and playlists, the favorites view, and the genres page image type. Live TV channel sorting and the mobile guide view. Extras like the media bar overlay opacity and color. And playback and navigation defaults such as confirm exit and update notifications.
Retro Games
- New ROMs pick up their artwork without a restart. The plugin now watches your configured game library folders for file changes, so a ROM you copy in, or a per-library scan, runs the artwork reconciliation in the background instead of waiting for a plugin or server restart. A batch of ROMs settles into one pass rather than one per file, and picking different game libraries re-watches and re-scans the new folders on the spot.
- Games that came out as a false miss get retried. A cold metadata index could record a game as missing before its data had even arrived, and the matching has since found better names. Those older misses are reopened once so the corrected matching can look again, and a game only stays missing after every name the database asserts has genuinely been tried.
Settings Sync
- The settings sync toggle was renamed to Moonbase Sync, and its description now says that enabling it is required for the Seerr and ratings integrations, so it's clear why those features need it.
Moonfin Web
The bundled web client picks up everything web relevant from Moonfin 2.5.1. The highlights:
- Admin messages now live in a messages window instead of a dialog that blocked the app until you dismissed it. Messages come from Moonbase, keep the order your admin set, and support Markdown.
- An unread badge on the navigation, with a Mark all as read action. The messages button is off by default and can be turned on under navigation settings.
- Links inside a message are held to web addresses before they reach the system launcher.
- Seerr requests show as a poster grid on desktop instead of a list, with a download progress bar that shows how much of a request has come down and how much is left in real byte counts.
- Remote subtitle results say what they actually are, with SDH, AI translated, machine translated, and frame rate shown as badges under each row rather than crammed into the name, and searching and downloading say something while they work.
- Play and Resume are on the item long press menu, so you can start something without opening it first.
- Personal ratings write correctly to Emby servers, which had no working path before.
- Home rows reorder without the long press delay on desktop, where a click and drag is unambiguous.
- The theme accent color is used where cyan had been hardcoded, including the Next Up stroke on season cards.
Bug Fixes
Seerr
- A reinstalled Seerr no longer strands you logged out. Seerr answers 403 both for a session it no longer knows and for a live session that lacks a permission, and the plugin was reading every 403 as missing admin rights. So after a reinstall, the stale session was never cleared and you just kept hitting walls. Now the plugin checks whether Seerr still knows the session before it does anything, and a definite refusal clears the old session and signs in again.
- A session Seerr confirmed recently skips the round trip, so a screen that asks on every open no longer calls Seerr every time.
- Seerr being unreachable is no longer treated as you being signed out. A blip behind the proxy or a server restart leaves the session alone instead of clearing it.
Retro Games
- A zipped game now arrives as the ROM it actually is. The game detail was naming the archive, so a client downloading a single ROM archive saved plain ROM bytes under a .zip name and then failed to unpack them. The detail now names the file the endpoint actually sends, along with its real size, so the client saves something it can open. Arcade sets that stream intact keep the archive's name.
- A pending artwork timer can no longer take the process down on shutdown. A callback that read the stop source after it was disposed threw out of a threadpool thread and took the server with it. The timer is now checked under the same lock that disposes it, so a shutdown that lands mid-copy is clean.
- The artwork delivery route rejects an unknown role instead of trying to serve it, so a malformed request gets a clean not found rather than falling through.
Admin Defaults
- Six controls that were writing values no client reads now send the right ones. Row sorting was rebuilt to match the clients, built once and filled in rather than repeated per row, which also adds the Playlist Order option that was missing from the Collections sort. The rest were value sets the client has no setting for, and they've been brought in line with what the client actually offers.
Moonfin Web
- The websocket reconnects after a server restart. A connect attempt that stalled rather than failing ended the socket for good, so the reconnect added in 2.5.0 never got the chance to fire.
- A busy server no longer reads as a connection timeout. Opening a library or a detail screen while the server was working could surface a timeout error for a request that was fine.
- Fewer connections are opened at once, and the client stops overwriting the server profile with values it was only echoing back.
- Escape closes the dialog on top instead of the page behind it, which had been exiting playback and everything else.
- The admin back button stays put. It now comes from the navigator rather than a list of routes that had to be kept in step.
- The games library has a back button on web.
- The login screen's user arrows have their own room in the row, so the clickable area lines up with what's drawn.
- The shuffle content type picker reacts to its toggle.
- EmulatorJS pause, save, and settings work on web, including across the handoff between the app's controls and the player's own.
- A raw ROM delivered under a .zip name still plays. Archive handling is decided on the file's signature now rather than its extension.
- Held buttons are released before a game resumes, so dismissing the pause menu can't press something in the game.
- Long game detail screens scroll back to the top, and Play or Continue takes focus when one opens.
- The game card highlight only shows for the input actually in use.
- Posters and artwork are sharper, and Moonfin asks servers for smaller files to get there rather than larger ones.