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.
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
- 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.
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.
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.
Please refer to the Usage Guide for a brief overview of how to navigate the app, manage issues, and use the Kanban board.
Described in Deployment:
- Docker: for quick tests and simple setups.
- Kubernetes (Helm): for production use.
- Home Assistant: for private use at home.
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.
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- Operation: Deployment, Configuration, Helm chart, Home Assistant add-on
- API: API Design, Swagger
- Architecture: Backend, Frontend, Concurrency Control, Testing
- Security: Security Guidelines, User Management, Client Security, Input Validation, Markdown Security
Found a bug or have an idea? Open an issue. Report security vulnerabilities privately as described in SECURITY.md.

