# Copy this file to .env and fill in the values for the features you want to use # NODE_ENV="development" # Database DATABASE_CLIENT="postgresql" # 'postgresql', 'neon', 'planetscale', 'supabase', 'turso', 'sqlite', 'mysql' DATABASE_URL="postgresql://postgres:postgres@localhost:5432/86d" DATABASE_URL_UNPOOLED="postgresql://postgres:postgres@localhost:5432/86d" # Storage STORAGE_CLIENT="local" # 'local', 'vercel', 'aws', 'cloudflare', 'minio', 'railway' STORAGE_LOCAL_DIR="./uploads" STORAGE_LOCAL_BASE_URL="/uploads" STORAGE_PUBLIC_URL_MODE="direct" # use 'proxy' in Docker MinIO setups to serve uploads from /uploads/... instead of raw bucket URLs # S3_ENDPOINT="" # S3_BUCKET="" # S3_REGION="us-east-1" # S3_ACCESS_KEY="" # S3_SECRET_KEY="" # S3_VIRTUAL_HOSTED_STYLE="true" # when using Railway object storage # Application APP_URL="http://localhost:3000" # must use https:// in production NEXT_PUBLIC_STORE_URL="http://localhost:3000" # must use https:// in production APP_ADMIN_EMAIL="admin@86d.app" APP_ADMIN_PASSWORD="abc12321" # Authentication (optional — without BETTER_AUTH_SECRET, auth stays disabled) BETTER_AUTH_URL="http://localhost:3000" # must use https:// in production BETTER_AUTH_SECRET="change-me-to-a-random-string" # populate w/ `openssl rand -base64 32` # Google (Auth) # AUTH_GOOGLE_ID="" # AUTH_GOOGLE_SECRET="" # NEXT_PUBLIC_AUTH_GOOGLE_ID="" # Twitter / X (Auth) # AUTH_TWITTER_ID="" # AUTH_TWITTER_SECRET="" # Slack (Auth) # AUTH_SLACK_ID="" # AUTH_SLACK_SECRET="" # Shopify (Auth) # AUTH_SHOPIFY_ID="" # AUTH_SHOPIFY_SECRET="" # Apple (Auth) # AUTH_APPLE_ID="" # AUTH_APPLE_SECRET="" # AUTH_APPLE_BUNDLE_IDENTIFIER="" # Facebook (Auth) # AUTH_FACEBOOK_ID="" # AUTH_FACEBOOK_SECRET="" # 86d Cloud 86D_API_URL="https://api.86d.app" 86D_API_VERSION="v1" # When set (valid UUID), store config is fetched from the 86d API instead of template/config.json # 86D_STORE_ID="" # Managed Runtime identity (injected by 86d Cloud; not required standalone) # 86D_WORKLOAD_CREDENTIAL="" # Managed Runtime Diagnostics is off by default. This exact value sends only # the bounded v1 health/error contract to the workload-authenticated 86d.app # diagnostics endpoint; it never sends shopper or commerce records. # 86D_TELEMETRY="managed-runtime-diagnostics-v1" # Resend (Emails) # RESEND_API_KEY="" # Twilio (SMS) # TWILIO_ACCOUNT_SID="" # TWILIO_AUTH_TOKEN="" # TWILIO_SERVICE_SID="" # TWILIO_PHONE_NUMBER="" # AI AI_GATEWAY="86d" # '86d', 'openai', 'gemini', 'openrouter', 'vercel' # OPENAI_API_KEY="" # GEMINI_API_KEY="" # OPENROUTER_API_KEY="" # Stripe (Payments) # STRIPE_ACCOUNT_ID="" # STRIPE_SECRET_KEY="" # STRIPE_WEBHOOK_SECRET="" # NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="" # Square (Payments) # SQUARE_ACCESS_TOKEN="" # NEXT_PUBLIC_SQUARE_APPLICATION_ID="" # NEXT_PUBLIC_SQUARE_LOCATION_ID="" # SQUARE_WEBHOOK_SIGNATURE_KEY="" # SQUARE_WEBHOOK_NOTIFICATION_URL="" # PayPal (Payments) # PAYPAL_CLIENT_ID="" # PAYPAL_CLIENT_SECRET="" # PAYPAL_SANDBOX="true" # PAYPAL_WEBHOOK_ID="" # Braintree (Payments) # BRAINTREE_MERCHANT_ID="" # BRAINTREE_PUBLIC_KEY="" # BRAINTREE_PRIVATE_KEY="" # BRAINTREE_SANDBOX="true" # Uber Direct (Delivery) # UBER_CLIENT_ID="" # UBER_CLIENT_SECRET="" # UBER_CUSTOMER_ID="" # UBER_DIRECT_WEBHOOK_SIGNING_KEY="" # Toast (POS) # TOAST_API_KEY="" # TOAST_RESTAURANT_GUID="" # TOAST_SANDBOX="true" # MinIO (Infra) # MINIO_ROOT_USER="minioadmin" # MINIO_ROOT_PASSWORD="minioadmin" # MINIO_API_PUBLISH_PORT="9000" # MINIO_CONSOLE_PUBLISH_PORT="9001" # Vercel (Infra) # VERCEL_BLOB_STORAGE_HOSTNAME="" # BLOB_READ_WRITE_TOKEN="" # Railway (Infra) # RAILWAY_PUBLIC_DOMAIN="" # RAILWAY_PROJECT_ID="" # RAILWAY_SERVICE_ID="" # RAILWAY_ENVIRONMENT_ID="" # EasyPost (Shipping) # EASYPOST_API_KEY="" # EASYPOST_TEST_MODE="true" # EASYPOST_WEBHOOK_SECRET="" # Misc # NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID="" # GOOGLE_MAPS_API_KEY="" # SENTRY_DSN=""