Server Configuration
ServerConfig reads direct keyword arguments and environment variables with the RECAP_ prefix when constructed directly. ServerConfig.from_yaml(path) reads values below top-level server:. recap-server applies explicit --host, --port, and --log-level flags after loading its configuration.
Fields
| Field | Default | Meaning |
|---|---|---|
db_path |
None |
SQLite database path |
database_uri |
None |
Non-file database URI, stored as secret |
host |
127.0.0.1 |
Bind host |
port |
8000 |
Bind port |
log_level |
info |
Logging level |
authentication_mode |
single-user |
single-user or multi-user |
api_key |
None |
Single-user API key, stored as secret |
entitlement_snapshot_path |
None |
Multi-user entitlement snapshot |
entitlement_snapshot_max_age_seconds |
300 |
Positive snapshot age limit |
audit_log_path |
recap-audit.jsonl |
Audit JSONL output path |
database_url returns sqlite:///<db_path> for file configuration or the secret database URI.
Validation
Exactly one of db_path and database_uri is required. single-user requires non-empty api_key; multi-user requires entitlement_snapshot_path. entitlement_snapshot_max_age_seconds must be positive. Path fields accept strings and are converted to Path. Invalid configuration raises Pydantic validation errors or ValueError from the model validator.
YAML
server:
db_path: /data/recap.db
host: 0.0.0.0
port: 8000
authentication_mode: single-user
api_key: secretEnvironment variables include RECAP_DB_PATH, RECAP_HOST, RECAP_PORT, RECAP_AUTHENTICATION_MODE, and RECAP_API_KEY when ServerConfig is constructed directly. ServerConfig.from_yaml() supplies YAML values as constructor arguments, so YAML overrides environment variables; explicit CLI flags override loaded configuration.
audit_log_path is currently a configuration field, but the server application does not yet connect it to a durable audit sink.
authentication_mode: multi-user and entitlement_snapshot_path are validated by ServerConfig, but the current recap-server startup path does not pass those settings into the application. Multi-user deployment therefore remains unavailable until that wiring and end-to-end startup coverage are implemented.