Introduce (stability/development) stage on providers (#2248)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 24 Jun 2025 11:36:35 +0000 (13:36 +0200)
committerGitHub <noreply@github.com>
Tue, 24 Jun 2025 11:36:35 +0000 (13:36 +0200)
49 files changed:
music_assistant/models/provider.py
music_assistant/providers/airplay/manifest.json
music_assistant/providers/apple_music/manifest.json
music_assistant/providers/audible/manifest.json
music_assistant/providers/audiobookshelf/manifest.json
music_assistant/providers/bluesound/manifest.json
music_assistant/providers/builtin/manifest.json
music_assistant/providers/builtin_player/manifest.json
music_assistant/providers/chromecast/manifest.json
music_assistant/providers/deezer/manifest.json
music_assistant/providers/dlna/manifest.json
music_assistant/providers/fanarttv/manifest.json
music_assistant/providers/filesystem_local/manifest.json
music_assistant/providers/filesystem_smb/manifest.json
music_assistant/providers/fully_kiosk/manifest.json
music_assistant/providers/gpodder/manifest.json
music_assistant/providers/hass/manifest.json
music_assistant/providers/hass_players/manifest.json
music_assistant/providers/ibroadcast/manifest.json
music_assistant/providers/itunes_podcasts/manifest.json
music_assistant/providers/jellyfin/manifest.json
music_assistant/providers/lastfm_scrobble/manifest.json
music_assistant/providers/listenbrainz_scrobble/manifest.json
music_assistant/providers/lrclib/manifest.json
music_assistant/providers/musicbrainz/manifest.json
music_assistant/providers/musiccast/manifest.json
music_assistant/providers/nugs/manifest.json
music_assistant/providers/opensubsonic/manifest.json
music_assistant/providers/player_group/manifest.json
music_assistant/providers/plex/manifest.json
music_assistant/providers/podcastfeed/manifest.json
music_assistant/providers/qobuz/manifest.json
music_assistant/providers/radiobrowser/manifest.json
music_assistant/providers/siriusxm/manifest.json
music_assistant/providers/snapcast/manifest.json
music_assistant/providers/sonos/manifest.json
music_assistant/providers/sonos_s1/manifest.json
music_assistant/providers/soundcloud/manifest.json
music_assistant/providers/spotify/manifest.json
music_assistant/providers/spotify_connect/manifest.json
music_assistant/providers/squeezelite/manifest.json
music_assistant/providers/subsonic_scrobble/manifest.json
music_assistant/providers/test/manifest.json
music_assistant/providers/theaudiodb/manifest.json
music_assistant/providers/tidal/manifest.json
music_assistant/providers/tunein/manifest.json
music_assistant/providers/ytmusic/manifest.json
pyproject.toml
requirements_all.txt

index 6dd596eff020682769c2a0ca5f5131e8bb2a4301..b089a09d040243dcaf0e04dd697f62b48376cd79 100644 (file)
@@ -9,7 +9,7 @@ from music_assistant.constants import CONF_LOG_LEVEL, MASS_LOGGER_NAME
 
 if TYPE_CHECKING:
     from music_assistant_models.config_entries import ProviderConfig
-    from music_assistant_models.enums import ProviderFeature, ProviderType
+    from music_assistant_models.enums import ProviderFeature, ProviderStage, ProviderType
     from music_assistant_models.provider import ProviderManifest
     from zeroconf import ServiceStateChange
     from zeroconf.asyncio import AsyncServiceInfo
@@ -119,6 +119,12 @@ class Provider:
         """Return a (default) instance name postfix for this provider instance."""
         return None
 
+    @property
+    @final
+    def stage(self) -> ProviderStage:
+        """Return the stage of this provider."""
+        return self.manifest.stage
+
     def update_config_value(self, key: str, value: Any, encrypted: bool = False) -> None:
         """Update a config value."""
         self.mass.config.set_raw_provider_config_value(self.instance_id, key, value, encrypted)
index c67cd3ebd0db006869a81a2bf00023805f61fcb1..2007c393d22a345c1e12baf31c6355aedacae02c 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "airplay",
+  "stage": "stable",
   "name": "AirPlay",
   "description": "Support for players that support the AirPlay protocol.",
   "codeowners": ["@music-assistant"],
index 44d212f581dcb8b3f136b33774462d3bcfc8d9e4..4632dac8699e1a628b29b01cf3ae37e16ad207ed 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "apple_music",
+  "stage": "beta",
   "name": "Apple Music",
   "description": "Support for the Apple Music streaming provider in Music Assistant.",
   "codeowners": ["@MarvinSchenkel"],
index bdeb5017ac5ce43c1db30c4831619d551c9eaca6..90f29012cee8101789ab314a53ae275bc1bd3be1 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "audible",
+  "stage": "stable",
   "name": "Audible",
   "description": "Audible provider",
   "codeowners": ["@ztripez"],
index 2c1478368131f3d99d75451c63377dcfff974eae..0dcfe66c388ada89b0e44e094cab4734da3e41e0 100644 (file)
@@ -1,14 +1,11 @@
 {
   "type": "music",
   "domain": "audiobookshelf",
+  "stage": "stable",
   "name": "Audiobookshelf",
   "description": "Audiobookshelf (audiobookshelf.org) as audiobook and podcast provider",
-  "codeowners": [
-    "@fmunkes"
-  ],
-  "requirements": [
-    "aioaudiobookshelf==0.1.7"
-  ],
+  "codeowners": ["@fmunkes"],
+  "requirements": ["aioaudiobookshelf==0.1.7"],
   "documentation": "https://music-assistant.io/music-providers/audiobookshelf",
   "multi_instance": true
 }
index e1888f79e4a1c9b6091323b759cc1e47b4fc2366..4de69fb52a32188be3ee589c044da317fb035c4c 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "bluesound",
+  "stage": "beta",
   "name": "Bluesound",
   "description": "BluOS Player provider for Music Assistant.",
   "codeowners": ["@cyanogenbot"],
index dc4892761cff0c04382d5d6354dad1777e7a2f3d..26c1fbde09bb21217f6cb133194c09f01da425ed 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "builtin",
+  "stage": "stable",
   "name": "Music Assistant",
   "description": "Built-in/generic provider that handles generic urls and playlists.",
   "codeowners": ["@music-assistant"],
index 78d54be78b5668038138c2bb3c458ca7d0881bb5..db99e48a0c0395fbe68f6f84c2a5b20c3c38f605 100644 (file)
@@ -1,11 +1,10 @@
 {
   "type": "player",
   "domain": "builtin_player",
+  "stage": "alpha",
   "name": "Music Assistant",
   "description": "Support for playing to the Music Assistant Web Interface",
-  "codeowners": [
-    "@music-assistant"
-  ],
+  "codeowners": ["@music-assistant"],
   "documentation": "https://music-assistant.io/player-support/builtin/",
   "multi_instance": false,
   "builtin": true,
index e4b650c93ef0ddf19f4df146ce10bec1c5c23324..841b424f4d84ef1370d26e2e90ef71bc03879244 100644 (file)
@@ -1,19 +1,14 @@
 {
   "type": "player",
   "domain": "chromecast",
+  "stage": "stable",
   "name": "Chromecast",
   "description": "Support for Chromecast based players.",
-  "codeowners": [
-    "@music-assistant"
-  ],
-  "requirements": [
-    "PyChromecast==14.0.7"
-  ],
+  "codeowners": ["@music-assistant"],
+  "requirements": ["PyChromecast==14.0.7"],
   "documentation": "https://music-assistant.io/player-support/google-cast/",
   "multi_instance": false,
   "builtin": false,
   "icon": "cast",
-  "mdns_discovery": [
-    "_googlecast._tcp.local."
-  ]
+  "mdns_discovery": ["_googlecast._tcp.local."]
 }
index 81e2bbae26ac586ad168c1a6e53e28e80f576ef3..ce76db8548f83b185c4e548ef82161f7e9f19a18 100644 (file)
@@ -1,9 +1,10 @@
 {
   "type": "music",
   "domain": "deezer",
+  "stage": "stable",
   "name": "Deezer",
   "description": "Support for the Deezer streaming provider in Music Assistant.",
-  "codeowners": ["@arctixdev",  "@micha91"],
+  "codeowners": ["@arctixdev", "@micha91"],
   "documentation": "https://music-assistant.io/music-providers/deezer/",
   "requirements": ["deezer-python-async==0.3.0", "pycryptodome==3.23.0"],
   "multi_instance": true
index 149ffe00369948c81ad5cac1d191638989d76a92..95eee2667ab06c347d52a277596060d05ef51f6b 100644 (file)
@@ -1,14 +1,11 @@
 {
   "type": "player",
   "domain": "dlna",
+  "stage": "stable",
   "name": "UPnP/DLNA Player provider",
   "description": "Support for players that are compatible with the UPnP/DLNA (DMR) standard.",
-  "codeowners": [
-    "@music-assistant"
-  ],
-  "requirements": [
-    "async-upnp-client==0.44.0"
-  ],
+  "codeowners": ["@music-assistant"],
+  "requirements": ["async-upnp-client==0.44.0"],
   "documentation": "https://music-assistant.io/player-support/dlna/",
   "multi_instance": false,
   "builtin": false,
index a39b25932ee9305482258032504ef1c47c023c8d..7c130f273e3858c4a1c2e5e5c5c27548e6f8fc99 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "metadata",
   "domain": "fanarttv",
+  "stage": "stable",
   "name": "fanart.tv",
   "description": "fanart.tv is a community database of artwork for movies, tv series and music.",
   "codeowners": ["@music-assistant"],
index 7c3ea5238581b70ac294df6072f37dafaa4b5a95..c0c1d3cf1f5cd5bbbaf3ce91201880f3348f6144 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "filesystem_local",
+  "stage": "stable",
   "name": "Filesystem (local disk)",
   "description": "Support for music files that are present on a local accessible disk/folder.",
   "codeowners": ["@music-assistant"],
index 53bc716efb4a518a8ed453f387086412fd908a18..5743debd887a18213fc086f4b2e25b89d34e4bc0 100644 (file)
@@ -1,11 +1,12 @@
 {
-    "type": "music",
-    "domain": "filesystem_smb",
-    "name": "Filesystem (remote share)",
-    "description": "Support for music files that are present on remote SMB/CIFS.",
-    "codeowners": ["@music-assistant"],
-    "requirements": [],
-    "documentation": "https://music-assistant.io/music-providers/filesystem/",
-    "multi_instance": true,
-    "icon": "network"
-  }
+  "type": "music",
+  "domain": "filesystem_smb",
+  "stage": "stable",
+  "name": "Filesystem (remote share)",
+  "description": "Support for music files that are present on remote SMB/CIFS.",
+  "codeowners": ["@music-assistant"],
+  "requirements": [],
+  "documentation": "https://music-assistant.io/music-providers/filesystem/",
+  "multi_instance": true,
+  "icon": "network"
+}
index 1059df8ebef28280b0964bd5a7a9ac48cf58974c..b88794968475be4da9eb468096a87ae18ba2e471 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "fully_kiosk",
+  "stage": "stable",
   "name": "Fully Kiosk Browser",
   "description": "Support for media players from the Fully Kiosk app.",
   "codeowners": ["@music-assistant"],
index 903b3cfcd19762732ceebb0967736b959b32ab0f..976c9e6ef94d56593a37d796147bf7a0c95693ad 100644 (file)
@@ -1,11 +1,10 @@
 {
   "type": "music",
   "domain": "gpodder",
+  "stage": "stable",
   "name": "gPodder",
   "description": "gPodder podcast provider",
-  "codeowners": [
-    "@fmunkes"
-  ],
+  "codeowners": ["@fmunkes"],
   "documentation": "https://music-assistant.io/music-providers/gpodder",
   "multi_instance": true
 }
index 4fee6af8eb2a0b37c6c6d39372740d32e6d68856..1b10ef645dc0e68a5e73254a4ee34a9152df77ec 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "plugin",
   "domain": "hass",
+  "stage": "stable",
   "name": "Home Assistant",
   "description": "Connect Music Assistant to Home Assistant.",
   "codeowners": ["@music-assistant"],
index 3c0fae3e0ad14c052cbf973ce0c5753897f2b2ab..f6df2017d77df89e1ebb6b81017ffd5a7be6329d 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "hass_players",
+  "stage": "stable",
   "name": "Home Assistant MediaPlayers",
   "description": "Use (supported) Home Assistant media players as players in Music Assistant.",
   "codeowners": ["@music-assistant"],
index 7eed9405df046b564c3a0e8494671354247db1ed..c16a6cb660b725e99f502a7c908541c832a53220 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "ibroadcast",
+  "stage": "stable",
   "name": "iBroadcast",
   "description": "Support for the iBroadcast streaming provider in Music Assistant.",
   "codeowners": ["@robsonke"],
index 4210726cec3e7b607fcdfebcea1d8c2a395e9e02..f9ff4f23213f3c4e1a03a742ffd2db2859f5dd3b 100644 (file)
@@ -1,11 +1,10 @@
 {
   "type": "music",
   "domain": "itunes_podcasts",
+  "stage": "stable",
   "name": "iTunes Podcast Search",
   "description": "Search podcasts via iTunes API in Music Assistant.",
-  "codeowners": [
-    "@fmunkes"
-  ],
+  "codeowners": ["@fmunkes"],
   "icon": "podcast",
   "documentation": "https://music-assistant.io/music-providers/itunes-podcasts/",
   "multi_instance": false
index d895263f3ab2b0e032595d92011a915b749df694..8bdac1d9228ecf630d62d88f1e667da7c0dd0886 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "jellyfin",
+  "stage": "stable",
   "name": "Jellyfin Media Server Library",
   "description": "Support for the Jellyfin streaming provider in Music Assistant.",
   "codeowners": ["@lokiberra", "@Jc2k"],
index 0778f773c26ad22716c890fda6f456252f7a2449..d1e163b2857efcab5f998d69630fb57b65369453 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "plugin",
   "domain": "lastfm_scrobble",
+  "stage": "beta",
   "name": "LastFM Scrobbler",
   "description": "Scrobble your music to Last.fm and others with a compatible API like Libre.fm",
   "codeowners": ["@music-assistant"],
index f2abd3381974d350bc3afad0db8bbdee7d340fbb..8f2019b24cd445ff990b7fd54234864770b0ca60 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "plugin",
   "domain": "listenbrainz_scrobble",
+  "stage": "beta",
   "name": "ListenBrainz Scrobbler",
   "description": "Scrobble your music to ListenBrainz",
   "codeowners": ["@music-assistant"],
index 7eb8be3344f3d6c98a332318a5841829f63bb946..230f06e1d229f894035d79ee943c58cff07ac221 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "metadata",
   "domain": "lrclib",
+  "stage": "beta",
   "name": "LRCLIB",
   "description": "LRCLIB is a completely free service for finding and contributing synchronized lyrics, with an easy-to-use and machine-friendly API.",
   "codeowners": ["@music-assistant"],
index f3c48835ba1fd90449639209e8d5c44614be35dd..62351d25ebc5ad33f6c0f35eb5f978c29b5e8733 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "metadata",
   "domain": "musicbrainz",
+  "stage": "stable",
   "name": "MusicBrainz",
   "description": "MusicBrainz is an open music encyclopedia that collects music metadata and makes it available to the public. Music Assistant uses MusicBrainz primarily to identify (unique) media items and therefore this provider can not be disabled. However, note that lookups will only be performed if this info is absent locally.",
   "codeowners": ["@music-assistant"],
index ae24d76bb18231d7439fca4f3e1abcc3136e45e3..b4bd6bf18ac6d8a1836cbec98dd47bc36aeaf990 100644 (file)
@@ -1,18 +1,12 @@
 {
   "type": "player",
   "domain": "musiccast",
+  "stage": "beta",
   "name": "MusicCast",
   "description": "MusicCast for Music Assistant",
-  "requirements": [
-    "aiomusiccast==0.14.8",
-    "setuptools>=1.0.0"
-  ],
-  "codeowners": [
-    "@fmunkes"
-  ],
-  "mdns_discovery": [
-    "_http._tcp.local."
-  ],
+  "requirements": ["aiomusiccast==0.14.8", "setuptools>=1.0.0"],
+  "codeowners": ["@fmunkes"],
+  "mdns_discovery": ["_http._tcp.local."],
   "documentation": "https://music-assistant.io/player-support/musiccast",
   "multi_instance": false
 }
index b6f07fbf2d872b94dadf6491d5a1568521cc3975..e52d8a6fd65e5733a69f572bf6120f838b1282ca 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "nugs",
+  "stage": "beta",
   "name": "Nugs.net",
   "description": "Nugs.net support for Music Assistant: Live Music provider.",
   "codeowners": ["@brian10048"],
index cc0d6aaaa79202dc3adf8f882f4d43213a0ec356..6113e18671e8ad27f2683682eeb2b46d1375a204 100644 (file)
@@ -1,14 +1,11 @@
 {
   "type": "music",
   "domain": "opensubsonic",
+  "stage": "stable",
   "name": "OpenSubsonic Media Server Library",
   "description": "Support for OpenSubsonic based streaming providers in Music Assistant.",
-  "codeowners": [
-    "@khers"
-  ],
-  "requirements": [
-    "py-opensonic==7.0.2"
-  ],
+  "codeowners": ["@khers"],
+  "requirements": ["py-opensonic==7.0.2"],
   "documentation": "https://music-assistant.io/music-providers/subsonic/",
   "multi_instance": true
 }
index 9c2da78ebf2f114a61ce32a9be6d68e58834f7da..5e971f184e980d8b786ecacf0028808f73a893aa 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "player_group",
+  "stage": "beta",
   "name": "Playergroup",
   "description": "Create (permanent) groups of your favorite players. \nSupports both syncgroups (to group speakers of the same ecocystem to play in sync) and universal groups to group speakers of different ecosystems to play the same audio (but not in sync).",
   "codeowners": ["@music-assistant"],
index 419abf2f7c7cd5880fa56a384d2f0cfaf74d6c8d..a27207c0cde39cb0986d3503276066e58e68c2a8 100644 (file)
@@ -1,14 +1,11 @@
 {
   "type": "music",
   "domain": "plex",
+  "stage": "unmaintained",
   "name": "Plex Media Server Library",
   "description": "Support for the Plex streaming provider in Music Assistant.",
-  "codeowners": [
-    "@micha91"
-  ],
-  "requirements": [
-    "plexapi==4.17.0"
-  ],
+  "codeowners": ["@micha91"],
+  "requirements": ["plexapi==4.17.0"],
   "documentation": "https://music-assistant.io/music-providers/plex/",
   "multi_instance": true
 }
index 0d79301441d927c543876dadc1dee88d1646ec4b..2676bfe391ec53fcb6bcaab2d3768660ac8c9b50 100644 (file)
@@ -1,11 +1,10 @@
 {
   "type": "music",
   "domain": "podcastfeed",
+  "stage": "stable",
   "name": "Podcast RSS Feed",
   "description": "A parser for podcast rss feeds",
-  "codeowners": [
-    "@saeugetier"
-  ],
+  "codeowners": ["@saeugetier"],
   "documentation": "https://music-assistant.io/music-providers/podcastfeed/",
   "multi_instance": true
 }
index 61f77022efe2bd74dd9e84695bb2e8ed3084c251..871c8722cf9c22e5367f12a8751f213bdcdaadd0 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "qobuz",
+  "stage": "stable",
   "name": "Qobuz",
   "description": "Qobuz support for Music Assistant: Lossless (and hi-res) Music provider.",
   "codeowners": ["@music-assistant"],
index 263a29d583c3633a92b0f36b569e8f267724cd2e..ebea1545b2706211d6c7f0a58e48885fbb2b6b47 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "radiobrowser",
+  "stage": "stable",
   "name": "RadioBrowser",
   "description": "Search radio streams from RadioBrowser in Music Assistant.",
   "codeowners": ["@gieljnssns"],
index d1a36b583ec5ce359f5d76e27790f312c68720a9..3cbc9488281d8f2b19c825687c66aa373babc35d 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "siriusxm",
+  "stage": "stable",
   "name": "SiriusXM",
   "description": "Support for the SiriusXM streaming radio provider in Music Assistant.",
   "codeowners": ["@btoconnor"],
index 82f0d023c9d70065c7d69a89dc067f39504fbd4c..55c311c50f6eb1ff8ea0d03854b8ffc937f66efb 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "snapcast",
+  "stage": "stable",
   "name": "Snapcast",
   "description": "Support for snapcast server and clients.",
   "codeowners": ["@SantiagoSotoC"],
index 6408e8cb33726f64338cfd6f5ab2cae6ec4d0e8b..0b89a28e5ec2cb6f6c4e53fa2cfddde9e262910e 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "sonos",
+  "stage": "stable",
   "name": "SONOS",
   "description": "SONOS Player provider for Music Assistant.",
   "codeowners": ["@music-assistant"],
index 07739470d39b45717eb4ac47ca6fed912fb87ba1..ae6a4759929bb841bc91fb6e5e6fc75594a3588b 100644 (file)
@@ -1,15 +1,11 @@
 {
   "type": "player",
   "domain": "sonos_s1",
+  "stage": "stable",
   "name": "SONOS S1",
   "description": "SONOS Player provider for Music Assistant for the S1 hardware, based on the Soco library. Select this provider if you have Sonos devices on the S1 operating system (with the S1 Controller app)",
-  "codeowners": [
-    "@music-assistant"
-  ],
-  "requirements": [
-    "soco==0.30.10",
-    "defusedxml==0.7.1"
-  ],
+  "codeowners": ["@music-assistant"],
+  "requirements": ["soco==0.30.10", "defusedxml==0.7.1"],
   "documentation": "https://music-assistant.io/player-support/sonos/",
   "multi_instance": false,
   "builtin": false
index ffcf98644c93a794ce4e6c7ff0083f70efbe9287..dad27a4187b826559167dfc412ccd05b6dd0bad0 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "soundcloud",
+  "stage": "stable",
   "name": "Soundcloud",
   "description": "Support for the Soundcloud streaming provider in Music Assistant.",
   "codeowners": ["@domanchi", "@gieljnssns"],
index 01574ac653454294764c7d5ce36b1160474abec8..52d3dacb87579ec5a927c6260a477defed4da8f6 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "spotify",
+  "stage": "stable",
   "name": "Spotify",
   "description": "Support for the Spotify streaming provider in Music Assistant.",
   "codeowners": ["@music-assistant"],
index 9567aa15665af6fba7c4a15ecd53652139b81418..5236767f97cca39e61c0d628b5da75bd252225b0 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "plugin",
   "domain": "spotify_connect",
+  "stage": "alpha",
   "name": "Spotify Connect",
   "description": "Add Spotify Connect support to ANY Music Assistant player.",
   "codeowners": ["@music-assistant"],
index ad7cb55fd80e2c7371094b4e6833a597b71d55f8..d9eda7c8fed777651ffc07fc89da925b2ff62572 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "player",
   "domain": "squeezelite",
+  "stage": "stable",
   "name": "Squeezelite (slimproto players)",
   "description": "Support for Squeezelite, a software-based player implementing the slimproto protocol, which was originally designed for the Squeezebox hardware players. Other players and/or original Squeezebox hardware might also work with this provider, but without any guarantees/support.",
   "codeowners": ["@music-assistant"],
index 702a9193c8f5b14619c09220f53cff4649cf7e5b..7ff71392a8e5cffd7db8ee586484adcd7a8443dd 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "plugin",
   "domain": "subsonic_scrobble",
+  "stage": "beta",
   "name": "Subsonic Scrobbler",
   "description": "Report your music playback back to Subsonic server",
   "codeowners": ["@clusters"],
index a8cd64d7acc3a1ded7d5db6296de1657189822de..53691435c03a3963cbecae8f7cc5affacab27826 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "test",
+  "stage": "alpha",
   "name": "Test / demo provider",
   "description": "Test/Demo provider that creates a collection of fake media items.",
   "codeowners": ["@music-assistant"],
index 9b2eaecf8f28b7bee4e3fb622576ab346928511c..ba1604da99151936e51105dc0fe35e3f4032b599 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "metadata",
   "domain": "theaudiodb",
+  "stage": "stable",
   "name": "The Audio DB",
   "description": "TheAudioDB is a community Database of audio artwork and metadata with a JSON API.",
   "codeowners": ["@music-assistant"],
index c94c2359cbfc999bcddb178bd2b058f8ab14e608..a03aac37ec4547f5212ea8091ea1bd6088c9e58b 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "tidal",
+  "stage": "stable",
   "name": "Tidal",
   "description": "Support for the Tidal streaming provider in Music Assistant.",
   "codeowners": ["@jozefKruszynski"],
index 57429700d662553987b05c25a1a339550a33cf24..157aa5039eed257012174094ca0c2bf14c2dcfee 100644 (file)
@@ -1,6 +1,7 @@
 {
   "type": "music",
   "domain": "tunein",
+  "stage": "stable",
   "name": "Tune-In Radio",
   "description": "Play your favorite radio stations from Tune-In in Music Assistant.",
   "codeowners": ["@music-assistant"],
index eefb914c640d476b04013dac8c5b835558f05f42..7ab36ca5fe02c40c6741d2221fcc229092b131a8 100644 (file)
@@ -1,10 +1,16 @@
 {
   "type": "music",
   "domain": "ytmusic",
+  "stage": "experimental",
   "name": "YouTube Music",
   "description": "Support for the YouTube Music streaming provider in Music Assistant.",
   "codeowners": ["@MarvinSchenkel"],
-  "requirements": ["ytmusicapi==1.10.3", "yt-dlp==2025.6.9", "duration-parser==1.0.1", "bgutil-ytdlp-pot-provider==1.1.0"],
+  "requirements": [
+    "ytmusicapi==1.10.3",
+    "yt-dlp==2025.6.9",
+    "duration-parser==1.0.1",
+    "bgutil-ytdlp-pot-provider==1.1.0"
+  ],
   "documentation": "https://music-assistant.io/music-providers/youtube-music/",
   "multi_instance": true
 }
index 4618f7dc2b87309d982e994c74a872dc0d837a2c..33bf6bd07a8fb9adcabe334c14ea3411eac8e273 100644 (file)
@@ -24,7 +24,7 @@ dependencies = [
   "ifaddr==0.2.0",
   "mashumaro==3.16",
   "music-assistant-frontend==2.15.2",
-  "music-assistant-models==1.1.46",
+  "music-assistant-models==1.1.47",
   "mutagen==1.47.0",
   "orjson==3.10.18",
   "pillow==11.2.1",
index f1166903c979ac540986a8ab732fa33813d12b46..b50e2a2b6a59fd0b0141540bde8d7ee8efd8c6d7 100644 (file)
@@ -30,7 +30,7 @@ ifaddr==0.2.0
 liblistenbrainz==0.5.6
 mashumaro==3.16
 music-assistant-frontend==2.15.2
-music-assistant-models==1.1.46
+music-assistant-models==1.1.47
 mutagen==1.47.0
 orjson==3.10.18
 pillow==11.2.1