WhoDBDocs

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 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 /data as a volume so the encrypted session database and generated key persist.
  • Set WHODB_ENCRYPTION_KEY to 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 (currently 1.27.4)
  • Node.js matching .nvmrc (currently 26.12.1) and the frontend's pinned pnpm version

Build steps

Development mode

Use two terminals:

Backend

bash
cd core
go run ./cmd/whodb

Frontend

bash
cd 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

VariableDescriptionDefault
PORTHTTP port WhoDB listens on8080
WHODB_LOG_LEVELLogging level: debug, info, warn, error, noneinfo
WHODB_LOG_FORMATSet to json for JSON logs; unset for the default text formattext
WHODB_LOG_FILERedirect non-HTTP logs to a file. default means /var/log/whodb/whodb.logunset
WHODB_ACCESS_LOG_FILERedirect HTTP access logs to a file. default means /var/log/whodb/whodb.access.logunset
WHODB_AUDIT_LOG_FILEAppend-only NDJSON log of audited actions such as logins, data reads and changes. Request telemetry is excluded. default means /var/log/whodb/whodb.audit.logunset
WHODB_ALLOWED_ORIGINSComma-separated CORS allowlistunset
WHODB_BASE_PATHURL path prefix for bundled web deployments, such as /whodbunset
WHODB_DISABLE_CREDENTIAL_FORMHide the manual credential form and require managed profiles/providersfalse
WHODB_MAX_PAGE_SIZEMaximum rows allowed per page request10000
WHODB_DISABLE_MOCK_DATA_GENERATIONDisable mock data globally or for named tablesunset
WHODB_DISABLE_UPDATE_CHECKDisable release availability checksfalse
WHODB_ENCRYPTION_KEY64-char hex key used to encrypt stored login sessions. Auto-generated and persisted to WHODB_DATA_DIR if unsetunset
WHODB_DATA_DIRDirectory for the encrypted session database and generated keyplatform default data directory
WHODB_SESSION_TTLSliding idle timeout for login sessions, as a Go duration (for example 168h)168h (7 days)
WHODB_SECUREMark 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

VariableDescriptionDefault
WHODB_OLLAMA_HOSTOllama hostlocalhost (resolved for Docker/WSL when needed)
WHODB_OLLAMA_PORTOllama port11434
WHODB_OLLAMA_NAMEDisplay name for Ollamaunset
WHODB_OPENAI_API_KEYOpenAI API keyunset
WHODB_OPENAI_ENDPOINTOpenAI API base URLhttps://api.openai.com/v1
WHODB_OPENAI_NAMEDisplay name for OpenAIunset
WHODB_ANTHROPIC_API_KEYAnthropic API keyunset
WHODB_ANTHROPIC_ENDPOINTAnthropic API base URLhttps://api.anthropic.com/v1
WHODB_ANTHROPIC_NAMEDisplay name for Anthropicunset
WHODB_LMSTUDIO_BASE_URLLM Studio base URLhttp://localhost:1234/v1
WHODB_LMSTUDIO_API_KEYLM Studio API keyunset
WHODB_LMSTUDIO_NAMEDisplay name for LM Studiounset

Generic OpenAI-compatible providers can be added with the WHODB_AI_GENERIC_<ID>_* pattern. See Setting Up AI providers.

CLI cloud providers

VariableDescriptionDefault
WHODB_ENABLE_AWS_PROVIDEREnable AWS provider support in the CLIfalse
WHODB_AWS_PROVIDERJSON array of AWS provider definitionsunset
WHODB_ENABLE_AZURE_PROVIDEREnable Azure provider support in the CLIfalse
WHODB_AZURE_PROVIDERJSON array of Azure provider definitionsunset
WHODB_ENABLE_GCP_PROVIDEREnable GCP provider support in the CLIfalse
WHODB_GCP_PROVIDERJSON array of GCP provider definitionsunset

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_POSTGRES
  • WHODB_COCKROACHDB
  • WHODB_MYSQL
  • WHODB_MARIADB
  • WHODB_TIDB
  • WHODB_SQLITE3
  • WHODB_MONGODB
  • WHODB_REDIS
  • WHODB_ELASTICSEARCH
  • WHODB_CLICKHOUSE
  • WHODB_DUCKDB
  • WHODB_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:

FieldDescription
aliasLabel shown on the login page
hostDatabase hostname or IP
userUsername
passwordPassword
databaseDatabase name or file path
portPort number as a string
advancedKey/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#

First connection

Walk through the connection flow after WhoDB is running.

Cloud providers

Use local CLI discovery for AWS, Azure, and GCP.

Was this page helpful?