SETUP · 05
Updates & help.
How to pull a new version, rebuild only what changed, and what to check when the stream goes quiet. Liquidsoap and the Controller COPY source at build time, so docker compose restart does not pick up code changes. You need up -d --build.
KEEPING IT UP TO DATE
Rebuild only what changed.
| If this changed | Rebuild |
|---|---|
controller/src/** | controller |
liquidsoap/radio.liq | broadcast |
web/** | web (prod) · hot-reload (dev) |
docker/Caddyfile | just restart caddy (mounted) |
docker-compose*.yml | up -d (compose decides) |
| README / TODO / docs | nothing |
A manual deploy usually looks like this: pull, rebuild what changed (controller and web here), then check the stream is back.
git pull --ff-only
docker compose up -d --build controller web
./scripts/health-check.shIf you installed via curl cli.getsubwave.com | sh, two commands cover the two things you might want to update:
subwave updatesubwave self-updatesubwave update wraps docker pull + up -d and knows which compose file is live. self-update re-runs the installer in place.
If you're pulling prebuilt images from ghcr.io/perminder-klair/subwave-* without the CLI, the rebuild step becomes a pull (pin SUBWAVE_VERSION in .env first):
docker compose pull
docker compose up -dSame flow on docker-compose.byo.yml, just swap the file flag.
The subwave-deploy skill at .claude/skills/subwave-deploy/ does the whole loop for you: pull, work out what changed, rebuild only the affected services, and confirm the stream is healthy. Open a Claude Code session in the repo and say "deploy subwave" or "pull and restart".
WHEN THINGS GO WRONG
Logs are the source of truth.
- Controller logs —
docker compose logs -f controller - Broadcast logs (icecast + liquidsoap) —
docker compose logs -f broadcast - Operator console —
npm startopens a menu. Its doctor option runs a diagnostic sweep, and logs tails any service without the long compose flags. - Built-in diagnostics — open /admin/debug for a live look at every state file, recent LLM calls, Icecast status, and the last 100 lines of Liquidsoap.
- Source code — github.com/perminder-klair/subwave ↗. File an issue, or read the CLAUDE.md for architecture notes.
RUNNING THE STATION
Now shape the DJ.
Installation is just the start. Tuning personas, scheduling shows, picking an LLM provider, and managing jingles all happen in the admin console. That's covered in the manual's Admin & Settings page.