⚠️ Important Notes
This release adds mandatory authentication to the Music Assistant webserver.
At first startup you will be greeted with a setup screen to create the (first) admin account, your data will be reserved. You need this account to login to Music Assistant directly from now on.
Running as Home Assistant add-on? We will automatically log you in when using the built-in (Ingress) panel to access Music Assistant. The Home Assistant integration should also reconnect automatically, just ensure you run at least HA 2025.12.
When you are not running the Music Assistant Server as an Home Assistant add-on, you will need to authenticate the Home Assistant integration - a button will show up in the Home Asssistant Settings/Integrations page.
📦 Stable Release
Changes since 2.6.3
⚠ Breaking Changes
- Player controller (and model) refactor (by @marcelveldt in #2249)
🚀 New Providers
- Add ARD Audiothek provider (by @jfeil in #2229)
- Add Radio Paradise provider (by @OzGav in #2295)
- Add (Roku) Media Assistant provider (by @MedievalApple in #2332)
- Adding support for Genius Lyrics metadata provider (by @robert-alfaro in #2337)
- Add niconico video Provider (by @Shi-553 in #2339)
- Add Resonate Provider (by @maximmaxim345 in #2348)
- Add Podcast Index Provider (by @OzGav in #2350)
- Add Internet Archive Provider (by @OzGav in #2411)
- Add DI.fm radio network provider (by @benklop in #2419)
- Add Phishin provider (by @OzGav in #2421)
- Add VBAN Receiver plugin provider (by @sprocket-9 in #2498)
- Add bbc sounds provider (by @kieranhogg in #2567)
- Add AirPlay Receiver Plugin provider (by @marcelveldt in #2604)
🚀 Features and enhancements
- Add CLAUDE.md development guide (by @MarvinSchenkel in #2274)
- Added recommendations to the SoundCloud provider (by @robsonke in #2275)
- Add URL example (by @OzGav in #2287)
- Add helpers to setup aiohttp session (by @marcelveldt in #2308)
- DSP Presets (by @math625f in #2309)
- YTMusic: Auto update dependencies for frequently breaking packages (by @MarvinSchenkel in #2311)
- Use separate ingress TCP site for HA add-on (by @marcelveldt in #2314)
- Some follow-up fixes (esp. for groups) after the Player refactor (by @marcelveldt in #2335)
- audiobookshelf: Implement more efficient multi-file seeking (by @tsipinakis in #2342)
- Add podcast support to Spotify provider (by @OzGav in #2349)
- Improve Lyrics Availability (by @OzGav in #2357)
- Add support in Bluesound provider for MDNS address for multi zone devices (by @Cyanogenbot in #2358)
- Bluesound native grouping and control of external sources (by @JoProbst in #2359)
- Switch to static logo images in Radio Paradise provider (by @OzGav in #2360)
- Expose
groupingfield on tracks (by @cr7pt0gr4ph7 in #2373) - Add caching and fix audiobook podcast mixup (by @OzGav in #2392)
- Improve Radio Browser browse implementation (by @OzGav in #2393)
- Spotify Podcast Final caching and fix image quality (by @OzGav in #2395)
- Allow chime URL to be customized for Announcements (by @marcelveldt in #2403)
- Add config options to control how library items are synced to MA (by @marcelveldt in #2405)
- Add live and soundtrack album types (by @OzGav in #2406)
- Add Smart fades feature (by @MarvinSchenkel in #2407)
- Add played status sync on Spotify podcast episode load (by @OzGav in #2408)
- Add Audiobook Support to Spotify provider (by @OzGav in #2410)
- Add Infer album type to streaming providers (by @OzGav in #2420)
- Refactor caching (by @marcelveldt in #2430)
- Adding alexa language config value (by @ChrisBkt in #2432)
- Several improvements to the Smartfades feature (by @marcelveldt in #2433)
- Podcastfeed Handle images no longer at URL (by @OzGav in #2435)
- Adjust smart fades filters from testing (by @maximmaxim345 in #2441)
- Few smart fades fixes (by @MarvinSchenkel in #2442)
- Smart fades tweaks (by @MarvinSchenkel in #2457)
- Various improvements to the DI Provider (by @benklop in #2472)
- Add Recommendations to nugs.net (by @brian10048 in #2492)
- Fix Spotify audiobook instance routing (by @OzGav in #2502)
- Simplify library sync/import settings (by @marcelveldt in #2507)
- Plex: Add real-time playback state reporting and timeline updates (by @anatosun in #2512)
- Plex: Add configurable bidirectional favorite sync with ratings (by @anatosun in #2519)
- Plex: Add support for importing collections as playlists (by @anatosun in #2521)
- Plex: Add artist top tracks and similar tracks support (by @anatosun in #2522)
- Plex: implement recommendations with configurable hub limit (by @anatosun in #2531)
- Fix album track order in playlist (by @OzGav in #2539)
- Add extra buffering to queue stream to create backpressure (by @marcelveldt in #2544)
- Plugin source improvements (by @marcelveldt in #2548)
- Fix several issues when streaming to (DLNA based) players (by @marcelveldt in #2551)
- Qobuz: Add playlist creation (by @OzGav in #2554)
- Add automatically generated API documentation (by @marcelveldt in #2559)
- Add (initial) support for AirPlay 2 (by @bradkeifer in #2571)
- Add support for actions flow in Player config entries (by @marcelveldt in #2572)
- Update Resonate Provider (by @maximmaxim345 in #2575)
- Use system version of FFmpeg for Resonate (by @maximmaxim345 in #2577)
- Subsonic: Use loudness tags when present (by @khers in #2580)
- Refactor Smart fades (by @MarvinSchenkel in #2582)
- Don't stop the music improvements (by @MarvinSchenkel in #2597)
- Apple music improvements (by @MarvinSchenkel in #2607)
- Plex: added remote control feature (by @anatosun in #2608)
- Apple Music: Add remaining favourite parsing + custom music token config (by @MarvinSchenkel in #2609)
- Refactor streams controller + smart fades (by @MarvinSchenkel in #2613)
- Use secure connection to MusicBrainz API (by @mtdcr in #2615)
- Update Resonate provider with
MULTI_DEVICE_DSPsupport and other improvements (by @maximmaxim345 in #2616) - Use
get_streamhelper in builtin player (by @maximmaxim345 in #2618) - Add TLS options with fingerprint support to Fully Kiosk provider (by @miguelangel-nubla in #2649)
- Improve lyrics lookup failure visibility (by @OzGav in #2651)
- Subsonic: Support syncing favorites to subsonic server (by @khers in #2663)
- Subsonic: Give user control over pagination size (by @khers in #2665)
- Subsonic: Add ProviderFeature for Favorites (by @khers in #2667)
- Add APEv2 image support (by @OzGav in #2668)
- Add extra info to scrobble data (by @OzGav in #2669)
- Add (mandatory) authentication to the webserver (by @marcelveldt in #2684)
- BBC Sounds: Improve title metadata (by @kieranhogg in #2688)
- Update Spotify (librespot) binaries (by @marcelveldt in #2692)
- Some follow-up additions and fixes for the Authentication support (by @marcelveldt in #2699)
- Add recently added tracks and albums playlist + recommendation (by @theomega in #2700)
- Add Version suffix config to scrobble providers (by @wjzijderveld in #2709)
- Prepare remote connect feature (by @marcelveldt in #2710)
- Extract HLS parser to shared helpers module (by @Shi-553 in #2715)
- Update Implemented Sendspin Version with included Volume Support (by @maximmaxim345 in #2732)
- Add Experimental Sendspin over Cast Support (by @maximmaxim345 in #2737)
- Add support for using HA Cloud ICE servers for remote access (by @marcelveldt in #2738)
- Make authentication case insensitive (by @MarvinSchenkel in #2742)
- Add volume control to Spotify connect (by @MarvinSchenkel in #2750)
- Add codec setting for Sendspin over Cast (by @maximmaxim345 in #2790)
- Add DTLS pinning (by @arturpragacz in #2796)
- Allow configuration of developer token in Spotify provider (by @marcelveldt in #2818)
- Add user filter to scrobble providers (by @marcelveldt in #2822)
- Enable immediate Sendspin sync delay changes for Cast players (by @maximmaxim345 in #2823)
- Add a more smarter way to resume a player with empty queue (by @marcelveldt in #2827)
🐛 Bugfixes
- Fix library query with random order and improve maintainability (by @maximmaxim345 in #2270)
- Attempt to fix "This Device" disappearing and reappearing on Firefox (by @maximmaxim345 in #2271)
- Catch invalid replaygain tag values (by @OzGav in #2282)
- Fix cyclic import in Chromecast Provider (by @maximmaxim345 in #2296)
- Sort audiobook chapter files based on disk number (by @jamiethecat in #2302)
- Fix broken state updates for SnapCast (by @maximmaxim345 in #2305)
- Update librespot binaries (by @OzGav in #2306)
- Fix player grouping (by @maximmaxim345 in #2307)
- Update librespot binaries (by @marcelveldt in #2313)
- Fallback to standard pip for package installs (by @marcelveldt in #2316)
- Fix Spotify CDN issues on playback (by @marcelveldt in #2317)
- Fix issues with dynamically installing packages into the running server (by @marcelveldt in #2318)
- Fix playback with the Web Player for iOS devices (by @maximmaxim345 in #2319)
- Fix album info being lost for non-library items (by @OzGav in #2330)
- Disable new PO token generation to avoid warnings in the logs. (by @MarvinSchenkel in #2334)
- Fix stop command on some Home Assistant players (by @jeblair in #2336)
- Fixes for the squeezelite provider after refactor (by @marcelveldt in #2338)
- Fix recursion issue after MusicCast Player Refactor (by @fmunkes in #2340)
- Fix missing file breaks queue (by @OzGav in #2341)
- Add Atomic Port Validation and Cleanup to Squeezelite Provider (by @OzGav in #2352)
- Some small follow-up fixes after Players controller refactor (by @marcelveldt in #2362)
- Fix group volume and player state after Players controller refactor (by @maximmaxim345 in #2364)
- Strip off Radio Paradise enhanced title text (by @OzGav in #2369)
- Fix snapcast grouping after the player model refactor (by @maximmaxim345 in #2372)
- Fix
RuntimeErrorin Chromecast player creation (by @maximmaxim345 in #2382) - Fix saving of player settings on powered off players (by @maximmaxim345 in #2383)
- Don't remove players on load in Home Assistant Player Provider (by @maximmaxim345 in #2387)
- Fix issues when disabling a player provider (by @maximmaxim345 in #2388)
- Radio Paradise Fix broken monochrome image (by @OzGav in #2390)
- Fix groups after the player model refactor (by @maximmaxim345 in #2391)
- Fix audiobook related controller bugs (by @OzGav in #2412)
- Several small (typing) fixes for the Deezer provider (by @OzGav in #2413)
- Fix pulling ARD Audiothek subscriptions and ordering of podcasts with many episodes (by @jfeil in #2423)
- gpodder/ itunes/ rssfeed: fix bad header for certain podcasts (by @fmunkes in #2425)
- More grouping fixes after the player refactor (by @maximmaxim345 in #2429)
- Various Playergroup fixes (by @marcelveldt in #2444)
- Fix 403 error on podcast playback (by @OzGav in #2455)
- YTMusic: Limit dynamic playlist to avoid memory leak (by @MarvinSchenkel in #2464)
- Various follow up bugfixes regarding the players refactor (by @marcelveldt in #2466)
- Fix current track not updating correctly (by @marcelveldt in #2468)
- Fix playergroup migration (by @marcelveldt in #2469)
- Fix Sonos airplay ungroup race condition (by @MarvinSchenkel in #2474)
- Various small bugfixes reported in the beta (by @marcelveldt in #2475)
- Fix: Smart fades beat alignment (by @MarvinSchenkel in #2477)
- Fix cache data not persisting cross restarts/updates (by @marcelveldt in #2479)
- Fix issue when a cast stereo pair is added to a cast group (by @jaymunro in #2480)
- Some small fixes for issues found in beta testing (by @marcelveldt in #2482)
- Various small fixes for the Sonos provider (by @marcelveldt in #2485)
- YTMusic: Fix disc/track number + favourite status (by @MarvinSchenkel in #2491)
- Open Subsonic: Fix bookmark positions (by @khers in #2493)
- Fix audiobookshelf playback (by @tsipinakis in #2494)
- Support multiple accounts in the home screen recommendations for Tidal (by @jozefKruszynski in #2496)
- fix: audiobookshelf: authenticate not necessary in streamdetails (by @fmunkes in #2497)
- Fix typo (by @OzGav in #2499)
- Fix random chapter skipping (by @tsipinakis in #2506)
- Fix for Bluesound multizone devices (by @marcelveldt in #2511)
- Add dynamic chapter url retrieval solution to ABS (by @marcelveldt in #2513)
- Plex: Use container_start and container_size for pagination (by @ferges123 in #2520)
- Fix Sonos S1 provider after player refactor (by @MarvinSchenkel in #2523)
- Fix recursion loop in fake volume mute control (by @OzGav in #2530)
- YTM: Also install default ytdlp dependencies (by @MarvinSchenkel in #2534)
- Fix various issues with streaming (e.g. on Sonos devices) (by @marcelveldt in #2536)
- Squeezelite: Remove volume mute PlayerFeature (by @OzGav in #2537)
- Fix various issues with Sonos and AirPlay playback (by @marcelveldt in #2543)
- MusicCast: Fix ungroup & discovery (by @fmunkes in #2545)
- Fix several edge cases for streaming (with crossfade enabled) (by @marcelveldt in #2547)
- Fix filesystem SMB provider (by @marcelveldt in #2552)
- Fix recursion when grouping players (by @MarvinSchenkel in #2564)
- Fix Squeezelite sample rate for multi client streams (by @OzGav in #2565)
- Fix buffered generator hang by ensuring None sentinel delivery (by @maximmaxim345 in #2566)
- Fix custom name & image for manually added radio URL's (by @OzGav in #2583)
- Fix for some HLS radio streams playback (by @OzGav in #2585)
- Add missing enforced flow mode config entry for Resonate (by @maximmaxim345 in #2587)
- Enforce flow mode when player does not support enqueueing (by @MarvinSchenkel in #2595)
- fix: abs - discarded progress (by @fmunkes in #2598)
- Fix japanese language code (by @MarvinSchenkel in #2599)
- Fixed various issues with (plugin)sources (by @marcelveldt in #2600)
- Fix deadlock when trying to join a paused Airplay player to a group (by @MarvinSchenkel in #2602)
- Fix Spotify streaming (by @marcelveldt in #2603)
- fix: abs: another in progress fix (by @fmunkes in #2605)
- fix: MusicCast - non-existing player in zone handling (by @fmunkes in #2606)
- Fix UGP member detection in
get_stream(by @maximmaxim345 in #2617) - Added deno for YTMusic Provider (by @Dnny44 in #2636)
- fix: tracks tab not being populated (by @anatosun in #2637)
- Plex: Fix collision in cache keys (by @anatosun in #2638)
- Fix: Handle non-UTF8 .lrc files gracefully to prevent playback blocking (by @OzGav in #2640)
- fix: abs progress (again!) (by @fmunkes in #2641)
- Fix squeezelite sync group source selection (by @OzGav in #2642)
- Fix DLNA player showing external source instead of MA queue (by @OzGav in #2648)
- Disable Zone Handling if needed for MusicCast players (by @fmunkes in #2650)
- fix(tidal): auth refresh time diff (by @jozefKruszynski in #2653)
- Fix Chromecast volume rounding bug (by @OzGav in #2656)
- Fix TypeError when caching browse results with Sequence return type (by @OzGav in #2657)
- Disallow malicious playlist updates (by @MarvinSchenkel in #2661)
- fix(bbc_sounds): Fix error when fetching podcast episodes (by @kieranhogg in #2677)
- Fix squeezelite UnboundLocalError exception when playing a plugin source. (by @sprocket-9 in #2678)
- Plex Connect: fixed group volume report (by @anatosun in #2683)
- Fix snapcast crash by copying control.py to plugins directory (by @OzGav in #2685)
- fix(bbc_sounds): Handle library exception more gracefully (by @kieranhogg in #2686)
- fix(bbc_sounds): Reorder menu API calls so only used by auth users (by @kieranhogg in #2687)
- BBC Sounds: Unauthenticated might see blank station list (by @kieranhogg in #2689)
- BBC Sounds: Fix Radio 4 station (by @kieranhogg in #2696)
- ABS: fix for schema issue (by @fmunkes in #2701)
- Airplay2 improvements (by @bradkeifer in #2702)
- Spotify connect: Fix sudden volume change when session starts (by @MarvinSchenkel in #2704)
- Spotify Connect: Fix UI not updating when MA starts playing an item (by @MarvinSchenkel in #2705)
- Tidal: fix for sync returned no proper data (by @jozefKruszynski in #2707)
- fix(tidal): media metadata None fix (by @jozefKruszynski in #2711)
- Fix for GET /all RTSP response handler in AirPlay (by @bradkeifer in #2714)
- fix(jellyfin): Add defensive checks for missing audio metadata (by @ericmammolenti in #2728)
- Spotify connect improvements (by @MarvinSchenkel in #2733)
- Add stub for GenreController (by @MarvinSchenkel in #2734)
- Fix sync group losing child member across MA restarts (by @MarvinSchenkel in #2736)
- A few bugfixes to auth manager after beta reports (by @marcelveldt in #2744)
- Adjust minimum username length to 2 characters (by @marcelveldt in #2746)
- Fix queue not proceeding to next track for squeezelite groups (by @MarvinSchenkel in #2749)
- Fix race condition when transitioning from plugin source (by @sprocket-9 in #2758)
- Handle more cases of instance steering (by @marcelveldt in #2762)
- Fixes for multiple instances of the same provider (by @marcelveldt in #2765)
- Use
aiosendspinfor finding thePyAVversion in the base image (by @maximmaxim345 in #2767) - Add static group members on every
play_mediacall (by @maximmaxim345 in #2769) - Remove unused Sendspin Player Options (by @maximmaxim345 in #2771)
- Fix race condition when Sendspin player reconnect (by @maximmaxim345 in #2772)
- Fix metadata hanging when flow mode is enforced. (by @MarvinSchenkel in #2778)
- Bump
aiosendspinto fix radio playback (by @maximmaxim345 in #2779) - Fix race condition in Airplay stream cleanup (by @MarvinSchenkel in #2780)
- Add timeout parameter to ABS Provider connection (by @fmunkes in #2782)
- BBC Sounds: Fix duplicated stations in listen live menu (by @kieranhogg in #2788)
- Fix changing of Sendspin over Cast settings (by @maximmaxim345 in #2791)
- Error when Sendspin over Cast fails (by @maximmaxim345 in #2792)
- Fix AirPlay playback cuts of last few seconds of playback (by @marcelveldt in #2793)
- Fix race condition for resume after announcements (by @MarvinSchenkel in #2798)
- Sendspin fixes and improvements (by @maximmaxim345 in #2800)
- Require HA admin user to finish setup on Ingress (by @marcelveldt in #2801)
- Adjust duration match with ISRC (by @OzGav in #2806)
- Sendspin fixes (by @maximmaxim345 in #2810)
- abs: fix: remove playlog sync during provider load (by @fmunkes in #2817)
- Fix sendspin mDNS name (by @maximmaxim345 in #2819)
- Bump aiosendspin to fix metadata clear edge case (by @maximmaxim345 in #2824)
- (Roku) Media Assistant provider: bug fixes / cleanup (by @MedievalApple in #2828)
- Close old sendspin connections (by @maximmaxim345 in #2831)
🎨 Frontend Changes
- Add the provider type on items on search (by @stvncode in #1174)
- Lokalise translations update (by @github-actions[bot] in #1185)
- Change the add provider page for a modal (by @stvncode in #1186)
- Implement control of other sources playing on a player (by @marcelveldt in #1195)
- Volume slider tweaks (by @stvncode in #1194)
- Lokalise translations update (by @github-actions[bot] in #1196)
- Lokalise translations update (by @github-actions[bot] in #1209)
- Lokalise translations update (by @github-actions[bot] in #1208)
- Lokalise translations update (by @github-actions[bot] in #1202)
- Last update for the slider (by @stvncode in #1210)
- Fix validation for dropdowns when the selection value is 0 (by @OzGav in #1225)
- Add authentication support (by @stvncode in #1226)
- Implement new toaster and remove the old one (by @stvncode in #1229)
- Add a way to copy the token after his creation (by @stvncode in #1230)
- Remove sync button for media items (by @stvncode in #1227)
- Fix content hidden for core settings server information (by @stvncode in #1228)
- Handle login natively in the Vue app (by @marcelveldt in #1231)
- Add CNAME file for custom domain (app.music-assistant.io) (by @marcelveldt in #1232)
- Lokalise translations update (by @github-actions[bot] in #1245)
- Refactor the player settings page (by @stvncode in #1247)
- Update the ui of remote access (by @stvncode in #1250)
- Fix some redirect issues and some alignments (by @stvncode in #1252)
- refactor: remove builtin player (in favor of sendspin) (by @maximmaxim345 in #1257)
- Lokalise: Translations update (by @marcelveldt in #1258)
- Add the possibility to switch from listview to thumbs for players and providers (by @stvncode in #1259)
- Lokalise translations update (by @github-actions[bot] in #1266)
- Update onboarding flow (by @stvncode in #1267)
- Add flac and opus support to the Sendspin Web Player (by @maximmaxim345 in #1268)
- Sendspin Web Player and notification fixes (by @maximmaxim345 in #1270)
- Add DTLS pinning (by @arturpragacz in #1271)
- Lokalise: Translations update (by @marcelveldt in #1275)
- Change icons for player (by @stvncode in #1295)
- Lokalise translations update (by @github-actions[bot] in #1298)
- Refacto user avatar and dropdown (by @stvncode in #1305)
- Lokalise: Translations update (by @marcelveldt in #1311)
Other Changes
- Adjust funding.yml to OHF (by @marcelveldt in #2267)
- Fix backport pipeline issues (by @MarvinSchenkel in #2272)
- Fix backport workflow to filter out beta/rc tags (by @MarvinSchenkel in #2294)
- Fix issue with filter iterator in ARD MediaThek provider (by @jfeil in #2404)
- Revert "mypy fixes for webserver.py" (by @MarvinSchenkel in #2461)
- ARD Audiothek: Introduce filter of not published episodes to reduce loading times (by @jfeil in #2478)
- Enhance soundtrack indicators (by @OzGav in #2490)
- Subsonic: Add debug statement for resolving cover art (by @khers in #2500)
- Switch docker base images to Debian (by @marcelveldt in #2542)
🧰 Maintenance and dependency bumps
237 changes
- Bump acorn from 6.3.0 to 6.4.1 in /frontend (by @dependabot[bot] in #2)
- Add backport pipeline (by @MarvinSchenkel in #2268)
- Chore(deps): Bump cryptography from 45.0.4 to 45.0.5 (by @dependabot[bot] in #2276)
- Chore(deps): Bump aiohttp from 3.12.13 to 3.12.14 (by @dependabot[bot] in #2281)
- Chore(deps): Bump mypy from 1.15.0 to 1.17.0 (by @dependabot[bot] in #2284)
- Chore(deps): Bump ruff from 0.11.13 to 0.12.4 (by @dependabot[bot] in #2285)
- Chore(deps): Bump certifi from 2025.6.15 to 2025.7.14 (by @dependabot[bot] in #2288)
- Chore(deps): Bump orjson from 3.10.18 to 3.11.1 (by @dependabot[bot] in #2290)
- Chore(deps): Bump ruff from 0.12.4 to 0.12.5 (by @dependabot[bot] in #2291)
- Chore(deps): Bump async-upnp-client from 0.44.0 to 0.45.0 (by @dependabot[bot] in #2292)
- Chore(deps): Bump docker/login-action from 3.4.0 to 3.5.0 (by @dependabot[bot] in #2297)
- Chore(deps): Bump aiohttp from 3.12.14 to 3.12.15 (by @dependabot[bot] in #2298)
- Chore(deps): Bump ruff from 0.12.5 to 0.12.7 (by @dependabot[bot] in #2299)
- Chore(deps): Bump actions/download-artifact from 4 to 5 (by @dependabot[bot] in #2303)
- Split up data and cache with XDG directories (by @jamiethecat in #2304)
- Bump models to 1.1.53 (by @marcelveldt in #2312)
- Chore(deps): Bump liblistenbrainz from 0.5.6 to 0.6.0 (by @dependabot[bot] in #2322)
- Chore(deps): Bump ruff from 0.12.7 to 0.12.8 (by @dependabot[bot] in #2323)
- Chore(deps): Bump pre-commit from 4.2.0 to 4.3.0 (by @dependabot[bot] in #2324)
- Chore(deps): Bump mypy from 1.17.0 to 1.17.1 (by @dependabot[bot] in #2325)
- Chore(deps): Bump cryptography from 45.0.5 to 45.0.6 (by @dependabot[bot] in #2326)
- Chore(deps): Bump actions/checkout from 4 to 5 (by @dependabot[bot] in #2327)
- Spotify refactor (by @OzGav in #2329)
- frontend-2.15.3 (by @music-assistant-machine in #2333)
- Chore(deps): Bump orjson from 3.11.1 to 3.11.2 (by @dependabot[bot] in #2344)
- Chore(deps): Bump certifi from 2025.7.14 to 2025.8.3 (by @dependabot[bot] in #2345)
- Chore(deps): Bump pre-commit-hooks from 5.0.0 to 6.0.0 (by @dependabot[bot] in #2346)
- Chore(deps): Bump ruff from 0.12.8 to 0.12.10 (by @dependabot[bot] in #2355)
- itunes_podcast: add log info if podcast has no feed url (by @fmunkes in #2363)
- Chore(deps): Bump ruff from 0.12.10 to 0.12.11 (by @dependabot[bot] in #2365)
- Chore(deps): Bump orjson from 3.11.2 to 3.11.3 (by @dependabot[bot] in #2366)
- Chore(deps): Bump plexapi from 4.17.0 to 4.17.1 (by @dependabot[bot] in #2367)
- Chore(deps): Bump soco from 0.30.10 to 0.30.11 (by @dependabot[bot] in #2368)
- Chore(deps): Bump ytmusicapi from 1.10.3 to 1.11.1 (by @dependabot[bot] in #2370)
- Chore(deps): Bump alexapy from 1.29.5 to 1.29.8 (by @dependabot[bot] in #2371)
- Chore(deps): Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 in /.github/workflows (by @dependabot[bot] in #2374)
- Chore(deps): Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 (by @dependabot[bot] in #2375)
- Chore(deps): Bump actions/github-script from 7 to 8 (by @dependabot[bot] in #2376)
- Chore(deps): Bump actions/setup-python from 5.6.0 to 6.0.0 (by @dependabot[bot] in #2377)
- Modernise setup script to use uv consistently (by @Crooked-Krokr in #2378)
- Audiobookshelf: Implement new JWT authorization (by @fmunkes in #2379)
- Update builtin player provider icons (by @OzGav in #2380)
- Update builtin music provider icons (by @OzGav in #2381)
- Chore(deps): Bump zeroconf from 0.147.0 to 0.147.2 (by @dependabot[bot] in #2384)
- Chore(deps): Bump pyblu from 2.0.1 to 2.0.5 (by @dependabot[bot] in #2385)
- Chore(deps): Bump ruff from 0.12.11 to 0.12.12 (by @dependabot[bot] in #2386)
- frontend-2.15.4 (by @music-assistant-machine in #2389)
- refactor: Split Radio Paradise provider (by @OzGav in #2394)
- Add command line server startup instructions to the development docs (by @tavva in #2396)
- Bump models to 1.1.55 (by @marcelveldt in #2397)
- Chore(deps): Bump cryptography from 45.0.6 to 45.0.7 (by @dependabot[bot] in #2398)
- Chore(deps): Bump pytest from 8.4.1 to 8.4.2 (by @dependabot[bot] in #2400)
- Chore(deps): Bump pytest-cov from 6.2.1 to 7.0.0 (by @dependabot[bot] in #2401)
- Chore(deps): Bump mypy from 1.17.1 to 1.18.1 (by @dependabot[bot] in #2402)
- Chore(deps): Bump lyricsgenius from 3.6.5 to 3.7.2 (by @dependabot[bot] in #2415)
- Chore(deps): Bump soco from 0.30.11 to 0.30.12 (by @dependabot[bot] in #2416)
- Chore(deps): Bump mypy from 1.18.1 to 1.18.2 (by @dependabot[bot] in #2417)
- Chore(deps): Bump cryptography from 45.0.7 to 46.0.1 (by @dependabot[bot] in #2418)
- frontend-2.16.0 (by @music-assistant-machine in #2422)
- frontend-2.16.1 (by @music-assistant-machine in #2424)
- Update Provider descriptions (by @OzGav in #2428)
- Add or update stage key in manifest.json (by @OzGav in #2431)
- mypy fixes for Spotify provider (by @OzGav in #2436)
- mypy fixes for webserver.py (by @OzGav in #2437)
- mypy fixes for Deezer (by @OzGav in #2438)
- mypy fixes for webserver helper (by @OzGav in #2439)
- Remove unsupported library methods (by @OzGav in #2440)
- Chore(deps): Bump docker/login-action from 3.5.0 to 3.6.0 (by @dependabot[bot] in #2443)
- Chore(deps): Bump pylast from 5.5.0 to 6.0.0 (by @dependabot[bot] in #2446)
- Chore(deps): Bump xmltodict from 0.14.2 to 1.0.2 (by @dependabot[bot] in #2447)
- Chore(deps): Bump ruff from 0.12.12 to 0.13.2 (by @dependabot[bot] in #2448)
- mypy fixes for TuneIn (by @OzGav in #2449)
- mypy fixes for SiriusXM (by @OzGav in #2450)
- mypy fixes for DLNA (by @OzGav in #2451)
- mypy fixes for Hass Players (by @OzGav in #2452)
- mypy fixes for Soundcloud (by @OzGav in #2453)
- Chore(deps): Bump syrupy from 4.9.1 to 5.0.0 (by @dependabot[bot] in #2454)
- Remove enhanced title for RadioParadise (by @OzGav in #2456)
- frontend-2.16.2 (by @music-assistant-machine in #2459)
- frontend-2.16.3 (by @music-assistant-machine in #2467)
- Fix release drafter workflow
latestvalue (by @TheJulianJES in #2470) - frontend-2.16.4 (by @music-assistant-machine in #2471)
- frontend-2.16.5 (by @music-assistant-machine in #2476)
- Fix typo in Spotify Config (by @OzGav in #2481)
- Rework audio cache/buffering (by @marcelveldt in #2483)
- Chore(deps): Bump zeroconf from 0.147.2 to 0.148.0 (by @dependabot[bot] in #2486)
- Chore(deps): Bump cryptography from 46.0.1 to 46.0.2 (by @dependabot[bot] in #2487)
- Chore(deps): Bump certifi from 2025.8.3 to 2025.10.5 (by @dependabot[bot] in #2488)
- Chore(deps): Bump pychromecast from 14.0.7 to 14.0.9 (by @dependabot[bot] in #2489)
- Remove unnecessary excludes (by @OzGav in #2504)
- Update DI.fm images (by @OzGav in #2505)
- Mark Jellyfin as unmaintained (by @OzGav in #2508)
- Reupload ard audiothek icon (by @OzGav in #2509)
- frontend-2.16.6 (by @music-assistant-machine in #2510)
- Chore(deps): Bump aiohttp from 3.12.15 to 3.13.1 (by @dependabot[bot] in #2515)
- Chore(deps): Bump cryptography from 46.0.2 to 46.0.3 (by @dependabot[bot] in #2516)
- Chore(deps): Bump isort from 6.0.1 to 7.0.0 (by @dependabot[bot] in #2517)
- ⬆️ Update music-assistant-frontend to 2.17.2 (by @music-assistant-machine in #2529)
- Plex: Add anatosun as codeowner and change stage to alpha (by @anatosun in #2532)
- ⬆️ Update music-assistant-models to 1.1.63 (by @music-assistant-machine in #2533)
- Chore(deps): Bump actions/checkout from 4 to 5 (by @dependabot[bot] in #2535)
- Update 'Oops' label to 'Page Not Found' in Tidal auth (by @OzGav in #2538)
- Typing fixes for the stream controller (by @OzGav in #2540)
- Chore(deps): Bump actions/checkout from 4 to 5 (by @dependabot[bot] in #2541)
- Player controller mypy fixes (by @OzGav in #2546)
- ⬆️ Update music-assistant-frontend to 2.17.3 (by @music-assistant-machine in #2549)
- ⬆️ Update music-assistant-models to 1.1.64 (by @music-assistant-machine in #2550)
- ⬆️ Update music-assistant-models to 1.1.65 (by @music-assistant-machine in #2553)
- Chore(deps): Bump tomli from 2.2.1 to 2.3.0 (by @dependabot[bot] in #2555)
- Chore(deps): Bump actions/upload-artifact from 4 to 5 (by @dependabot[bot] in #2556)
- Chore(deps): Bump orjson from 3.11.3 to 3.11.4 (by @dependabot[bot] in #2557)
- Chore(deps): Bump actions/download-artifact from 5 to 6 (by @dependabot[bot] in #2558)
- Chore(deps): Bump colorlog from 6.9.0 to 6.10.1 (by @dependabot[bot] in #2560)
- ⬆️ Update music-assistant-frontend to 2.17.4 (by @music-assistant-machine in #2561)
- Bluos default config tweaks (by @Cyanogenbot in #2562)
- ⬆️ Update music-assistant-frontend to 2.17.5 (by @music-assistant-machine in #2563)
- ⬆️ Update music-assistant-frontend to 2.17.6 (by @music-assistant-machine in #2568)
- Typing fixes for the Cache controller (by @OzGav in #2569)
- Typing fixes for the config controller (by @OzGav in #2570)
- mypy fix for metadata.py (by @OzGav in #2573)
- Typing fixes for the Radio media controller (by @OzGav in #2574)
- ⬆️ Update music-assistant-models to 1.1.66 (by @music-assistant-machine in #2576)
- ⬆️ Update music-assistant-models to 1.1.68 (by @music-assistant-machine in #2578)
- ⬆️ Update music-assistant-frontend to 2.17.7 (by @music-assistant-machine in #2579)
- AirPlay Fix line too long (by @OzGav in #2581)
- Typing fixes for the Webserver controller (by @OzGav in #2586)
- Typing fixes for the squeezelite provider (by @OzGav in #2589)
- Chore(deps): Bump pywidevine from 1.8.0 to 1.9.0 (by @dependabot[bot] in #2590)
- Chore(deps-dev): Bump ruff from 0.13.2 to 0.14.3 (by @dependabot[bot] in #2591)
- Chore(deps): Bump liblistenbrainz from 0.6.0 to 0.6.1 (by @dependabot[bot] in #2592)
- Fix CoreController init signature to match model (by @OzGav in #2594)
- Phish.in Remove erroneous provider feature (by @OzGav in #2596)
- Spotify: Refactor search method to reduce complexity (by @OzGav in #2601)
- Typing fixes for the Qobuz provider (by @OzGav in #2610)
- Typing fixes for the player queues controller (by @OzGav in #2611)
- Fix CI by installing all provider's dependencies when linting (by @maximmaxim345 in #2619)
- Chore(deps): Bump aiohttp from 3.13.1 to 3.13.2 (by @dependabot[bot] in #2620)
- Chore(deps-dev): Bump ruff from 0.14.3 to 0.14.4 (by @dependabot[bot] in #2621)
- Typing fix for SiriusXM (by @OzGav in #2623)
- Typing fixes for snapcast (by @OzGav in #2624)
- Typing fixes for artists controller (by @OzGav in #2625)
- Typing fixes for the audiobooks controller (by @OzGav in #2626)
- Typing fixes for the podcasts controller (by @OzGav in #2627)
- Typing fixes for the playlists controller (by @OzGav in #2628)
- Some typing fixes for the music controller (by @OzGav in #2629)
- Types fixes for the Albums Controller (by @OzGav in #2632)
- Typing fixes for the base media controller (by @OzGav in #2633)
- Typing fixes for the tracks controller (by @OzGav in #2635)
- Add type hints to config controller functions (by @marcelveldt in #2639)
- Minor AirPlay tweaks (by @OzGav in #2646)
- Update alexapy requirement to version 1.29.9 (by @michaelansel in #2647)
- Tidal: maintenance improvements (by @jozefKruszynski in #2654)
- ⬆️ Update music-assistant-frontend to 2.17.8 (by @music-assistant-machine in #2655)
- Enable disabled lint rules (by @OzGav in #2658)
- Chore(deps): Bump actions/checkout from 5 to 6 (by @dependabot[bot] in #2659)
- ⬆️ Update music-assistant-models to 1.1.69 (by @music-assistant-machine in #2664)
- ⬆️ Update music-assistant-models to 1.1.70 (by @music-assistant-machine in #2666)
- Chore(deps): Bump alexapy from 1.29.9 to 1.29.10 (by @dependabot[bot] in #2670)
- Chore(deps): Bump certifi from 2025.10.5 to 2025.11.12 (by @dependabot[bot] in #2671)
- Chore(deps-dev): Bump ruff from 0.14.4 to 0.14.6 (by @dependabot[bot] in #2672)
- Chore(deps): Bump mashumaro from 3.16 to 3.17 (by @dependabot[bot] in #2673)
- ⬆️ Update music-assistant-frontend to 2.17.9 (by @music-assistant-machine in #2674)
- Bump ytmusic to 1.11.2 (by @MarvinSchenkel in #2675)
- Chore(deps): Bump actions/setup-python from 6.0.0 to 6.1.0 (by @dependabot[bot] in #2676)
- Add Plex Connect monochrome icon (by @OzGav in #2679)
- ⬆️ Update music-assistant-frontend to 2.17.10 (by @music-assistant-machine in #2680)
- Pre-build PyAV wheel in base image to speed up release builds (by @maximmaxim345 in #2682)
- ⬆️ Update music-assistant-frontend to 2.17.11 (by @music-assistant-machine in #2690)
- ⬆️ Update music-assistant-models to 1.1.71 (by @music-assistant-machine in #2691)
- ⬆️ Update music-assistant-models to 1.1.72 (by @music-assistant-machine in #2693)
- ⬆️ Update music-assistant-frontend to 2.17.12 (by @music-assistant-machine in #2694)
- ⬆️ Update music-assistant-models to 1.1.73 (by @music-assistant-machine in #2697)
- ⬆️ Update music-assistant-frontend to 2.17.13 (by @music-assistant-machine in #2703)
- ⬆️ Update music-assistant-frontend to 2.17.14 (by @music-assistant-machine in #2706)
- ⬆️ Update music-assistant-frontend to 2.17.15 (by @music-assistant-machine in #2708)
- ⬆️ Update music-assistant-models to 1.1.74 (by @music-assistant-machine in #2712)
- ⬆️ Update music-assistant-frontend to 2.17.16 (by @music-assistant-machine in #2713)
- ⬆️ Update music-assistant-frontend to 2.17.17 (by @music-assistant-machine in #2716)
- ⬆️ Update music-assistant-frontend to 2.17.18 (by @music-assistant-machine in #2717)
- ⬆️ Update music-assistant-frontend to 2.17.19 (by @music-assistant-machine in #2718)
- ⬆️ Update music-assistant-frontend to 2.17.20 (by @music-assistant-machine in #2719)
- ⬆️ Update music-assistant-models to 1.1.75 (by @music-assistant-machine in #2720)
- ⬆️ Update music-assistant-frontend to 2.17.21 (by @music-assistant-machine in #2721)
- Bump YTM api to 1.11.3. (by @MarvinSchenkel in #2722)
- Chore(deps-dev): Bump pre-commit from 4.3.0 to 4.5.0 (by @dependabot[bot] in #2723)
- Chore(deps): Bump async-upnp-client from 0.45.0 to 0.46.0 (by @dependabot[bot] in #2724)
- Chore(deps-dev): Bump mypy from 1.18.2 to 1.19.0 (by @dependabot[bot] in #2725)
- Chore(deps): Bump plexapi from 4.17.1 to 4.17.2 (by @dependabot[bot] in #2727)
- ⬆️ Update music-assistant-frontend to 2.17.22 (by @music-assistant-machine in #2729)
- ⬆️ Update music-assistant-frontend to 2.17.23 (by @music-assistant-machine in #2739)
- ⬆️ Update music-assistant-frontend to 2.17.24 (by @music-assistant-machine in #2743)
- ⬆️ Update music-assistant-frontend to 2.17.25 (by @music-assistant-machine in #2745)
- ⬆️ Update music-assistant-frontend to 2.17.26 (by @music-assistant-machine in #2747)
- ⬆️ Update music-assistant-frontend to 2.17.27 (by @music-assistant-machine in #2748)
- Phase out lookup key (by @marcelveldt in #2751)
- refactor: remove builtin player (in favor of sendspin) (by @maximmaxim345 in #2752)
- ⬆️ Update music-assistant-frontend to 2.17.28 (by @music-assistant-machine in #2753)
- ⬆️ Update music-assistant-frontend to 2.17.29 (by @music-assistant-machine in #2754)
- ⬆️ Update music-assistant-models to 1.1.77 (by @music-assistant-machine in #2755)
- ⬆️ Update music-assistant-frontend to 2.17.30 (by @music-assistant-machine in #2756)
- ⬆️ Update music-assistant-models to 1.1.78 (by @music-assistant-machine in #2757)
- ⬆️ Update music-assistant-frontend to 2.17.31 (by @music-assistant-machine in #2759)
- ⬆️ Update music-assistant-models to 1.1.79 (by @music-assistant-machine in #2760)
- ⬆️ Update music-assistant-frontend to 2.17.32 (by @music-assistant-machine in #2761)
- ⬆️ Update music-assistant-frontend to 2.17.33 (by @music-assistant-machine in #2766)
- Potential fix for code injection in github action (by @marcelveldt in #2768)
- Chore(deps): Bump podcastparser from 0.6.10 to 0.6.11 (by @dependabot[bot] in #2774)
- Chore(deps): Bump lyricsgenius from 3.7.2 to 3.7.5 (by @dependabot[bot] in #2775)
- Chore(deps): Bump orjson from 3.11.4 to 3.11.5 (by @dependabot[bot] in #2776)
- ⬆️ Update music-assistant-frontend to 2.17.34 (by @music-assistant-machine in #2777)
- ⬆️ Update music-assistant-frontend to 2.17.35 (by @music-assistant-machine in #2781)
- ⬆️ Update music-assistant-frontend to 2.17.36 (by @music-assistant-machine in #2783)
- ⬆️ Update music-assistant-frontend to 2.17.37 (by @music-assistant-machine in #2784)
- abs: remove use_cache decorator (by @fmunkes in #2786)
- ⬆️ Update music-assistant-frontend to 2.17.38 (by @music-assistant-machine in #2787)
- Remove obsolete builtin_player configurations (by @maximmaxim345 in #2789)
- ⬆️ Update music-assistant-frontend to 2.17.39 (by @music-assistant-machine in #2794)
- Update the Sendspin logo to a new placeholder (by @maximmaxim345 in #2795)
- BBC Sounds: Bump auntie-sounds to 1.1.7 (by @kieranhogg in #2797)
- BBC Sounds: Remove some old NP task cancellation code (by @kieranhogg in #2799)
- ⬆️ Update music-assistant-frontend to 2.17.40 (by @music-assistant-machine in #2802)
- adapt get_playlog_provider_item_ids method of music controller (by @fmunkes in #2804)
- Subsonic: Update py-opensonic (by @khers in #2807)
- ⬆️ Update music-assistant-frontend to 2.17.41 (by @music-assistant-machine in #2808)
- Alexa Player Provider Cleanup (by @alams154 in #2809)
- Chore(deps-dev): Bump ruff from 0.14.6 to 0.14.9 (by @dependabot[bot] in #2813)
- Chore(deps): Bump actions/upload-artifact from 5 to 6 (by @dependabot[bot] in #2815)
- Chore(deps): Bump actions/download-artifact from 6 to 7 (by @dependabot[bot] in #2816)
- ⬆️ Update music-assistant-models to 1.1.82 (by @music-assistant-machine in #2820)
- ⬆️ Update music-assistant-frontend to 2.17.42 (by @music-assistant-machine in #2821)
- Streamline Plugin Source behavior (by @marcelveldt in #2826)
- ⬆️ Update music-assistant-frontend to 2.17.43 (by @music-assistant-machine in #2829)
- ⬆️ Update music-assistant-frontend to 2.17.44 (by @music-assistant-machine in #2830)
- ⬆️ Update music-assistant-models to 1.1.83 (by @music-assistant-machine in #2832)
- ⬆️ Update music-assistant-frontend to 2.17.45 (by @music-assistant-machine in #2833)
- ⬆️ Update music-assistant-frontend to 2.17.46 (by @music-assistant-machine in #2834)
- ⬆️ Update music-assistant-frontend to 2.17.47 (by @music-assistant-machine in #2835)
🙇 Thanks to our contributors
Special thanks to the following contributors who helped with this release:
@ChrisBkt, @Crooked-Krokr, @Cyanogenbot, @Dnny44, @JoProbst, @MarvinSchenkel, @MedievalApple, @OzGav, @Shi-553, @TheJulianJES, @alams154, @anatosun, @arturpragacz, @benklop, @bradkeifer, @brian10048, @cr7pt0gr4ph7, @ericmammolenti, @ferges123, @fmunkes, @jamiethecat, @jaymunro, @jeblair, @jfeil, @jozefKruszynski, @khers, @kieranhogg, @marcelveldt, @math625f, @maximmaxim345, @michaelansel, @miguelangel-nubla, @mtdcr, @robert-alfaro, @robsonke, @sprocket-9, @stvncode, @tavva, @theomega, @tsipinakis, @wjzijderveld