Self-Hosted Ticketing and Project Management for Your Home Lab
Running a homelab means running a never-ending list of projects. There's the NAS migration you started three weeks ago, the Kubernetes cluster you're building, the firewall rules you need to audit, the SSL certificates that expire next month, and the ten other things you thought of at 2 AM and forgot by morning. Sticky notes and text files don't scale.
Self-hosted project management tools give you a proper place to track tasks, document decisions, and plan upgrades. They're also a practical exercise in running a real application stack — databases, web servers, authentication — that teaches you skills applicable beyond the homelab.

What to Look For
A good homelab project management tool should be:
- Lightweight: It shouldn't need 4 GB of RAM to show you a task list
- Docker-friendly: Easy to deploy and back up as containers
- Usable by one person: Many tools assume teams; you need one that works for a solo operator
- Flexible views: Kanban boards for workflows, lists for backlogs, calendars for deadlines
- Markdown support: For documenting procedures and decisions within tasks
The Contenders
Plane
Plane is the closest self-hosted alternative to Linear or Jira. It has a modern UI, issue tracking with cycles (sprints), project roadmaps, and a clean API. It's built for software teams but works well for structured homelab project management.
Strengths: Beautiful UI, GitHub-like issue management, cycles/sprints, modules for grouping work, good API
Weaknesses: Heavier resource usage (needs PostgreSQL, Redis, and multiple services), designed for teams rather than individuals
# docker-compose.yml for Plane
# Plane recommends using their setup script:
# curl -fsSL https://prime.plane.so/install | bash
# Or manually with Docker Compose:
services:
web:
image: makeplane/plane-frontend:stable
restart: unless-stopped
depends_on:
- api
ports:
- "3000:3000"
api:
image: makeplane/plane-backend:stable
restart: unless-stopped
depends_on:
- db
- redis
environment:
DATABASE_URL: postgresql://plane:password@db:5432/plane
REDIS_URL: redis://redis:6379
SECRET_KEY: your-secret-key-here
worker:
image: makeplane/plane-backend:stable
restart: unless-stopped
command: celery
depends_on:
- api
- redis
db:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_DB: plane
POSTGRES_USER: plane
POSTGRES_PASSWORD: password
volumes:
- plane-db:/var/lib/postgresql/data
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- plane-redis:/data
volumes:
plane-db:
plane-redis:
Resource usage: ~1.5-2 GB RAM for the full stack.
Vikunja
Vikunja is a lightweight, open-source task manager inspired by Todoist and Wunderlist. It's designed for personal use and small teams, making it an excellent fit for solo homelab operators.
Strengths: Very lightweight, clean UI, Kanban and list views, CalDAV support (sync with your calendar), API, task relations, file attachments
Weaknesses: Less feature-rich than Plane for complex project management, no built-in roadmap view
# docker-compose.yml for Vikunja
services:
vikunja:
image: vikunja/vikunja:latest
restart: unless-stopped
ports:
- "3456:3456"
environment:
VIKUNJA_DATABASE_TYPE: sqlite
VIKUNJA_SERVICE_JWTSECRET: your-secret-here
VIKUNJA_SERVICE_FRONTENDURL: https://tasks.homelab.lan/
volumes:
- ./data:/app/vikunja/files
- ./db:/db
That's it. Vikunja can run with SQLite (no separate database container needed) and serves both the API and frontend from a single container. Total RAM usage: ~50-100 MB.
For a more robust setup with PostgreSQL:
services:
vikunja:
image: vikunja/vikunja:latest
restart: unless-stopped
ports:
- "3456:3456"
environment:
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_PASSWORD: password
VIKUNJA_SERVICE_JWTSECRET: your-secret-here
volumes:
- ./files:/app/vikunja/files
depends_on:
- db
db:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: vikunja
POSTGRES_USER: vikunja
POSTGRES_PASSWORD: password
volumes:
- ./db-data:/var/lib/postgresql/data
Leantime
Leantime is a project management tool aimed at non-project-managers. It has a friendlier interface than Jira-style tools, with built-in time tracking, goal setting, and milestone tracking.
Strengths: Intuitive UI, time tracking, milestones, goal tracking, Gantt charts, simple setup
Weaknesses: PHP-based (requires MySQL/MariaDB), heavier than Vikunja, UI can feel slow
# docker-compose.yml for Leantime
services:
leantime:
image: leantime/leantime:latest
restart: unless-stopped
ports:
- "8080:80"
environment:
LEAN_DB_HOST: db
LEAN_DB_USER: leantime
LEAN_DB_PASSWORD: password
LEAN_DB_DATABASE: leantime
LEAN_SITENAME: "Homelab Projects"
depends_on:
- db
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: rootpassword
MARIADB_DATABASE: leantime
MARIADB_USER: leantime
MARIADB_PASSWORD: password
volumes:
- ./db-data:/var/lib/mysql
Resource usage: ~300-500 MB RAM for the full stack.
Focalboard
Focalboard (by Mattermost) is a Kanban-focused project management tool. It's similar to Notion's boards or Trello but self-hosted.
Strengths: Very clean Kanban UI, multiple board views (table, gallery, calendar), single binary, minimal resources
Weaknesses: Mattermost has shifted focus to integrating Focalboard into Mattermost Boards — the standalone version receives less attention. Future uncertain.
# docker-compose.yml for Focalboard
services:
focalboard:
image: mattermost/focalboard:latest
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./data:/opt/focalboard/data
Focalboard uses SQLite by default and runs as a single container. RAM usage: ~30-80 MB. It's the lightest option here.
Feature Comparison
| Feature | Plane | Vikunja | Leantime | Focalboard |
|---|---|---|---|---|
| Kanban boards | Yes | Yes | Yes | Yes (primary view) |
| List view | Yes | Yes | Yes | Yes |
| Calendar view | No | Yes (CalDAV) | Yes | Yes |
| Gantt chart | Roadmap view | No | Yes | No |
| Time tracking | No | No | Yes | No |
| Cycles/Sprints | Yes | No | Milestones | No |
| API | Full REST API | Full REST API | Limited | REST API |
| CalDAV sync | No | Yes | No | No |
| Min RAM | ~1.5 GB | ~50 MB | ~300 MB | ~30 MB |
| Database | PostgreSQL | SQLite or PostgreSQL | MySQL/MariaDB | SQLite or PostgreSQL |
| Single container | No (5 services) | Yes | No (2 services) | Yes |
| Mobile app | No (PWA) | Android (F-Droid) | No (PWA) | No (PWA) |
| License | AGPL-3.0 | AGPL-3.0 | AGPL-3.0 | AGPL-3.0/MIT |
My Recommendation
For most homelab operators, Vikunja is the sweet spot. It's lightweight enough to run alongside everything else without hogging resources, supports SQLite so you don't need another database container, has CalDAV support for syncing with your calendar, and the UI is clean and fast. It handles the "solo operator managing a bunch of projects" use case perfectly.
If you want something more structured with sprint planning and a software-development-style workflow, Plane is excellent — just be prepared for the heavier resource footprint.
Focalboard is great if you just want a simple Kanban board, though its long-term future as a standalone product is uncertain.
Leantime shines if you want built-in time tracking and milestone management.
Setting Up for Homelab Use
Whatever tool you choose, here's how to make it work well for homelab management:
Project Structure
Create projects that match your homelab areas:
- Infrastructure: Hardware, networking, power
- Services: Docker containers, VMs, applications
- Security: Firewall rules, certificates, updates
- Backups: Backup jobs, restore testing
- Wishlist: Future projects and ideas
Label System
Use consistent labels across projects:
priority/high,priority/medium,priority/lowtype/maintenance,type/upgrade,type/new-setup,type/bugstatus/blocked(waiting on hardware, parts, etc.)
Backup Your Boards
Your project management tool needs backups too. For SQLite-based tools, this is simple:
# Add to your backup script
cp /opt/vikunja/db/vikunja.db /backup/vikunja/vikunja-$(date +%Y%m%d).db
For PostgreSQL-backed tools:
docker exec vikunja-db pg_dump -U vikunja vikunja > /backup/vikunja/dump-$(date +%Y%m%d).sql
The irony of needing to track "set up backups for the task tracker" as a task in the task tracker is not lost on anyone running a homelab. But having a single place to capture everything you need to do — and see what you've already done — transforms homelab management from chaos to something that feels controlled.