selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

scrumboy logo

Self-host scrumboy

v3.40.0

Kanban project boards with sprints, SSO and AI-agent APIs

ReleaseOpen SourceAGPL-3.0
docker run -d --name scrumboy -p 127.0.0.1:8080:8080 -v scrumboy-data:/data ghcr.io/markrai/scrumboy:latest
Updated10 hours ago
LanguageGo
Setup difficultyEasy
MobileNative app
ThemeDark mode
Stars
448
Port
8080 (HTTP(S) web UI and API; the server listens on `:8080` by default (BIND_ADDR).)
Docker
ghcr.io/markrai/scrumboy
Scrumboy board view previewScrumboy landing page product screenshot

What is scrumboy?

Scrumboy is a self-hosted project-management and issue-tracking server for solo developers and small teams, written in Go and licensed under AGPL v3. Projects get customizable workflow columns with a dedicated done lane, sprints, priority tiers, tags, dashboards with workload and flow analytics, an agenda fed by ICS calendar feeds, and a freeform sticky-note wall. Collaboration is realtime, and boards can be shared anonymously, published read-only, or exported and re-imported as JSON; existing Trello boards can be migrated from a JSON export with a preview. User login uses a local password with optional TOTP 2FA, and optional OIDC/SSO, SMTP email notifications, password-reset mail, TLS and Web Push are all configuration-driven extras. Automation is first-class: REST API tokens, outbound webhooks, and an MCP JSON-RPC endpoint at /mcp/rpc that Claude Code, Cursor and similar clients can use. Run it with the published GHCR image, docker compose, a go run from source, or a downloaded Windows/macOS executable; everything persists in an embedded SQLite database under ./data, and no environment variables are required to start. An experimental native Android client (Capacitor) must be built from source, and there is no audit-log screen in the UI yet — audit history is queried in the database directly.

Should you self-host scrumboy?

scrumboy scores 52/100 on selfhost.directory (how scoring works) and ranks #28 of 45 in Project Management. It has 448 GitHub stars.

It shipped 11 stable releases in the past year. The latest, v3.40.0, came out on 23 October 2026. New versions land roughly every 4 days.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is Plane (86/100, 61 588 stars). It scores higher overall, so compare the two before you pick. See scrumboy vs Plane side by side.

Features

  • Backup & RestoreJSON export omits uploaded wallpapers and audit_events, so it is not a complete data-directory backup.
  • Kanban Boards
  • MCP server for AI agents
  • Real-Time Collaboration
  • REST API
  • Sprints
  • Trello Import
  • Webhooks
  • Workload and flow analytics

scrumboy README

How to install scrumboy

Install scrumboy with Docker

docker run -d \
  --name scrumboy \
  -p 127.0.0.1:8080:8080 \
  -v scrumboy-data:/data \
  ghcr.io/markrai/scrumboy:latest

