Install and configure CE
Install WhoDB where it can reach the databases you want to inspect. The browser interface connects through the WhoDB server, so database endpoints and file paths must be accessible from that server.
Choose Docker for a self-hosted browser workspace, a release binary for a local server, or the desktop app for native file dialogs. The CLI is installed separately; see CLI & MCP.
Docker (recommended)#
Docker Compose
YAML
services:
whodb:
image: clidey/whodb:latest
ports:
- "8080:8080"
environment:
- PORT=8080
- WHODB_LOG_LEVEL=info
# Keeps encrypted login sessions valid across container recreation.
# Generate once with: openssl rand -hex 32
- WHODB_ENCRYPTION_KEY=replace_with_openssl_rand_hex_32
restart: unless-stopped
volumes:
- whodb-data:/data
volumes:
whodb-data:
Session Storage
WhoDB keeps login sessions on the server. The session store holds database credentials encrypted in a local SQLite file under the data directory. The browser uses an opaque, HttpOnly cookie to identify that session.
On first start, WhoDB generates an encryption key if none is configured. With a plain docker run, replacing the container also replaces its local session storage, so users need to connect again. To retain sessions across replacement:
- Mount
/dataas a volume so the encrypted session database and generated key persist. - Set
WHODB_ENCRYPTION_KEYto a stable 64-character hex string (openssl rand -hex 32) so the key does not depend on the container's filesystem.
Warning
Keep WHODB_ENCRYPTION_KEY safe and stable. Changing or losing it makes sessions encrypted with the old key unreadable. Users will need to connect again.
If WhoDB sits behind an HTTPS-terminating reverse proxy (nginx, Traefik, Caddy, a cloud load balancer), also set WHODB_SECURE=true so the session cookie is marked Secure. Leave it unset for plain HTTP, including local development. WhoDB does not infer this setting from proxy headers. Enabling it for an HTTP deployment prevents the browser from using the cookie correctly.
Binary installation#
Download the artifact for your operating system and architecture from WhoDB releases. Extract it if needed, make it executable, and run it:
Bash
chmod +x whodb
./whodb
Note
The default port is 8080. Override it with PORT=3000 ./whodb if you want a different listener port.
Build from source#
Prerequisites
- Go matching
core/go.mod(currently1.27.4) - Node.js matching
.nvmrc(currently26.12.1) and the frontend's pinnedpnpmversion
Build steps
Development mode
Use two terminals:
Backend
bashcd core
go run ./cmd/whodb
Frontend
bashcd frontend
pnpm start
The frontend dev server runs on http://localhost:3000 and proxies its backend requests to the WhoDB server.
Desktop app#
Choose the desktop app when you want to work locally with native file dialogs and application menus. Follow Desktop app for installation and file access behavior.
Common environment variables#
Server
| Variable | Description | Default |
|---|---|---|
PORT | HTTP port WhoDB listens on | 8080 |
WHODB_LOG_LEVEL | Logging level: debug, info, warn, error, none | info |
WHODB_LOG_FORMAT | Set to json for JSON logs; unset for the default text format | text |
WHODB_LOG_FILE | Redirect non-HTTP logs to a file. default means /var/log/whodb/whodb.log | unset |
WHODB_ACCESS_LOG_FILE | Redirect HTTP access logs to a file. default means /var/log/whodb/whodb.access.log | unset |
WHODB_AUDIT_LOG_FILE | Append-only NDJSON log of audited actions such as logins, data reads and changes. Request telemetry is excluded. default means /var/log/whodb/whodb.audit.log | unset |
WHODB_ALLOWED_ORIGINS | Comma-separated CORS allowlist | unset |
WHODB_BASE_PATH | URL path prefix for bundled web deployments, such as /whodb | unset |
WHODB_DISABLE_CREDENTIAL_FORM | Hide the manual credential form and require managed profiles/providers | false |
WHODB_MAX_PAGE_SIZE | Maximum rows allowed per page request | 10000 |
WHODB_DISABLE_MOCK_DATA_GENERATION | Disable mock data globally or for named tables | unset |
WHODB_DISABLE_UPDATE_CHECK | Disable release availability checks | false |
WHODB_ENCRYPTION_KEY | 64-char hex key used to encrypt stored login sessions. Auto-generated and persisted to WHODB_DATA_DIR if unset | unset |
WHODB_DATA_DIR | Directory for the encrypted session database and generated key | platform default data directory |
WHODB_SESSION_TTL | Sliding idle timeout for login sessions, as a Go duration (for example 168h) | 168h (7 days) |
WHODB_SECURE | Mark the session cookie Secure. Set to true only when served over HTTPS (including behind a TLS-terminating proxy) | false |
Note
The default log paths write to /var/log/whodb/. That works naturally in Docker but usually requires a custom path for local development.
Note
WHODB_BASE_PATH only applies to production versions, such as the Docker image or a production binary build. It is intended for reverse-proxy subpath hosting like /whodb/, not split frontend/backend dev mode.
AI providers
| Variable | Description | Default |
|---|---|---|
WHODB_OLLAMA_HOST | Ollama host | localhost (resolved for Docker/WSL when needed) |
WHODB_OLLAMA_PORT | Ollama port | 11434 |
WHODB_OLLAMA_NAME | Display name for Ollama | unset |
WHODB_OPENAI_API_KEY | OpenAI API key | unset |
WHODB_OPENAI_ENDPOINT | OpenAI API base URL | https://api.openai.com/v1 |
WHODB_OPENAI_NAME | Display name for OpenAI | unset |
WHODB_ANTHROPIC_API_KEY | Anthropic API key | unset |
WHODB_ANTHROPIC_ENDPOINT | Anthropic API base URL | https://api.anthropic.com/v1 |
WHODB_ANTHROPIC_NAME | Display name for Anthropic | unset |
WHODB_LMSTUDIO_BASE_URL | LM Studio base URL | http://localhost:1234/v1 |
WHODB_LMSTUDIO_API_KEY | LM Studio API key | unset |
WHODB_LMSTUDIO_NAME | Display name for LM Studio | unset |
Generic OpenAI-compatible providers can be added with the WHODB_AI_GENERIC_<ID>_* pattern. See Setting Up AI providers.
CLI cloud providers
| Variable | Description | Default |
|---|---|---|
WHODB_ENABLE_AWS_PROVIDER | Enable AWS provider support in the CLI | false |
WHODB_AWS_PROVIDER | JSON array of AWS provider definitions | unset |
WHODB_ENABLE_AZURE_PROVIDER | Enable Azure provider support in the CLI | false |
WHODB_AZURE_PROVIDER | JSON array of Azure provider definitions | unset |
WHODB_ENABLE_GCP_PROVIDER | Enable GCP provider support in the CLI | false |
WHODB_GCP_PROVIDER | JSON array of GCP provider definitions | unset |
These variables do not enable provider operations in the CE web server. See Cloud providers for the local CLI workflow.
Database connection profiles#
Use configured profiles when instance users should connect without entering the same endpoint and credentials each time. WhoDB loads these profiles from environment variables and displays their aliases on the connection page.
Warning
In Community Edition, connection profiles are shared with everyone who can reach the WhoDB instance. A user can select a profile and connect with its server-configured credentials without entering the database password. Profile names and IDs are not authentication factors. When profiles grant access to private or sensitive data, expose WhoDB only to trusted users and use a least-privileged database account.
Profiles work for every database type in the catalog: the prefix is WHODB_ followed by the uppercased type name. Examples for the core types include:
WHODB_POSTGRESWHODB_COCKROACHDBWHODB_MYSQLWHODB_MARIADBWHODB_TIDBWHODB_SQLITE3WHODB_MONGODBWHODB_REDISWHODB_ELASTICSEARCHWHODB_CLICKHOUSEWHODB_DUCKDBWHODB_MEMCACHED
The same pattern applies to the rest of the catalog, such as WHODB_VALKEY, WHODB_DRAGONFLY, WHODB_OPENSEARCH, WHODB_YUGABYTEDB, WHODB_QUESTDB, and WHODB_FERRETDB.
Two formats are supported:
export WHODB_POSTGRES='[
{"alias":"development","host":"db.example.com","user":"postgres","password":"replace-me","database":"app","port":"5432"},
{"alias":"staging","host":"staging.example.com","user":"postgres","password":"replace-me","database":"app","port":"5432"}
]'
Each profile object supports these common fields:
| Field | Description |
|---|---|
alias | Label shown on the login page |
host | Database hostname or IP |
user | Username |
password | Password |
database | Database name or file path |
port | Port number as a string |
advanced | Key/value map of advanced options |
Setting WHODB_DISABLE_CREDENTIAL_FORM=true hides manual credential entry, but it does not add authentication in front of configured profiles. Users who can reach the instance can still select and use them.
TLS example
For profile-based connections, the backend accepts both certificate content keys and server-side file-path keys:
Bash
export WHODB_POSTGRES_1='{
"alias": "development",
"host": "db.example.com",
"user": "postgres",
"password": "replace-me",
"database": "app",
"port": "5432",
"advanced": {
"SSL Mode": "verify-ca",
"SSL CA Path": "/etc/certs/ca.pem",
"SSL Client Cert Path": "/etc/certs/client.pem",
"SSL Client Key Path": "/etc/certs/client-key.pem"
}
}'
Note
Cloud-managed variants such as DocumentDB and ElastiCache accept WHODB_<TYPE> profile prefixes like any other catalog type (WHODB_DOCUMENTDB, WHODB_ELASTICACHE), though provider discovery is the more common way to introduce them.
Note
Provider discovery is opt-in. Verify the provider configuration, network route, and database account independently before relying on a discovered connection.
Custom port example#
Bash
PORT=3000 ./whodb
To publish the default container listener on host port 3000:
Bash
docker run -d \
-p 3000:8080 \
clidey/whodb:latest
If you intentionally change the internal listener with PORT, map the same internal port:
Bash
docker run -d \
-e PORT=3000 \
-p 3000:3000 \
clidey/whodb:latest
Verify the install#
Troubleshooting#
Continue after installation#
Was this page helpful?