Skip to content

Environment variables

Copy Directwerk/.env.example to Directwerk/.env. With profile local, Spring Boot loads it automatically via spring.config.import. Never commit .env.

Runtime profile

VariableDefaultNotes
SPRING_PROFILES_ACTIVE(required)local | stage | prod | docker

Database

VariableDefaultNotes
DIRECTWERK_POSTGRES_PORT5433Host port (Compose maps to container 5432)
SPRING_DATASOURCE_USERNAMEmyuser
SPRING_DATASOURCE_PASSWORD(required)Used by Compose, Spring, Flyway
SPRING_DATASOURCE_URLauto (local)Override for managed Postgres in prod

OAuth2 / JWT

VariableNotes
DIRECTWERK_ISSUERToken issuer URL; HTTPS required in prod
DIRECTWERK_PLATFORM_CLIENT_IDDefault directwerk-platform-admin
DIRECTWERK_TENANT_CLIENT_IDDefault directwerk-tenant-frontend
DIRECTWERK_PLATFORM_CLIENT_SECRETRequired for local/stage/prod
DIRECTWERK_TENANT_CLIENT_SECRETRequired for local/stage/prod
DIRECTWERK_JWT_PRIVATE_KEYRSA PEM; empty locally → ephemeral keys
DIRECTWERK_JWT_PUBLIC_KEYRSA PEM; required in prod

Account / dev seeds (local)

VariablePurpose
DIRECTWERK_DEV_PLATFORM_ADMIN_EMAILSeeded platform admin email
DIRECTWERK_DEV_PLATFORM_ADMIN_PASSWORDPlatform admin password
DIRECTWERK_DEV_SEED_PASSWORDTenant seed user password
DIRECTWERK_ACCOUNT_EMAIL_VERIFICATION_REQUIREDfalse locally for easy testing
DIRECTWERK_BOOTSTRAP_PLATFORM_ADMIN_EMAIL / _PASSWORDFirst admin when none exists (docker/stage/prod)

Email

VariableDefault (local)Notes
DIRECTWERK_EMAIL_ENABLEDtrue
DIRECTWERK_EMAIL_PROVIDERsmtpnone skips delivery
DIRECTWERK_EMAIL_FROMnoreply@directwerk.localVerified sender in prod
DIRECTWERK_EMAIL_STUDIO_BASE_URLhttp://localhost:3004HTTPS tenant site URL for auth links in prod
DIRECTWERK_EMAIL_ADMIN_BASE_URLhttp://localhost:3001HTTPS in prod
DIRECTWERK_MAIL_HOSTlocalhostMailpit locally
DIRECTWERK_MAIL_PORT1025

See Email & background jobs for queue architecture.

Object storage

VariableNotes
DIRECTWERK_STORAGE_ENABLEDMust be true to wire upload APIs; required in prod
DIRECTWERK_STORAGE_PROVIDERbunny or hetzner
DIRECTWERK_STORAGE_REGIONBunny region code (de, uk, …)
DIRECTWERK_STORAGE_BUCKETBucket / zone name
DIRECTWERK_STORAGE_ENDPOINTS3-compatible endpoint URL
DIRECTWERK_STORAGE_FORCE_PATH_STYLEtrue for Bunny
DIRECTWERK_STORAGE_ACCESS_KEY / SECRET_KEYS3 credentials
DIRECTWERK_STORAGE_PUBLIC_CDN_BASE_URLHTTPS public pull zone
DIRECTWERK_STORAGE_PRIVATE_CDN_BASE_URLOptional private pull zone
DIRECTWERK_STORAGE_CDN_TOKEN_AUTH_KEYBunny Token Auth for private CDN

See Media upload and Asset storage.

Stripe (optional until go-live)

VariableNotes
STRIPE_SECRET_KEYServer-only
STRIPE_PUBLISHABLE_KEYUsed by studio/web
STRIPE_WEBHOOK_SECRETWebhook signature verification
STRIPE_CONNECT_CLIENT_IDConnect onboarding

Without these, money paths return 501 STRIPE_NOT_IMPLEMENTED. See Stripe billing.

Reverse proxy (prod)

VariablePurpose
DIRECTWERK_FORWARD_HEADERS_STRATEGYSet to framework behind Coolify/Traefik

Job queue (optional tuning)

VariablePurpose
DIRECTWERK_QUEUE_WORKER_IDStable worker id per pod when scaling
DIRECTWERK_QUEUE_POLL_INTERVAL_MSPoll interval
DIRECTWERK_QUEUE_LEASE_SECONDSJob lease duration

Full annotated template: Directwerk/.env.example.

Directwerk — whitelabel publication infrastructure