Run a Subsonic media server on your Android device — stream your music library across profiles without duplicating a single file.
Android's profile isolation is great for privacy, but it creates a frustrating problem for music lovers: your Private Space can't see files in your main profile's storage, and vice versa.
The usual workarounds are painful — copy your library to both profiles (wasteful), use a cloud service (requires internet, costs money, bad for privacy), or give up and just use one profile for music.
AudioBridge takes a different approach. It runs Gonic, a lightweight Subsonic-compatible media server, as a foreground service on your main profile. Any Subsonic-compatible music app running in your Private Space can then connect to it over localhost and stream your full library — no copying, no cloud, no compromises.
This is especially well-suited for GrapheneOS, where Private Space is a first-class security feature and storage isolation is strict by design.
It also makes a great use for an old Android device — load it up with music, plug it in, and it becomes an always-on Subsonic server for your whole home network.
- Single music library, any profile — your files live in one place; every profile streams from them
- Subsonic-compatible — works with any Subsonic/OpenSubsonic client (I use Symfonium)
- Runs as a foreground service — persists across app restarts and screen locks
- Sync with Private Space — optional mode that automatically starts the server when Private Space is unlocked and stops it when locked
- Fully offline — no accounts, no cloud, no internet required
- Configurable listen address — default
0.0.0.0:4747 - Configurable directories — set custom paths for your music, cache, database, and podcast folders
- Built-in web UI — browse your library and manage Gonic settings directly from the app's Web tab
- Minimal, purpose-built — no telemetry, no ads, no unnecessary permissions beyond what the server needs
- AudioBridge bundles the Gonic binary (compiled for ARM64) and extracts it to app storage on first run.
- When you enable the toggle, it launches Gonic via a foreground service with your configured directories and listen address.
- Gonic indexes your music directory and exposes a Subsonic API on the chosen port.
- Any Subsonic client — running in Private Space, main profile, or even another device on the same network — can connect and stream.
The server runs entirely on-device. No traffic ever leaves your phone unless you explicitly expose it on a network interface that's reachable externally.
- Android 12+ (API 31)
- A Subsonic-compatible music client to stream with
- Install AudioBridge on your main profile.
- Grant storage permission when prompted (
All files access— or use storage scopes if supported by your OS). - Set your Music directory to wherever your library lives (e.g.
/storage/emulated/0/Music). - The Cache, Database, and Podcast directories default to app-private storage and usually don't need changing. (May need to change if using storage scopes)
- Toggle Gonic Server on. The status indicator will turn green when the server is running.
- In your Subsonic client (in Private Space or elsewhere), add a server:
- URL:
http://localhost:4747 - Username:
admin - Password:
admin - (Change credentials via the Gonic web UI in the Web tab after first run)
- URL:
To prevent Android from killing the service or interfering with boot start, configure the following in your device's App Info page for AudioBridge:
- Battery → Background usage: set to Unrestricted. Without this, Android may kill the foreground service under memory pressure or after the screen has been off for a while.
- Remove app if unused: disable this. If enabled, Android can revoke permissions and disable the app after a period of inactivity, which will break boot start and may stop the service unexpectedly.
Enable Sync with Private Space to have AudioBridge automatically start the server when you unlock your Private Space and stop it when you lock it. This keeps the server available exactly when you need it without leaving it running all the time.
For this to survive a reboot, the Unrestricted background usage and Remove app if unused settings above must be configured — otherwise Android may prevent the app from starting at boot.
Any OpenSubsonic-compatible client works. A few good options:
| Client | Platform | Notes |
|---|---|---|
| Symfonium | Android | Polished UI, paid |
| Ultrasonic | Android | F-Droid, open source |
| Tempo | Android | Material You design |
| DSub | Android | F-Droid, battle-tested |
Point any of them at http://localhost:4747 from within the same device (any profile), or your device's LAN IP if streaming from another device.
Releases are built automatically by GitHub Actions when a version tag is pushed:
git tag v1.0.0
git push origin v1.0.0The workflow cross-compiles Gonic, signs the APK, and publishes it to the GitHub Releases page.
Before the first release, add these secrets to your repository under Settings → Secrets and variables → Actions:
| Secret | Value |
|---|---|
RELEASE_KEYSTORE_BASE64 |
Your keystore file, base64-encoded: base64 -i release.keystore |
KEYSTORE_PASSWORD |
Password for the keystore |
KEY_ALIAS |
Alias of the signing key inside the keystore |
KEY_PASSWORD |
Password for the signing key |
To generate a new keystore if you don't have one:
keytool -genkeypair -v \
-keystore release.keystore \
-alias audiobridge \
-keyalg RSA -keysize 2048 \
-validity 10000Keep release.keystore safe and never commit it — all future updates must be signed with the same key.
Prerequisites: Android Studio, Go toolchain (for cross-compiling Gonic)
git clone https://github.com/yourusername/AudioBridge.git
cd AudioBridge
./gradlew assembleReleaseThe Gradle build will cross-compile Gonic for linux/arm64 and bundle it as a native library. Go must be available in your PATH.
| Permission | Why |
|---|---|
MANAGE_EXTERNAL_STORAGE |
Required so Gonic (a subprocess) can read your music directory by direct path |
FOREGROUND_SERVICE |
Keeps the server alive while the app is in the background |
RECEIVE_BOOT_COMPLETED |
Starts the standby service at boot when Sync with Private Space is enabled |
MANAGE_EXTERNAL_STORAGE is the broadest storage permission on Android. It is required because Gonic is a separate subprocess that receives a file path string — it cannot use Android's storage APIs or scoped storage. AudioBridge uses this permission exclusively to point Gonic at your music directory. No files are uploaded, transmitted, or accessed for any other purpose.
- Gonic — lightweight Subsonic-compatible media server by sentriz
- OpenSubsonic — the open Subsonic API standard
MIT
