Practical guide6 min

Server mode and Web UI

Run Conflux as a daemon, expose the dashboard, and connect remote clients over HTTP and WebSocket.

Use server mode when you want Conflux to behave like a long-lived daemon instead of a one-shot local command.

When server mode is worth it

Server mode is a good fit when you need one or more of these:

  • remote TUI access,
  • a persistent browser dashboard,
  • HTTP and WebSocket APIs,
  • server-managed proposal sessions,
  • user-level background service management.

Start the server

Terminal
cflx server

The daemon exposes the Web UI and APIs for connected clients.

Quick Web UI

Start cflx server to get the browser dashboard. Configure the bind address and port in your project config if needed.

Terminal
cflx server

Connect a remote TUI

Terminal
cflx tui --server http://host:39876

This is useful when the orchestrator runs on one machine but you want an interactive terminal client elsewhere.

Dashboard capabilities

In practical terms, the Web UI provides:

  • a dashboard at http://localhost:<port>/,
  • real-time updates over WebSocket,
  • REST endpoints for state queries,
  • a QR popup from the TUI via w.

Core REST endpoints:

EndpointMethodPurpose
/api/healthGETHealth check
/api/stateGETFull orchestrator state
/api/changesGETList changes with progress
/api/changes/{id}GETView one change in detail

WebSocket clients connect to ws://localhost:<port>/ws.

Recommendation

If you are evaluating Conflux with teammates, cflx server is often the highest-leverage demo because everyone can see progress without attaching to the same terminal session.

Service management

cflx service wraps the server as a user-level background service.

Terminal

cflx service install cflx service start cflx service status cflx service restart cflx service stop cflx service uninstall

Platform notes:

  • macOS: launchd user agent
  • Linux: systemd --user
  • Windows: Scheduled Task

Useful troubleshooting

Dashboard does not load

Confirm that cflx server is running and that you are using the correct port.

Address already in use

Change the server.port setting to an available port, or set it to 0 to let the OS pick one.

Another device cannot access the dashboard

Bind explicitly to all interfaces:

{
  "server": {
    "bind": "0.0.0.0",
    "port": 9000,
  },
}

WebSocket disconnects

Start by checking network stability before assuming the orchestrator is broken. The dashboard will attempt to reconnect automatically.

Related guides

All guides