Self-hosting
Run your own Revive ST server so your speakers don't depend on ours.
By default, the app and your speakers use the Revive ST server at api.revivest.app: it stores your presets, and your speakers ask it for their account, presets and stations every time they start. You can run that server yourself, on a computer at home, so your speakers keep working whatever happens to ours.
What you need
- A computer that's always on when your speakers are, with Docker: a NAS, a home server or a Raspberry Pi (64-bit OS). The server image runs on
amd64andarm64. - A fixed address for it on your network, such as
192.168.1.10. Most routers can reserve an address for a device ("DHCP reservation"). - Internet access for the server: TuneIn stations are looked up through TuneIn when they play.
- The Revive ST app on a phone on the same network.
Run the server
With Docker Compose, download the compose file and start it:
curl -O https://raw.githubusercontent.com/pradel/revive-st/main/apps/api/compose.yaml
docker compose up -dOr with Docker alone:
docker run -d --name revive-st --restart unless-stopped \
-p 3000:3000 -v revive-st-data:/data \
ghcr.io/pradel/revive-st-api:latestTo check it's running, open http://192.168.1.10:3000 (with your server's address) in your phone's browser: it shows Revive ST API and the version it runs.
Your accounts and presets are stored in the /data volume, in the database file revivest.db. Back up that volume to keep them.
| Setting | Default | What it does |
|---|---|---|
PORT | 3000 | The port the server listens on inside the container. |
DATABASE_URL | file:/data/revivest.db | Where accounts and presets are stored. |
LOG_LEVEL | info | debug also logs every request the server answers, not only rejected ones (4xx) and errors (5xx). warn and error log less. |
LOG_FORMAT | pretty | json writes one JSON object per line, for log collectors. |
Point the app at your server
In the app, open Settings → Network → Server, enter your server's address, for example http://192.168.1.10:3000, and tap Save. The app checks that a Revive ST server answers there before switching.
Plain http:// only works with an IP address, a .local name or a name without dots (like nas). For any other name, put the server behind a reverse proxy with HTTPS and enter its https:// address.
Configure your speakers
For each speaker, open its settings and tap Configure for Marge API. A speaker set up for another server shows Not configured until you do. The app saves the speaker's presets to your server, points the speaker at it and restarts the speaker. Once it's back, it plays and restores its presets from your server.
A speaker keeps using the server it was configured with until you configure it again, whatever server the app is set to.
Update the server
docker compose pull
docker compose up -dThe server updates its database when it starts. latest is the newest release; to pick a version, use its number as the image tag, like ghcr.io/pradel/revive-st-api:0.1.0. The server's address shows the version it runs.
Tracing (optional)
The server can send a trace of every request it handles, the database queries it runs and the calls it makes to TuneIn and Radio Browser to any OpenTelemetry backend that accepts OTLP over HTTP, such as Jaeger or an OpenTelemetry Collector. Tracing is off unless you set these settings:
| Setting | Example | What it does |
|---|---|---|
OTEL_TRACES_EXPORTER | otlp | Turns tracing on. |
OTEL_EXPORTER_OTLP_ENDPOINT | http://192.168.1.10:4318 | Your backend's OTLP/HTTP address. The server sends traces to /v1/traces on it. |
OTEL_SERVICE_NAME | revive-st | The name the traces are filed under. Required when tracing is on. |
OTEL_EXPORTER_OTLP_HEADERS | authorization=Bearer abc | Optional headers for backends that need a key, as name=value pairs separated by commas. |
Traces are sent as protobuf over HTTP, usually on port 4318; OTLP over gRPC isn't supported. With Docker Compose, add the settings under environment: in the compose file, then run docker compose up -d.
Traces include the paths of the requests your speakers make, and those paths contain your household's account id. Only send them to a backend you trust.
Go back to the Revive ST server
In Settings → Network → Server, tap Use the Revive ST server, then configure each speaker again.
Good to know
- Keep the server running. Speakers fetch their account and presets from it every time they start, and TuneIn and Radio Browser stations play through it. A speaker that starts while the server is down keeps its presets, but can't play those stations until the server is back.
- Keep the server on your home network. Anyone who can reach it and knows your household's account id can read and change your presets, and the account id travels unencrypted on your network. If the computer is also reachable from the internet, publish the port on its home-network address only, for example
"192.168.1.10:3000:3000"in the compose file, or block it with a firewall. - On iOS, the app can only reach a plain
http://server at a local address, which is why other names need HTTPS.