
The open-source ClickHouse management platform.
SQL editor, dashboards, AI copilot, data pipelines, models, and admin — all in one binary. Free.
Most ClickHouse tools give you a query box and call it a day. CH-UI gives you a full workspace — and almost everything is free and open source.
Download one binary. Run it. Get:
No Docker requirement. No external dependencies. No signup.
Everything below is included in the free Community edition under Apache 2.0.
system.query_log) with estimate vs actual accuracy comparisontable, view, and incremental materializationch-ui service install)/health)ch-ui update)Almost everything is free. Pro adds enterprise governance and scheduling.
| Capability | Community (Free) | Pro |
|---|---|---|
| SQL editor + explorer + formatting + profiling | Yes | Yes |
| Saved queries | Yes | Yes |
| Dashboards + panel builder | Yes | Yes |
| Brain (AI assistant, multi-provider) | Yes | Yes |
| Data pipelines (Webhook, S3, Kafka, DB) | Yes | Yes |
| Models (SQL transformations, DAG) | Yes | Yes |
| Admin panel + user management | Yes | Yes |
| Multi-connection management | Yes | Yes |
| Tunnel (remote ClickHouse) | Yes | Yes |
| Scheduled query jobs + cron + history | - | Yes |
| Governance (metadata, visual lineage graph, column-level lineage, access matrix) | - | Yes |
| Policies + incidents + violations | - | Yes |
| Cluster Health (replication, Keeper, merges/mutations, parts pressure, long queries) | - | Yes |
Query parameters ({name:Type} bind params + saved-query run API) |
- | Yes |
| Alerting (SMTP, Resend, Brevo) | - | Yes |
See: docs/license.md
Linux (amd64):
curl -L -o ch-ui https://github.com/caioricciuti/ch-ui/releases/latest/download/ch-ui-linux-amd64
chmod +x ch-ui
Linux (arm64):
curl -L -o ch-ui https://github.com/caioricciuti/ch-ui/releases/latest/download/ch-ui-linux-arm64
chmod +x ch-ui
macOS (Apple Silicon):
curl -L -o ch-ui https://github.com/caioricciuti/ch-ui/releases/latest/download/ch-ui-darwin-arm64
chmod +x ch-ui
macOS (Intel):
curl -L -o ch-ui https://github.com/caioricciuti/ch-ui/releases/latest/download/ch-ui-darwin-amd64
chmod +x ch-ui
Optional — verify checksum:
curl -L -o checksums.txt https://github.com/caioricciuti/ch-ui/releases/latest/download/checksums.txt
sha256sum -c checksums.txt --ignore-missing
sudo install -m 755 ch-ui /usr/local/bin/ch-ui
ch-ui
Or just ./ch-ui from the download folder.
Open http://localhost:3488 and log in with your ClickHouse credentials.
docker run --rm \
-p 3488:3488 \
-v ch-ui-data:/app/data \
-e CLICKHOUSE_URL=http://host.docker.internal:8123 \
ghcr.io/caioricciuti/ch-ui:latest
host.docker.internal with a host/IP reachable from the container./app/data/ch-ui.db (volume: ch-ui-data).Don't want to self-host? CH-UI Cloud is the managed version — same features, zero infrastructure.
Connect your ClickHouse to the cloud using the lightweight chui-agent:
curl -fsSL https://console.ch-ui.com/install.sh | sh
Then connect:
chui-agent --url wss://yourorg.ch-ui.com/connect --key cht_your_token
chui-agent is a standalone 6MB binary — no server, no root, no config files. Get your token from the CH-UI Cloud console.
Note:
chui-agentis for CH-UI Cloud only. For self-hosted tunnel connections, usech-ui connect(see Remote ClickHouse (Tunnel) below).
CH-UI ships as a single binary with two operating modes:
- server — web app + API + WebSocket tunnel gateway (default)
- connect — lightweight agent that exposes local ClickHouse over secure WebSocket
flowchart LR
U["Browser"] --> S["CH-UI Server\n(UI + API + Gateway)"]
S <--> DB["SQLite\n(state, settings, chats, dashboards)"]
A["ch-ui connect\n(Agent)"] <--> S
A --> CH["ClickHouse"]
For local use, the server starts an embedded connector automatically against localhost:8123.
Tech stack: Go backend (chi v5, SQLite WAL mode), Svelte 5 frontend (TypeScript, Vite, TailwindCSS), embedded at build time.
Connect to ClickHouse instances running on other machines using the secure WebSocket tunnel.
Server (VM2):
ch-ui server --port 3488
Agent (VM1, where ClickHouse runs):
ch-ui connect --url wss://your-ch-ui-domain/connect --key cht_your_tunnel_token
Run these on the server host:
ch-ui tunnel create --name "vm1-clickhouse" # Create connection + key
ch-ui tunnel list # List all connections
ch-ui tunnel show <connection-id> # Show token + setup commands
ch-ui tunnel rotate <connection-id> # Rotate token (old one invalidated)
ch-ui tunnel delete <connection-id> # Delete connection
/connect endpoint.--takeover to replace a stale agent session.ch-ui service install --key cht_xxx --url wss://host/connectFor full hardening guide: docs/production-runbook.md
ch-ui # Start server (local ClickHouse)
ch-ui server start --detach # Start in background
ch-ui server status # Check if running
ch-ui server stop # Stop server
| Command | Description |
|---|---|
ch-ui / ch-ui server |
Start web app + API + gateway |
ch-ui connect |
Start tunnel agent next to ClickHouse |
ch-ui tunnel create/list/show/rotate/delete |
Manage tunnel keys (server host) |
ch-ui service install/start/stop/status/logs/uninstall |
Manage connector as OS service |
ch-ui update |
Update to latest release |
ch-ui version |
Print version |
ch-ui completion bash/zsh/fish |
Generate shell completions |
ch-ui uninstall |
Remove CH-UI from system |
| Flag | Default | Description |
|---|---|---|
--port, -p |
3488 |
HTTP port |
--clickhouse-url |
http://localhost:8123 |
Local ClickHouse URL |
--connection-name |
Local ClickHouse |
Display name for local connection |
--config, -c |
- | Path to server.yaml |
--detach |
- | Run in background |
--dev |
- | Development mode (proxy to Vite) |
| Flag | Default | Description |
|---|---|---|
--url |
- | WebSocket tunnel URL (wss://) |
--key |
- | Tunnel token (cht_...) |
--clickhouse-url |
http://localhost:8123 |
Local ClickHouse |
--config, -c |
- | Path to config.yaml |
--detach |
- | Run in background |
--takeover |
- | Replace stale agent session |
CH-UI works without config files. You only need them for production defaults or service-managed startup.
| File | macOS | Linux |
|---|---|---|
server.yaml |
~/.config/ch-ui/server.yaml |
/etc/ch-ui/server.yaml |
config.yaml |
~/.config/ch-ui/config.yaml |
/etc/ch-ui/config.yaml |
Priority: CLI flags > environment variables > config file > built-in defaults
port: 3488
app_url: https://ch-ui.yourcompany.com
database_path: /var/lib/ch-ui/ch-ui.db
clickhouse_url: http://localhost:8123
connection_name: Local ClickHouse
app_secret_key: "change-this-in-production"
allowed_origins:
- https://ch-ui.yourcompany.com
| Key | Env var | Default | Description |
|---|---|---|---|
port |
PORT |
3488 |
HTTP port |
app_url |
APP_URL |
http://localhost:<port> |
Public URL for links and tunnel inference |
database_path |
DATABASE_PATH |
./data/ch-ui.db |
SQLite database location |
clickhouse_url |
CLICKHOUSE_URL |
http://localhost:8123 |
Embedded local connection target |
connection_name |
CONNECTION_NAME |
Local ClickHouse |
Display name for local connection |
app_secret_key |
APP_SECRET_KEY |
auto-generated | Session encryption key |
allowed_origins |
ALLOWED_ORIGINS |
empty | CORS allowlist (comma-separated in env) |
tunnel_url |
TUNNEL_URL |
derived from port | Tunnel endpoint advertised to agents |
tunnel_token: "cht_your_token"
clickhouse_url: "http://127.0.0.1:8123"
tunnel_url: "wss://your-ch-ui-domain/connect"
| Key | Env var | Default | Description |
|---|---|---|---|
tunnel_token |
TUNNEL_TOKEN |
required | Auth key from `ch-ui tunnel cr |
$ claude mcp add ch-ui \
-- python -m otcore.mcp_server <graph>