Vikunja Task Manager
Open-source, self-hosted to-do app and task manager.
Overview
Vikunja is a powerful, open-source task management and project organization platform designed as a self-hosted alternative to proprietary solutions like Todoist or Asana. Built with Go and Vue.js, Vikunja offers a comprehensive suite of productivity features including multiple view modes (lists, Kanban boards, Gantt charts, and calendars), team collaboration tools, and extensive customization options. The platform emphasizes privacy and data ownership, making it ideal for individuals and organizations who want complete control over their task management data.
This deployment consists of two services: the main Vikunja application container and a PostgreSQL database container. The Vikunja service runs the complete application stack including both the backend API and frontend web interface in a single container, while the PostgreSQL database provides robust data persistence with ACID compliance and advanced querying capabilities. The configuration enables user registration and sets up proper database connectivity with environment-based configuration for flexibility across different deployment scenarios.
This stack is perfect for teams, small businesses, and individuals who need a feature-rich task management solution without vendor lock-in or recurring subscription costs. The combination of Vikunja's comprehensive project management features with PostgreSQL's reliability makes it suitable for everything from personal productivity tracking to managing complex multi-team projects with hundreds of tasks and deadlines.
Key Features
- Multiple task visualization modes including lists, Kanban boards, Gantt charts, and calendar views for different workflow preferences
- Team collaboration with user management, task assignment, and permission-based project sharing
- File attachment support with dedicated volume storage for documents, images, and other project assets
- CalDAV integration enabling synchronization with external calendar applications like Thunderbird and mobile calendar apps
- Advanced task organization with labels, due dates, priorities, and hierarchical project structures
- User registration system with configurable access control for team onboarding
- PostgreSQL backend providing ACID-compliant data integrity and support for complex task queries and reporting
- RESTful API access for custom integrations and mobile application development
Common Use Cases
- 1Small to medium-sized development teams managing sprint planning, bug tracking, and feature development cycles
- 2Marketing agencies coordinating client projects, campaign deadlines, and creative asset approvals across multiple team members
- 3Educational institutions organizing course assignments, research projects, and administrative tasks with student collaboration
- 4Consulting firms tracking client deliverables, project milestones, and billable task completion
- 5Personal productivity enthusiasts who want advanced project management features beyond simple todo lists
- 6Non-profit organizations coordinating volunteer activities, fundraising campaigns, and event planning with multiple stakeholders
- 7Remote teams requiring a centralized, self-hosted collaboration platform without relying on external SaaS providers
Prerequisites
- Docker and Docker Compose installed on the host system with support for multi-container deployments
- Minimum 1GB RAM recommended for PostgreSQL database performance with concurrent users and complex queries
- Port 3456 available for the Vikunja web interface, or alternative port configuration if running behind a reverse proxy
- Environment variables configured for DB_PASSWORD and FRONTEND_URL matching your deployment domain or IP address
- Basic understanding of PostgreSQL administration for database maintenance, backups, and user management
- Storage space planning for file attachments and database growth based on expected number of users and projects
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 environment: 6 - VIKUNJA_DATABASE_TYPE=postgres7 - VIKUNJA_DATABASE_HOST=db8 - VIKUNJA_DATABASE_DATABASE=vikunja9 - VIKUNJA_DATABASE_USER=vikunja10 - VIKUNJA_DATABASE_PASSWORD=${DB_PASSWORD}11 - VIKUNJA_SERVICE_FRONTENDURL=${FRONTEND_URL}12 - VIKUNJA_SERVICE_ENABLEREGISTRATION=true13 volumes: 14 - vikunja-files:/app/vikunja/files15 ports: 16 - "3456:3456"17 depends_on: 18 - db19 networks: 20 - vikunja-network21 restart: unless-stopped2223 db: 24 image: postgres:15-alpine25 container_name: vikunja-db26 environment: 27 - POSTGRES_USER=vikunja28 - POSTGRES_PASSWORD=${DB_PASSWORD}29 - POSTGRES_DB=vikunja30 volumes: 31 - postgres-data:/var/lib/postgresql/data32 networks: 33 - vikunja-network34 restart: unless-stopped3536volumes: 37 vikunja-files: 38 postgres-data: 3940networks: 41 vikunja-network: 42 driver: bridge.env Template
.env
1# Vikunja2DB_PASSWORD=secure_vikunja_password3FRONTEND_URL=http://localhost:3456Usage Notes
- 1Web UI at http://localhost:3456
- 2Register new account to start
- 3Supports lists, boards, gantt, calendar views
- 4File attachments and labels
- 5CalDAV integration
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
environment:
- VIKUNJA_DATABASE_TYPE=postgres
- VIKUNJA_DATABASE_HOST=db
- VIKUNJA_DATABASE_DATABASE=vikunja
- VIKUNJA_DATABASE_USER=vikunja
- VIKUNJA_DATABASE_PASSWORD=${DB_PASSWORD}
- VIKUNJA_SERVICE_FRONTENDURL=${FRONTEND_URL}
- VIKUNJA_SERVICE_ENABLEREGISTRATION=true
volumes:
- vikunja-files:/app/vikunja/files
ports:
- "3456:3456"
depends_on:
- db
networks:
- vikunja-network
restart: unless-stopped
db
db:
image: postgres:15-alpine
container_name: vikunja-db
environment:
- POSTGRES_USER=vikunja
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=vikunja
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- vikunja-network
restart: unless-stopped
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 vikunja:5 image: vikunja/vikunja:latest6 container_name: vikunja7 environment:8 - VIKUNJA_DATABASE_TYPE=postgres9 - VIKUNJA_DATABASE_HOST=db10 - VIKUNJA_DATABASE_DATABASE=vikunja11 - VIKUNJA_DATABASE_USER=vikunja12 - VIKUNJA_DATABASE_PASSWORD=${DB_PASSWORD}13 - VIKUNJA_SERVICE_FRONTENDURL=${FRONTEND_URL}14 - VIKUNJA_SERVICE_ENABLEREGISTRATION=true15 volumes:16 - vikunja-files:/app/vikunja/files17 ports:18 - "3456:3456"19 depends_on:20 - db21 networks:22 - vikunja-network23 restart: unless-stopped2425 db:26 image: postgres:15-alpine27 container_name: vikunja-db28 environment:29 - POSTGRES_USER=vikunja30 - POSTGRES_PASSWORD=${DB_PASSWORD}31 - POSTGRES_DB=vikunja32 volumes:33 - postgres-data:/var/lib/postgresql/data34 networks:35 - vikunja-network36 restart: unless-stopped3738volumes:39 vikunja-files:40 postgres-data:4142networks:43 vikunja-network:44 driver: bridge45EOF4647# 2. Create the .env file48cat > .env << 'EOF'49# Vikunja50DB_PASSWORD=secure_vikunja_password51FRONTEND_URL=http://localhost:345652EOF5354# 3. Start the services55docker compose up -d5657# 4. View logs58docker 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-tasks/run | bashTroubleshooting
- Connection refused on port 3456: Verify the vikunja container is running and check Docker port mapping conflicts with other services
- Database connection failed during startup: Ensure DB_PASSWORD environment variable matches between vikunja and db services, and confirm PostgreSQL container is fully initialized
- User registration not working: Check VIKUNJA_SERVICE_ENABLEREGISTRATION is set to true and VIKUNJA_SERVICE_FRONTENDURL matches your actual access URL
- File uploads failing or not persisting: Verify the vikunja-files volume is properly mounted and the container has write permissions to /app/vikunja/files
- CalDAV sync issues: Confirm the frontend URL is accessible from external calendar clients and check firewall rules for the configured port
- Performance degradation with large task lists: Monitor PostgreSQL memory usage and consider increasing shared_buffers or upgrading to a larger instance size
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
Components
vikunjapostgresql
Tags
#tasks#todo#project-management#vikunja#productivity
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download