VOL. I  ·  NO. 
SUB/WAVE
ON AIR

SETUP · 05

Updates & help.

Pulling a new version, rebuilding 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 changedRebuild
controller/src/**controller
liquidsoap/radio.liqbroadcast
web/**web (prod) · hot-reload (dev)
docker/Caddyfilejust restart caddy (mounted)
docker-compose*.ymlup -d (compose decides)
README / TODO / docsnothing

Typical manual deploy:

git pull --ff-only
# rebuild only what changed (example: controller + web)
docker compose up -d --build controller web
# then verify
./scripts/health-check.sh
USING THE STANDALONE CLI?

If you installed via curl cli.getsubwave.com | sh, two commands cover both update axes:

subwave update         # pull new images, recreate changed services
subwave self-update    # replace the CLI binary itself with the latest release

subwave update is a docker pull + up -d wrapper that knows which compose file is live; self-update re-runs the installer in place.

RUNNING FROM GHCR IMAGES (NO CLI)?

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, then:
docker compose pull
docker compose up -d

Same flow if you're on docker-compose.byo.yml — just swap the file flag.

OR LET CLAUDE CODE DO IT

The subwave-deploy skill at .claude/skills/subwave-deploy/ automates the whole "pull, detect what changed, rebuild only the affected services, verify health" loop. 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 start opens a menu whose doctor option runs a full diagnostic sweep and logs tails any service without the long compose flags.
  • Built-in diagnostics — open /admin/debug for a live snapshot of every state file, recent LLM calls, Icecast status, and the most recent 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 the start. Tuning the personas, scheduling shows, choosing the LLM provider, and managing jingles all happen in the admin console — that's covered in the manual's Admin & Settings page.