114 pull requests since v0.16.0, across six betas and thirteen days. Two headline features: themes, for the web UI and the player, and a Prowlarr-based Cardigann engine that runs Prowlarr's own indexer code inside Mydia as WebAssembly. The player also gets a visual refresh with Liquid Glass on Apple platforms, the Downloads page is rebuilt, and a long run of import fixes means stuck and partial imports finish.
There are 11 migrations, all additive or data repairs. Read the upgrade notes before pulling.
Themes
- The web UI has user-selectable light and dark themes, flat buttons, and rounded corners that follow the theme with a Corners setting to adjust them (#1182, #1203).
- The player has theme presets, including a macOS preset that follows the system accent colour, on top of a visual refresh: colour tinted from the artwork on screen, the Outfit display font and softer shapes (#1139, #1183).
Cardigann: a Prowlarr-based engine
- Prowlarr's C# Cardigann engine, compiled unmodified to a WebAssembly component and hosted by Mydia. No Prowlarr server is involved. In a benchmark against live Prowlarr it matched Prowlarr's results on 44 of 44 definitions, against 28 for the built-in engine. It is experimental and opt-in: switch it on the Indexers page or with
CARDIGANN_ENGINE=prowlarr. Mydia downloads the precompiled guest (about 39 MB) and caps how many instances run at once (#1121, #1122, #1125, #1126, #1128, #1132, #1134). - Cardigann login works for every method, with captcha and 2FA, and public trackers work at runtime (#1116, #1118).
- Searches request every page a definition lists and honour its
requestDelay, so 1337x and KickassTorrents no longer stop at 20 and 50 results. The Pirate Bay's JSON array responses, FlareSolverr clearance and concurrency, and release page links for same-page results are fixed too (#1114, #1131, #1156). - Per-indexer search metrics, health reported through whichever engine is active, one verification badge per row, and the dashboard tile shows the engine (#1133, #1137, #1164).
- A library indexer can be disabled without removing it (#1112).
Player
- Liquid Glass for the floating chrome, controls, dialogs, sheets and sidebar on iOS and macOS, with materials and control sizes taken from Apple's iOS 27 UI Kit. It is an Appearance setting on every platform (#1184, #1185, #1186, #1187, #1190, #1191, #1193, #1195, #1229, #1232, #1233, #1244).
- New navigation: a floating rail on tablets and desktop, a floating bar on phones, a native iOS 26 tab bar with the cast bar as its accessory, and native sidebars on macOS and iPadOS 26. Home and detail pages are reworked around a poster-card hero (#1101, #1140, #1142, #1152, #1159, #1163, #1174).
- One Home for all servers and for each server, a calendar timeline with a month jump, episodes that open on their show page, and Settings as a dialog on desktop (#1146, #1157, #1160, #1167).
- Play starts playback. Continue Watching shows episode numbers, ranks by show activity and offers the next episode. Phones and tablets go fullscreen by default, subtitle size is configurable, web playback stays stopped after Back, and playback recovers after iOS suspends the app (#1143, #1147, #1148, #1161, #1173, #1178, #1245).
- Remote requests recover when a direct p2p path goes silent. Also fixed: the iOS audio session at launch, rustls flooding logcat, a proxy shutdown race, and TV dialogs that the remote could not focus. Two switches replace the Diagnostics sharing choice (#1138, #1155, #1162, #1199, #1200, #1201).
Import
- Imports land in the folder an item already lives in, a show imports what it can when one file fails, multi-episode files link to every episode, and specials import on a show's first import with the failing file named on the review page (#1221, #1224, #1238).
- Accepted groups no longer stay Queued forever, drains interrupted by a restart are requeued at boot, numbering episodes keeps the group open, the log explains copied imports, and usenet job folders are removed afterwards (#1215, #1219, #1223, #1240).
- Import lists open on titles to add and keep ones you own behind an In library filter. The list's Library Path setting takes effect (#1242).
Downloads and search
- The Downloads page has search, filters, a detail drawer, shortcuts to each client's web UI, and Active, Imported and All tabs (#1165, #1181, #1196).
- SABnzbd's NZB Key is rejected by the connection test instead of failing every poll with a 403 (#1218).
- Release names with
H264or a bareWEBsource are recognised, and the download flow works from Search Media (#1109, #1207).
Library and metadata
- A TV show falls back to the other metadata provider, TVDB or TMDB, per show (#1119).
- Watch sync imports plays on copies mapped after they were watched (#1127).
- File rows list every audio track, and Dolby Digital Plus is stored as E-AC3 (#1177, #1180).
- Metadata refresh jobs no longer snooze forever (#1150).
- Library bulk actions require permission and respect account restrictions (#1105).
Web UI
- Times follow the
TZsetting, with a per-user time zone and 12/24-hour clock under Profile → Appearance (#1241). - Admin → Status shows when a newer Mydia release exists (#1170).
- Toasts dismiss themselves and stack above dialogs. My Requests no longer errors after an approval, the calendar filter works, poster rails scroll with the mouse wheel, the file actions menu paints above the collection rail, and Picked for you takes thumbs up and down (#1108, #1123, #1124, #1194, #1228, #1239).
- Phone fixes across admin and library pages: one scroller per screen, closable modals that no longer scroll sideways, a one-line page switcher, no cut-off rows, and the Create User modal closes after saving (#1130, #1135, #1136, #1175, #1197).
Remote streaming
- Truncated HLS segments and playlists are reported as errors, object storage streams that fail partway abort, and p2p moves to iroh 1.4.0 for the rustls advisories (#1208, #1214, #1220).
Under the hood
- Mydia.Media, Mydia.Library, MediaImport, the download queue and ImportCandidates are split into focused modules, behind a diff-based quality ratchet. Dialyzer is clean and CI fails on any new finding (#1103, #1106, #1110, #1111, #1113, #1115).
- All Rust code follows one strict lint set with no panics outside tests. That pass fixed a 32-bit Android bug truncating media ranges over 4 GiB (#1102, #1206, #1211).
- Fixes for three recurring production log errors, PostgreSQL float averages in job stats, and proc-macros macOS 27 can load (#1166, #1168, #1169).
- CI: sharded tests, path-gated Elixir jobs, on-demand players from any branch, no Flutter SDK cache, and flake fixes (#1129, #1144, #1149, #1151, #1154, #1192, #1198).
- metadata-relay 0.21.0 and dependency bumps (#1172, #1209, #1210).
Upgrade notes
Back up first.
- Eleven migrations: library membership for indexers (#1112), one Cardigann session per definition (#1116), a pinned metadata provider per show (#1119), a watch-sync relisting (#1127), dropping a legacy settings category check that old SQLite installs still carry (#1128), indexer search events (#1133), cancelling refresh jobs stuck snoozing (#1150), a web UI link on download clients (#1165), relabelling Dolby Digital Plus files stored as AC3 (#1177), feedback on dismissed shelf items (#1194), and retiring the skipped import list status (#1242).
- Mydia asks the metadata relay once a week whether a newer release exists. It sends a random install ID, the version, the CPU architecture and the database type. Turn it off in Settings → Updates or with
UPDATE_CHECK_ENABLED=false(#1170). - The Prowlarr-based Cardigann engine is off unless you choose it. When on, it stores its download in
MYDIA_DATA_DIR(the database's directory by default) and uses more memory than the built-in engine.CARDIGANN_WASM_PATHpoints at a local copy for servers without internet access (#1121, #1132).