Self-hosted project management for friend groups, gaming communities, and small teams
100K+
Self-hosted project management for friend groups, gaming communities, and small teams — projects, documents, and task boards without the complexity of enterprise tools.
Pre-release software — this project hasn't reached v1.0.0 yet. The API may change between minor releases.
Full feature list, screenshots, and security architecture: github.com/Morelitea/initiative.
latest — the most recent releasestable — a release promoted by hand after at least three days out with no open regression reported against itMAJOR, MAJOR.MINOR, MAJOR.MINOR.PATCH — pin to a version (e.g. 0, 0.49, 0.49.9)Images are multi-arch: linux/amd64 and linux/arm64. Each is signed with cosign by the workflow that built it, and carries an SBOM and build provenance. The command to check one is in the installation guide.
# 1. Download the example compose file
curl -O https://raw.githubusercontent.com/Morelitea/initiative/main/docker-compose.example.yml
cp docker-compose.example.yml docker-compose.yml
# 2. Edit configuration — set a secure SECRET_KEY (and change the default DB passwords)
nano docker-compose.yml
# 3. Start
docker compose up -d
# 4. Open http://localhost:8173 — the first user to register becomes the platform owner
The example compose file ships Postgres 17 and all required settings pre-wired, so it works as-is once you set SECRET_KEY.
One URL, connecting as the database owner:
DATABASE_URL=postgresql+asyncpg://<owner>:<password>@db:5432/<database>
At startup Initiative uses it to create its own least-privilege logins (app_provisioner, app_user, app_admin), with passwords derived from SECRET_KEY, and serves every request on those. To name the logins yourself instead, for a pooler or a database provisioned elsewhere, see Database connection.
The container starts as root so its entrypoint can create the runtime user, fix ownership on the uploads volume, then drop privileges with gosu. The app process itself runs unprivileged — default UID/GID 1000:1000.
To run as a different UID/GID (e.g. to match a NAS user that owns the uploads volume), set the PUID/PGID environment variables. Do not add a Docker user: (Compose) or --user (run) override — that starts the entrypoint as non-root and fails with fatal: Only root may add a user or group to the system.
/app/uploads — uploaded files and documents; mount a volume to persist themA trimmed set — see the full list and backend/.env.example.
| Variable | Description | Default |
|---|---|---|
SECRET_KEY | JWT signing and encryption key | Required |
APP_URL | Public base URL (required for OIDC callbacks) | — |
DISABLE_GUILD_CREATION | Restrict guild creation to guilds.manage holders (operator and owner) | false |
ENABLE_PUBLIC_REGISTRATION | Allow registration without an invite | true |
BEHIND_PROXY | Trust X-Forwarded-For headers | false |
PUID / PGID | UID/GID the app runs as | 1000 / 1000 |
Content type
Image
Digest
sha256:4b3421850…
Size
217.2 MB
Last updated
1 day ago
docker pull morelitea/initiative:dev-0e3e53c