Environment variables
Every variable that configures a Carbon instance, grouped by concern. The source of truth is packages/env.
Carbon reads its configuration from environment variables. The registry lives in packages/env;
.env.example is the template; infrastructure-only variables are read by sst.config.ts. A minimal
instance needs the Supabase connection, a session secret, and Redis. Everything else activates features
as you need them.
Core
Platform-wide behavior and edition.
community, cloud, enterprise, or test. Gates edition-specific features.email, google, azure, passkey.Database — Supabase
Carbon's single Postgres database. The first four are required and crash boot if missing.
Auth & sessions
google is in AUTH_PROVIDERS.azure is enabled.Sign-in bot protection uses Cloudflare Turnstile: CLOUDFLARE_TURNSTILE_SITE_KEY and
CLOUDFLARE_TURNSTILE_SECRET_KEY.
Jobs & cache
Inngest keys are required in production
INNGEST_SIGNING_KEY and INNGEST_EVENT_KEY are only optional in development, where INNGEST_DEV=1 is set. Without INNGEST_DEV, the app fails to boot if either is missing, and no background jobs (MRP, scheduling, notifications, integration syncs) or queued events run. A self-hosted Inngest server supplies both. The Docker with Caddy recipe generates them for you.
Email & billing
AI & analytics
Integrations
OAuth credentials for each connector, all optional, set only the ones you use.
Infrastructure — SST
Read by sst.config.ts at deploy time, not by the app.
Older notes list TRIGGER_* (Trigger.dev) and UPSTASH_REDIS_* variables. Those are gone. Jobs run on
Inngest and the cache uses a plain REDIS_URL.