| 1 | <p align="center"> |
| 2 | <img width="372" src="internal/httpapi/web/githublogo.png" alt="scrumboy logo" /> |
| 3 | <br /> |
| 4 | <img src="https://img.shields.io/badge/version-v3.22.6-blue" alt="version" /> |
| 5 | <a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--v3-orange" alt="license" /></a> |
| 6 | <img src="https://img.shields.io/badge/i18n-23%20languages-yellow" alt="i18n" /> |
| 7 | <a href="https://github.com/markrai/scrumboy/actions/workflows/ci.yml"><img src="https://github.com/markrai/scrumboy/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI" /></a> |
| 8 | <a href="SECURITY.md"><img src="https://img.shields.io/badge/Snyk-monitored-8A2BE2?logo=snyk&logoColor=white" alt="snyk monitored" /></a> |
| 9 | <a href="https://scorecard.dev/viewer/?uri=github.com/markrai/scrumboy"><img src="https://api.scorecard.dev/projects/github.com/markrai/scrumboy/badge" alt="OpenSSF Scorecard" /></a> |
| 10 | </p> |
| 11 | |
| 12 | #### Self-hosted project management & issue-tracking solution + instant shareable & customizable boards + realtime collaboration, automation, API access and MCP-compatible client support |
| 13 | |
| 14 | <img width="2975" height="1078" alt="image" src="internal/httpapi/web/github_preview.jpg" /> |
| 15 | |
| 16 | ## Table of contents |
| 17 | |
| 18 | - [Quick Start](#quick-start) |
| 19 | - [Run the official Docker image](#run-the-official-docker-image) |
| 20 | - [Build locally from source](#build-locally-from-source) |
| 21 | - [Run from source](#run-from-source) |
| 22 | - [Run the Windows executable](#run-the-windows-executable) |
| 23 | - [Why Scrumboy?](#why-scrumboy) |
| 24 | - [Modes](#modes) |
| 25 | - [Features](#features) |
| 26 | - [Optional Configuration](#optional-configuration) |
| 27 | - [Environment variables](#environment-variables) |
| 28 | - [Server and data](#server-and-data) |
| 29 | - [Encryption and TLS](#encryption-and-tls) |
| 30 | - [OIDC / SSO](#oidc--sso) |
| 31 | - [Feature flags](#feature-flags) |
| 32 | - [Web Push (VAPID)](#web-push-vapid) |
| 33 | - [SMTP (self-service password reset)](#smtp-self-service-password-reset-via-email) |
| 34 | - [Public URL and reverse proxy](#public-url-and-reverse-proxy) |
| 35 | - [Encryption key for 2FA/password reset](#encryption-key-for-2fapassword-reset) |
| 36 | - [SMTP for self-service password reset (optional)](#smtp-for-self-service-password-reset-optional) |
| 37 | - [OIDC / SSO login (optional)](#oidc--sso-login-optional) |
| 38 | - [Owner disaster recovery](#owner-disaster-recovery) |
| 39 | - [TLS / HTTPS (optional)](#tls--https-optional) |
| 40 | - [PWA / Web Push (optional)](#pwa--web-push-optional) |
| 41 | - [Frontend build note](#frontend-build-note) |
| 42 | - [Integrations & API Access](#integrations--api-access) |
| 43 | - [MCP (JSON-RPC) for AI agents](#mcp-json-rpc-for-ai-agents) |
| 44 | - [Webhooks (outbound HTTP)](#webhooks-outbound-http) |
| 45 | - [Roles](#roles) |
| 46 | - [System roles (instance-wide)](#system-roles-instance-wide) |
| 47 | - [Project roles (per project)](#project-roles-per-project) |
| 48 | - [Export scope](#export-scope) |
| 49 | - [Import modes](#import-modes) |
| 50 | - [Documentation](#documentation) |
| 51 | - [License and Contributions](#license-and-contributions) |
| 52 | |
| 53 | ## Quick Start |
| 54 | |
| 55 | Runs in seconds. No setup required. |
| 56 | |
| 57 | No `.env` file, TLS certificates, or encryption key are required to start the app. |
| 58 | |
| 59 | Scrumboy creates runtime data under `./data` by default. The default SQLite database is `./data/app.db`, and SQLite may also create `app.db-wal` and `app.db-shm` while the server is running. |
| 60 | |
| 61 | ### Run the official Docker image |
| 62 | |
| 63 | Scrumboy is distributed as a container image on GitHub Container Registry: |
| 64 | |
| 65 | `ghcr.io/markrai/scrumboy:latest` |
| 66 | |
| 67 | Published images are multi-arch for `linux/amd64` and `linux/arm64`; Docker pulls the variant that matches your host. |
| 68 | |
| 69 | **Docker run** (named volume for persistent SQLite data under `/data`): |
| 70 | |
| 71 | ```bash |
| 72 | docker run -d \ |
| 73 | --name scrumboy \ |
| 74 | -p 127.0.0.1:8080:8080 \ |
| 75 | -v scrumboy-data:/data \ |
| 76 | ghcr.io/markrai/scrumboy:latest |
| 77 | ``` |
| 78 | |
| 79 | The image defaults to `DATA_DIR=/data` and `SQLITE_PATH=/data/app.db`. Mount a volume or host directory on `/data` so the database **and** file-backed uploads (for example `user-wallpapers/`) survive container recreation. Back up the whole `/data` volume (or at least `app.db` p |