Skip to content

Configuration

Two sources with a hard split:

  • Environment variables for the runtime: paths, port, sign-in, check periods, theme.
  • One YAML file for the servers. It holds ${VAR} references, never secret values, so it can be committed.

Some runtime settings can also be changed from the Settings page. Settings.get resolves each one in a fixed order: the environment wins and locks the setting in the UI, then the value saved in settings.json, then the default. A saved choice that no longer exists falls back to the default, so an upgrade that drops an option cannot stop the hub.

The server file is validated as a whole before anything is applied. Hub.reload() diffs the new configuration against the running one: new servers start, removed ones stop, changed ones restart, untouched ones keep running. A field that only affects display, such as title, does not count as a change. A file that does not parse changes nothing.

When the UI or yard-set_title edits the file, ConfigFile goes through the YAML document model, so comments, key order and ${VAR} references survive, and the whole file must still parse before it is written. The write happens in place because the file is often a single-file bind mount, which cannot be replaced by a rename.