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
"""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)
{
"type": "player",
"domain": "airplay",
+ "stage": "stable",
"name": "AirPlay",
"description": "Support for players that support the AirPlay protocol.",
"codeowners": ["@music-assistant"],
{
"type": "music",
"domain": "apple_music",
+ "stage": "beta",
"name": "Apple Music",
"description": "Support for the Apple Music streaming provider in Music Assistant.",
"codeowners": ["@MarvinSchenkel"],
{
"type": "music",
"domain": "audible",
+ "stage": "stable",
"name": "Audible",
"description": "Audible provider",
"codeowners": ["@ztripez"],
{
"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
}
{
"type": "player",
"domain": "bluesound",
+ "stage": "beta",
"name": "Bluesound",
"description": "BluOS Player provider for Music Assistant.",
"codeowners": ["@cyanogenbot"],
{
"type": "music",
"domain": "builtin",
+ "stage": "stable",
"name": "Music Assistant",
"description": "Built-in/generic provider that handles generic urls and playlists.",
"codeowners": ["@music-assistant"],
{
"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,
{
"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."]
}
{
"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
{
"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,
{
"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"],
{
"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"],
{
- "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"
+}
{
"type": "player",
"domain": "fully_kiosk",
+ "stage": "stable",
"name": "Fully Kiosk Browser",
"description": "Support for media players from the Fully Kiosk app.",
"codeowners": ["@music-assistant"],
{
"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
}
{
"type": "plugin",
"domain": "hass",
+ "stage": "stable",
"name": "Home Assistant",
"description": "Connect Music Assistant to Home Assistant.",
"codeowners": ["@music-assistant"],
{
"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"],
{
"type": "music",
"domain": "ibroadcast",
+ "stage": "stable",
"name": "iBroadcast",
"description": "Support for the iBroadcast streaming provider in Music Assistant.",
"codeowners": ["@robsonke"],
{
"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
{
"type": "music",
"domain": "jellyfin",
+ "stage": "stable",
"name": "Jellyfin Media Server Library",
"description": "Support for the Jellyfin streaming provider in Music Assistant.",
"codeowners": ["@lokiberra", "@Jc2k"],
{
"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"],
{
"type": "plugin",
"domain": "listenbrainz_scrobble",
+ "stage": "beta",
"name": "ListenBrainz Scrobbler",
"description": "Scrobble your music to ListenBrainz",
"codeowners": ["@music-assistant"],
{
"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"],
{
"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"],
{
"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
}
{
"type": "music",
"domain": "nugs",
+ "stage": "beta",
"name": "Nugs.net",
"description": "Nugs.net support for Music Assistant: Live Music provider.",
"codeowners": ["@brian10048"],
{
"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
}
{
"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"],
{
"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
}
{
"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
}
{
"type": "music",
"domain": "qobuz",
+ "stage": "stable",
"name": "Qobuz",
"description": "Qobuz support for Music Assistant: Lossless (and hi-res) Music provider.",
"codeowners": ["@music-assistant"],
{
"type": "music",
"domain": "radiobrowser",
+ "stage": "stable",
"name": "RadioBrowser",
"description": "Search radio streams from RadioBrowser in Music Assistant.",
"codeowners": ["@gieljnssns"],
{
"type": "music",
"domain": "siriusxm",
+ "stage": "stable",
"name": "SiriusXM",
"description": "Support for the SiriusXM streaming radio provider in Music Assistant.",
"codeowners": ["@btoconnor"],
{
"type": "player",
"domain": "snapcast",
+ "stage": "stable",
"name": "Snapcast",
"description": "Support for snapcast server and clients.",
"codeowners": ["@SantiagoSotoC"],
{
"type": "player",
"domain": "sonos",
+ "stage": "stable",
"name": "SONOS",
"description": "SONOS Player provider for Music Assistant.",
"codeowners": ["@music-assistant"],
{
"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
{
"type": "music",
"domain": "soundcloud",
+ "stage": "stable",
"name": "Soundcloud",
"description": "Support for the Soundcloud streaming provider in Music Assistant.",
"codeowners": ["@domanchi", "@gieljnssns"],
{
"type": "music",
"domain": "spotify",
+ "stage": "stable",
"name": "Spotify",
"description": "Support for the Spotify streaming provider in Music Assistant.",
"codeowners": ["@music-assistant"],
{
"type": "plugin",
"domain": "spotify_connect",
+ "stage": "alpha",
"name": "Spotify Connect",
"description": "Add Spotify Connect support to ANY Music Assistant player.",
"codeowners": ["@music-assistant"],
{
"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"],
{
"type": "plugin",
"domain": "subsonic_scrobble",
+ "stage": "beta",
"name": "Subsonic Scrobbler",
"description": "Report your music playback back to Subsonic server",
"codeowners": ["@clusters"],
{
"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"],
{
"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"],
{
"type": "music",
"domain": "tidal",
+ "stage": "stable",
"name": "Tidal",
"description": "Support for the Tidal streaming provider in Music Assistant.",
"codeowners": ["@jozefKruszynski"],
{
"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"],
{
"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
}
"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",
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