Backend: a single Go binary with an embedded frontend and no third-party Go runtime dependencies.
Frontend: a single static HTML application embedded from web/index.html.
Runtime defaults: checked into assets/runtime/ and copied or read from the active dashboard runtime directory.
cmd/openclaw-dashboard/ CLI entrypoint
internal/appconfig/ config loading and defaults
internal/appruntime/ runtime-dir and Homebrew seeding
internal/appchat/ chat prompt + gateway client
internal/apprefresh/ dashboard data collector
internal/appserver/ HTTP server, handlers, refresh orchestration
internal/appsystem/ system metrics and OpenClaw runtime probes
internal/appservice/ service lifecycle backend (launchd/systemd)
web/ embedded frontend assets
assets/runtime/ runtime defaults (config, themes, refresh script)
testdata/ reusable fixtures for tests
The binary resolves a dashboard runtime directory with this precedence:
OPENCLAW_DASHBOARD_DIR- source checkout / extracted release root
- Homebrew-seeded
~/.openclaw/dashboard
At runtime, the server serves:
- embedded UI from
web/index.html - generated dashboard data from
data.json - runtime theme/config assets from the resolved dashboard directory
- fallback default assets from
assets/runtime/when running from a source checkout or release tree
Browser
-> GET /api/refresh
-> appserver refresh coordinator
-> apprefresh collector
-> data.json
-> browser renders dashboard
Browser
-> POST /api/chat
-> appserver chat handler
-> appchat prompt builder + gateway client
-> OpenClaw gateway
appconfigowns config parsing and normalization.appruntimeowns path resolution, version detection, and Homebrew runtime seeding.apprefreshowns data collection from OpenClaw sessions, crons, git history, and token logs.appsystemowns live host metrics and gateway/runtime probes.appchatowns prompt construction and OpenAI-compatible gateway requests.appserverowns HTTP routing, caching, rate limiting, refresh coordination, and log/error feed endpoints.appserviceowns service lifecycle management: install, uninstall, start, stop, restart, and status via launchd (macOS) or systemd (Linux).
The root dashboard package now exists mainly as a compatibility layer for tests and the exported Main() entry used by cmd/openclaw-dashboard.