Tech Digest

Migration

Replace Todoist, if you can live with the phone

Vikunja is a good task manager on a laptop. The question that decides this migration is whether you will still capture a task while walking to the car.

Last reviewed

Is there a good self-hosted alternative to Todoist?

Vikunja is the closest: one Go binary, list, kanban, gantt and calendar views over the same tasks, and a CalDAV endpoint so Android task apps can sync. Planka is Trello-shaped kanban and a different tool despite the overlap. The biggest thing you lose is mobile. Todoist's apps are the product for most people, and nothing self-hosted matches them, especially on iOS where Vikunja's own docs list iOS CalDAV Sync as not working.

A task manager you do not open is worthless. That sentence is the whole page, and it is why this is the category where self-hosting has the weakest case.

What you are actually giving up#

The phone. Todoist's apps are not a companion to the web app, they are the product. Offline capture, home screen widgets, a share sheet target from any app, Siri and Google Assistant, notifications that actually arrive. Vikunja is a web app with a community mobile client and a CalDAV endpoint. On Android that combination works: DAVx5 plus OpenTasks or Tasks gives you a native app with offline sync, and it is genuinely usable. On iOS, Vikunja's own documentation lists iOS CalDAV Sync as not working. That is not a gap you engineer around on a weekend.

Reminders that fire. Todoist pushes a notification to a device in your pocket. Vikunja can email you. If your workflow depends on a 9am nudge appearing on a lock screen, that is a real regression and you should test it before anything else.

Natural language capture. Typing "call the dentist tomorrow 3pm p1 #Errands" and having it parse correctly is the reason Todoist retains people. Vikunja has quick-add syntax and it is not the same thing.

Recurrence that survives round trips. This one is specific and it bites. Vikunja's recurrence rules flow out to CalDAV clients and never back in. Set a task to repeat weekly in your phone app and Vikunja does not know about it.

Get your data out first#

Todoist gives you three routes and you should use two of them.

  1. Per project. Open each project, use its menu, and export it as a CSV template. Do this for every project, including archived ones, because archived projects are the ones people forget and then cannot get back.
  2. Account backup. If your plan includes Backups, Settings holds dated JSON archives of the whole account. Download the most recent one. This is the only artifact that captures the structure rather than one project at a time.
  3. The API. Generate a personal API token from Settings, under Integrations, and pull projects, sections, tasks, comments and labels directly. This is the only route that gets comments in bulk, and it is worth doing even if you never parse the result, because it is a complete snapshot in a format you can read in five years.

Honest assessment of the export quality: tasks, projects, sections, due dates, priorities and labels come across cleanly. Comments and file attachments are patchy in the CSV route and need the API. Completed task history is the part to check before you cancel, because the retention on it depends on your plan and it is the thing nobody thinks about until they want to know when they last changed the water filter. Recurring task definitions export as the text you typed, not as a structured rule, so they need rebuilding by hand.

Then, for Vikunja's own Todoist migrator, note the requirement that catches every self-hoster: you register your own OAuth app in the Todoist developer console, set VIKUNJA_MIGRATION_TODOIST_CLIENTID and VIKUNJA_MIGRATION_TODOIST_CLIENTSECRET, point the redirect URL at https://vikunja.yourdomain.com/migrate/todoist, and your Vikunja instance has to be publicly reachable for the handshake to complete. A LAN-only install cannot run the migrator at all, and the fallback is Vikunja's CSV import.

Which one to run#

Vikunja is the answer for almost everyone leaving Todoist, because it is the only thing here that is a task manager rather than a board. It is one Go binary serving the UI, the API and /dav on port 3456, it idles around 70 MB, and it runs on SQLite if you do not want a second container. Planka is on this page because a lot of Todoist usage is really project tracking, and if that is you, a kanban board with live updates fits better than a list of due dates.

Your situationRunWhy
A personal inbox of tasks with due datesVikunjaList, table, kanban, calendar and gantt over the same tasks, one binary
Android user who wants a native appVikunjaCalDAV at /dav with DAVx5 plus OpenTasks or Tasks
A shared team board people drag cards acrossPLANKAReal-time kanban with markdown cards, attachments and per-board notifications
You need SSOVikunjaBuilt-in OIDC and LDAP; Planka 2.2.0 moved OIDC to the paid tier
Client or contractor loginsNeither, or Planka ProThe Fair Use License forbids board access outside your legal entity commercially
You already run NextcloudNextcloud TasksOne less service, and its CalDAV story is more mature than Vikunja's
Household chores and stock rather than tasksgrocy40 MB, one SQLite file, and a better fit for recurring household work

