A self-hostable to-do and project app with lists, kanban, a calendar and a Gantt view, plus a CalDAV interface so ordinary calendar apps can see your tasks.
Build me the task and project app I actually need instead of a hosted Vikunja: lists, a board, a calendar, and my tasks visible in the calendar app I already use. Read this first: Vikunja is open source and self-hosting it is free — the fee buys hosting, backups and upgrades. Build this when you want the model to be exactly yours, and note that the CalDAV interface is the genuinely clever part: it puts your tasks into the applications already on your phone, with no app to write. STACK - Node 20+ with Fastify, server-rendered HTML with a little vanilla JS - SQLite through better-sqlite3, WAL mode, with FTS5 - Caddy in front THE DATA MODEL - projects: id, parent_id, title, description_md, colour, position, is_archived, owner_id - buckets: id, project_id, title, position, limit — the board columns - tasks: id, project_id, bucket_id, identifier, title, description_md, done_at, due_at, start_at, end_at, priority, percent_done, position, repeat_json, parent_id, created_by, created_at - labels, task_labels, assignees, attachments, comments - relations: id, task_id, other_task_id, kind — subtask, blocking, blocked, related, duplicate - reminders: id, task_id, at, relative_to, offset_minutes, sent_at - saved_filters: id, title, filter_json, owner_id - activity: id, task_id, field, old_value, new_value, actor_id, at — append-only - shares: project_id, user_id, right — read, write, admin - The identifier is a per-project prefix and number, allocated in the creating transaction and never reused FIVE VIEWS OVER ONE SET OF DATA - List: grouped, sorted, with inline editing and a quick-add field - Board: buckets with drag between them, a limit per bucket that warns rather than blocks - Table: every field as a column, sortable and filterable, which is the view power users live in - Calendar: tasks with dates, draggable to reschedule - Gantt: start and end dates on a timeline with dependencies drawn - Each is real work, and each must read the same rows with no duplication of logic. One query builder, five renderers - Ordering on the board and in the list uses fractional positions, not floats — floats run out of precision after enough drags and tasks start swapping places by themselves CALDAV, WHICH IS THE FEATURE WORTH THE EFFORT - Serve tasks as VTODO over CalDAV, so the calendar and reminder applications already on every phone and laptop show them with nothing installed - Implement enough of the protocol properly: discovery, a collection per project, ETags, conditional requests, and reporting on a time range - Map fields honestly: summary, description, due, start, priority, percent complete, categories, status, and recurrence. Anything with no VTODO equivalent stays in the web interface and is not invented - Two-way: a task completed on the phone is completed here - Clients are all subtly different. Test against at least three real ones, because a CalDAV server that works with one client and not the others is worse than none - Optionally serve dated tasks as a read-only calendar feed too, which is a much simpler thing and covers half of what people want QUICK ADD - One line becomes a task: a date, a label, a priority, a project and an assignee parsed out of ordinary typing - Parsed on the device, instantly, with the result shown as chips that can be corrected before saving. Never applied silently - Everything typeable is also selectable, because most people never learn a syntax REPEATING TASKS - Two kinds, and they differ: every Monday, and every two weeks after completion - Completing a repeating task creates the next occurrence and keeps the completion. The history must survive - Daylight saving handled by storing the intent with a named zone and recomputing, not by shifting an offset FILTERS - A filter language over every field, saved as a pseudo-project that behaves like any other list - Filters shareable, and used as the source of any view - Full-text search with FTS5 across titles, descriptions and comments, respecting permissions inside the query SHARING - Per project, with read, write or admin - Link shares by token for people with no account, read-only or write, revocable - Team assignment, comments with mentions, notifications batched into a digest with mentions immediate OPERATIONS - .env: DATABASE_PATH, STORAGE_PATH, BASE_URL, SESSION_SECRET, SMTP_URL - Migrations on boot, each once - Nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST CalDAV and the shared query layer. Get tasks into the phone's own applications and build the five views on one query builder rather than five, then use it for a fortnight. Without CalDAV this is another task app; with it, it is in every device you own without writing a single client. Give me the repository, the CalDAV server with its client compatibility notes, migrations, .env.example, a seed project, and a README with deploy steps behind Caddy.
What you lose
- A CalDAV interface, which is what lets your phone's built-in apps show the same tasks
- Five views over the same data, each of which is real work to build
- Hosting, backups and upgrades if you take the paid plan
If you would rather not build
- Todoist, if you want polish over ownership
- A Markdown file, which many people never outgrow
What it costs
as published on their pricing page
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $5/mo | — | — |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
Vikunja
$0The product itself, self-hostable, with CalDAV support.
go-vikunja/vikunjafree · open source
Focalboard
$0A self-hosted board-and-table task tool, archived but still usable.
mattermost-community/focalboardfree · open source
Why this verdict
our own opinion · changed only by a person
84/100
Verdict yes at 84. The iCalendar feed is the cheapest way to make a home-made task app usable from a phone, and it is about thirty lines.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about Vikunja
answered from the record above
Is Vikunja free?
No — the plan we track is $5 a month. Around €5/month for the hosted plan; the software is free to self-host under an AGPL licence.
Can you replace Vikunja by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 84 out of 100, build time one session. Read what you lose before you decide.
How much does Vikunja cost?
$5 a month on Hosted — $60 a year. Recorded 10 Aug 2026.
What do you lose by replacing Vikunja?
A CalDAV interface, which is what lets your phone's built-in apps show the same tasks; Five views over the same data, each of which is real work to build; Hosting, backups and upgrades if you take the paid plan. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Vikunja?
Yes: Vikunja, Focalboard. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

