Vikunja
A self-hosted task manager with projects, lists, Kanban boards, filters, sharing, reminders, and CalDAV access.
Why consider Vikunja?
Vikunja is a self-hostable task management platform that helps individuals and teams organize work across multiple views. It provides full data ownership with support for lists, Kanban boards, Gantt timelines, and collaborative project sharing.
Learn Vikunja by building
Practical setup notes, real use cases, and copy-ready examples in one focused guide.
In this guide5 sections
Overview and Core Architecture
Vikunja is a dedicated task management application that gives users full ownership over their personal and collaborative data. According to the official website, Vikunja provides open-source task management with lists, Kanban, Gantt, and more across all user projects. Unlike closed SaaS task trackers, you can run Vikunja on your own infrastructure under the AGPLv3, keeping complete control over your tasks and projects as detailed on vikunja.io.
For developers and organizations inspecting the software foundation, the core source code of the project is licensed under the GNU Affero General Public License Version 3, as documented in the official LICENSE file. The backend is written in Go, providing fast API response times, while the frontend delivers a responsive web interface for managing complex task hierarchies without external vendor lock-in, as seen on GitHub.
Project Organization and Views
At the foundation of everyday workflows, projects in Vikunja allow you to organize all of your tasks and create subprojects to organize everything hierarchically. This nested hierarchy keeps unrelated initiatives separated while enabling aggregated overviews at parent levels, as outlined in the features documentation. Individual tasks can contain due dates, reminders, checklists, priority levels, and file attachments.
Depending on how individual team members prefer to work, Vikunja lets you visualize workflows across classic list, Gantt chart, table, or Kanban board views depending on preference. The list view provides a quick checklist layout, the Kanban board enables visual progress tracking through custom columns, the Gantt timeline highlights deadline dependencies, and the table view surfaces compact metadata attributes for bulk triage, as shown in the Vikunja features overview.
Creating tasks rapidly is streamlined through keyboard shortcuts and natural language parsing. For instance, the quick add magic feature supports batch task creation in a single request when pasting lists into the input bar, allowing users to import multiple items instantly, as highlighted in the v2.5.0 release notes.
Team Collaboration and Smart Filtering
When scaling beyond solo productivity, team collaboration in Vikunja allows sharing projects with users or teams while task assignments clarify responsibilities. Permissions can be customized to grant read-only, read-write, or administrative privileges to specific collaborators, making the platform equally practical for family coordination or cross-functional team sprints, as detailed on the features page.
To navigate large task repositories without clutter, saved filters allow you to define custom task criteria once and access matching tasks whenever needed across boards. Users can combine parameters like assignee, label, due date window, and project scope into dynamic filter views that stay updated automatically, according to Vikunja features documentation.
Deploying Vikunja with Docker Compose
Self-hosting Vikunja is commonly executed using Docker Compose alongside a dedicated database service. In standard production environments, host permissions must grant Vikunja write access to the files directory before launching the container stack, as explained in the full Docker example documentation.
Initialize the files directory with standard ownership:
mkdir $PWD/fileschown 1000 $PWD/filesThe standard Docker Compose configuration connects Vikunja to PostgreSQL:
services: vikunja: image: vikunja/vikunja environment: VIKUNJA_SERVICE_PUBLICURL: http://<the public ip or host where Vikunja is reachable> VIKUNJA_DATABASE_HOST: db VIKUNJA_DATABASE_PASSWORD: changeme VIKUNJA_DATABASE_TYPE: postgres VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja VIKUNJA_SERVICE_SECRET: <a super secure random secret> ports: - 3456:3456 volumes: - ./files:/app/vikunja/files depends_on: db: condition: service_healthy restart: unless-stopped db: image: postgres:18 environment: POSTGRES_PASSWORD: changeme POSTGRES_USER: vikunja volumes: - ./db:/var/lib/postgresql restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"] interval: 2s start_period: 30sManaging File Permissions and Database Selection
Understanding execution context is critical when running containers in non-root environments. By default, Vikunja container processes run under user ID 1000 without a group assigned, which prevents unintentional privilege escalation while requiring corresponding filesystem permissions on the host mount, as documented in the Docker setup guide.
For storage architecture, supported database backends for Vikunja include PostgreSQL, MySQL, and SQLite depending on deployment scale. SQLite is well-suited for single-user lightweight installations, whereas PostgreSQL or MySQL are recommended for multi-user collaborative setups that demand concurrent transaction handling, as noted in the official deployment docs. Once running, navigate to port 3456 on your host IP to complete initial account registration and begin structuring your projects.
Related tools
More options with a similar category or technology profile.
McFly
Fly through your shell history with an intelligent neural network search engine.
cheat
Interactive command-line cheatsheets for system administrators and software engineers.
Pipenv
Python development workflow for humans uniting Pipfile, pip, and virtualenv.
Rye
Comprehensive Python package and workspace management tool written in Rust.