A self-hosted web console for managing OpenClaw instances. Configure AI providers, models, chat channels, and extensions through a clean browser UI.
Key features:
- Manage AI providers and model routing
- Configure Telegram, QQ Bot, and WeCom channels
- OAuth session management for Codex
- Extension system for adding custom functionality
- Single binary deployment with embedded web assets
Prerequisites: Go 1.22+, Node.js 18+, npm
- Start the API server:
cd server
go run ./cmd/server- Start the web UI (dev mode):
cd web
npm install
VITE_ADMIN_API_BASE=http://127.0.0.1:18080/api npm run dev- Open
http://127.0.0.1:3000in your browser.
Build a single self-contained binary with embedded web assets:
make build # current platform → dist/openclaw-console
make build-linux-amd64 # Linux x86_64Run the binary:
./dist/openclaw-console
# Web UI: http://127.0.0.1:18080
# Health: http://127.0.0.1:18080/healthzopenclaw-console/
├── server/ Go backend (Chi router)
│ ├── cmd/server/ Entry point
│ ├── pkg/console/ Exported Extension interface + Bootstrap
│ ├── internal/api/ HTTP handlers + router
│ ├── internal/openclaw/ CLI wrapper, cache, store, sessions
│ └── internal/ui/ Embedded web assets (go:embed)
├── web/ React + Vite + TypeScript frontend
│ └── src/
│ ├── components/ UI components (shadcn/ui)
│ ├── hooks/ Data fetching hooks
│ ├── pages/ Route pages
│ └── lib/ API client, types, navigation
└── scripts/ Build helpers
The console supports runtime extensions via the Extension interface in pkg/console:
type Extension interface {
ID() string
DisplayName() string
Icon() string
BasePath() string
Handler() http.Handler
Start(ctx context.Context) error
}Extensions are registered at startup via console.Bootstrap() and automatically discovered by the frontend through GET /api/v1/extensions.
| Variable | Default | Description |
|---|---|---|
OPENCLAW_HOME |
OpenClaw default | Override OpenClaw home directory |
OPENCLAW_CONFIG_PATH |
OpenClaw default | Override config file path |
OPENCLAW_CONSOLE_ADDR |
:18080 |
Listen address |
OPENCLAW_CONSOLE_AUTH_TOKEN |
empty | Enable Bearer token auth |
Backend:
cd server
go test ./... # tests
golangci-lint run # lintFrontend:
cd web
npm run lint # ESLint
npm run build # TypeScript check + production buildRelease tags use the server/vX.Y.Z format (Go sub-module convention):
git tag server/v0.2.0
git push origin server/v0.2.0