Happier Docs
Deployment

Environment variables

Configuration for the Happier Server.

This page is the runtime environment-variable reference for apps/server.

Notes:

  • Legacy aliases prefixed with HAPPY_ are still accepted where listed, but HAPPIER_ is preferred.
  • Billing/subscription provider secrets are intentionally not documented on this page.

The server has many environment variables because it supports multiple storage/auth/networking topologies. Most deployments only need a small subset.

Required for most production deployments

  • HANDY_MASTER_SECRET Required for apps/server to protect server-managed secrets. Use a long random value and keep it stable across restarts.
  • DATABASE_URL (full flavor / external DB) Required when HAPPIER_DB_PROVIDER=postgres|mysql.
  • HAPPIER_DB_PROVIDER Pick your DB backend (postgres is the default in .env.example).
  • File storage settings for your chosen backend:
    • HAPPIER_FILES_BACKEND=local: no extra required env, or
    • HAPPIER_FILES_BACKEND=s3: requires S3_* credentials + S3_PUBLIC_URL

Strongly recommended (prevents pairing / mobile URL confusion)

  • HAPPIER_PUBLIC_SERVER_URL Canonical/share server URL embedded in QR codes/deep links and advertised via GET /v1/features. This should be the URL your phone can reach (ideally https://...).
  • HAPPIER_WEBAPP_URL (when self-hosting the web UI, or for OAuth return-to) Base URL for the web client and OAuth redirects. Optional if you use the hosted web app at https://app.happier.dev.

Recommended when behind a reverse proxy

  • HAPPIER_SERVER_TRUST_PROXY=1 for typical single-proxy setups (Caddy/Nginx/Traefik), so the server can safely use X-Forwarded-* for request.ip and protocol detection.

Nice-to-have

  • API rate limits: HAPPIER_API_RATE_LIMITS_* (recommended baseline is included below)
  • Metrics: METRICS_*

Canonical template

Use /apps/server/.env.example as the canonical template.

Typical workflow:

cp apps/server/.env.example apps/server/.env

Then:

  • local/dev: load values from apps/server/.env,
  • Docker/Compose/platforms: copy the same key/value set into your deployment env/secret manager.

Core runtime

  • PORT (default 3005)
  • HAPPIER_SERVER_HOST (alias: HAPPY_SERVER_HOST, default 0.0.0.0)
  • NODE_ENV
  • SERVER_ROLE (all | api | worker, default all)
  • HANDY_MASTER_SECRET (required unless auto-generated in light flavor)
  • DATABASE_URL (required for full flavor; optional for light)
  • HAPPIER_DB_PROVIDER (alias: HAPPY_DB_PROVIDER) Values: postgres | mysql | pglite | sqlite
  • HAPPIER_FILES_BACKEND (alias: HAPPY_FILES_BACKEND) Values: s3 | local
  • HAPPIER_SOCKET_ADAPTER (alias: HAPPY_SOCKET_ADAPTER) Values: memory | redis-streams
  • HAPPIER_SOCKET_REDIS_ADAPTER (alias: HAPPY_SOCKET_REDIS_ADAPTER) Legacy boolean toggle; prefer HAPPIER_SOCKET_ADAPTER=redis-streams
  • REDIS_URL (required when Redis adapter is enabled)
  • HAPPIER_INSTANCE_ID (alias: HAPPY_INSTANCE_ID) Stable process identifier for logs/cluster behavior
  • METRICS_ENABLED (default true)
  • METRICS_PORT (default 9090)

Networking / reverse proxy

  • HAPPIER_SERVER_TRUST_PROXY (optional) Controls whether the server trusts X-Forwarded-* headers for client IP / protocol when running behind a reverse proxy.
    • unset: use framework defaults (do not trust forwarded headers)
    • true: trust all proxy hops (only safe if the server is not directly reachable)
    • false: never trust forwarded headers
    • <number>: trust the last N hops (0 is equivalent to false; recommended for typical single-proxy setups: 1)
  • HAPPIER_PUBLIC_SERVER_URL Canonical/share URL for your server. Clients embed this in terminal-connect deep links and QR codes, and the server advertises it via GET /v1/features under capabilities.server.canonicalServerUrl.
    • Use the URL that works from your phone (prefer https://...).
    • If you intentionally run LAN-only, using http://<lan-ip>:3005 is fine, but QR/deep links will only work on the same LAN/VPN.
    • If this is unset, or if the active server URL resolves to loopback-only (localhost, 127.0.0.1, ::1, *.localhost), Happier may intentionally omit the server URL from mobile-oriented QR/deep links instead of embedding a broken address.
  • HAPPIER_WEBAPP_URL (alias: HAPPY_WEBAPP_URL) Base URL for the web client. The server advertises it via GET /v1/features under capabilities.server.webappUrl.
    • For the hosted web app: keep default https://app.happier.dev.
    • For self-hosted UI: set this to your UI origin (often the same as HAPPIER_PUBLIC_SERVER_URL).

User impact:

  • Add your phone
  • Restore account
  • CLI/mobile auth QR links
  • configure-server links

all work best when the embedded server URL is reachable from the target phone/device.

If users see a hint telling them to configure the phone’s server manually, that usually means the current server URL is loopback-only and cannot safely be shared cross-device.

Tailscale Serve inference (optional)

If HAPPIER_PUBLIC_SERVER_URL is unset and the server is exposed via tailscale serve, the server can best-effort infer the https://<machine>.<tailnet>.ts.net URL at boot.

  • HAPPIER_TAILSCALE_INFER_PUBLIC_URL (default true) Set to 0 to disable inference.
  • HAPPIER_TAILSCALE_BIN (default tailscale) Override the tailscale binary path/name.
  • HAPPIER_TAILSCALE_SERVE_STATUS_TIMEOUT_MS (default 750) Timeout for tailscale serve status probing (bounded to 1..10000).

API rate limits

Rate limiting is implemented via @fastify/rate-limit. Each *_WINDOW value accepts human-readable durations like 30 seconds, 1 minute, 5 minutes.

For hot endpoints, the server resolves per-route limits from a centralized catalog. Env var names follow a consistent pattern:

  • HAPPIER_<ID>_RATE_LIMIT_MAX
  • HAPPIER_<ID>_RATE_LIMIT_WINDOW

Where <ID> is the uppercase snake-case id (for example account.profileACCOUNT_PROFILE, session.messages.byLocalIdSESSION_MESSAGES_BY_LOCAL_ID).

Global controls:

  • HAPPIER_API_RATE_LIMITS_ENABLED (default true) Set to 0/false to disable all API rate limits.
  • HAPPIER_API_RATE_LIMITS_GLOBAL_MAX (default 0) Optional global limit applied to all routes. Set to 0 to disable.
  • HAPPIER_API_RATE_LIMITS_GLOBAL_WINDOW (default 1 minute)
  • HAPPIER_API_RATE_LIMITS_GLOBAL_KEY_STRATEGY (default ip-only) Controls how the global rate limit is keyed:
    • ip-only: key by request.ip (recommended storm shield)
    • user-or-ip: key by verified user id when a valid Bearer token is present, otherwise fall back to IP
  • HAPPIER_API_RATE_LIMITS_ROUTE_KEY_STRATEGY (default user-or-ip) Controls how authenticated hot endpoints are keyed (public endpoints remain IP-keyed):
    • user-or-ip: key by verified user id when a valid Bearer token is present, otherwise fall back to IP
    • ip-only: key by request.ip (coherent but can throttle shared IPs/NAT)

IP notes:

  • All IP-based keying uses Fastify’s request.ip.
  • Behind a reverse proxy, configure HAPPIER_SERVER_TRUST_PROXY so request.ip reflects the real client address.

Recommended baseline:

  • Enable a global “storm shield” in production by setting:
    • HAPPIER_API_RATE_LIMITS_GLOBAL_MAX=3000
    • HAPPIER_API_RATE_LIMITS_GLOBAL_WINDOW=1 minute
    • HAPPIER_API_RATE_LIMITS_GLOBAL_KEY_STRATEGY=ip-only
  • Keep route keying as:
    • HAPPIER_API_RATE_LIMITS_ROUTE_KEY_STRATEGY=user-or-ip

If you have many users behind a shared NAT/VPN egress IP, increase HAPPIER_API_RATE_LIMITS_GLOBAL_MAX to avoid throttling legitimate traffic.

Hot endpoints (set *_MAX=0 to disable a specific limit):

  • HAPPIER_SESSION_MESSAGES_RATE_LIMIT_MAX (default 600)
  • HAPPIER_SESSION_MESSAGES_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SESSION_MESSAGES_BY_LOCAL_ID_RATE_LIMIT_MAX (default 600)
  • HAPPIER_SESSION_MESSAGES_BY_LOCAL_ID_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SESSIONS_LIST_RATE_LIMIT_MAX (default 300)
  • HAPPIER_SESSIONS_LIST_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_CHANGES_RATE_LIMIT_MAX (default 600)
  • HAPPIER_CHANGES_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_FEATURES_RATE_LIMIT_MAX (default 120)
  • HAPPIER_FEATURES_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_MACHINES_RATE_LIMIT_MAX (default 300)
  • HAPPIER_MACHINES_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_ARTIFACTS_RATE_LIMIT_MAX (default 300)
  • HAPPIER_ARTIFACTS_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_FEED_RATE_LIMIT_MAX (default 300)
  • HAPPIER_FEED_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_KV_LIST_RATE_LIMIT_MAX (default 600)
  • HAPPIER_KV_LIST_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_ACCOUNT_PROFILE_RATE_LIMIT_MAX (default 300)
  • HAPPIER_ACCOUNT_PROFILE_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_ACCOUNT_SETTINGS_RATE_LIMIT_MAX (default 300)
  • HAPPIER_ACCOUNT_SETTINGS_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SESSION_PENDING_RATE_LIMIT_MAX (default 600)
  • HAPPIER_SESSION_PENDING_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SESSION_PENDING_MATERIALIZE_RATE_LIMIT_MAX (default 120)
  • HAPPIER_SESSION_PENDING_MATERIALIZE_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_DIAGNOSTICS_BUG_REPORT_SNAPSHOT_RATE_LIMIT_MAX (default 30)
  • HAPPIER_DIAGNOSTICS_BUG_REPORT_SNAPSHOT_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_VOICE_TOKEN_RATE_LIMIT_MAX (default 10)
  • HAPPIER_VOICE_TOKEN_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_VOICE_SESSION_COMPLETE_RATE_LIMIT_MAX (default 60)
  • HAPPIER_VOICE_SESSION_COMPLETE_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_OAUTH_EXTERNAL_AUTH_PARAMS_RATE_LIMIT_MAX (default 60)
  • HAPPIER_OAUTH_EXTERNAL_AUTH_PARAMS_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_OAUTH_EXTERNAL_CONNECT_PARAMS_RATE_LIMIT_MAX (default 60)
  • HAPPIER_OAUTH_EXTERNAL_CONNECT_PARAMS_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_OAUTH_EXTERNAL_CALLBACK_RATE_LIMIT_MAX (default 60)
  • HAPPIER_OAUTH_EXTERNAL_CALLBACK_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SHARE_PUBLIC_READ_RATE_LIMIT_MAX (default 10)
  • HAPPIER_SHARE_PUBLIC_READ_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SHARE_PUBLIC_MESSAGES_RATE_LIMIT_MAX (default 20)
  • HAPPIER_SHARE_PUBLIC_MESSAGES_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SHARE_PUBLIC_MANAGE_RATE_LIMIT_MAX (default 10)
  • HAPPIER_SHARE_PUBLIC_MANAGE_RATE_LIMIT_WINDOW (default 1 minute)
  • HAPPIER_SHARE_SESSION_CREATE_RATE_LIMIT_MAX (default 20)
  • HAPPIER_SHARE_SESSION_CREATE_RATE_LIMIT_WINDOW (default 1 minute)

Storage backends

  • S3_HOST
  • S3_PORT (optional)
  • S3_USE_SSL (true/false, default true)
  • S3_BUCKET
  • S3_PUBLIC_URL
  • S3_ACCESS_KEY
  • S3_SECRET_KEY

Light flavor paths

  • HAPPIER_SERVER_LIGHT_DATA_DIR (alias: HAPPY_SERVER_LIGHT_DATA_DIR)
  • HAPPIER_SERVER_LIGHT_DB_DIR (alias: HAPPY_SERVER_LIGHT_DB_DIR)
  • HAPPIER_SERVER_LIGHT_FILES_DIR (alias: HAPPY_SERVER_LIGHT_FILES_DIR)
  • PUBLIC_URL (optional; used for light defaults)

Bug reports

  • HAPPIER_FEATURE_BUG_REPORTS__ENABLED (default 1)
  • HAPPIER_FEATURE_BUG_REPORTS__PROVIDER_URL (default https://reports.happier.dev)
  • HAPPIER_FEATURE_BUG_REPORTS__DEFAULT_INCLUDE_DIAGNOSTICS (default 1)
  • HAPPIER_FEATURE_BUG_REPORTS__MAX_ARTIFACT_BYTES (default 10485760)
  • HAPPIER_FEATURE_BUG_REPORTS__UPLOAD_TIMEOUT_MS (default 120000)
  • HAPPIER_FEATURE_BUG_REPORTS__CONTEXT_WINDOW_MS (default 1800000; min 1000, max 86400000)
  • HAPPIER_FEATURE_BUG_REPORTS__ACCEPTED_ARTIFACT_KINDS (CSV allowlist)

Server diagnostics snapshot controls

  • HAPPIER_BUG_REPORTS_SERVER_DIAGNOSTICS_ENABLED (default 0)
  • HAPPIER_BUG_REPORTS_SERVER_DIAGNOSTICS_ACCESS_MODE (default owner, allowed: authenticated, owner)
  • HAPPIER_SERVER_OWNER_USER_IDS (CSV user ids; used when access mode is owner)
  • HAPPIER_BUG_REPORTS_SERVER_LOG_PATH
  • HAPPIER_SELF_HOST_LOG_DIR (fallback directory for server.log)
  • HAPPIER_BUG_REPORTS_SERVER_LOG_MAX_BYTES (default 262144)
  • HAPPIER_DIAGNOSTICS_BUG_REPORT_SNAPSHOT_RATE_LIMIT_MAX (default 30)
  • HAPPIER_DIAGNOSTICS_BUG_REPORT_SNAPSHOT_RATE_LIMIT_WINDOW (default 1 minute)

Owner-id note:

  • HAPPIER_SERVER_OWNER_USER_IDS expects Happier account ids.
  • Owners can find their account id in the app under Settings → Account.

OAuth and auth

For policy behavior and examples, see Server Auth.

Global auth policy

  • AUTH_ANONYMOUS_SIGNUP_ENABLED
  • AUTH_SIGNUP_PROVIDERS (CSV)
  • AUTH_REQUIRED_LOGIN_PROVIDERS (CSV)
  • AUTH_OFFBOARDING_ENABLED
  • AUTH_OFFBOARDING_INTERVAL_SECONDS
  • AUTH_OFFBOARDING_STRICT
  • HAPPIER_FEATURE_AUTH_RECOVERY__PROVIDER_RESET_ENABLED
  • HAPPIER_FEATURE_AUTH_UI__AUTO_REDIRECT_ENABLED
  • HAPPIER_FEATURE_AUTH_UI__AUTO_REDIRECT_PROVIDER_ID
  • HAPPIER_FEATURE_AUTH_UI__RECOVERY_KEY_REMINDER_ENABLED
  • AUTH_PROVIDERS_CONFIG_PATH
  • AUTH_PROVIDERS_CONFIG_JSON
  • AUTH_ACCOUNT_DISABLED_TTL_SECONDS

Legacy aliases (still accepted):

  • AUTH_RECOVERY_PROVIDER_RESET_ENABLED
  • AUTH_UI_AUTO_REDIRECT
  • AUTH_UI_AUTO_REDIRECT_PROVIDER_ID
  • AUTH_UI_RECOVERY_KEY_REMINDER_ENABLED

Built-in key-challenge login route

Happier’s default “device-key” signup/login flow uses POST /v1/auth.

Server operators can disable this built-in login route (for example when all access should go through a provider like GitHub/OIDC).

  • HAPPIER_FEATURE_AUTH_LOGIN__KEY_CHALLENGE_ENABLED (default 1)

Note: if you disable the key-challenge route, ensure you have at least one viable provider configured (otherwise the server will fail fast at boot to prevent lockouts).

Keyless OAuth login (optional)

Happier can use OAuth providers (GitHub/OIDC) as keyless login methods, meaning accounts can exist without device keys (intended for enterprise + plaintext storage deployments).

Keyless OAuth is gated by feature env vars:

  • HAPPIER_FEATURE_E2EE__KEYLESS_ACCOUNTS_ENABLED (default 0)
  • HAPPIER_FEATURE_AUTH_OAUTH__KEYLESS_ENABLED (default 0)
  • HAPPIER_FEATURE_AUTH_OAUTH__KEYLESS_PROVIDERS (CSV allowlist of provider ids, e.g. github,okta)
  • HAPPIER_FEATURE_AUTH_OAUTH__KEYLESS_AUTO_PROVISION (default 0)

Notes:

  • HAPPIER_FEATURE_AUTH_OAUTH__KEYLESS_AUTO_PROVISION=1 controls whether new keyless accounts can be created on first login.
  • Keyless auto-provisioning requires keyless accounts + plaintext defaults to be enabled (see Server Auth for the current prerequisites).

GitHub OAuth

  • GITHUB_CLIENT_ID
  • GITHUB_CLIENT_SECRET
  • GITHUB_REDIRECT_URL (legacy alias: GITHUB_REDIRECT_URI)
  • GITHUB_HTTP_TIMEOUT_SECONDS
  • GITHUB_STORE_ACCESS_TOKEN
  • GITHUB_WEBHOOK_SECRET
  • GITHUB_APP_ID
  • GITHUB_PRIVATE_KEY
  • GITHUB_OAUTH_PENDING_TTL_SECONDS (legacy fallback for pending TTL)
  • HAPPIER_WEBAPP_URL (alias: HAPPY_WEBAPP_URL)
  • HAPPIER_WEBAPP_OAUTH_RETURN_URL_BASE (alias: HAPPY_WEBAPP_OAUTH_RETURN_URL_BASE)
  • HAPPIER_OAUTH_RETURN_ALLOWED_SCHEMES (alias: HAPPY_OAUTH_RETURN_ALLOWED_SCHEMES)
  • OAUTH_PENDING_TTL_SECONDS
  • OAUTH_STATE_TTL_SECONDS

Note on “optional” web app URL env vars:

  • HAPPIER_WEBAPP_URL / HAPPIER_WEBAPP_OAUTH_RETURN_URL_BASE are only “optional” if you are using the hosted client at https://app.happier.dev.
    • If you are self-hosting the web app, or using a local dev web UI, you must set one of these so the server can redirect back to your client after OAuth.

mTLS auth (enterprise)

For full setup guidance, see Server → mTLS Auth.

  • HAPPIER_FEATURE_AUTH_MTLS__ENABLED (default 0)
  • HAPPIER_FEATURE_AUTH_MTLS__MODE (forwarded | direct)
  • HAPPIER_FEATURE_AUTH_MTLS__AUTO_PROVISION (default 0)
  • HAPPIER_FEATURE_AUTH_MTLS__IDENTITY_SOURCE (san_email | san_upn | subject_cn | fingerprint)
  • HAPPIER_FEATURE_AUTH_MTLS__ALLOWED_EMAIL_DOMAINS (CSV)
  • HAPPIER_FEATURE_AUTH_MTLS__ALLOWED_ISSUERS (CSV; comma/newline separated issuer values; compared against the issuer CN extracted from the forwarded issuer string)
  • HAPPIER_FEATURE_AUTH_MTLS__TRUST_FORWARDED_HEADERS (default 0)
  • HAPPIER_FEATURE_AUTH_MTLS__FORWARDED_EMAIL_HEADER
  • HAPPIER_FEATURE_AUTH_MTLS__FORWARDED_UPN_HEADER
  • HAPPIER_FEATURE_AUTH_MTLS__FORWARDED_SUBJECT_HEADER
  • HAPPIER_FEATURE_AUTH_MTLS__FORWARDED_FINGERPRINT_HEADER
  • HAPPIER_FEATURE_AUTH_MTLS__FORWARDED_ISSUER_HEADER
  • HAPPIER_FEATURE_AUTH_MTLS__RETURN_TO_ALLOW_PREFIXES (CSV)
  • HAPPIER_FEATURE_AUTH_MTLS__CLAIM_TTL_SECONDS

GitHub eligibility restrictions

  • AUTH_GITHUB_ALLOWED_USERS
  • AUTH_GITHUB_ALLOWED_ORGS
  • AUTH_GITHUB_ORG_MATCH
  • AUTH_GITHUB_ORG_MEMBERSHIP_SOURCE
  • AUTH_GITHUB_APP_ID
  • AUTH_GITHUB_APP_PRIVATE_KEY
  • AUTH_GITHUB_APP_INSTALLATION_ID_BY_ORG

Account / terminal auth TTL controls

  • ACCOUNT_AUTH_REQUEST_TTL_SECONDS
  • TERMINAL_AUTH_REQUEST_TTL_SECONDS
  • TERMINAL_AUTH_CLAIM_RETRY_WINDOW_SECONDS
  • VENDOR_TOKEN_MAX_LEN

Encryption / plaintext storage (E2EE opt-out)

For an overview and operator guidance, see Server → Encryption & plaintext storage.

Server-wide storage policy:

  • HAPPIER_FEATURE_ENCRYPTION__STORAGE_POLICY (default required_e2ee) Values: required_e2ee | optional | plaintext_only

Account-level opt-out (only meaningful when policy is optional):

  • HAPPIER_FEATURE_ENCRYPTION__ALLOW_ACCOUNT_OPTOUT (default 0)
  • HAPPIER_FEATURE_ENCRYPTION__DEFAULT_ACCOUNT_MODE (default e2ee) Values: e2ee | plain

Plaintext at-rest sealing (plaintext/keyless accounts only; DB storage):

  • HAPPIER_FEATURE_ENCRYPTION__PLAIN_ACCOUNT_SETTINGS_AT_REST (default server_sealed) Values: none | server_sealed
  • HAPPIER_FEATURE_ENCRYPTION__PLAIN_ACCOUNT_CREDENTIALS_AT_REST (default server_sealed) Values: none | server_sealed

Friends / social

  • HAPPIER_FEATURE_SOCIAL_FRIENDS__ENABLED
  • HAPPIER_FEATURE_SOCIAL_FRIENDS__ALLOW_USERNAME
  • HAPPIER_FEATURE_SOCIAL_FRIENDS__IDENTITY_PROVIDER
  • FRIENDS_USERNAME_MIN_LEN
  • FRIENDS_USERNAME_MAX_LEN
  • FRIENDS_USERNAME_REGEX

Voice

Happier voice/server tokening controls:

  • HAPPIER_FEATURE_VOICE__ENABLED
  • HAPPIER_FEATURE_VOICE__REQUIRE_SUBSCRIPTION
  • VOICE_FREE_SESSIONS_PER_MONTH
  • VOICE_FREE_MINUTES_PER_MONTH
  • VOICE_MAX_CONCURRENT_SESSIONS
  • VOICE_MAX_SESSION_SECONDS
  • VOICE_MAX_MINUTES_PER_DAY
  • HAPPIER_VOICE_TOKEN_RATE_LIMIT_MAX
  • HAPPIER_VOICE_TOKEN_RATE_LIMIT_WINDOW
  • HAPPIER_VOICE_SESSION_COMPLETE_RATE_LIMIT_MAX
  • HAPPIER_VOICE_SESSION_COMPLETE_RATE_LIMIT_WINDOW
  • VOICE_LEASE_CLEANUP
  • VOICE_LEASE_RETENTION_DAYS
  • VOICE_LEASE_CLEANUP_INTERVAL_MS
  • ELEVENLABS_API_KEY
  • ELEVENLABS_AGENT_ID
  • ELEVENLABS_AGENT_ID_PROD

UI/static serving

  • HAPPIER_SERVER_UI_DIR (alias: HAPPIER_SERVER_LIGHT_UI_DIR)
  • HAPPIER_SERVER_UI_PREFIX (alias: HAPPIER_SERVER_LIGHT_UI_PREFIX)
  • HAPPIER_SERVER_UI_REQUIRED (alias: HAPPIER_SERVER_LIGHT_UI_REQUIRED)
  • HAPPIER_SERVER_UI_DEBUG_PATH (debug fallback path visibility)

Background / maintenance jobs

  • HAPPY_ACCOUNT_CHANGE_CLEANUP
  • HAPPY_ACCOUNT_CHANGE_CLEANUP_INTERVAL_MS
  • HAPPY_PRESENCE_STREAM_MAXLEN

Advanced / debug controls

  • HAPPY_EXIT_ON_FATAL
  • HAPPY_SOCKET_ROOMS_ONLY
  • HAPPIER_RPC_FORWARD_TIMEOUT_MS
  • HAPPIER_RPC_FORWARD_CAPABILITIES_TIMEOUT_MS
  • DANGEROUSLY_LOG_TO_SERVER_FOR_AI_AUTO_DEBUGGING

Flavor/internal markers

  • HAPPIER_SERVER_FLAVOR (alias: HAPPY_SERVER_FLAVOR) Runtime marker set by server startup; not typically user-set.

On this page