Skip to main content

Configuration

Compass uses compass.yaml for self-hosting and local development. The file is visible, diffable, and contains secrets, so keep it out of git and back it up with the Docker volumes.

Examples:

  • local development: compass.example.yaml
  • self-hosting: self-host/compass.example.yaml

Runtime

keyRequiredDescription
runtime.versionSelf-hostDocker image tag used by the self-host compose stack. Defaults to latest. Pin this for reproducible installs.
runtime.nodeEnvYesRuntime mode. Use production for self-hosted and staging; development for local dev.
runtime.timezoneYesBackend timezone. Only Etc/UTC and UTC are accepted.
runtime.logLevelNoWinston log level. Defaults to info. Set to debug to include health-check requests (GET /api/health) in the logs, which are otherwise hidden.

Web

keyRequiredDescription
web.port9080Host port bound to the web container on 127.0.0.1.
web.urlYesPublic frontend URL as seen by the backend. Example: https://compass.example.com.

Backend

keyRequiredDescription
backend.port3000Host port bound to the backend container on 127.0.0.1.
backend.apiUrlYesPublic API URL. Example: https://compass.example.com/api. This is baked into the web bundle when the web image is rebuilt.
backend.originsAllowedYesYAML list of allowed CORS origins. Include web.url.
backend.compassTokenYesBearer token protecting internal sync endpoints.

MongoDB

keyRequiredDescription
mongo.uriYesBackend MongoDB connection string. For self-hosted installs, must include authSource=admin and replicaSet=rs0.
mongo.usernameSelf-hostMongoDB root username created on first container startup. Must match the credentials in mongo.uri.
mongo.passwordSelf-hostMongoDB root password. Changing it after first startup requires a MongoDB user migration.
mongo.replicaSetKeySelf-hostShared secret used for internal authentication between replica set members.

SuperTokens

SuperTokens handles user-sessions for us.

keyRequiredDescription
supertokens.uriYesSuperTokens Core URL as seen by the backend. Self-hosted Docker uses http://supertokens:3567.
supertokens.keyYesAPI key shared by backend and SuperTokens Core.
supertokens.postgres.userSelf-hostPostgres user for the SuperTokens database container.
supertokens.postgres.passwordSelf-hostPostgres password for the SuperTokens database container.
supertokens.postgres.databaseSelf-hostPostgres database name for SuperTokens.

Google

These values are only necessary if you want to enable Google Oauth and/or 2-way sync between Compass and Google Calendar

Both google.clientId and google.clientSecret must be real values for Google features to activate. Setting only one causes backend startup to fail.

keyRequiredDescription
google.clientIdNoGoogle OAuth client ID. Rebuild the web image after changing it.
google.clientSecretNoGoogle OAuth client secret. Backend-only.
google.channelExpirationMinNoGoogle Calendar watch channel lifetime in minutes. Defaults to 10080 (7 days). Watch repair renews a channel once it's within a 3-day buffer of expiring. Short values (e.g. single-digit minutes) are a dev/test override, not a self-hosting setting.
google.webhookUrlNoPublic HTTPS API URL for Google Calendar push notifications. When omitted, Compass uses backend.apiUrl.
google.notificationTokenRequired for HTTPS Google webhooksToken used to verify Google Calendar webhook requests.

See Google Calendar for full setup instructions.

Sync Service

Standalone service (packages/sync) that owns Google Calendar sync end to end. Every deployment runs it — the backend exits at startup without sync.serviceUrl/sync.internalAuthToken configured, and the self-host installer writes the sync: block by default (see Self-Hosting). Sync uses an isolated Mongo database and must not share the backend's database user/data.

keyRequiredDescription
sync.portNoSync HTTP port. Defaults to 3010 in examples.
sync.mongoUriYesIsolated Sync Mongo URI. Never point this at the API database.
sync.internalAuthTokenYesShared secret for Sync internal routes. Must match what the API uses.
sync.callbackBaseUrlYesPublic base URL for provider OAuth/webhook callbacks (proxied as /sync/*).
sync.postConnectRedirectUrlNoBrowser redirect after OAuth connect. Set this to web.url — an unset value falls back to callbackBaseUrl (Sync's own API host), which strands the user there instead of back on the calendar.
sync.serviceUrlYesBase URL the backend uses to reach Sync (e.g. http://localhost:3010). The backend refuses to start without this and internalAuthToken set.
sync.cloudMutationModeNoenabled (default) or maintenance. Maintenance rejects cloud edits/connect with typed MAINTENANCE (503).
sync.executionNopassive (default) or active. Active is required for OAuth begin and provider import/jobs.
sync.maxConcurrencyNoJob concurrency hint for Sync workers.
sync.enforceLeastPrivilegeNoWhen true, Sync verifies its Mongo user cannot read the API database.
sync.compassApiDatabaseNoAPI database name the least-privilege check must be denied access to.

Optional Integrations

keyRequiredDescription
posthog.keyNoPostHog project key injected into the web bundle.
posthog.hostNoPostHog host injected into the web bundle.
stripe.secretKeyNoStripe secret (sk_test_... is fine on staging). All three Stripe keys are required together; omit the whole stripe: block on self-host.
stripe.webhookSecretNoStripe webhook signing secret.
stripe.priceIdNoStripe Price id for the $7.99/month plan.