Sign inSign up

morelitea/initiative

By morelitea

•Updated 1 day ago

Self-hosted project management for friend groups, gaming communities, and small teams

Image
2

100K+

morelitea/initiative repository overview

⁠Initiative

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.

  • Guilds keep each group's data completely separate, enforced by PostgreSQL Row Level Security
  • Initiatives & projects organize related work, documents, and members
  • Drag-and-drop boards plus Table and Calendar views
  • Collaborative documents with real-time multi-user editing
  • Email/password or OIDC SSO, optional AI integrations, i18n, and mobile push

Full feature list, screenshots, and security architecture: github.com/Morelitea/initiative⁠.

⁠Supported tags

  • latest — the most recent release
  • stable — a release promoted by hand after at least three days out with no open regression reported against it
  • MAJOR, 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⁠.

⁠Quick start (Docker Compose)

# 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.

⁠Database connection (required)

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⁠.

⁠Running as a non-root user (PUID/PGID)

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.

⁠Volumes & ports

  • /app/uploads — uploaded files and documents; mount a volume to persist them
  • Exposes port 8173 (HTTP)

⁠Key environment variables

A trimmed set — see the full list⁠ and backend/.env.example⁠.

VariableDescriptionDefault
SECRET_KEYJWT signing and encryption keyRequired
APP_URLPublic base URL (required for OIDC callbacks)—
DISABLE_GUILD_CREATIONRestrict guild creation to guilds.manage holders (operator and owner)false
ENABLE_PUBLIC_REGISTRATIONAllow registration without an invitetrue
BEHIND_PROXYTrust X-Forwarded-For headersfalse
PUID / PGIDUID/GID the app runs as1000 / 1000

Tag summary

Content type

Image

Digest

sha256:4b3421850…

Size

217.2 MB

Last updated

1 day ago

docker pull morelitea/initiative:dev-0e3e53c