Skip to content
pwurbsPublic

About

wuFlow is a lean, security-first, self-hosted issue tracker: Kanban board, backlog, releases and a daily planner in one place.

Topics

Resources

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Repository files navigation

wuFlow Logo

wuFlow

Keep your work flowing. wuFlow is a lean, security-first, self-hosted issue tracker: Kanban board, backlog, releases and a daily planner in one place. Open source, no subscription, no tracking.

Website · Docs · Releases

GitHub Release License Artifact Hub Quality Gate Status Vulnerabilities

wuFlow ships as a single Go binary that stores its data in an embedded SQLite database and serves the vanilla-JavaScript frontend from embedded assets. It runs as a Docker container, on Kubernetes via Helm, or as a Home Assistant add-on.

Why wuFlow and full feature overview → wuflow.dev

wuFlow board with workflow columns and the daily planner

Features

  • Kanban board with configurable columns per project
  • Daily planner next to the board
  • Backlog, releases, archive
  • Subtasks with due dates
  • Change history per issue
  • Labels, filters, text search
  • Users and roles, safe concurrent editing
  • Markdown descriptions and comments

Planned features are listed in the roadmap on wuflow.dev.

Supply chain

wuFlow keeps its runtime small:

wuflow                  Go binary, frontend assets embedded
├─ golang-jwt/jwt       Go: session tokens
├─ mattn/go-sqlite3     Go: embedded SQLite database
├─ golang.org/x/crypto  Go: password hashing
├─ dompurify            JS: Markdown sanitisation
└─ marked               JS: Markdown rendering

Everything else is the Go standard library and vanilla JavaScript. The JS packages are pinned and bundled. Vite is used only at build time. Nothing is loaded from outside at runtime, and no external services are needed.

Quick start

Docker images are available for linux/amd64 and linux/arm64:

docker run -p 8080:8080 \
  -e WF_INITIAL_ADMIN_PASSWORD="change-me-to-something-long" \
  -e WF_SECURE_COOKIE=false \
  -v wuflow-data:/data \
  ghcr.io/pwurbs/wuflow:<version>

Replace <version> with the newest tag in the image repository. There is no latest tag. Then open http://localhost:8080 and log in as admin@local with the given password. This password must meet the password policy, otherwise the app doesn't start. Data is stored in an embedded SQLite database in the /data volume.

Usage Guide

Please refer to the Usage Guide for a brief overview of how to navigate the app, manage issues, and use the Kanban board.

Deployment options

Described in Deployment:

  • Docker: for quick tests and simple setups.
  • Kubernetes (Helm): for production use.
  • Home Assistant: for private use at home.

Configuration

wuFlow is configured with environment variables or command-line flags. Configuration lists all options.

Run wuFlow behind a TLS-terminating reverse proxy and keep Secure Cookie enabled. The Quick start command turns it off, which is only meant for local tests. See Reverse proxy.

Building from source

You need Go, a C compiler (the SQLite driver uses cgo) and Node.js 24+. Clone the repository, then:

# Build the frontend into static/dist/app (the binary embeds it, so repeat after changing static/)
cd static/js
npm ci
npm run build
cd ../..

# Build the binary
go build -o wuflow .

# Start it
./wuflow -initial-admin-password "change-me-to-something-long" -secure-cookie=false

Documentation

Feedback

Found a bug or have an idea? Open an issue. Report security vulnerabilities privately as described in SECURITY.md.

License

Apache 2.0

About

wuFlow is a lean, security-first, self-hosted issue tracker: Kanban board, backlog, releases and a daily planner in one place.

Topics

Resources

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages