######################################################################## # ------------ MANDATORY (CHANGE ACCORDING TO YOUR SETUP) ------------ # ######################################################################## ############ # BASICS # ############ WEBAPP_URL=http://localhost:3000 # Required for next-auth. Should be the same as WEBAPP_URL # If your pplication uses a custom base path, specify the route to the API endpoint in full, e.g. NEXTAUTH_URL=https://example.com/custom-route/api/auth NEXTAUTH_URL=http://localhost:3000 # Can be used to deploy the application under a sub-path of a domain. This can only be set at build time # BASE_PATH= # Encryption keys # Please set both for now, we will change this in the future # You can use: `openssl rand -hex 32` to generate one ENCRYPTION_KEY= # @see: https://next-auth.js.org/configuration/options#nextauth_secret # You can use: `openssl rand -hex 32` to generate a secure one NEXTAUTH_SECRET= # API Secret for running cron jobs. (mandatory) # You can use: `openssl rand -hex 32` to generate a secure one CRON_SECRET= # Set the minimum log level(debug, info, warn, error, fatal) LOG_LEVEL=info # BullMQ workers require REDIS_URL (for example `redis://localhost:6379`) to be set. # BullMQ worker startup is enabled by default outside tests. Set to 0 to disable. # BULLMQ_WORKER_ENABLED=1 # Set to 1 on web/API pods that only enqueue jobs while a separate BullMQ worker deployment consumes them. # BULLMQ_EXTERNAL_WORKER_ENABLED=0 # Number of BullMQ worker instances started per Formbricks server process. # BULLMQ_WORKER_COUNT=1 # Number of concurrent jobs each BullMQ worker can process. # BULLMQ_WORKER_CONCURRENCY=1 # Survey publish/close scheduling is configured with public build-time env vars because the editor UI # also needs to render the selected execution time and timezone. # NEXT_PUBLIC_SURVEY_SCHEDULING_TIME_ZONE=Europe/Berlin # NEXT_PUBLIC_SURVEY_SCHEDULING_LOCAL_HOUR=0 # NEXT_PUBLIC_SURVEY_SCHEDULING_LOCAL_MINUTE=0 ############## # DATABASE # ############## DATABASE_URL='postgresql://postgres:postgres@localhost:5432/formbricks?schema=public' ################# # HUB (DEV) # ################# # The dev stack (pnpm db:up / pnpm go) runs Formbricks Hub on port 8080. # Set explicitly to avoid confusion; override as needed when using docker-compose.dev.yml. HUB_API_KEY=dev-api-key HUB_API_URL=http://localhost:8080 HUB_DATABASE_URL=postgresql://postgres:postgres@postgres:5432/postgres?sslmode=disable # Hub image tag used by docker-compose.dev.yml (hub + hub-migrate). Leave unset to use the # pinned default in the compose file; override here when testing a specific Hub release. # HUB_IMAGE_TAG=0.2.0 ########################### # CUBE ANALYTICS (XM V5) # ########################### # XM Suite v5 analysis features require Cube.js. The local dev stack exposes Cube on port 4000. CUBEJS_API_URL=http://localhost:4000 # Generate with: openssl rand -hex 32. `pnpm dev:setup` will create/preserve this automatically. CUBEJS_API_SECRET= ################ # MAIL SETUP # ################ # Necessary if email verification and password reset are enabled. # See optional configurations below if you want to disable these features. MAIL_FROM=noreply@example.com MAIL_FROM_NAME=Formbricks SMTP_HOST=localhost SMTP_PORT=1025 # Enable SMTP_SECURE_ENABLED for TLS (port 465) SMTP_SECURE_ENABLED=0 SMTP_USER=smtpUser SMTP_PASSWORD=smtpPassword # If set to 0, the server will not require SMTP_USER and SMTP_PASSWORD(default is 1) # SMTP_AUTHENTICATED= # If set to 0, the server will accept connections without requiring authorization from the list of supplied CAs (default is 1). # SMTP_REJECT_UNAUTHORIZED_TLS=0 ######################################################################## # ------------------------------ OPTIONAL -----------------------------# ######################################################################## # Uncomment the variables you would like to use and customize the values. ############## # S3 STORAGE # ############## # S3 Storage is required for the file upload in serverless environments like Vercel S3_ACCESS_KEY= S3_SECRET_KEY= S3_REGION= S3_BUCKET_NAME= # Configure a third party S3 compatible storage service endpoint like StorJ leave empty if you use Amazon S3 # e.g., https://gateway.storjshare.io S3_ENDPOINT_URL= # Force path style for S3 compatible storage (0 for disabled, 1 for enabled) S3_FORCE_PATH_STYLE=0 # Set this URL to add a public domain for all your client facing routes(default is WEBAPP_URL) # PUBLIC_URL=https://survey.example.com ##################### # Disable Features # ##################### # Email Verification. If you enable Email Verification you have to setup SMTP-Settings, too. EMAIL_VERIFICATION_DISABLED=1 # Password Reset. If you enable Password Reset functionality you have to setup SMTP-Settings, too. PASSWORD_RESET_DISABLED=1 # Password reset token lifetime in minutes. Must be between 5 and 120 if set. # PASSWORD_RESET_TOKEN_LIFETIME_MINUTES=30 # Development-only helper: log the password reset link to the server console instead of sending reset emails. # DEBUG_SHOW_RESET_LINK=1 # Email login. Disable the ability for users to login with email. # EMAIL_AUTH_DISABLED=1 # Organization Invite. Disable the ability for invited users to create an account. # INVITE_DISABLED=1 ########## # Other # ########## # Display privacy policy, imprint and terms of service links in the footer of signup & public pages. PRIVACY_URL= TERMS_URL= IMPRINT_URL= IMPRINT_ADDRESS= # Configure Turnstile in signup flow # TURNSTILE_SITE_KEY= # TURNSTILE_SECRET_KEY= # Google reCAPTCHA v3 keys RECAPTCHA_SITE_KEY= RECAPTCHA_SECRET_KEY= # Configure Github Login GITHUB_ID= GITHUB_SECRET= # Configure Google Login GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= # Configure Azure Active Directory Login AZUREAD_CLIENT_ID= AZUREAD_CLIENT_SECRET= AZUREAD_TENANT_ID= # Configure Formbricks AI at the instance level # Set the provider used for AI features on this instance. # Accepted values for AI_PROVIDER: aws, google, azure # Set AI_MODEL to the provider-specific model or deployment name and configure the matching credentials below. # AI_PROVIDER=google # AI_MODEL=gemini-2.5-flash # Google Cloud credentials for Gemini models # AI_GOOGLE_CLOUD_PROJECT= # AI_GOOGLE_CLOUD_LOCATION= # AI_GOOGLE_CLOUD_CREDENTIALS_JSON= # AI_GOOGLE_CLOUD_APPLICATION_CREDENTIALS= # Amazon Bedrock credentials # AI_AWS_REGION= # AI_AWS_ACCESS_KEY_ID= # AI_AWS_SECRET_ACCESS_KEY= # AI_AWS_SESSION_TOKEN= # Azure AI / Microsoft Foundry credentials # AI_AZURE_BASE_URL= # AI_AZURE_RESOURCE_NAME= # AI_AZURE_API_KEY= # AI_AZURE_API_VERSION=v1 # OpenID Connect (OIDC) configuration # OIDC_CLIENT_ID= # OIDC_CLIENT_SECRET= # OIDC_ISSUER= # OIDC_DISPLAY_NAME= # OIDC_SIGNING_ALGORITHM= # Configure SAML SSO # SAML_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/formbricks-saml # Configure this when you want to ship JS & CSS files from a complete URL instead of the current domain # ASSET_PREFIX_URL= # Oauth credentials for Notion Integration NOTION_OAUTH_CLIENT_ID= NOTION_OAUTH_CLIENT_SECRET= # Stripe Billing Variables STRIPE_PUBLISHABLE_KEY= STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= # Oauth credentials for Google sheet integration GOOGLE_SHEETS_CLIENT_ID= GOOGLE_SHEETS_CLIENT_SECRET= GOOGLE_SHEETS_REDIRECT_URL= # Oauth credentials for Airtable integration AIRTABLE_CLIENT_ID= # Oauth credentials for Slack integration SLACK_CLIENT_ID= SLACK_CLIENT_SECRET= # Enterprise License Key ENTERPRISE_LICENSE_KEY= # Internal Environment (production, staging) - used for internal staging environment # ENVIRONMENT=production # Automatically assign new users to a specific organization and role within that organization # Insert an existing organization id or generate a valid CUID for a new one at https://www.getuniqueid.com/cuid (e.g. cjld2cjxh0000qzrmn831i7rn) # (Role Management is an Enterprise feature) # AUTH_SSO_DEFAULT_TEAM_ID= # AUTH_SKIP_INVITE_FOR_SSO= # Send new users to Brevo # BREVO_API_KEY= # BREVO_LIST_ID= # Ignore Rate Limiting across the Formbricks app # RATE_LIMITING_DISABLED=1 # Disable telemetry reporting (usage stats sent to Formbricks). Ignored when an EE license is active. # TELEMETRY_DISABLED=1 # Allow webhook URLs to point to internal/private network addresses (e.g. localhost, 192.168.x.x) # WARNING: Only enable this if you understand the SSRF risks. Useful for self-hosted instances # that need to send webhooks to internal services. # DANGEROUSLY_ALLOW_WEBHOOK_INTERNAL_URLS=1 # OpenTelemetry OTLP endpoint (base URL, exporters append /v1/traces and /v1/metrics) # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 # OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf # OTEL_SERVICE_NAME=formbricks # OTEL_RESOURCE_ATTRIBUTES=deployment.environment=development # OTEL_TRACES_SAMPLER=parentbased_traceidratio # OTEL_TRACES_SAMPLER_ARG=1 # Unsplash API Key UNSPLASH_ACCESS_KEY= # The below is used for Next Caching (uses In-Memory from Next Cache if not provided) REDIS_URL=redis://localhost:6379 # The below is used for Rate Limiting (uses In-Memory LRU Cache if not provided) (You can use a service like Webdis for this) # REDIS_HTTP_URL: # Chatwoot # CHATWOOT_BASE_URL= # CHATWOOT_WEBSITE_TOKEN= # Enable Prometheus metrics # PROMETHEUS_ENABLED= # PROMETHEUS_EXPORTER_PORT= # The SENTRY_DSN is used for error tracking and performance monitoring with Sentry. # SENTRY_DSN= # The SENTRY_AUTH_TOKEN variable is picked up by the Sentry Build Plugin. # It's used automatically by Sentry during the build for authentication when uploading source maps. # SENTRY_AUTH_TOKEN= # The SENTRY_ENVIRONMENT is the environment which the error will belong to in the Sentry dashboard # SENTRY_ENVIRONMENT= # Configure the minimum role for user management from UI(owner, manager, disabled) # USER_MANAGEMENT_MINIMUM_ROLE="manager" # Configure the maximum age for the session in seconds. Default is 86400 (24 hours) # SESSION_MAX_AGE=86400 # Audit logs options. Default 0. # AUDIT_LOG_ENABLED=0 # If the ip should be added in the log or not. Default 0 # AUDIT_LOG_GET_USER_IP=0 # Optional overrides for running Cube against a non-default database. # The official local docker-compose.dev.yml stack points Cube at the local `postgres` service automatically. # CUBEJS_DB_HOST=postgres # CUBEJS_DB_PORT=5432 # CUBEJS_DB_NAME=postgres # CUBEJS_DB_USER=postgres # CUBEJS_DB_PASS=postgres # Lingo.dev API key for translation generation LINGO_API_KEY=your_api_key_here