/docs/api/configuration
Developer Reference webtop-manage v1.0.0

Runtime Configuration & Themes

Environment variables, config.json specification, custom preset catalogs, and theme definitions.

Runtime Configuration & Themes

webtop-manage loads configuration with a 3-tier precedence order: Environment Variables (Highest) $\rightarrow$ config.json $\rightarrow$ Built-in Defaults.


⚙️ Environment Variables Reference

Environment VariableDefault ValueDescription
PORT8080HTTP daemon listening port.
BIND_HOST127.0.0.1 (0.0.0.0 in Docker)Network interface for daemon listener.
DEFAULT_INSTANCE_BIND_IP127.0.0.1Host IP interface used for workstation desktop ports.
DEFAULT_NETWORKwebtop-netDefault Docker bridge network created automatically on boot.
DOCKER_HOST""Optional custom Docker daemon socket or TCP URI.
BASE_PORT3000Lowest starting port checked by the port scanner.
DEFAULT_SHM_SIZE_MB1024Default /dev/shm shared memory allocation (in MB).
APP_TITLEwebtop-manageCustom title displayed in header and browser tabs.
DEFAULT_TZEtc/UTCDefault timezone assigned to new Linux desktop containers.
DEFAULT_KEYBOARDen-us-qwertyDefault keyboard layout code passed to Webtop.
DEFAULT_EGRESS_POLICYfullDefault egress internet policy (full or airgap).
PRESETS_FILEpresets.jsonPath to workstation templates catalog.
THEMES_FILEthemes.jsonPath to UI theme definition file.
CONFIG_FILEconfig.jsonPath to application settings JSON file.

📄 config.json Specification

json
{
  "port": 8080,
  "bind_host": "0.0.0.0",
  "default_instance_bind": "127.0.0.1",
  "default_network": "webtop-net",
  "base_port": 3000,
  "enable_gpu_by_default": false,
  "default_shm_size_mb": 1024,
  "app_title": "webtop-manage",
  "default_tz": "Etc/UTC",
  "default_keyboard": "en-us-qwerty",
  "default_egress_policy": "full",
  "presets_file": "presets.json",
  "themes_file": "themes.json"
}

🎨 UI Themes (themes.json)

Themes allow customizing dashboard colors without recompiling the binary:

json
{
  "default_theme": "angkor_dark",
  "themes": [
    {
      "id": "angkor_dark",
      "name": "Angkor Dark (Default)",
      "primary": "#f59e0b",
      "primary_hover": "#d97706",
      "primary_light": "rgba(245, 158, 11, 0.15)",
      "bg_main": "#080b11",
      "bg_surface": "#131924",
      "bg_surface_elevated": "#1a2332",
      "bg_input": "#101722",
      "text_main": "#f8fafc",
      "text_muted": "#94a3b8",
      "border_focus": "rgba(245, 158, 11, 0.5)",
      "glow_primary": "0 0 22px rgba(245, 158, 11, 0.28)"
    },
    {
      "id": "minimal_slate",
      "name": "Minimal Slate",
      "primary": "#38bdf8",
      "primary_hover": "#0284c7",
      "primary_light": "rgba(56, 189, 248, 0.15)",
      "bg_main": "#080c14",
      "bg_surface": "#141c2c",
      "bg_surface_elevated": "#1c273c",
      "bg_input": "#101726",
      "text_main": "#f8fafc",
      "text_muted": "#94a3b8",
      "border_focus": "rgba(56, 189, 248, 0.5)",
      "glow_primary": "0 0 22px rgba(56, 189, 248, 0.28)"
    }
  ]
}