Config File Location
MeepaChat searches for a config file in this order:$MEEPA_CONFIG_PATH— if set, only this path is checked~/.meepachat/config.yaml— primary location (written bymeepachat init)/etc/meepa/config.yaml— system-wide location
meepachat init writes the config to ~/.meepachat/config.yaml automatically.
Precedence
Server
HTTP port the server listens on. Can also be set via
meepachat start --port N.Network address to bind to. Can also be set via
meepachat start --bind ADDR.Public URL of the server (e.g.
https://chat.example.com). Required for invite links and email links to work correctly. Also controls whether session cookies are set with the Secure flag — set this to an https:// URL in production.Log output format.
text for human-readable output, json for structured logs.Database
PostgreSQL connection string. MeepaChat runs migrations automatically on startup.
Redis connection string. Used for WebSocket pub/sub when running multiple server instances. Optional — omit to run without Redis (single instance only).
Authentication
URL of the auth service. Set by
meepachat init.Shared secret for the auth service. Must match the value configured in the auth sidecar.
When
false, new users must have a valid invite link to register. The first user is always exempt and becomes admin.When
true, users must verify their email address before they can log in. Requires SMTP to be configured.File Storage
MeepaChat stores uploads in S3-compatible storage. If no S3 endpoint is configured, files are stored on the local filesystem.S3-compatible endpoint URL. Omit the
https:// scheme — set S3_USE_SSL=true separately.Examples: localhost:9010 (MinIO), your-account.r2.cloudflarestorage.com (Cloudflare R2), s3.amazonaws.com (AWS S3).S3 access key ID.
S3 secret access key.
S3 bucket name. The bucket must already exist.
S3 region. Required for AWS S3. Optional for MinIO and Cloudflare R2.
Enable TLS when connecting to the S3 endpoint. Set to
true for any public S3 service.Local directory for file uploads when S3 is not configured. Also used as a temporary staging area when S3 is enabled.
Maximum file upload size in bytes. Default is 20 MB (20 × 1024 × 1024).
MinIO (default)
meepachat init starts a local MinIO instance. No additional configuration needed for local deployments.
Cloudflare R2
AWS S3
Legacy
MINIO_* environment variables (MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY, MINIO_BUCKET, MINIO_USE_SSL) are still accepted as fallbacks when the corresponding S3_* variable is not set.SMTP / Email
Email is used for invite links and email verification. Optional unlessREQUIRE_EMAIL_VERIFICATION=true.
SMTP server hostname (e.g.
smtp.mailgun.org, smtp.gmail.com).SMTP port. 587 for STARTTLS (recommended), 465 for TLS, 25 for unencrypted.
SMTP username.
SMTP password.
From address for outgoing email (e.g.
chat@example.com).Push Notifications
Web Push (VAPID)
Browser push notifications use VAPID keys. Generate them once and store them permanently — changing keys will break existing browser subscriptions.Base64url-encoded ECDSA P-256 public key.
Base64url-encoded ECDSA P-256 private key.
Contact URL or
mailto: address identifying the push server (e.g. mailto:admin@example.com).FCM (Firebase Cloud Messaging)
Required for push notifications on iOS and Android mobile apps.Path to a Firebase service account JSON file. Download from Firebase Console → Project Settings → Service accounts.
Sessions
How long login sessions remain valid. Accepts Go duration strings:
720h (30 days), 168h (7 days), 24h (1 day).CORS
Comma-separated list of allowed CORS origins. When not set, only same-origin requests are permitted.Example:
https://chat.example.com,https://app.example.comSearch
URL of an Apache Tika server for full-text extraction from uploaded files (PDF, Office docs, etc.). Optional — omit to skip content indexing of attachments.Example:
http://localhost:9998Auto-Update
When
true, the server checks for updates every 6 hours and restarts automatically if a new version is available. Connected clients receive an update_restarting WebSocket event before the restart.