Configuration

Every environment variable for a self-hosted kinora, copied from selfhost/.env.example.

Self-host is configured entirely through .env (read by docker-compose.yml). Copy .env.example to .env and edit it. Below is every variable.

Required

VariableNotes
PUBLIC_URLThe URL users reach kinora at. Drives links, cookies, and artifact URLs. Default http://localhost:8080. Baked into the web image at build time.
AUTH_SECRETSession secret. Generate one: openssl rand -hex 32.
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DBDatabase credentials.

Server & networking

VariableDefaultNotes
WEB_PORT8080Host port the web container binds to. Match PUBLIC_URL.
POSTGRES_PORT5432Postgres port. POSTGRES_HOST is set to the compose service automatically.
KINORA_CLOUDfalseKeep false for self-host: no billing, every feature unlimited.
COOKIE_DOMAIN(empty)Leave empty for single-origin (host-only cookie).

Email (optional)

Enables email verification, password reset, invitations, and alert emails. Any SMTP provider works (Resend, Brevo, SES, self-hosted). Leave SMTP_HOST empty to disable all email flows.

VariableDefaultNotes
SMTP_HOST(empty)SMTP server host. Empty disables email.
SMTP_PORT587SMTP port.
SMTP_USER / SMTP_PASS(empty)SMTP credentials.
SMTP_FROM(example)From address, e.g. kinora <no-reply@example.dev>.

Social login (optional)

Leave empty to use email + password only.

VariableNotes
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle OAuth.
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETGitHub OAuth.

Artifact storage (optional)

Leave the S3_* variables empty to store trace.zip on a local volume (the default). Set all five to use an S3-compatible store instead. See Storage & artifacts.

VariableNotes
S3_ENDPOINTS3-compatible endpoint URL.
S3_REGIONRegion.
S3_BUCKETBucket name.
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEYCredentials.