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 Variable | Default Value | Description |
|---|---|---|
PORT | 8080 | HTTP daemon listening port. |
BIND_HOST | 127.0.0.1 (0.0.0.0 in Docker) | Network interface for daemon listener. |
DEFAULT_INSTANCE_BIND_IP | 127.0.0.1 | Host IP interface used for workstation desktop ports. |
DEFAULT_NETWORK | webtop-net | Default Docker bridge network created automatically on boot. |
DOCKER_HOST | "" | Optional custom Docker daemon socket or TCP URI. |
BASE_PORT | 3000 | Lowest starting port checked by the port scanner. |
DEFAULT_SHM_SIZE_MB | 1024 | Default /dev/shm shared memory allocation (in MB). |
APP_TITLE | webtop-manage | Custom title displayed in header and browser tabs. |
DEFAULT_TZ | Etc/UTC | Default timezone assigned to new Linux desktop containers. |
DEFAULT_KEYBOARD | en-us-qwerty | Default keyboard layout code passed to Webtop. |
DEFAULT_EGRESS_POLICY | full | Default egress internet policy (full or airgap). |
PRESETS_FILE | presets.json | Path to workstation templates catalog. |
THEMES_FILE | themes.json | Path to UI theme definition file. |
CONFIG_FILE | config.json | Path 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)"
}
]
}