Every variable Conduit reads, and what breaks without it
Core (required to boot)
| Variable | Purpose |
|---|---|
NEXT_APPLICATION_URL |
Base URL the app runs at, e.g. http://localhost:3000 |
BETTER_AUTH_SECRET |
Signing secret for better-auth sessions |
DATABASE_URL |
Postgres connection string Prisma reads |
Without DATABASE_URL the Prisma client can't connect and every page that touches data fails. Without BETTER_AUTH_SECRET, sessions can't be signed and login breaks entirely.
Google sign-in (optional)
| Variable | Purpose |
|---|---|
AUTH_GOOGLE_ID |
Google OAuth client ID |
AUTH_GOOGLE_SECRET |
Google OAuth client secret |
Leave both unset and the "Continue with Google" button has nothing to connect to — email/password sign-in still works.
Email (verification and password reset)
| Variable | Purpose |
|---|---|
RESEND_API_KEY |
API key for Resend, Conduit's transactional email sender |
RESEND_SENDER |
From address for verification and password-reset emails |
Without these, new accounts can register but never receive the verification email that unlocks their account.
Receipt scanning
| Variable | Purpose |
|---|---|
RECEIPT_WEBHOOK_SECRET |
Shared secret that authenticates callbacks from the scan service back into Conduit |
NEXT_SCAN_SERVICE_URL |
Base URL of the external service that decodes NFC-e QR codes |
SCAN_JWT_PRIVATE_KEY |
RSA private key (PKCS8 PEM) Conduit signs scan requests with |
These three only matter if you're running the scan pipeline described in Deploying with Docker. Without them, the SCAN_CODE tab on the report form has nothing to talk to — the MANUAL tab still works.
Monitoring
| Variable | Purpose |
|---|---|
SENTRY_DSN |
Where @sentry/nextjs reports errors — Conduit's .env.example points this at a self-hosted GlitchTip instance rather than Sentry's own cloud |
SENTRY_AUTH_TOKEN |
Upload token for source maps at build time |
Docker build-time behavior#
The bundled Dockerfile gives every one of these variables a placeholder fallback (${VAR:-default}) at build time, specifically so bun run build stays green when a value is missing or only known at runtime. Real values are expected to be injected by the deploy platform (the Dockerfile's comments are written for Coolify specifically) and only need to be correct when the container actually starts.
Related: Getting Started for local setup, Deploying with Docker for how these variables reach a running container, or back to the documentation overview.