Mobile¶
Maneki's serve command exposes the Subsonic API, so any
Subsonic-compatible mobile app can stream from your library — there's no
Maneki mobile app to install.
This guide walks through the four clients that work well in 2026.
TL;DR¶
- Run
maneki servesomewhere your phone can reach (Tailscale, LAN, or a public URL behind a reverse proxy). - Install one of the apps below.
- Point it at
http(s)://<host>:8765/rest, with the username + password from~/.config/maneki/maneki.toml(orMANEKI_SERVER__USERNAME/MANEKI_SERVER__PASSWORD). - Stream.
Prerequisites¶
The server itself is covered in the serve guide. For mobile the things to double-check are:
- Reachable from the phone. Localhost won't work; the phone needs to
resolve the host. The easiest answer is Tailscale (the phone joins
the same tailnet as the server, then connects to
http://<machine-name>:8765). LAN works too if the phone is on the same Wi-Fi. - Username + password set. The default
admin/adminwill authenticate, but every client persists credentials, so use the same pair you set inmaneki.toml. - HTTPS if leaving the LAN. Subsonic auth is salted-token, but the audio stream is plaintext bytes. Put the server behind a Caddy / Tailscale Funnel / nginx terminator before exposing it on the public internet.
iOS¶
play:Sub¶
Polished, free, supported. Best general-purpose client.
- Install play:Sub from the App Store.
- Settings → Servers → Add Server.
- Fill in:
- Server Address:
http://<host>:8765(no trailing/rest) - Username: from
maneki.toml - Password: from
maneki.toml - Save. play:Sub does the salted-token handshake; if the credentials are right, "Test Connection" succeeds.
- Browse → tap album → play.
Amperfy¶
Free, open source, scrobble-aware. Good if you also use Last.fm.
- Install Amperfy.
- Settings → Server → Add Server. Same fields as above.
- Amperfy defaults to JSON (
f=json); Maneki serves both — no tweak needed.
Android¶
Symfonium¶
Paid (~5 EUR), best-in-class UI.
- Install Symfonium from Play.
- Settings → Sources → Add → Subsonic.
- URL:
http://<host>:8765, plus user + password. - Save → Sync. Syncing pulls a metadata index; subsequent browsing is offline-aware.
DSub¶
Free, open source, the Subsonic veteran. Older UI but rock-solid.
- Install DSub from F-Droid (the Play version is years out of date).
- Settings → Servers → Server 1 → enable + fill in the same fields.
Tempo¶
Free, open source, works on phone + Android Auto.
- Install Tempo from F-Droid or GitHub.
- Login screen takes the same URL + credentials.
Troubleshooting¶
"Could not connect"¶
- Confirm the server is reachable from the phone:
curl http://<host>:8765/rest/ping?u=<user>&p=<password>from a laptop on the same network. - Don't include
/restin the URL field — the apps append it.
"Invalid credentials"¶
- The Subsonic spec uses salted-token auth (
md5(password + salt)), not plain password. All four apps handle this transparently — but if you've setMANEKI_SERVER__PASSWORDto a long random token, occasional clients hash incorrectly. A short alphanumeric password works around this.
"No music shows up"¶
- The server only sees what's under the path you launched it with:
maneki serve /path/to/Music. Verifycurl 'http://<host>:8765/rest/getArtists?u=...&p=...&f=json'returns a non-empty list. - If
getArtistsreturns content but the app's empty, force-rescan inside the app (most have a "Sync" or "Refresh server" action).
Cover art looks low-res¶
- Subsonic apps fetch cover art via
/rest/getCoverArt?id=...&size=N. Maneki serves the original embedded artwork; if your library has small embeds, the upscale is what the app sees. Embed at 1000×1000 via convert for crisp art.
What Maneki doesn't do (yet)¶
- No native iOS / Android app of its own. The Subsonic ecosystem is solid; we'd rather you use a polished third-party client than ship a 1.0 Maneki app that's worse than play:Sub or Symfonium.
- No CarPlay / Android Auto direct. Tempo (Android) supports Android Auto. CarPlay routing on iOS depends on the client; play:Sub works.
- No background download / offline cache support in Maneki itself. Each client handles caching independently — most cache by default.