CH-UICH-UI

Configuration

Server and connector configuration for CH-UI

CH-UI works without config files out of the box. You only need config files when you want production defaults, service-managed startup, or want to avoid passing flags every time.

Priority Order

Values are resolved in this order (highest wins):

  • Server: CLI flags > environment variables > server.yaml > built-in defaults
  • Connector: CLI flags > environment variables > config.yaml > built-in defaults

Server Config

Default config path:

  • macOS: ~/.config/ch-ui/server.yaml
  • Linux: /etc/ch-ui/server.yaml

Server config explained

port: 3488
app_url: https://ch-ui.yourcompany.com
database_path: /var/lib/ch-ui/ch-ui.db
clickhouse_url: http://localhost:8123
app_secret_key: "change-this-in-production"
allowed_origins:
  - https://ch-ui.yourcompany.com
# optional override:
# tunnel_url: wss://ch-ui.yourcompany.com/connect
KeyExampleDefaultWhy it matters
port34883488HTTP port used by CH-UI server
app_urlhttps://ch-ui.yourcompany.comhttp://localhost:<port>Public URL for links and tunnel URL inference
database_path/var/lib/ch-ui/ch-ui.db./data/ch-ui.dbWhere CH-UI stores app state
clickhouse_urlhttp://localhost:8123http://localhost:8123Embedded local connection target
app_secret_keyrandom long stringbuilt-in dev valueEncrypts session credentials; must change in production
allowed_origins["https://ch-ui.yourcompany.com"]emptyCORS allowlist
tunnel_urlwss://ch-ui.yourcompany.com/connectderived from portExplicit tunnel endpoint advertised to agents

Server environment variables

VariableDescription
PORTHTTP port
APP_URLPublic base URL
DATABASE_PATHSQLite path
CLICKHOUSE_URLLocal ClickHouse URL for embedded connector
APP_SECRET_KEYSession/password encryption secret
ALLOWED_ORIGINSComma-separated CORS origins
TUNNEL_URLOverride gateway URL

Connector Config

Default config path:

  • macOS: ~/.config/ch-ui/config.yaml
  • Linux: /etc/ch-ui/config.yaml

Connector config explained

tunnel_token: "cht_your_token"
clickhouse_url: "http://127.0.0.1:8123"
tunnel_url: "wss://ch-ui.yourcompany.com/connect"
# insecure_skip_verify: false
KeyExampleDefaultWhy it matters
tunnel_tokencht_...none (required)Auth key created on server (ch-ui tunnel create)
clickhouse_urlhttp://127.0.0.1:8123http://localhost:8123Local ClickHouse for this VM
tunnel_urlwss://ch-ui.yourcompany.com/connectServer gateway endpoint
insecure_skip_verifyfalsefalseOnly for insecure dev TLS setups

Connector environment variables

VariableDescription
TUNNEL_TOKENTunnel token (cht_...)
CLICKHOUSE_URLClickHouse HTTP endpoint
TUNNEL_URLWebSocket URL to /connect
TUNNEL_INSECURE_SKIP_VERIFYTLS skip verify (true/1/yes)

Minimal Production Templates

Server (/etc/ch-ui/server.yaml)

port: 3488
app_url: https://ch-ui.yourcompany.com
database_path: /var/lib/ch-ui/ch-ui.db
app_secret_key: "replace-with-a-long-random-secret"
allowed_origins:
  - https://ch-ui.yourcompany.com

Connector (/etc/ch-ui/config.yaml)

tunnel_token: "cht_replace_me"
clickhouse_url: "http://127.0.0.1:8123"
tunnel_url: "wss://ch-ui.yourcompany.com/connect"
  • Rotate APP_SECRET_KEY per environment.
  • Use wss:// for all connector tunnels.
  • Keep connector close to ClickHouse to reduce latency.
  • Use non-default file paths managed by system services.

Validation Commands

./ch-ui server status
./ch-ui service status

On this page