How to Install Vikunja (Self-Hosted To-Do Lists with Reminders and a Phone App)

To-do lists the household shares: Vikunja. Due dates, reminders, Kanban, on your server and your phone.

Planka (tutorial 92) is boards for projects. For the everyday — the shopping list, "call the dentist", the holiday packing list, the jobs for Saturday — you want a plain to-do app with due dates, reminders, subtasks and sharing. Vikunja is that: fast, pleasant, with list, Kanban, table and Gantt views of the same tasks, a web app that works on phones, and CalDAV so tasks appear in your phone's reminders app.

Quick reference

TaskWhat
Folder~/docker/vikunja/compose.yaml
Webhttp://server-ip:3456
Registrationon for the household, then VIKUNJA_SERVICE_ENABLEREGISTRATION: false
Share a listproject → … → Share → user or link
Phonethe web app (add to home screen), or CalDAV in Tasks.org / Apple Reminders
Reminders by emailVIKUNJA_MAILER_* settings

1. The compose file

mkdir -p ~/docker/vikunja && cd ~/docker/vikunja
nano compose.yaml

services:
vikunja:
image: vikunja/vikunja:latest
container_name: vikunja
ports:
- "3456:3456"
environment:
VIKUNJA_SERVICE_PUBLICURL: http://192.168.1.50:3456
VIKUNJA_SERVICE_JWTSECRET: ${JWT_SECRET}
VIKUNJA_SERVICE_ENABLEREGISTRATION: "true"
VIKUNJA_SERVICE_TIMEZONE: Europe/London
VIKUNJA_DATABASE_TYPE: sqlite
VIKUNJA_DATABASE_PATH: /app/vikunja/files/vikunja.db
volumes:
- ./files:/app/vikunja/files
restart: unless-stopped

.env with JWT_SECRET. SQLite is plenty for a household.

docker compose up -d
sudo ufw allow from 192.168.1.0/24 to any port 3456

Open http://192.168.1.50:3456, Register, create accounts for the family, then set registration to "false" and up -d.

2. Projects and tasks

A project is a list: Shopping, House, Holiday 2027, Work. Type a task and press Enter. Quick-add magic in the task text: Buy milk tomorrow *shopping !2 sets the due date, a label and priority. Click a task for subtasks, description, attachments, repeat (every week, every 3rd of the month), reminders (an hour before, or at a fixed time), and assignees.

3. Views

Every project has List, Gantt (tasks on a timeline), Table (sortable spreadsheet) and Kanban (columns, drag between them). Same tasks, pick the view that fits — the shopping list in List, the renovation in Kanban. Overview shows everything due across projects; Upcoming is the week ahead.

4. Share

Project → … → Share: add a user (edit or read-only), or a link share for someone without an account — grandparents can tick off the Christmas list from a link. Teams group users for bigger setups.

5. On the phone

6. Reminder emails

Add to the environment:

VIKUNJA_MAILER_ENABLED: "true"
VIKUNJA_MAILER_HOST: smtp.gmail.com
VIKUNJA_MAILER_PORT: 587
VIKUNJA_MAILER_USERNAME: myserver@gmail.com
VIKUNJA_MAILER_PASSWORD: ${SMTP_PASSWORD}
VIKUNJA_MAILER_FROMEMAIL: myserver@gmail.com

(the app password from tutorial 49). Reminders and overdue tasks arrive by email; the Overview also has an Email reminders toggle per user.

Behind the proxy

tasks.example.com → 127.0.0.1:3456 with the WebSocket lines, HTTPS, and set VIKUNJA_SERVICE_PUBLICURL to match.

Troubleshooting

Links in emails or the app point at the wrong address. PUBLICURL.

CalDAV won't connect. The URL is https://tasks.example.com/dav/projects/ (trailing slash), with your Vikunja password — not an app token.

Forgot a password. Email reset needs the mailer; otherwise docker compose exec vikunja /app/vikunja/vikunja user reset-password .

Tasks disappear from a view. A filter is set on that view (the funnel icon) — clear it.

Wrapping up

One container, accounts for the household, a project per list, CalDAV to the phone, email reminders. The shopping list is shared, the holiday list is tickable from a link, and nothing you need to remember is in a company's cloud.

Call us