Skip to main content
The release’s self-host/ bundle runs without application source or cloud accounts on the server. Images and corresponding source currently require authorized private-beta access.
  1. Obtain the bundle from the exact release. Verify its signed manifest using the supplied publisher public key. Set the four image references to the manifest’s immutable digests, never a moving tag.
  2. Copy config.env.example to config.env. Use separate random migration and runtime database passwords and set your public HTTPS origin.
  3. Copy each application’s *.env.sample to its own *.env. Fill your Discord application identity, bot token, OAuth secret and session secret. Restrict populated files to mode 0600; do not create a repository-root .env.
  4. Enable Guild Members and Message Content intents. Register your HTTPS origin followed by /api/auth/callback/discord and /api/internal/install/callback. Install with the bot and application-command scopes.
  5. Authenticate to the private image registry using read-only package access. From self-host/, start the bundle:
Route your HTTPS reverse proxy to 127.0.0.1:3000. Database and backend services stay internal. Telemetry is disabled by default. Retain the PostgreSQL 18 volume mount at /var/lib/postgresql. For the first intended account, temporarily enable API signups, restart the API, and sign in through Discord. Close the signup window and restart the API again. Account creation does not grant an application administrator role. Validate Modules, Health, Cases and authorization in a disposable guild before enforcement. Configuration password values initialize database roles; editing them does not rotate existing database credentials. Follow backup and recovery before upgrading or changing persistent state.

Optional public progress snapshot

Without extra configuration, the roadmap uses its bundled public catalog. An operator may mount an atomically updated, validated snapshot file and set PUP_ROADMAP_SNAPSHOT_PATH in the API environment. No planning-service account or credential is required by the application. Invalid snapshots are rejected.