Use CH-UI to work with your data from Click House self-hosted with a user-friendly interface. CH-UI is a modern and feature-rich user interface for ClickHouse databases. It offers an intuitive platform for querying ClickHouse databases, executing queries, and visualizing metrics about your instance.
710
stars
295
commits
Go
primary language
Sep 9, 2026
updated
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.
SELECT on
system.processes)system.query_log) with estimate vs actual accuracy comparisontable, view, and incremental materializationch-ui service install)/mcp (streamable HTTP), in the same binarychm_ key; read-only tools for schema browsing, SELECT queries, and query plansreadonly, row/time caps) + every AI query recorded in query history and the audit log/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).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 WebSocketflowchart 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 create |
clickhouse_url | CLICKHOUSE_URL | http://localhost:8123 | Local ClickHouse |
tunnel_url | TUNNEL_URL | ws://127.0.0.1:3488/connect | Server gateway endpoint |
# CLI flag
ch-ui server --clickhouse-url http://127.0.0.1:8123
# Environment variable
CLICKHOUSE_URL=http://127.0.0.1:8123 ch-ui server
# With custom connection name
ch-ui server --clickhouse-url http://127.0.0.1:8123 --connection-name "My ClickHouse"
The login page also has a Can't login? button that shows setup guidance.
CH-UI can connect to ClickHouse either directly (point CLICKHOUSE_URL at the
endpoint, including a reverse-proxied https:// one) or via an outbound tunnel
that keeps ClickHouse fully private. See
docs/connecting-to-clickhouse.md.
APP_SECRET_KEYAPP_URL to your public HTTPS URLALLOWED_ORIGINSch-ui.conf)/connect# Backup
cp /var/lib/ch-ui/ch-ui.db /var/backups/ch-ui-$(date +%F).db
# Restore — stop server first, then replace the DB file
ch-ui server status # Check if already running
ch-ui server stop # Stop the old process
Click Can't login? on the login page for guided recovery, or restart with:
ch-ui server --clickhouse-url 'http://127.0.0.1:8123'
Full guide: docs/cant-login.md
invalid token)cht_... tokench-ui tunnel listch-ui tunnel rotate <connection-id>Your proxy must forward upgrades on /connect:
Upgrade and Connection: upgrade headerscurl http://localhost:3488/health
Requirements: Go 1.25+, Bun
git clone https://github.com/caioricciuti/ch-ui.git
cd ch-ui
make build # Full production build (frontend + Go binary)
./ch-ui
Dev mode (two terminals):
make dev # Terminal 1: Go server
cd ui && bun install && bun run dev # Terminal 2: Vite dev server
Useful targets: make build | make test | make vet | make clean | make rebuild
ch-ui update
Downloads the latest release for your OS/arch, verifies checksum, and replaces the binary.
CH-UI is dual-licensed:
LICENSE.md). Free to use, modify, and distribute.LICENSE.BSL). Source-available; production use requires a valid CH-UI Pro license; converts to Apache 2.0 on the Change Date. Every Pro source file carries an SPDX-License-Identifier: BUSL-1.1 header; see LICENSING.md for the authoritative scope.docs/license.mddocs/legal/terms-of-service.mddocs/legal/privacy-policy.mdIssues and PRs are welcome.
When contributing, please include:
Go
53.2%
Svelte
38.0%
TypeScript
8.0%
Use CH-UI to work with your data from Click House self-hosted with a user-friendly interface. CH-UI is a modern and feature-rich user interface for ClickHouse databases. It offers an intuitive platform for querying ClickHouse databases, executing queries, and visualizing metrics about your instance.
710
stars
295
commits
Go
primary language
Sep 9, 2026
updated
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.
SELECT on
system.processes)system.query_log) with estimate vs actual accuracy comparisontable, view, and incremental materializationch-ui service install)/mcp (streamable HTTP), in the same binarychm_ key; read-only tools for schema browsing, SELECT queries, and query plansreadonly, row/time caps) + every AI query recorded in query history and the audit log/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).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 WebSocketflowchart 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 create |
clickhouse_url | CLICKHOUSE_URL | http://localhost:8123 | Local ClickHouse |
tunnel_url | TUNNEL_URL | ws://127.0.0.1:3488/connect | Server gateway endpoint |
# CLI flag
ch-ui server --clickhouse-url http://127.0.0.1:8123
# Environment variable
CLICKHOUSE_URL=http://127.0.0.1:8123 ch-ui server
# With custom connection name
ch-ui server --clickhouse-url http://127.0.0.1:8123 --connection-name "My ClickHouse"
The login page also has a Can't login? button that shows setup guidance.
CH-UI can connect to ClickHouse either directly (point CLICKHOUSE_URL at the
endpoint, including a reverse-proxied https:// one) or via an outbound tunnel
that keeps ClickHouse fully private. See
docs/connecting-to-clickhouse.md.
APP_SECRET_KEYAPP_URL to your public HTTPS URLALLOWED_ORIGINSch-ui.conf)/connect# Backup
cp /var/lib/ch-ui/ch-ui.db /var/backups/ch-ui-$(date +%F).db
# Restore — stop server first, then replace the DB file
ch-ui server status # Check if already running
ch-ui server stop # Stop the old process
Click Can't login? on the login page for guided recovery, or restart with:
ch-ui server --clickhouse-url 'http://127.0.0.1:8123'
Full guide: docs/cant-login.md
invalid token)cht_... tokench-ui tunnel listch-ui tunnel rotate <connection-id>Your proxy must forward upgrades on /connect:
Upgrade and Connection: upgrade headerscurl http://localhost:3488/health
Requirements: Go 1.25+, Bun
git clone https://github.com/caioricciuti/ch-ui.git
cd ch-ui
make build # Full production build (frontend + Go binary)
./ch-ui
Dev mode (two terminals):
make dev # Terminal 1: Go server
cd ui && bun install && bun run dev # Terminal 2: Vite dev server
Useful targets: make build | make test | make vet | make clean | make rebuild
ch-ui update
Downloads the latest release for your OS/arch, verifies checksum, and replaces the binary.
CH-UI is dual-licensed:
LICENSE.md). Free to use, modify, and distribute.LICENSE.BSL). Source-available; production use requires a valid CH-UI Pro license; converts to Apache 2.0 on the Change Date. Every Pro source file carries an SPDX-License-Identifier: BUSL-1.1 header; see LICENSING.md for the authoritative scope.docs/license.mddocs/legal/terms-of-service.mddocs/legal/privacy-policy.mdIssues and PRs are welcome.
When contributing, please include:
Go
53.2%
Svelte
38.0%
TypeScript
8.0%