# Rode configuration. Copy to .env and edit. Every variable has a sensible # default; you only need to set the ones marked REQUIRED for your setup. # # Secrets belong here (or in your orchestrator's secret store), never in the # image. This file is documentation; .env is git-ignored. Anything set here # is redacted from logs and diagnostics. # ---------------------------------------------------------------- image # Image and tag used by docker-compose.yml. `edge` follows main; use a # version tag on the boat. RODE_IMAGE=ghcr.io/clucraft/rode RODE_TAG=latest # ---------------------------------------------------------------- server # Port published on the host. Inside the container the server always listens # on 8080. RODE_PORT=8080 # trace | debug | info | warn | error | fatal RODE_LOG_LEVEL=info # Where the SQLite database, backups and recordings live. In Docker this is # the rode-data named volume; leave it alone. RODE_DATA_DIR=/data # Days of 1 Hz/10 s telemetry to keep before the nightly prune. RODE_RETENTION_DAYS=180 # Set true when served over TLS (the `tls` compose profile or Tailscale # certs) so the session cookie gets the Secure flag and HSTS is sent. # Leave false on plain http://, or the browser drops the cookie and login # silently fails. RODE_TLS=false # ---------------------------------------------------------------- data source # These override what is stored in Settings, so a compose file alone can pin # the source. Leave unset to configure from the Settings screen instead. # nmea0183-tcp | nmea0183-udp | signalk-ws | simulator | replay RODE_SOURCE=nmea0183-tcp # For nmea0183-tcp / nmea0183-udp: the Cortex hub's address on the boat LAN. # Find it in the Cortex Onboard app. Vesper transponders have historically # served NMEA 0183 on port 39150; verify on your unit. RODE_NMEA_HOST=192.168.1.100 RODE_NMEA_PORT=39150 # For signalk-ws: the Signal K server's WebSocket URL and optional token. # RODE_SIGNALK_URL=ws://signalk.local:3000/signalk/v1/stream # RODE_SIGNALK_TOKEN= # For simulator: which checked-in scenario to play, and the time speed-up. # RODE_SIM_SCENARIO=quiet-night # RODE_SIM_SPEED=1 # Let the simulator press Drop/Set itself (demos only). # RODE_SIM_AUTO_COMMANDS=false # For replay: path to a recording (relative to RODE_DATA_DIR). # RODE_REPLAY_FILE=recordings/2026-09-01-anchored.nmea # ---------------------------------------------------------------- charts (optional `tiles` profile) # MapLibre style.json or TileJSON URL the *phone* can reach. Unset = polar # view only. See docker/tiles/README.md. # RODE_TILES_URL=http://192.168.1.50:8081/data/my-area.json RODE_TILES_PORT=8081 RODE_TILES_PUBLIC_URL=http://localhost:8081 # Raster .mbtiles files for the polar-view background (Settings › Imagery) # are read straight from this directory; no tile server needed. Online # sources cache under /tile-cache. # RODE_MBTILES_DIR=/data/mbtiles # ---------------------------------------------------------------- notifications # Everything here can also be configured per recipient in Settings › # Notifications. Variables set here form an extra recipient named # "environment" that receives every severity. # ntfy: full topic URL (self-hosted or ntfy.sh) and optional access token. # RODE_NTFY_URL=https://ntfy.sh/rode-yourboat-9f2a1c # RODE_NTFY_TOKEN= # Pushover: application token and user/group key. # RODE_PUSHOVER_TOKEN= # RODE_PUSHOVER_USER= # Telegram: bot token from @BotFather and the chat id. # RODE_TELEGRAM_BOT_TOKEN= # RODE_TELEGRAM_CHAT_ID= # Generic webhook (Home Assistant, a relay board, n8n). # RODE_WEBHOOK_URL= # MQTT: retained state on /alarm, /state, /online and # notifications on /notify/. Use the `mqtt` profile's # broker (mqtt://mosquitto:1883) or your own. # RODE_MQTT_URL=mqtt://mosquitto:1883 # RODE_MQTT_USERNAME= # RODE_MQTT_PASSWORD= RODE_MQTT_TOPIC_PREFIX=rode RODE_MQTT_PORT=1883 # SMTP for the daily heartbeat email. # RODE_SMTP_HOST= # RODE_SMTP_PORT=587 # RODE_SMTP_USER= # RODE_SMTP_PASS= # RODE_SMTP_FROM=rode@yourboat.example # RODE_HEARTBEAT_EMAIL=you@example.com