The task manager you actually own
OpenTask speaks the Todoist workflow you already know — the Quick Add grammar, the filter language, the keyboard map — without the cloud, the subscription, or the second user you never wanted.
docker run -d --name opentask -p 7968:7968 -v ./data:/data ghcr.io/pranav-karra-3301/opentask
- container to run
- 1container to run
- volume to back up
- 1volume to back up
- telemetry calls
- 0telemetry calls
- licensed, forever
- AGPLlicensed, forever
Capture
Type it the way you say it
The full Todoist Quick Add grammar: natural-language dates like “tom 4pm” or “mid january”, #project, /section, @label, p1–p4, {deadlines}, !reminders, “for 45min” durations, and // descriptions. Tokens highlight as you type and land as structured fields.
Get started →
Organize
Projects, sections, labels, filters
Nested projects with sections and a 20-colour palette. The Todoist filter language is here in full — & | ! ( ), date and deadline operators, @label wildcards, ##Project with descendants, search:, subtask — and every view can be a list or a kanban board.
What it does and does not do →
Plan
Today, Upcoming, and a keyboard for everything
Overdue rolls up with one-tap reschedule. Upcoming is a week strip you can drag tasks between. ⌘K opens a fuzzy palette over every view, project, and action, and every destructive edit has a 10-second undo.
Also: a CLI →
Measure
Goals, streaks, and unlimited history
Daily and weekly goals, karma, vacation mode, and an activity feed that never truncates — because the database is yours and nobody is upselling you a history add-on.

Own your data
Easy to move in. Easy to leave.
Import from Todoist with a backup ZIP or a live API token. Export a full JSON snapshot or per-project CSV whenever you like. Nightly VACUUM INTO snapshots with retention and one-click restore. It is one SQLite file — the exit is always open, which is the only reason to trust the entrance.
Reminders that arrive
Web Push on desktop and mobile (iOS 16.4+ after Add to Home Screen), plus ntfy, Gotify, and webhook channels.
A real REST API
Every route zod-typed into OpenAPI, cursor pagination, SSE live updates, and scoped ot_… tokens.
Calendar feed
A read-only tokenized webcal:// feed your phone’s calendar can subscribe to.
Run it in about a minute
One container, one /data volume, port 7968. Then open it and create your account — registration locks itself after the first user.
docker run -d --name opentask -p 7968:7968 -v ./data:/data ghcr.io/pranav-karra-3301/opentask



