cp .env.example .env and edit. Each variable has a
working local default in docker-compose.yml, so a bare docker compose up
runs; you only set what a real deployment needs.
Security (required)
string
required
Session-token signing secret. The API refuses to start if it’s unset or shorter
than 16 chars. Generate one:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Public URLs
For a real deployment, point these at your domain (behind HTTPS).string
Public origin of the dashboard, e.g.
https://replayfy.example.com.string
Public origin of the API, e.g.
https://api.example.com. The dashboard image
reads this at runtime, so one image works for any host.string
Comma-separated allowlist of browser origins. Set it to your dashboard origin.
Datastores
The compose defaults wire these to the bundled containers. Override only to point at external/managed datastores.string
string
Must be a replica set — Prisma requires one. The bundled Mongo self-initiates
rs0; a managed MongoDB (e.g. Atlas) already is one.string
string
Object storage (S3-compatible)
Stores session assets, thumbnails, and media. Any S3-compatible store works — MinIO (the default), AWS S3, Cloudflare R2, Backblaze B2.string
string
boolean
true for MinIO.string
string
string
string
The browser-reachable read URL. Path-style stores include the bucket, e.g.
http://localhost:9002/replayfy.http://localhost:8025. For real delivery:
string
smtp, resend, or console (logs to stdout). Defaults to the Mailpit SMTP.string
Your relay, when
EMAIL_PROVIDER=smtp.string
AI (optional)
See Enable AI for the full setup. In short:string
openrouter (reaches every provider by model id) or blank for Anthropic direct.string
string
The model id, e.g.
anthropic/claude-sonnet-4.5 (OpenRouter) or
claude-sonnet-4-5 (Anthropic direct).First run
boolean
1 (default) seeds a demo workspace + the admin@local / admin login. Set
0 to start empty.boolean
true lets /signup work without a mail server (new accounts are marked
verified on creation). See First login.