Repository navigation
Common Problems
Plain fixes for the things server admins run into most with Moonbase. Try the steps in order. The last section says what to send if none of them help.
- The repository URL must be exactly
https://raw.githubusercontent.com/Moonfin-Client/Plugin/refs/heads/master/manifest.json. A trailing space or a copy of the GitHub page URL instead of the raw file won't work. - Your Jellyfin must be 10.10 or newer. Older servers hide plugins built for a newer version.
- Switch to another dashboard page and back to Catalog, or restart Jellyfin, to make it re-read the repositories.
- The server needs internet access to reach GitHub. Some Docker setups block outbound traffic.
- Malfunctioned usually means the plugin was built for a different Jellyfin version than the one running. Update Jellyfin, or install the Moonbase version whose target matches. Dashboard > Logs shows the exact error next to "Moonfin".
- Disabled: click the plugin in My Plugins and choose Enable, then restart.
- A hand-installed copy on Linux can fail on file permissions. Make the
plugins/Moonfinfolder readable by the Jellyfin user. - After a big Jellyfin upgrade, wait for a Moonbase release that targets it. The catalog shows it when it exists.
When a plugin fails to start, Jellyfin marks it as malfunctioning and deletes its folder on the next start. Older Moonbase versions could fail that way when their settings file couldn't be read, so it looked like Moonbase had uninstalled itself. Current versions keep loading even then.
- Reinstall Moonbase from the catalog and restart Jellyfin.
- Your users' settings, Seerr sessions, themes and saves are still there, since they live in a separate
Moonfinfolder. See Data Locations. - If the plugin page comes back with its settings empty, see Server settings came back as defaults.
- Jellyfin: run the Moonfin Startup task under Dashboard > Scheduled Tasks, then hard refresh the browser (Ctrl+F5, or Cmd+Shift+R on a Mac).
-
Emby: the
webfolder must sit next toEmby.Plugins.Moonfin.dllin the plugins folder. A zip extracted into a subfolder puts it in the wrong place. -
Behind a reverse proxy: the proxy must forward every
/Moonfin/path. Ifhttp://<server ip>:8096/Moonfin/Web/works on the local network but the public address doesn't, that's the cause. See Reverse Proxy and Seerr. - Make sure you typed the path with the capital letters,
/Moonfin/Web/, and a trailing slash. -
Jellyfin, still a 404: search the log for
web app is not on disk. That warning names the folders Moonbase looked in. Reinstalling the plugin puts the files back.
- The button needs the File Transformation plugin. Install it, restart Jellyfin, then force refresh the browser (Ctrl+F5, or Cmd+Shift+R on a Mac). The steps are on Installation.
- Run the Moonfin Startup task once under Dashboard > Scheduled Tasks and refresh again.
- The button sits next to your user icon, on Jellyfin 12's header too. If it only goes missing on Jellyfin 12, update Moonbase. Older versions didn't place it there.
- Check Branding > Custom CSS for the
.headerMoonfinButtonrule that hides it. - Clicking a Jellyfin Enhanced button opens Moonfin Web instead, the Calendar for example: update Moonbase. Jellyfin Enhanced puts its buttons in whatever sits before your user icon, which used to be the Moonfin button, so its buttons ended up inside ours. The Moonfin button now sits in Jellyfin's own header button row.
- Emby has no header button. Open
/Moonfin/Web/directly.
- Check the plugin is Active in the dashboard and the server was restarted after installing.
- The app must be connected to an address that reaches the plugin. A reverse proxy that only forwards some paths, or a tunnel that rewrites them, hides
/Moonfin/from the app while the rest of Jellyfin works. - Enable Moonbase Sync on the General tab must be on. Without it the app sees the plugin but can't use it.
- In the app, Settings > Integrations > Moonbase Plugin needs Enable Plugin ticked.
- Sync is per user. Both devices must be signed in as the same server user, with Enable Plugin on in both apps.
- Some settings are meant to differ. Moonbase keeps a global profile plus optional overrides for desktop, mobile and TV, so a choice made on the TV can be a TV-only override. Settings Sync explains the layering.
- One user's settings file can be damaged after a crash. Run Moonfin Settings File Repair under Scheduled Tasks. Anything it can't fix goes to a
quarantinefolder rather than being deleted. See Data Locations.
- Integrations tab: Enable Seerr ticked, Seerr URL filled in, and Enable Moonbase Sync on the General tab.
- The Seerr URL must be reachable from the server, not just from your PC. In Docker,
localhostpoints at the wrong container. Use the LAN address or the container name. - For Jellyfin sign-in to work, Seerr has to have imported that Jellyfin user. Ask whoever runs Seerr to add them.
- Browsing works but requests fail: the user lacks request permission inside Seerr.
The step-by-step page is Seerr Setup.
- Check the provisioning status next to Public Server URL on the Integrations tab. If it says a foreign webhook is in the way, Seerr's single webhook slot is used by something else.
- Seerr has to be able to reach your server. Set Public Server URL to an address Seerr can hit, for example
http://192.168.1.10:8096, then click Re-provision webhook. - Only users who have signed in to Seerr through a Moonfin app at least once can be notified.
- The full checklist is on Seerr Notifications.
- Paste a Server-wide MDBList API Key (and a TMDB API Key for episode ratings) on the Integrations tab and Save.
- Run Moonfin MDBList Ratings Sync under Scheduled Tasks once. Ratings are fetched in batches, so a big library takes a while on the first run.
- In the apps, ratings sources can be toggled under Settings > Integrations > Metadata & Ratings.
- A free MDBList key has a daily request limit. A very large library may need a second day to finish.
- Tick Sync IMDb charts or Sync MDBList official lists on the Integrations tab, then run the matching sync task.
- Rows arrive switched off. Users turn them on under Settings > Personalization > Home Screen > Home Row Toggles, or you set a default on the Defaults tab.
- Rows are cached on the server and refresh on the task schedule. Running the task by hand forces it.
- Empty or short rows for a user with a parental limit. Custom rows are filtered by the user's parental rating limit, using the age rating TMDB has for each title, and under a limit a title with no known rating is left out. Without any TMDB key, that's every MDBList, IMDb and Letterboxd title. Paste a Server-wide TMDB API Key on the Integrations tab.
- A big MDBList list never loads. Update Moonbase and the app. A list of 450 or so items took longer to resolve than the app waited, and the server threw the work away when the app gave up. The app now waits longer, and on Jellyfin the server finishes the work in the background so the next load gets it.
Older Moonbase versions left their scheduled tasks without a schedule on Jellyfin 10.11 and 12, so they only ran when started by hand. Update Moonbase and restart. Open any Moonfin task under Dashboard > Scheduled Tasks and it should list at least one trigger. If one still has none, add a daily trigger yourself.
- Users turn it on in their apps under Settings > Integrations > External Lists > Seasonal Row. It's off by default.
- It only shows during a holiday window, such as all of October for Halloween or the day after US Thanksgiving through December 26 for Christmas. Lunar New Year, Diwali and Thanksgiving only show in the countries that celebrate them, going by the country the app sends or your server's metadata country.
- On Emby, paste a Server-wide TMDB API Key on the Integrations tab and run Moonfin Seasonal Keywords Sync under Scheduled Tasks. Emby doesn't store TMDB keywords, so until that task has run no owned movie can match a holiday.
- On Jellyfin, owned movies match through the keyword tags Jellyfin's TMDB provider writes. A movie without those tags still matches once the TMDB key is set and the same task has run, as long as it has a TMDB id.
- No suggestions? They need Seerr set up, the user signed in to Seerr, and a TMDB key.
- A user with a parental limit doesn't see unrated titles in the row.
- Anime markers are Jellyfin only. Tick Classify anime episodes as canon, mixed or filler on the Integrations tab and Save.
- Run Moonfin Anime Markers Sync under Scheduled Tasks, or type the show into Preview a series and press Fetch now. The nightly task stops after 45 minutes, so a big library takes a few nights to get through.
- Press Check matching. A series that matched nothing either isn't on AnimeFillerList or goes by a different title there. When your library's title doesn't match, Moonbase also tries the English and romaji titles AniList has for the series' provider ids, so make sure the series has its AniList, MyAnimeList, TVDB, TMDB or IMDb id. A series that still matches nothing can't get filler badges, but Subbed and Dubbed pills still work for it.
- The canon pills are off by default. Tick Manga canon or Anime canon under Which pills to show if you want them.
- Subbed and Dubbed need a language tag on the audio tracks. Untagged audio is left unmarked.
- Still missing? Turn on Write a marker debug log, open the show in the app, then press Show log. If the request isn't there, the app never asked, and the problem is on the app side.
- Enable retro games on the Games tab, and tick the right Game libraries.
- Folders inside the library must be named per system, one folder per console, using the names on Retro Games.
- Admins can open
https://<server>/Moonfin/Games/Debugin a browser while signed in. It lists what the plugin sees: whether games are enabled, which libraries are configured and whether their folders exist. - On Smart TVs, games need webOS 5 or Tizen 5 and newer. Apple TV and iPhone play a fixed set of systems.
PSP games need the web app to be cross-origin isolated. On Jellyfin, tick Isolate the web app for PSP games on the Games tab, Save, then reload Moonfin Web. If you've added anything cross-origin to the web client, it has to allow isolation too.
When Jellyfin can't read a plugin's settings file, it quietly writes a fresh one with default values over it. From your side, everything on the Moonbase page is simply gone after a restart: API keys, Seerr, defaults and messages. Older Moonbase versions could cause this themselves when a message or theme name held characters the file can't store, like an emoji cut in half. Current versions strip those out before saving, but a full disk or a hand-edited file can still do it.
On Jellyfin, Moonbase keeps a spare copy of the file and refreshes it at every startup, as long as the settings aren't all defaults. After a reset:
- Open the Moonbase page. An amber banner at the top says These settings look like they were reset.
- Click Restore these settings.
- Restart the server. The restored settings only take effect after a restart.
The server log also has a warning naming the backup. To restore by hand, stop the server, copy plugins/configurations/Moonfin/config-backup/Moonfin.Server.xml over plugins/configurations/Moonfin.Server.xml, and start it again. No banner means there's no backup to go back to, so the settings have to be entered again. Nothing user-side is affected either way. User settings live in separate files.
This one comes from two copies of Moonbase loading at the same time. Jellyfin empties the settings file while it starts the second copy. The dashboard still shows a single Moonbase as Active, so nothing looks wrong.
It happens when a hand-installed copy of 2.2.0 or older sits next to a newer one from the catalog. Jellyfin normally retires the old folder after a catalog update, but it can't when the plugins folder is read-only, as with NixOS and other declarative setups. In that case it happens again on every restart.
- Look in Jellyfin's plugins folder for two Moonbase folders, for example
MoonfinorMoonbasenext toMoonbase_2.4.0.0. - Stop the server and delete the older folder.
- If you have your own backup of
plugins/configurations/Moonfin.Server.xml, copy it back. The restore banner can't help with this one, because Moonbase refreshed its spare copy after the file was already emptied. Without a backup, the settings have to be entered again. - Start the server.
On a read-only setup, update Moonbase by replacing its folder rather than from the catalog. User settings live in separate files and aren't affected.
-
Jellyfin: Dashboard > Logs, open the newest file and search for
MoonfinorMoonbase. - Emby: Dashboard > Logs, same search.
- A user's app can also send its own report to the server. That's covered on each client's Collecting Logs page, for example the Moonfin app and the Smart TV app. On Emby this needs Enable client log upload under General > Diagnostics, which is on by default. Reports show up as
upload_<client>_<version>_<time>.txt. - The anime marker debug log, when it's turned on, is
moonfin-anime-markers.login the same list.
Open a GitHub issue with:
- Jellyfin or Emby, and its version
- The Moonbase version (shown on the plugin page)
- Whether a reverse proxy or Docker is involved
- The log lines mentioning Moonfin from around the time it failed
For quick questions, GitHub Discussions or the Discord.
For server admins
Reference
For developers