Skip to content

configuration reference

Copy sample-config.yaml to config.yaml and fill in your values. config.yaml is gitignored — never commit real secrets. Unknown keys are ignored; missing keys fall back to the defaults below.

backpulse:
server:
listen: ":8080" # bind address inside the container
base_url: "https://backpulse.example.com" # externally reachable origin
commitment_allow_origin: "*" # CORS origin for POST /commitments
database:
postgres_url: "postgresql://backpulse:backpulse@postgres:5432/backpulse"
worker:
sweep_interval_sec: 15 # detection sweep cadence
self_heartbeat_url: "" # dead-man URL for backpulse itself
email:
provider: "smtp"
smtp_host: "mail.example.com"
smtp_port: 587
smtp_user: "backpulse@example.com"
smtp_pass: "changeme" # empty = delivery disabled
from_addr: "backpulse@example.com"
notify:
max_attempts: 5 # retries before dead-letter
tenant_email_per_hour: 100
recipient_email_per_hour: 20
limits:
ping_rate_per_min: 60
max_body_bytes: 10240
retention:
ping_days: 30
auth:
session_secret: "changeme-generate-with-openssl-rand-hex-32" # REQUIRED, see below

Two keys refuse to boot until set: database.postgres_url and auth.session_secret (minimum 32 characters — generate with openssl rand -hex 32). The placeholder value is rejected explicitly.

Tune worker.sweep_interval_sec down for tighter detection or up for a quieter database. worker.self_heartbeat_url points at any external dead-man’s switch so you learn if backpulse itself stops running.