How to configure scrumboy

  • BIND_ADDR:8080HTTP(S) listen address

    HTTP(S) listen address

  • DATA_DIR./dataInstance data directory (SQLite + file-backed uploads) when `SQLITE_PATH` is unset

    Instance data directory (SQLite + file-backed uploads) when `SQLITE_PATH` is unset

  • MAX_REQUEST_BODY_BYTES1048576 (1 MiB)Max request body size for ordinary API requests

    Max request body size for ordinary API requests

  • MAX_TRELLO_IMPORT_BYTES33554432 (32 MiB)Max Trello JSON import upload size

    Max Trello JSON import upload size

  • SCRUMBOY_ASSET_INSTANCE_BUDGET_MB10240Note-image storage budget per instance, MiB (`0` disables)

    Note-image storage budget per instance, MiB (`0` disables)

  • SCRUMBOY_ASSET_PROJECT_BUDGET_MB1024Note-image storage budget per project, MiB (`0` disables)

    Note-image storage budget per project, MiB (`0` disables)

  • SCRUMBOY_DEBUG_PUSHoffSet to `1` to log push send/prune

    Set to `1` to log push send/prune

  • SCRUMBOY_ENCRYPTION_KEYemptyBase64 32-byte key for 2FA, password-reset tokens, ICS feed URL encryption

    Base64 32-byte key for 2FA, password-reset tokens, ICS feed URL encryption

  • SCRUMBOY_INLINE_IMAGES_ENABLEDon (unset/empty)Images in story notes (paste/drop/upload); requires Markdown notes and Full Mode

    Images in story notes (paste/drop/upload); requires Markdown notes and Full Mode

  • SCRUMBOY_INTRANET_IPemptyLAN IP for optional startup intranet URL / certificate hints (does not bind)

    LAN IP for optional startup intranet URL / certificate hints (does not bind)

  • SCRUMBOY_LANDING_PAGE_ENABLEDoffFull Mode only: `/` serves the marketing landing and `/_app` is the workspace

    Full Mode only: `/` serves the marketing landing and `/_app` is the workspace

  • SCRUMBOY_MARKDOWN_NOTES_ENABLEDon (unset/empty)Todo notes Markdown preview; opt out with `0`/`false`/`off`/`no`

    Todo notes Markdown preview; opt out with `0`/`false`/`off`/`no`

  • SCRUMBOY_MERMAID_NOTES_ENABLEDon (unset/empty)Mermaid in notes preview; requires Markdown notes enabled

    Mermaid in notes preview; requires Markdown notes enabled

  • SCRUMBOY_MODEfull`full` (auth-capable) or `anonymous`

    `full` (auth-capable) or `anonymous`

  • SCRUMBOY_OIDC_ALLOWED_EMAIL_DOMAINSempty (new-account signup is unrestricted)Comma-separated exact domains allowed to auto-provision new OIDC users

    Comma-separated exact domains allowed to auto-provision new OIDC users

  • SCRUMBOY_OIDC_CLIENT_IDemptyOIDC client ID

    OIDC client ID

  • SCRUMBOY_OIDC_CLIENT_SECRETemptyOIDC client secret

    OIDC client secret

  • SCRUMBOY_OIDC_ISSUERemptyOIDC issuer URL

    OIDC issuer URL

  • SCRUMBOY_OIDC_LOCAL_AUTH_DISABLEDempty (local auth stays on when OIDC enabled)Set to `true` to disable local password login/bootstrap when OIDC is configured

    Set to `true` to disable local password login/bootstrap when OIDC is configured

  • SCRUMBOY_OIDC_REDIRECT_URLemptyAbsolute OIDC callback URL

    Absolute OIDC callback URL

  • SCRUMBOY_PUBLIC_BASE_URLemptyCanonical public origin for reset links, email notify links, OAuth discovery

    Canonical public origin for reset links, email notify links, OAuth discovery

  • SCRUMBOY_PUBLIC_PROJECTS_ENABLEDoffOperator gate for durable-project publication management and isolated public reads; never publishes by itself

    Operator gate for durable-project publication management and isolated public reads; never publishes by itself

  • SCRUMBOY_SMTP_DEBUGoffSet to `1` to log SMTP send attempts

    Set to `1` to log SMTP send attempts

  • SCRUMBOY_SMTP_FROMemptyEnvelope/header From address

    Envelope/header From address

  • SCRUMBOY_SMTP_HOSTemptySMTP relay hostname

    SMTP relay hostname

  • SCRUMBOY_SMTP_PASSWORDemptySMTP auth password (never logged)

    SMTP auth password (never logged)

  • SCRUMBOY_SMTP_PORT587 when unsetSMTP port; explicit invalid values disable SMTP

    SMTP port; explicit invalid values disable SMTP

  • SCRUMBOY_SMTP_TLS_MODEstarttls`starttls`, `implicit`, or `none`

    `starttls`, `implicit`, or `none`

  • SCRUMBOY_SMTP_USERNAMEemptySMTP auth username

    SMTP auth username

  • SCRUMBOY_TLS_CERT./cert.pemTLS certificate path (HTTPS only if cert and key files exist)

    TLS certificate path (HTTPS only if cert and key files exist)

  • SCRUMBOY_TLS_KEY./key.pemTLS private key path

    TLS private key path

  • SCRUMBOY_TRUST_PROXYoffHonor trusted forwarded headers for rate-limit IP / OAuth discovery

    Honor trusted forwarded headers for rate-limit IP / OAuth discovery

  • SCRUMBOY_VAPID_PRIVATE_KEYemptyVAPID private key (URL-safe base64)

    VAPID private key (URL-safe base64)

  • SCRUMBOY_VAPID_PUBLIC_KEYemptyVAPID public key (URL-safe base64)

    VAPID public key (URL-safe base64)

  • SCRUMBOY_VAPID_SUBSCRIBERempty → runtime default scrumboy@localhostVAPID JWT `sub` contact

    VAPID JWT `sub` contact

  • SCRUMBOY_WALL_ENABLEDon (unset/empty)Sticky-note wall; opt out with `0`/`false`/`off`/`no`

    Sticky-note wall; opt out with `0`/`false`/`off`/`no`

  • SCRUMBOY_WEB_DIRunset → script-relative web treeOverride web asset root for frontend build/verify scripts (not server runtime)

    Override web asset root for frontend build/verify scripts (not server runtime)

  • SQLITE_BUSY_TIMEOUT_MS30000SQLite busy timeout (milliseconds)

    SQLite busy timeout (milliseconds)

  • SQLITE_JOURNAL_MODEWALSQLite journal mode

    SQLite journal mode

  • SQLITE_PATHempty → $DATA_DIR/app.dbFull path to the SQLite database file

    Full path to the SQLite database file

  • SQLITE_SYNCHRONOUSFULLSQLite synchronous setting

    SQLite synchronous setting

