# Bulwark Webmail - Development Configuration # Copy this file to .env.local to run with the built-in mock JMAP server. # No external mail server required - great for UI development and testing. # # Usage: # cp .env.dev.example .env.local # npm run dev # Open http://localhost:3000 - log in with any username/password. # ============================================================================= # Mock JMAP Server # ============================================================================= # Enable the built-in mock JMAP server (served at /api/dev-jmap) DEV_MOCK_JMAP=true # Point the app at its own mock endpoint. # IMPORTANT: must be an ABSOLUTE URL matching the origin the app runs on # (default: port 3000) - NOT a relative path. A relative path here makes # /api/auth/stalwart-context 400 on every request (resolveTrustedJmapUrl # rejects it), which silently breaks the real server-side session-cookie # flow that S/MIME enrollment, offline sync, and the AI server/retrieval # routes all depend on. The client-side mock fetch works either way, which # is why this is easy to miss - it only bites features needing a real # server-side session identity. JMAP_SERVER_URL=http://localhost:3000/api/dev-jmap # ============================================================================= # App # ============================================================================= APP_NAME=Bulwark Webmail (Dev) # ============================================================================= # Session & Settings Sync (optional for dev) # ============================================================================= SESSION_SECRET=dev-secret-not-for-production-32chars SETTINGS_SYNC_ENABLED=true # ============================================================================= # Logging (verbose for development) # ============================================================================= LOG_FORMAT=text LOG_LEVEL=debug # ============================================================================= # Plugin Development # ============================================================================= # Load plugins from a directory on disk instead of installing them as ZIPs. # Each immediate subfolder is one plugin and needs a manifest.json. When the # manifest's entrypoint exists under src/, it's bundled on demand with esbuild, # so you can edit sources and just refresh the browser. # PLUGIN_DEV_DIR=../my-plugins # ============================================================================= # Login Page Customization (optional) # ============================================================================= # LOGIN_COMPANY_NAME=Dev Team # LOGIN_IMPRINT_URL=https://example.com/imprint # LOGIN_PRIVACY_POLICY_URL=https://example.com/privacy # LOGIN_WEBSITE_URL=https://example.com # Per-domain branding overrides. Each entry must have "host" (exact or # "*.subdomain" wildcard) plus any subset of branding fields to override. # Unset fields fall through to the global values above. # DOMAIN_BRANDING=[{"host":"localhost","loginCompanyName":"Local Dev"}]