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.
Where it differs
Section titled “Where it differs”| 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.
What Todoist has that Conatus does not
Section titled “What Todoist has that Conatus does not”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 Fridayand repeating from completion withevery!. 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.
What you get instead
Section titled “What you get instead”- 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.
Moving your tasks across
Section titled “Moving your tasks across”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.
Try it
Section titled “Try it”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.