What the migration actually costs#

  • 1 hour for Vikunja. One container, port 3456. Two variables decide whether it works: VIKUNJA_SERVICE_PUBLICURL must be the exact external URL because CORS has been on by default since 1.0, and a mismatch gives you a UI that loads and then fails every request with nothing that mentions CORS. Set VIKUNJA_SERVICE_SECRET too, or sessions reset on every container restart. Mount /app/vikunja/files for attachments and chown it, because the container runs as uid 1000 with no group.
  • 1 to 3 hours on the migration itself, most of it spent making the instance publicly reachable so the Todoist OAuth handshake can complete, then rebuilding recurring tasks by hand.
  • 2 to 4 hours setting up the phone properly. This is not optional and it is where the time actually goes: DAVx5 account, sync interval, choosing between OpenTasks and Tasks, discovering what does and does not round trip.
  • Ongoing: modest, with sharp edges. Vikunja shipped 1.0.0 in January 2026 after more than a year with no stable release, then 2.0.0 five weeks later to fix four CVEs. That cadence means release notes are not optional. Planka is worse on this axis: 2.2.1 landed one day after 2.2.0 to fix a path traversal letting any authenticated user read arbitrary files from the server.

You now personally maintain: a container, a database, a reverse proxy with a certificate that Todoist's OAuth flow requires, and the reminder pipeline. Read Reverse proxy and TLS before you start rather than after.

What breaks and how to tell early#

  • Capture friction. Time yourself. From phone locked to task saved. Todoist is about four seconds. If yours is twenty, you will stop using it within a month and you will not notice you stopped.
  • Reminders. Set one for tomorrow morning and see whether it reaches you. Email reminders land in an inbox you may not check.
  • Offline. Airplane mode, add a task, come back online. On CalDAV with a proper Android client this works. In a browser tab it does not.
  • Sharing with someone who will not make an account. Both tools require a login. There is no equivalent of sending a Todoist shared project link to a partner who then uses the free app.
  • Planka's compose defaults. The published example sets SECRET_KEY=notsecretkey, which signs every access token, and POSTGRES_HOST_AUTH_METHOD=trust. Fix both before anyone logs in.

The point of no return#

Run both in parallel for a month. Not a week, a month, because the failure mode is gradual disengagement rather than a broken feature.

  1. Keep Todoist as the system of record and mirror new tasks into Vikunja by hand. Yes, by hand. It is the only honest test of whether the capture path works.
  2. After two weeks, stop adding to Todoist and see whether the new system holds. If you find yourself writing tasks in a notes app instead, that is the answer.
  3. Before cancelling, restore a backup on a different machine: on Postgres a pg_dump, on SQLite the database file plus /app/vikunja/files, which holds attachments and is not regenerable from anything.
  4. Keep the Todoist JSON backup and every project CSV. Storage is free and your completed history is not recoverable once the account closes.

Next#

Read Remote access without port forwarding, because the Todoist migrator and your phone both need to reach the instance from outside your house. Then check Backups that actually restore and the rest of Productivity.

Questions#

Vikunja or Planka?

They are not competing. Vikunja is a task manager: tasks with due dates, priorities, reminders, subtasks and labels, shown as a list, table, kanban, calendar or gantt. Planka is a kanban board: cards on lists with live multi-user updates, in the shape of Trello. If your mental model is a personal inbox of things due this week, Vikunja. If it is a shared board a team drags cards across, Planka. Vikunja vs PLANKA has the detail.

Can I use Vikunja on my phone?

On Android, yes, through CalDAV: the endpoint is /dav, and DAVx5, OpenTasks, Tasks and KOrganizer are listed as working. On iOS the answer is effectively no. Vikunja's own documentation still describes CalDAV as early alpha and lists iOS CalDAV Sync and Thunderbird as not working. Recurrence rules also flow out to clients only and never back in, so a task you make repeat in your phone app does not repeat in Vikunja.

Does Planka still support single sign-on?

Not in the community edition. Release 2.2.0 in August 2026 moved OIDC to PLANKA Pro and deactivated every SSO-based account on upgrade, because those users have no password login to fall back to. An administrator then has to set a password for each one and reactivate them individually. If you front Planka with Authelia or authentik, plan that migration before you pull the image.

Is Planka open source?

No longer. It was MIT, then AGPL-3.0 from 2023, and since the 2.0 release candidates in 2025 the community edition ships under the PLANKA Community License, a Fair Use License derived from n8n's. Personal, hobby, educational and internal-organization use are explicitly permitted for free and indefinitely. What is forbidden is giving board access to people outside your legal entity in a commercial relationship, or running it as a hosted service. The 1.x tags remain AGPL-3.0 but miss all 2.x security fixes.

How do I migrate my Todoist data?

Vikunja ships a Todoist migrator, but it needs setup a self-hoster will not expect: you register your own app in the Todoist developer console, set VIKUNJA_MIGRATION_TODOIST_CLIENTID and VIKUNJA_MIGRATION_TODOIST_CLIENTSECRET, and set the OAuth redirect to https://vikunja.yourdomain.com/migrate/todoist. The docs state plainly that your Vikunja installation must be publicly accessible for it to work, which rules out a LAN-only install.

What happened in Vikunja 2.0?

It rebuilt session handling to fix four CVEs, including one where sessions stayed valid after a password change. Every session is invalidated on upgrade, the desktop app needs a matching build, and API clients that relied on the old token behavior need retesting. The same release dropped Typesense in favor of ParadeDB, so a Typesense sidecar set up in 2025 can be deleted rather than reconfigured.

Sources#

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.