scrumboy releases & version history

FAQ

How does auditing work, and where can I see it?

Scrumboy appends actions on todos, members, projects and links to an append-only audit_events table automatically, with no setting to enable. There is no audit screen in the web UI or public API yet, so history is reviewed by querying the SQLite database directly.

How do I turn on email notifications?

Email notifications reuse the password-reset SMTP config but do not need the encryption key; once available, each user opts in per category under Settings → Customization. Nothing is emailed unless the user's master toggle and the relevant category are on.

Do I need to configure SMTP? What happens if I don't?

No — SMTP is optional and only powers self-service password-reset email; without it admins can still generate reset links manually and share them out of band. Enabling user reset mail requires SMTP host and From, the encryption key, a valid public base URL, and local auth.

How do I generate SCRUMBOY_ENCRYPTION_KEY?

Generate a base64-encoded 32-byte secret yourself, for example with `openssl rand -base64 32`, and inject it via your process manager, Compose or systemd unit. It is needed for 2FA, password-reset tokens and encrypted ICS feed URLs, and must be backed up with the database.

What are VAPID keys, and do I need them?

They are optional server credentials for Web Push background notifications about todo assignments; boards, live updates and normal use work without them. To enable push, set both SCRUMBOY_VAPID_PUBLIC_KEY and SCRUMBOY_VAPID_PRIVATE_KEY in full mode.

Can Scrumboy MCP OAuth work with OIDC-only login?

Yes — after the initial owner finishes one-time setup in the main app, the OAuth authorization page can continue through the configured SSO and return to the pending consent request.

How do I use Scrumboy with Claude or other MCP clients?

Point native MCP clients at https://YOUR_HOST/mcp/rpc, which speaks JSON-RPC 2.0 over Streamable HTTP with OAuth or tokens. Scrumboy is HTTP-only — it does not support stdio MCP and hosts no cloud relay.

Are tag colors personal, or shared with the team?

Personal tags store a color per user, so teammates can pick different colors for the same tag name. Tags belonging to a specific board have one color everyone on that board sees.

What does the done lane mean for dashboard stats?

Each project marks exactly one workflow lane as done; entering it records done_at, which drives throughput, lead time and sprint completion. Todos in Review or Testing count as WIP until they reach that lane.

How do I edit several todos at once?

Ctrl/⌘-click cards (or Shift-click for a range, or the touch Select mode) and use the bulk edit bar; each field is changed only when its own checkbox is turned on. Viewers cannot multi-select.

How do I enable Mermaid diagrams in my notes?

Mermaid is on by default but only works while Markdown preview is on; set SCRUMBOY_MERMAID_NOTES_ENABLED=0 to disable it alone. Diagrams render from fenced mermaid blocks in the preview tab only.

How do I enable Markdown in my notes?

Markdown preview is on by default; set SCRUMBOY_MARKDOWN_NOTES_ENABLED=0 on the server and restart to turn it off, which also disables Mermaid diagrams and inline images.

What happens if the SSO provider is unavailable?

Existing sessions keep working until they expire, while new SSO sign-ins fail; a dual-authentication owner can use the local login form. Otherwise a host operator stops Scrumboy, backs up the database and runs the offline `scrumboy recover-owner` break-glass command.

Can one account use both a Scrumboy password and SSO?

Yes — accounts can be local-only, SSO-only or dual-authentication, and a local user can connect SSO after confirming their password (and 2FA). SSO login matches accounts only by provider issuer and subject, so a matching email never silently links identities.

More in Issue Tracking

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…