Self-hosting
Configuration
Configuration is entirely environment variables. There is no config file, and no flag that reads one.
This page is the prose. The flat alphabetical list is generated from the source tree — operators search for a variable name, so that page is a lookup, and this one explains what things mean and what breaks without them.
Database
| Variable | Unset means |
|---|---|
GARBOARD_DB_URL |
No server. This is required. |
Postgres 16 with pgvector. Without the extension the server starts anyway, logs one line and silently loses episodic memory — see install.
Identity of the instance
| Variable | Unset means |
|---|---|
GARBOARD_BASE_URL |
Your git host cannot call you. Must be publicly reachable. |
GARBOARD_UI_URL |
Links back into the UI are wrong or absent. |
The git host
| Variable | Unset means |
|---|---|
GARBOARD_GIT_PROVIDER |
Defaults to GitHub. Set gitlab for GitLab. |
GARBOARD_GITHUB_APP_ID |
/webhook returns 503 — unconfigured. |
GARBOARD_GITHUB_PRIVATE_KEY_FILE |
Same. |
GARBOARD_WEBHOOK_SECRET |
Deliveries fail signature verification. |
GARBOARD_GITLAB_TOKEN / _URL / _WEBHOOK_SECRET / _GROUP |
GitLab equivalents. The webhook secret is fail-closed: unset refuses every delivery, with a warning at startup. |
Keys you must back up
| Variable | Unset means |
|---|---|
GARBOARD_SECRET_KEY |
An admin cannot save an identity provider at all — there is nothing to seal the client secret with. Per-organisation SSO is unavailable. |
GARBOARD_KMS_KEY_ID |
Use an external KMS key instead of the local envelope key. |
GARBOARD_RECEIPT_KEY |
Receipts are written unsigned, and every surface says so. |
GARBOARD_RECEIPT_RETIRED_KEYS |
Receipts signed with a rotated-out key stop verifying. |
Losing the first two makes sealed data permanently unopenable. See backup and restore.
Authentication
| Variable | Unset means |
|---|---|
GARBOARD_AUTH |
No auth required. Set 1 to require it. |
GARBOARD_TOKEN |
No service token. Setting one gates the API surface, including /metrics. |
GARBOARD_OIDC_ISSUER / _CLIENT_ID / _CLIENT_SECRET / _REDIRECT_URL |
No instance-level SSO. |
GARBOARD_SSO_ALLOWED_DOMAINS |
SSO admits any identity your provider asserts. Set this. |
GARBOARD_SIGNUP_DISABLED |
Self-service signup is open. Set 1 for invite-only. |
Outbound, and how to switch it off
| Variable | Unset means |
|---|---|
ANTHROPIC_API_KEY |
No prose, no fixes — and a fully working gate. Not a degraded mode. |
GARBOARD_EMBEDDER |
The offline hash embedder. No outbound call. |
GARBOARD_EMBEDDER_MODEL / _DIM / _URL |
Only relevant with a hosted embedder. _DIM must match the model’s output width. |
GARBOARD_SCHEMA_DIR |
The default pinned provider CRD cache location. |
GARBOARD_SLACK_WEBHOOK |
The notifier is a no-op. Break-glass expiry reminders are off entirely. |
These are the only outbound paths, and each is off or offline by default. See data flow.
Retention
| Variable | Unset means |
|---|---|
GARBOARD_AUDIT_RETENTION_DAYS |
Keep the audit log forever. Zero, negative and non-numeric mean the same — the safe direction. |
Not for you
Some variables the binary reads are not configuration: test switches and hosted-mode flags. They are deliberately absent from the generated reference, and the classification that withholds them fails the build if someone adds a variable without deciding which side it is on. If you found one by reading a process listing, it is not a supported knob.
