Files
vibesonic/docs/subsonic-compatibility.md
T

126 lines
4.8 KiB
Markdown

# 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.