A cross-platform task manager: projects, labels and filters, with a quick-add field that reads dates and priorities out of ordinary typing.
Build me a task manager that replaces Todoist: one line of typing becomes a task with a date, a project and a priority, and it is on every device a second later. STACK - Node 20+ with Fastify for the server - SQLite through better-sqlite3, WAL mode, with FTS5 - A PWA that works entirely offline, which is the only sane way to be on every platform without writing four applications - Caddy in front THE DATA MODEL - tasks: id, content, description_md, project_id, section_id, parent_id, position, priority, due_date, due_datetime, due_timezone, due_recurrence, deadline_date, completed_at, created_at, updated_at, deleted_at - projects: id, parent_id, name, colour, view_kind, is_favourite, is_inbox, position, archived_at - sections, labels, task_labels - comments: id, task_id, body_md, author_id, attachment_path, created_at - reminders: id, task_id, kind, at, offset_minutes, sent_at - activity: id, entity_kind, entity_id, action, actor_id, payload_json, at — append-only, and what makes an undo and a history possible - shares: project_id, user_id, role - Every instant stored in UTC with the intended zone kept beside it. A task due at 09:00 tomorrow is due at 09:00 wherever you happen to be, which means storing the intent and not only the instant QUICK ADD, WHICH IS THE PRODUCT - One field. Type a sentence and it becomes a task: 'pay invoice friday 5pm #finance @waiting p1' gives a title, a due date and time, a project, a label and a priority - Parse dates in the forms people actually type: today, tomorrow, fri, next monday, in 3 days, 15/03, every weekday, every 2 weeks starting monday, end of month - Ambiguity resolved conservatively and shown before saving — the parsed result is displayed as chips that can be corrected, never applied silently. A tool that guesses wrong and hides it is worse than one that asks - Parsing runs on the device, offline, instantly. This is the one interaction that has to be under fifty milliseconds or the whole tool feels slow - Everything typeable is also selectable, because half of people never learn the syntax RECURRENCE, WHICH IS WHERE THESE GO WRONG - Two kinds, and they are genuinely different: every Monday, and every 2 weeks after completion. The second reschedules from when you actually did it - Completing a recurring task creates the next occurrence and keeps a record of the completion. The history must survive - Daylight saving handled by storing the intent: 'every day at 09:00 in Europe/Rome' is recomputed against the zone, not shifted by an offset - End conditions: a date, a count, or never - Skipping an occurrence is different from completing it, and both are recorded OFFLINE AND SYNC - Everything works with no network: create, edit, complete, reorder. The device is the source of truth until it syncs - A change queue on the device, sent when there is a connection, ordered, idempotent by a client-generated identifier - The server's change feed ordered by a server counter, never by a device clock - Conflicts resolved per field with last-write-wins, except completion, which is sticky — a task completed on one device must not be resurrected by a stale edit from another - Sync within a second when there is a connection, which is what makes a task manager feel trustworthy across devices VIEWS - Today, upcoming, inbox, per project, and filters as saved queries over date, project, label, priority, assignee and text - The filter language is the same syntax as quick add, which means one parser and one thing to learn - Board view per project as an alternative to a list - Sorting manual, by date, or by priority - Keyboard for everything REMINDERS - Absolute or relative to the due time, per task, with a default per project - Delivered by push where the platform allows, and by email as the reliable fallback - Recorded when sent, so nobody is reminded twice for the same occurrence SHARING - A project shared with other people, tasks assigned to one of them, comments with mentions - Notification on assignment and on a comment, batched - Permissions checked on the server for every read and write SEARCH AND ESCAPE - FTS5 over content, descriptions and comments - Export everything — tasks, completed history, projects, labels and comments — as JSON and CSV in one command - Import from the common exporters - Years of completed tasks is a record of what you did with your time and must never be trapped OPERATIONS - .env: DATABASE_PATH, BASE_URL, SESSION_SECRET, SMTP_URL, VAPID keys for push - Migrations on boot, each once - Nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST The parser and offline sync. Build natural-language parsing with its chips-and-correction display first, then the change queue and the completion rule, and use it on a phone with the network off for a week. Everything else is a list. Give me the repository, the PWA, the parser with its tests, migrations, .env.example, and a README with deploy steps behind Caddy.
What you lose
- Apps on every platform, including watches and browsers, all in sync within a second
- Natural language entry that parses dates, projects, labels and priorities from one line
- Shared projects with comments, which is where family and small teams live
- Offline behaviour that reconciles cleanly when the connection returns
- Integrations that create tasks from mail, chat and calendar
If you would rather not build
- TickTick — paid, similar scope, calendar included
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
$0Task and project management with list, kanban and gantt views.
go-vikunja/vikunjafree · open source
Super Productivity
$0Local-first task manager with time tracking, on desktop and web.
super-productivity/super-productivityfree · open source
Why this verdict
our own opinion · changed only by a person
74/100
Verdict yes at 74: tasks with a parser and a change log is a genuine single-session build, and the field-level sync rule is the one design decision that keeps it honest. Apps on every platform is what you are giving up, and a progressive web app covers more of that than it used to.
History
tracked since 9 Aug 2026 · nothing is ever overwritten
Questions about Todoist
answered from the record above
Is Todoist free?
No — the plan we track is $5 a month. Pro at $5/month billed annually, $6 monthly; a free tier covers five personal projects.
Can you replace Todoist by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 74 out of 100, build time one session. Read what you lose before you decide.
How much does Todoist cost?
$5 a month on Pro — $60 a year. Recorded 9 Aug 2026.
What do you lose by replacing Todoist?
Apps on every platform, including watches and browsers, all in sync within a second; Natural language entry that parses dates, projects, labels and priorities from one line; Shared projects with comments, which is where family and small teams live; Offline behaviour that reconciles cleanly when the connection returns; Integrations that create tasks from mail, chat and calendar. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Todoist?
Yes: Vikunja, Super Productivity. 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

