Documentation Index
Fetch the complete documentation index at: https://docs.sonicverse.eu/llms.txt
Use this file to discover all available pages before exploring further.
Manage all settings through the .env file. Copy .env.example to get started:
The installer (./install.sh) auto-generates secure passwords for Icecast and harbor connections when creating a new .env file. You only need to customize station identity, hostname, and optional integrations.
Station
| Variable | Description | Default |
|---|
STATION_NAME | Station name used in stream metadata, alerts, and the root status page | My Radio Station |
STATION_LOCATION | Station location shown in Icecast server info | Your Country |
STATION_ADMIN_EMAIL | Admin contact email, also displayed on the root status page | admin@example.com |
Icecast
| Variable | Description | Default |
|---|
ICECAST_SOURCE_PASSWORD | Password for Liquidsoap to Icecast connections | Auto-generated |
ICECAST_RELAY_PASSWORD | Password for Icecast relay connections | Auto-generated |
ICECAST_ADMIN_USER | Icecast admin panel username | Required |
ICECAST_ADMIN_PASSWORD | Icecast admin panel password | Required |
ICECAST_HOSTNAME | Public hostname where listeners access streams | stream.example.com |
ICECAST_MAX_LISTENERS | Maximum concurrent listeners across all mount points | 500 |
Since v1.5.3, ICECAST_ADMIN_USER and ICECAST_ADMIN_PASSWORD are required. The Status API and Analytics services will not connect to Icecast admin endpoints without them. The installer auto-generates these values, so existing deployments created with install.sh are unaffected.
Liquidsoap harbor
| Variable | Description | Default |
|---|
HARBOR_PRIMARY_PORT | Port for primary studio input | 8010 |
HARBOR_FALLBACK_PORT | Port for fallback studio input | 8011 |
HARBOR_PASSWORD | Password for studio to Liquidsoap connections | Auto-generated |
SILENCE_THRESHOLD_DB | Silence detection threshold in dB | -40 |
SILENCE_DURATION | Seconds of silence before alerting | 15 |
SSL
| Variable | Description | Default |
|---|
LETSENCRYPT_EMAIL | Email for Let’s Encrypt notifications | admin@example.com |
LETSENCRYPT_STAGING | Set to 1 for staging (test) certificates during initial setup | 0 |
Use staging certificates while testing to avoid hitting Let’s Encrypt rate limits. Change to 0 for production certificates once you have verified everything works.
Alerts
| Variable | Description | Default |
|---|
PUSHOVER_USER_KEY | Pushover user key for notifications (leave empty to disable) | — |
PUSHOVER_APP_TOKEN | Pushover application token (leave empty to disable) | — |
Status panel
The status panel is disabled by default. Set ENABLE_STATUS_PANEL=1 to run the status API service and expose /api/ routes through nginx. See the status panel guide for setup instructions.
| Variable | Description | Default |
|---|
ENABLE_STATUS_PANEL | Set to 1 to run the status API and expose /api/ through nginx | 0 |
STATUS_PANEL_CORS_ORIGIN | Dashboard URL(s) for CORS, comma-separated | — |
STATUS_PANEL_HOST | Bind host for the status API server. Auto-detects the container IP inside Docker when unset. | 127.0.0.1 |
STATUS_PANEL_WRITE_ROLES | Comma-separated Appwrite team roles allowed to write/modify via panel | owner,admin |
STATUS_PANEL_ALLOW_RISKY_COMMANDS | Allow dangerous commands like container restart in panel (0 = deny, 1 = allow) | 0 |
Only enable STATUS_PANEL_ALLOW_RISKY_COMMANDS if you understand the security implications. This allows the dashboard to restart Docker containers and trigger SSL renewal remotely.
Appwrite authentication
The status panel uses Appwrite for team-based authentication. These variables are only required when the status panel is enabled and you want authenticated access.
| Variable | Description | Default |
|---|
APPWRITE_ENDPOINT | Appwrite API endpoint (recommended: https://cloud.appwrite.io/v1) | — |
APPWRITE_PROJECT_ID | Appwrite project ID | — |
APPWRITE_TEAM_ID | Appwrite team ID (required when APPWRITE_PROJECT_ID is set; only members get panel access) | — |
APPWRITE_TEAM_ID is required whenever APPWRITE_PROJECT_ID is set. The installer enforces this and prompts you for the team ID if it is missing. Without a team ID, the status panel will not authenticate any users.
PostHog analytics
| Variable | Description | Default |
|---|
POSTHOG_API_KEY | PostHog project API key (leave empty to disable) | — |
POSTHOG_HOST | PostHog instance URL | https://app.posthog.com |
POSTHOG_POLL_INTERVAL | How often to poll Icecast for listener stats, in seconds | 30 |
Leave POSTHOG_API_KEY empty to disable analytics entirely.