Environment variables

Every environment variable the kinora server reads, with defaults and when each is required.

This is the full reference for the server process environment. If you run the self-host Docker Compose bundle, you configure a friendlier subset (PUBLIC_URL, WEB_PORT, …) that maps onto these internally - see Configuration. Run the server directly and these are the variables it reads.

Config is validated at startup (zod); a missing required variable, or KINORA_CLOUD=true without its Polar variables, stops the server from booting.

Core

VariableRequiredDefaultNotes
NODE_ENVyes-development or production.
PORTyes-Port the server listens on.
BASE_URLyes-The server’s own public URL. Drives auth callbacks and absolute links.
WEB_ORIGINyes-The dashboard origin. Used to build run URLs and email links.
AUTH_SECRETyes-Session secret. Generate one: openssl rand -hex 32.
KINORA_CLOUDnofalseCloud mode (enables Polar billing). false = self-host, every feature unlimited.
KINORA_DEMOnofalsePublic read-only demo: auto-session as the seeded demo user, no mutations/ingest.
INGEST_RATE_LIMITno600Ingest requests per minute per client IP (DoS backstop). Raise for pathological suites.

Cookies

VariableRequiredNotes
COOKIE_DOMAINconditionalShare the session cookie across subdomains (e.g. .kinora.dev for app./api.). Leave unset for single-origin self-host (host-only cookie). Required when KINORA_CLOUD=true in production.

Database (Postgres)

VariableRequiredNotes
POSTGRES_HOSTyesDatabase host.
POSTGRES_PORTyesDatabase port.
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DByesCredentials and database name.

Artifact storage

Leave the S3_* variables unset to store artifacts on local disk. Set all five to use an S3-compatible store instead. See Storage & artifacts.

VariableDefaultNotes
STORAGE_DIR.data/artifactsLocal directory for artifacts when S3 is not configured.
S3_ENDPOINT / S3_REGION / S3_BUCKET-S3-compatible endpoint, region, bucket.
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY-S3 credentials.

Social login (optional)

A provider is enabled only when both its id and secret are set. Leave empty for email + password only.

VariableNotes
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle OAuth.
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETGitHub OAuth.

Email (SMTP, optional)

SMTP_HOST, SMTP_PORT, and SMTP_FROM together enable email (verification, password reset, invitations, and alert emails). Leave SMTP_HOST empty to disable all email flows.

VariableNotes
SMTP_HOSTSMTP server host. Empty disables email.
SMTP_PORTSMTP port.
SMTP_USER / SMTP_PASSCredentials (optional; some relays need none).
SMTP_FROMFrom address, e.g. kinora <no-reply@example.dev>.

Slack (optional)

VariableNotes
SLACK_CLIENT_ID / SLACK_CLIENT_SECRETThe “Add to Slack” OAuth app. Without it, Slack alerts fall back to a manually pasted webhook URL.

Cloud billing (Polar)

Required when KINORA_CLOUD=true; unused on self-host. The server refuses to boot in cloud mode without all four.

VariableNotes
POLAR_ACCESS_TOKENPolar API token.
POLAR_WEBHOOK_SECRETVerifies Polar webhooks.
POLAR_PRODUCT_TEAM_ID / POLAR_PRODUCT_PRO_IDPolar product ids for the paid plans.

Observability (optional)

VariableNotes
SENTRY_DSNServer error reporting. Empty disables it.

Feedback (Stowline, cloud-only)

Powers the in-app “Send feedback” form. Cloud-only: a self-host instance never posts to the kinora issue tracker, so these are ignored unless KINORA_CLOUD=true.

VariableNotes
STOWLINE_API_KEY / STOWLINE_PROJECT_ID / STOWLINE_API_URLStowline issue-tracker credentials and endpoint.