Skip to content

Self-hosted Todoist alternative

Conatus is an open-source task manager you run on your own server. It was built by someone who used Todoist for years and wanted the same workflow on hardware they control. The parts you use every day work the way you already expect: quick add, P1 to P4, #project, @label, recurring rules and saved filters.

Conatus Todoist
Hosting Your server, Docker Compose Todoist’s cloud
Licence AGPL-3.0 Proprietary
Cost Free. You pay for the box it runs on Free tier, then Pro and Business per user
Projects, filters, labels Unlimited Capped per plan
File attachments Your own S3 storage Todoist’s storage, size capped per plan
Telemetry None Product analytics
Data export JSON export, plus daily database dumps you own Account export
Clients Web Web, macOS, Windows, iOS, Android
Automation REST API, webhooks, MCP server REST API, MCP server, integration directory

Todoist’s plan limits and prices move; check their pricing page rather than this table. Last compared September 2026.

Worth knowing before you spend an evening on a migration.

  • Mobile and desktop apps. Conatus is a web app. There is no mobile or desktop client, so plan on using it in a browser.
  • Push notifications. Reminders are absolute datetimes only, delivered by email and an in-app bell, and email needs SMTP configured. No relative reminders, no location reminders, no phone push.
  • Offline work. Every client talks to the server, and the web app has no offline mode.
  • The full recurrence grammar. Day, week, month and year rules work, including every Mon and Wed, every 2nd Friday and repeating from completion with every!. Hourly repeats and rules with a start or end date do not.
  • Teams, workspaces and seats. Sharing is per project, by username, on your own instance. One owner, the rest editors. That is the whole permission model.
  • An integration directory. There is no marketplace. There is an OpenAPI 3.1 contract, signed webhooks and an MCP server, and you wire up the rest.
  • Karma and years of polish. Conatus is at v1.2.1.

If any of those is a dealbreaker for you, stay where you are. The list is here so you can decide in two minutes instead of after the import.

  • The data is yours. PostgreSQL and S3 storage on your own machine, no third party in the path, backed up daily from first boot with a one-command restore.
  • No caps. Projects, sections, labels, filters, collaborators and attachment sizes are bounded by your disk, not a plan.
  • No per-seat billing. Add everyone in the house or the team; the price does not change.
  • Deadlines and durations as separate fields, on the row, next to priority, repeat, sub-task counts and labels. You do not open a task to see its state.
  • Automation built in, not bolted on. Scoped bearer tokens, cursor pagination, Idempotency-Key, HMAC-SHA256 webhook signatures and an MCP server so an AI agent can work your task list against your own instance.
  • You can read the code, fork it and keep running the version you have.

There is a built-in Todoist importer, and it is the reason this page exists. Paste a Todoist API token or upload the .zip backup, and you get a per-project preview of sections, tasks, subtasks, comments and warnings before a single row is written.

Projects and their nesting, sections, tasks and descriptions, sub-task hierarchy, priorities, due dates and times, deadlines, durations, labels, comments and recurring rules that map onto Conatus rules all transfer.

Completed tasks, filters, attachments, reminders, activity history and Todoist collaborators do not. The full table spells out both columns.

The token is used for one request and never stored, name collisions are flagged so you choose rename or skip per project, and nothing is written until you confirm step two. Run it against a fresh instance first if you want to see the result before committing. For the step-by-step version, see Migrate from Todoist.

Installing takes three commands and about five minutes:

mkdir conatus && cd conatus
curl -fLO https://github.com/nojusmorkunas/conatus/releases/download/v1.2.1/docker-compose.yml
curl -fL -o .env https://github.com/nojusmorkunas/conatus/releases/download/v1.2.1/default.env.example

Fill in .env. Every replace-with-... value is a placeholder, not a safe credential. Then docker compose up -d. The install guide covers credentials, network binding and first login, and the reverse proxy guide covers putting it on a domain.