# Configuration

> For the complete documentation index, see [llms.txt](https://docs.lertha.com/llms.txt).
> Any documentation page is available as raw Markdown by appending `.md` to its URL.

> Every LERTHA_FLOW_* variable, its default, and what it means.

All variables are prefixed `LERTHA_FLOW_`. Every one has a default that works on a laptop
against a local Postgres; production values come from Doppler.

| Variable | Default | Meaning |
| --- | --- | --- |
| `BIND_IP` | `0.0.0.0` | frontend, UI and health listen address; internal services always bind loopback |
| `PORT` / `HTTP_PORT` | `7233` / `7243` | frontend gRPC (SDKs) and HTTP API |
| `INTERNAL_BASE_PORT` | `7234` | history, matching, worker on base, base+1, base+2 (loopback) |
| `UI_PORT` | `8233` | `0` disables the UI |
| `HEALTH_PORT` | `8234` | `/healthz`, `/readyz` |
| `METRICS_PORT` | `0` | Prometheus `/metrics` when non-zero |
| `PUBLIC_ADDRESS` | `127.0.0.1:7233` | how clients reach the frontend; the DNS name in production |
| `CLUSTER_NAME` | `lertha` | fixed on first boot |
| `NAMESPACES` | `default` | comma-separated; created on boot |
| `RETENTION_DAYS` | `30` | history retention for namespaces the orchestrator creates |
| `HISTORY_SHARDS` | `4` | **fixed forever on first boot**; 4 is right for one small node |
| `LOG_LEVEL` | `info` | |
| `DB_HOST` / `DB_PORT` | `127.0.0.1` / `5432` | |
| `DB_USER` / `DB_PASSWORD` | `lertha` / `lertha` | needs `CREATEDB` on first boot |
| `DB_NAME` / `DB_VISIBILITY_NAME` | `lertha_flow` / `lertha_flow_visibility` | two databases, one server |
| `DB_SSLMODE` | `disable` | `require` or `verify-full` off-box |
| `DB_MAX_CONNS` | `20` | per store |
| `UI_INSECURE_COOKIES` | `false` | `true` only for plain-HTTP local use |
| `UI_PUBLIC_PATH` | | when served under a sub-path |
| `UI_ASSET_PATH` | | serve the UI from this directory instead of the embedded build |

## Fixed on first boot

`HISTORY_SHARDS` and `CLUSTER_NAME` are written into the database the first time and cannot be
changed afterwards without a migration. Decide them before the first production boot.

## Retention

Retention is applied when the orchestrator creates a namespace. Changing it later is a
deliberate operator action (`lertha namespace update`), not a boot side effect.
