Skip to content

Environment Variables

Authoritative reference for every environment variable the simulator and the Fleet Dashboard read at container start. Both containers use pydantic-settings - env vars are matched case-insensitively to the field name in the Settings class.

Simulator env vars

Source: backend/config.py.

Authentication

Var Type Default Description
USERNAME string admin Login username.
PASSWORD string changeme Login password.
BYPASS_AUTH bool (true/false) false When true, skips the login screen and accepts every /api/* call without authentication.

Default position and ramp rates

Var Type Default Description
DEFAULT_LAT float 33.1283 Initial latitude (decimal degrees, N positive).
DEFAULT_LON float -117.2803 Initial longitude (decimal degrees, E positive).
DEFAULT_ALT_FT float 0 Initial altitude in feet MSL.
DEFAULT_AIRSPEED_KTS float 0 Initial airspeed in knots.
DEFAULT_HEADING float 360 Initial heading in degrees true (1-360).
ALTITUDE_RATE_FT_PER_2SEC float 1000 Maximum altitude change per 2 s. Equivalent to 30,000 ft/min.
AIRSPEED_RATE_KTS_PER_SEC float 30 Maximum airspeed change per s.
HEADING_RATE_DEG_PER_SEC float 3 Maximum heading change per s. 3 °/s is a standard-rate turn.

The defaults are deliberately aggressive (a real jet won't accelerate at 30 kts/s or change altitude at 30,000 ft/min) so demos don't bore the audience. Override to taste.

Network

Var Type Default Description
NETWORK_PORT int 12000 Currently unused at runtime - the listen port is set per-mode via the UI or via AUTO_START_LISTEN_PORT. Kept for backward compatibility.

Serial

Var Type Default Description
SERIAL_BAUDRATE int 115200 Default baud rate for the serial picker. Operator can override per run in the UI.

EFB

Var Type Default Description
FOREFLIGHT_SIM_NAME string "" Placeholder simulator name shown in the EFB picker before the operator sets one. Functionally unused once the operator picks a name in the UI or via AUTO_START_EFB_SIM_NAME.

Auto-start

Var Type Default Description
AUTO_START_MODE string | "" unset rebroadcaster, sender, receiver, standalone, or empty to disable. Setting to false is NOT valid - it will fail validation.
AUTO_START_LISTEN_PORT int 12000 Port to bind for Receiver / Rebroadcaster.
AUTO_START_PROTOCOL string udp udp or tcp.
AUTO_START_EFB_ENABLED bool false Enable EFB output at boot.
AUTO_START_EFB_BROADCAST bool false Send to broadcast (ForeFlight).
AUTO_START_EFB_TARGET_IPS string "" Comma-separated IPs / ranges (see IP Range Parsing).
AUTO_START_EFB_SIM_NAME string "" Required when EFB enabled.
AUTO_START_USB_ENABLED bool false Enable USB output at boot.
AUTO_START_USB_DEVICE string "" Path like /dev/ttyUSB0. Required when USB enabled.
AUTO_START_UDP_RETRANSMIT bool false Enable UDP retransmit (Rebroadcaster only).
AUTO_START_UDP_RETRANSMIT_IP string "" Target IP - typically the Fleet Dashboard host.
AUTO_START_UDP_RETRANSMIT_PORT int 12001 Target port - matches the dashboard's SIM_N_PORT.
SIMULATOR_IP string "" IP of the upstream flight simulator. The rebroadcaster pings this once per second; result lands in the heartbeat as sim_reachable.

Container-runtime

Var Type Default Description
TZ string host-default Sets the container's timezone. Affects GPZDA and log timestamps.

Fleet Dashboard env vars

Source: dashboard/backend/config.py.

Server

Var Type Default Description
HOST string 0.0.0.0 Listen address for the FastAPI app.
PORT int 8080 HTTP listen port. The example compose overrides to 80.

Per-simulator (one block per simulator, N = 1..20)

Var Type Required Description
SIM_N_NAME string yes Card title (e.g., CJ3, Ultra, CL350). Free text, spaces OK.
SIM_N_PORT int yes UDP port the dashboard binds for this simulator. Must match the rebroadcaster's AUTO_START_UDP_RETRANSMIT_PORT.
SIM_N_GPS_SYSTEM string no Label inserted into the GPS-segment failure message ("Restart GPSConnect on <value>").

The parser walks from 1 to 20 and stops on the first gap. So SIM_1, SIM_3 (no SIM_2) registers only SIM_1.

Compact alternative (no GPS-system label)

Var Type Description
SIMULATORS string Name1:Port1,Name2:Port2,.... When set, this is used and the SIM_N_* block is ignored.

Default fallback

If neither SIMULATORS nor any SIM_N_NAME is set, the dashboard falls back to a built-in list of six aircraft (CL350, Ultra, CJ3, PC-12, King Air, Citation X on ports 12001-12006). This is a safety net - nothing real is on those ports out of the box.

Boolean parsing

Both apps use pydantic-settings' bool coercion. Accepted truthy values:

Truthy Falsy
true, True, TRUE, 1, yes, y, on false, False, FALSE, 0, no, n, off, empty string

For AUTO_START_MODE specifically, this does not apply - it's a string enum, not a bool. false is parsed as the literal string "false", which fails the enum validation. Leave it blank or omit to disable.

Reading env vars from a .env file

The simulator's pydantic-settings config has env_file=".env". Drop a file named .env in the working directory and the container will read it (in addition to compose's environment: block). The compose block wins on conflicts.

This is mostly useful for local development outside Docker. Inside Docker, prefer the compose-file environment: block - it's easier to audit.

Worked: a complete simulator compose env block

environment:
  # Authentication
  - USERNAME=admin
  - PASSWORD=YourSecretPassword
  - BYPASS_AUTH=false

  # Default position + ramp rates
  - DEFAULT_LAT=33.1283
  - DEFAULT_LON=-117.2803
  - DEFAULT_ALT_FT=0
  - DEFAULT_AIRSPEED_KTS=0
  - DEFAULT_HEADING=360
  - ALTITUDE_RATE_FT_PER_2SEC=1000
  - AIRSPEED_RATE_KTS_PER_SEC=30
  - HEADING_RATE_DEG_PER_SEC=3

  # Serial default
  - SERIAL_BAUDRATE=115200

  # EFB display name placeholder
  - FOREFLIGHT_SIM_NAME=

  # Timezone (affects GPZDA + log timestamps)
  - TZ=America/Los_Angeles

  # Auto-start as Rebroadcaster
  - AUTO_START_MODE=rebroadcaster
  - AUTO_START_LISTEN_PORT=12000
  - AUTO_START_PROTOCOL=udp

  - AUTO_START_EFB_ENABLED=true
  - AUTO_START_EFB_BROADCAST=false
  - AUTO_START_EFB_TARGET_IPS=10.200.40.198
  - AUTO_START_EFB_SIM_NAME=CL350

  - AUTO_START_USB_ENABLED=false
  - AUTO_START_USB_DEVICE=

  - AUTO_START_UDP_RETRANSMIT=true
  - AUTO_START_UDP_RETRANSMIT_IP=10.200.40.3
  - AUTO_START_UDP_RETRANSMIT_PORT=12001

  - SIMULATOR_IP=10.200.50.11

Worked: a complete dashboard compose env block

environment:
  - HOST=0.0.0.0
  - PORT=80

  - SIM_1_NAME=CJ3
  - SIM_1_PORT=12001
  - SIM_1_GPS_SYSTEM=Avionics

  - SIM_2_NAME=Ultra
  - SIM_2_PORT=12002
  - SIM_2_GPS_SYSTEM=Avionics 2

  - SIM_3_NAME=CL350
  - SIM_3_PORT=12003
  - SIM_3_GPS_SYSTEM=rehost

What's next