Vikunja
Open-source task management and to-do app.
Overview
Vikunja is a powerful open-source task management and to-do application that provides teams and individuals with comprehensive project organization tools. Born from the need for a privacy-focused alternative to proprietary task managers, Vikunja offers advanced features like Kanban boards, Gantt charts, time tracking, and CalDAV integration while maintaining complete data ownership. The application supports multiple project views, collaborative workspaces, and extensive customization options that rival enterprise solutions.
This deployment combines Vikunja with MariaDB to create a robust, production-ready task management system. MariaDB's enhanced performance characteristics and improved JSON handling make it ideal for Vikunja's complex data structures, including nested tasks, project hierarchies, and user permissions. The database's Aria storage engine provides better crash recovery for task data, while its advanced indexing capabilities ensure fast search and filtering across large project datasets.
This stack is perfect for development teams, small businesses, and organizations seeking complete control over their project management data. Unlike cloud-based alternatives, this self-hosted solution ensures sensitive project information remains within your infrastructure while providing enterprise-grade features like LDAP authentication, webhook integrations, and comprehensive API access for custom workflows.
Key Features
- Multiple project views including List, Kanban, Table, and interactive Gantt charts for comprehensive project visualization
- CalDAV endpoint integration allowing synchronization with external calendar applications and mobile devices
- Built-in data migration tools supporting imports from Todoist, Trello, Microsoft To-Do, and other popular task managers
- MariaDB's enhanced JSON functions providing faster query performance for Vikunja's complex task metadata and custom fields
- Advanced task relationships including subtasks, dependencies, and cross-project linking with visual dependency mapping
- Time tracking and reporting features with detailed analytics on project progress and team productivity
- Collaborative workspaces with granular permission controls for teams, projects, and individual task assignments
- MariaDB's Galera Cluster compatibility enabling high-availability deployments for mission-critical project management
Common Use Cases
- 1Software development teams managing sprints, backlogs, and release planning with Kanban and Gantt chart visualization
- 2Marketing agencies coordinating campaign timelines, client deliverables, and creative asset production workflows
- 3Construction and project management companies tracking milestones, dependencies, and resource allocation across multiple sites
- 4Educational institutions managing curriculum development, research projects, and administrative task coordination
- 5Non-profit organizations coordinating volunteer activities, fundraising campaigns, and community outreach programs
- 6Personal productivity enthusiasts seeking advanced GTD (Getting Things Done) implementation with calendar integration
- 7Remote teams requiring collaborative task management with detailed progress tracking and reporting capabilities
Prerequisites
- Minimum 1GB RAM recommended for MariaDB with moderate task datasets and multiple concurrent users
- Port 3456 available for Vikunja web interface access and API communications
- Basic understanding of task management concepts including projects, labels, and user permission structures
- Environment variable management knowledge for configuring database passwords and frontend URLs
- Storage planning for task attachments, as Vikunja files volume will grow with document uploads
- Network configuration knowledge if deploying behind reverse proxy for SSL termination and custom domains
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 vikunja: 3 image: vikunja/vikunja:latest4 container_name: vikunja5 restart: unless-stopped6 environment: 7 VIKUNJA_DATABASE_TYPE: mysql8 VIKUNJA_DATABASE_HOST: db9 VIKUNJA_DATABASE_DATABASE: vikunja10 VIKUNJA_DATABASE_USER: vikunja11 VIKUNJA_DATABASE_PASSWORD: ${DB_PASSWORD}12 VIKUNJA_SERVICE_FRONTENDURL: http://localhost:3456/13 ports: 14 - "3456:3456"15 volumes: 16 - vikunja_files:/app/vikunja/files17 depends_on: 18 - db1920 db: 21 image: mariadb:1022 container_name: vikunja-db23 restart: unless-stopped24 environment: 25 MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}26 MYSQL_DATABASE: vikunja27 MYSQL_USER: vikunja28 MYSQL_PASSWORD: ${DB_PASSWORD}29 volumes: 30 - vikunja_db:/var/lib/mysql3132volumes: 33 vikunja_files: 34 vikunja_db: .env Template
.env
1DB_PASSWORD=changemeUsage Notes
- 1Docs: https://vikunja.io/docs/
- 2Access at http://localhost:3456 - register first user as admin
- 3MariaDB backend for better performance at scale
- 4Views: List, Kanban, Table, and Gantt charts
- 5CalDAV endpoint for calendar sync at /dav/
- 6Migrate from Todoist, Trello, MS To-Do via import
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
vikunja
vikunja:
image: vikunja/vikunja:latest
container_name: vikunja
restart: unless-stopped
environment:
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_PASSWORD: ${DB_PASSWORD}
VIKUNJA_SERVICE_FRONTENDURL: http://localhost:3456/
ports:
- "3456:3456"
volumes:
- vikunja_files:/app/vikunja/files
depends_on:
- db
db
db:
image: mariadb:10
container_name: vikunja-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: vikunja
MYSQL_USER: vikunja
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- vikunja_db:/var/lib/mysql
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 vikunja:5 image: vikunja/vikunja:latest6 container_name: vikunja7 restart: unless-stopped8 environment:9 VIKUNJA_DATABASE_TYPE: mysql10 VIKUNJA_DATABASE_HOST: db11 VIKUNJA_DATABASE_DATABASE: vikunja12 VIKUNJA_DATABASE_USER: vikunja13 VIKUNJA_DATABASE_PASSWORD: ${DB_PASSWORD}14 VIKUNJA_SERVICE_FRONTENDURL: http://localhost:3456/15 ports:16 - "3456:3456"17 volumes:18 - vikunja_files:/app/vikunja/files19 depends_on:20 - db2122 db:23 image: mariadb:1024 container_name: vikunja-db25 restart: unless-stopped26 environment:27 MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}28 MYSQL_DATABASE: vikunja29 MYSQL_USER: vikunja30 MYSQL_PASSWORD: ${DB_PASSWORD}31 volumes:32 - vikunja_db:/var/lib/mysql3334volumes:35 vikunja_files:36 vikunja_db:37EOF3839# 2. Create the .env file40cat > .env << 'EOF'41DB_PASSWORD=changeme42EOF4344# 3. Start the services45docker compose up -d4647# 4. View logs48docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/vikunja/run | bashTroubleshooting
- Database connection failed: Verify DB_PASSWORD environment variable matches between Vikunja and MariaDB containers
- First user registration not creating admin privileges: Ensure clean database state and restart Vikunja container after MariaDB initialization
- CalDAV sync failing with calendar applications: Check VIKUNJA_SERVICE_FRONTENDURL points to externally accessible address, not localhost
- Task attachments not persisting: Confirm vikunja_files volume is properly mounted and container has write permissions
- MariaDB container exits with initialization errors: Remove vikunja_db volume and restart to reinitialize database with correct credentials
- Import from external services timing out: Increase MariaDB's max_allowed_packet setting for large dataset imports from Trello or Todoist
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Ad Space
Shortcuts: C CopyF FavoriteD Download