rockbox-library
SQLite database the Subsonic API reads from — there’s no separate scan,
no separate user store, and no extra daemon to manage.
Enabling
Setjellyfin_port in ~/.config/rockbox.org/settings.toml:
rockbox restart. The server is disabled when jellyfin_port
is missing or when subsonic_password is empty — credentials are shared
with the Subsonic side.
Discovery
When enabled, two discovery mechanisms run alongside the HTTP server:- mDNS:
_jellyfin._tcp.local.is advertised on the configured port, with aID=…TXT record matching the server’s stable Jellyfin id. - UDP 7359: the server binds the standard Jellyfin client-discovery
port and answers the literal probe
"Who is JellyfinServer?"with a JSON response containing the server’s LAN URL.
Tested clients
For music, use Finamp (or Amcfy / Symfonium).
Endpoint surface
The server implements enough of the Jellyfin OpenAPI to satisfy the native music clients above. All authenticated routes accept the token viaX-Emby-Token header, Authorization: MediaBrowser Token="…",
or ?api_key=… on streaming URLs. Query parameters work in both
camelCase (?parentId=…) and PascalCase (?ParentId=…); repeated keys
(?includeItemTypes=Audio&includeItemTypes=MusicAlbum) are concatenated.
Item IDs are deterministic dashed UUIDs derived from the native
Artist/Album/Track ids, and round-tripped via a jf_guids lookup
table so subsequent requests resolve back to the right row.
Quick test
What’s not supported
- Video — Rockbox is an audio-only player. Video libraries and the
/Videos/{id}/streamendpoint family are not implemented. - Transcoding — only direct play.
MediaSource.SupportsTranscodingisfalse; clients must support the container natively. - WebSocket notifications (
/socket) — clients fall back to polling/Sessions, which is supported. - Multi-user — there is a single synthetic user matching
subsonic_username. Token storage is real (persisted injellyfin_tokens), but every token belongs to the same user. - Playlists, lyrics, parental ratings, sync, live TV — out of scope.