# Subsonic / OpenSubsonic compatibility VibeSonic aims to eventually implement the Subsonic API (`/rest/*`) and OpenSubsonic extensions. **Phase 1 implements none of this** — it only builds the foundation (database schema, stable IDs, library indexing, streaming, cover art) that the protocol layer will sit on top of in a later phase. This matrix will be filled in as `internal/subsonic` and `internal/opensubsonic` are implemented. For now, every endpoint is "Not yet implemented." ## System | Endpoint | Status | |---|---| | `ping` | Not yet implemented | | `getLicense` | Not yet implemented | ## Browsing (filesystem-style) | Endpoint | Status | Notes | |---|---|---| | `getMusicFolders` | Not yet implemented | `music_folders` table and `internal/database` queries exist | | `getIndexes` | Not yet implemented | `internal/library.ListDirectory` provides the foundation | | `getMusicDirectory` | Not yet implemented | same | ## Browsing (ID3/tag-style) | Endpoint | Status | Notes | |---|---|---| | `getArtists` | Not yet implemented | `database.ListArtists` exists | | `getArtist` | Not yet implemented | `database.ListAlbumsByArtist` exists | | `getAlbum` | Not yet implemented | `database.ListSongsByAlbum` exists | | `getSong` | Not yet implemented | `database.GetSong` exists | | `getGenres` | Not yet implemented | `database.ListGenres` exists | | `getAlbumList` / `getAlbumList2` | Not yet implemented | | | `getRandomSongs` | Not yet implemented | | | `getSongsByGenre` | Not yet implemented | | ## Search | Endpoint | Status | |---|---| | `search3` | Not yet implemented | ## Streaming / media retrieval | Endpoint | Status | Notes | |---|---|---| | `stream` | Not yet implemented | `internal/streaming` provides range-request-aware serving; the web UI's `/stream/{id}` route is the non-Subsonic equivalent used today | | `download` | Not yet implemented | | | `getCoverArt` | Not yet implemented | `internal/coverart` provides discovery + resize cache; the web UI's `/cover-art/{id}` route is the non-Subsonic equivalent used today | | `getLyrics` / `getLyricsBySongId` | Not yet implemented | `lyrics`/`lyrics_lines`/`lyrics_cues` tables exist | | `getAvatar` | Not yet implemented | | ## Playlists | Endpoint | Status | Notes | |---|---|---| | `getPlaylists` | Not yet implemented | `database.ListPlaylistsVisibleToUser` exists; web UI has a playlists page | | `getPlaylist` | Not yet implemented | | | `createPlaylist` | Not yet implemented | | | `updatePlaylist` | Not yet implemented | | | `deletePlaylist` | Not yet implemented | | ## Favorites / ratings / activity | Endpoint | Status | Notes | |---|---|---| | `star` / `unstar` | Not yet implemented | `database.Star`/`Unstar` exist; web UI has favorite buttons | | `setRating` | Not yet implemented | `database.SetRating` exists | | `scrobble` | Not yet implemented | `scrobbles` table exists | | `getStarred` / `getStarred2` | Not yet implemented | | | `getNowPlaying` | Not yet implemented | `now_playing` table + `database.ListNowPlaying` exist | ## Bookmarks / play queue | Endpoint | Status | Notes | |---|---|---| | `getBookmarks` / `createBookmark` / `deleteBookmark` | Not yet implemented | `database` functions exist | | `getPlayQueue` / `savePlayQueue` | Not yet implemented | `database` functions exist | ## Sharing | Endpoint | Status | Notes | |---|---|---| | `getShares` / `createShare` / `updateShare` / `deleteShare` | Not yet implemented | `shares`/`share_items` tables exist | ## Podcasts | Endpoint | Status | Notes | |---|---|---| | `getPodcasts` | Not yet implemented | `podcast_channels`/`podcast_episodes` tables exist | | `createPodcastChannel` / `deletePodcastChannel` | Not yet implemented | | | `downloadPodcastEpisode` / `deletePodcastEpisode` | Not yet implemented | | ## Internet radio | Endpoint | Status | Notes | |---|---|---| | `getInternetRadioStations` | Not yet implemented | `internet_radio_stations` table exists | | `createInternetRadioStation` / `updateInternetRadioStation` / `deleteInternetRadioStation` | Not yet implemented | | ## Users / chat | Endpoint | Status | Notes | |---|---|---| | `getUser` / `getUsers` | Not yet implemented | native web admin has a users page | | `createUser` / `updateUser` / `deleteUser` | Not yet implemented | | | `addChatMessage` / `getChatMessages` | Not yet implemented | `chat_messages` table exists | ## Transcoding | Endpoint | Status | Notes | |---|---|---| | Transcoding profiles (`internal/transcoding`) | Not yet implemented | `transcode_profiles` table exists; Phase 1 only supports direct (non-transcoded) streaming | ## Authentication Phase 1's `/rest/*` authentication (token-based `u`/`t`/`s` or API key) is not yet implemented. When it is, it will authenticate independently of the browser session/CSRF/external-auth flow used by the web UI, per the project's design constraint that external auth must never interfere with native Subsonic client authentication.