pixari.dev

· 7 min read

Stop renting your to-do list

Most good task apps cost a few euros a month, and you keep paying for as long as you use them. Your tasks live on the vendor’s servers, and moving to another app usually means losing your recurring rules, your history, or both.

OpenTodo is a task manager with the features you’d expect from the paid apps, running on a server you control. It’s free and open source (AGPL-3.0), and version 0.1.0 came out today.

The OpenTodo Today view: a sidebar with Inbox, Today, Upcoming, saved views, projects and labels, and a list of today's tasks with due times, duration estimates, labels and projects, plus overdue tasks at the top and a Synced status indicator.

What it can do

Quick add understands plain language. Typing “Call Sarah next Wed 3pm #work @call p1 +30m” creates a task with a date, a time, a project, a label, a priority and a 30-minute estimate. The parsing happens on your device, works offline and supports six languages.

Animated demo of OpenTodo: typing "Dentist next tuesday at 3pm p1 +30m" into quick add turns the date, priority and estimate into chips before saving, then a project board with drag and drop, and a task added while offline.

Projects can be nested, split into sections and shown as a list or as a Kanban board. Tasks can have subtasks, and the parent shows how many of them are done.

The Q4 launch project shown as a board: Backlog, This week and Review columns with task cards, due dates, an estimate, a label and an assignee, plus List and Board toggles and a Share button.

Recurring rules are written the way you’d say them: “every weekday”, “every last weekday”, “every 3 days after completion”. You can skip one occurrence without touching the rest of the series.

Reminders arrive as web push notifications on the devices you pick, with snooze and dismiss. You don’t need an account with a push vendor.

A Home renovation project in list view with sections and subtasks, and the task detail panel open on the right showing project, section, assignee, priority, due date and two reminders with Snooze and Dismiss buttons.

You can share a project with other people on your server as viewer, editor or admin, assign tasks to them and discuss a task in the comments with mentions. An activity feed shows what changed.

The Share dialog for the Home renovation project: the owner, one member with the editor role and one with the viewer role, each with Remove and Make owner actions. A shared project with three member avatars and a task detail panel showing subtasks and a threaded comment discussion, including an @mention and a reply.

Filters are one-line queries like @work & due <= tomorrow & p1. You can save a query as a view in the sidebar and combine several views into a dashboard.

The Filter view with the query (@call | @errand) & due <= 7 days, a Save view button, and the five matching tasks grouped by project. A Weekly review dashboard combining three saved views side by side: Due this week, Deep work and Waiting on others.

For time blocking, you give tasks a duration and drag them onto a day or week calendar.

The Week view: a seven-day calendar grid with tasks placed as time blocks, an all-day row for unscheduled tasks, planned hours per day, and a red line marking the current time.

Every device keeps a full copy of your data, so the app works without a connection. When devices are online, changes sync within a second or two. If two devices edited the same task while offline, the edits are merged field by field and you aren’t asked to pick a version.

Two phone screenshots in dark mode: the Today list with overdue and scheduled tasks and a Synced indicator, and the detail view of a task with its notes, project, priority, due date and reminders.

Sign-in supports passkeys, two-factor authentication and single sign-on with your own identity provider. End-to-end encryption is optional: with it on, titles, notes and comments are encrypted on your devices, and the server and the backups only store ciphertext.

Security settings: two-factor authentication setup with a QR code, a manual key and a server-wide policy, followed by the end-to-end encryption section explaining which fields are encrypted on your devices.

It installs as an app on phones and desktops. There are keyboard shortcuts for almost everything (q to add, j/k to move, c to complete) and an optional Vim mode.

Getting your data in and out

All data sits in one /data folder around a single SQLite file, so a backup is a copy of that folder. You can also export everything as JSON from Settings or through the API.

The importer reads OpenTodo’s own export, CSV files and the JSON exports of other task managers. It shows a preview first, skips duplicates and can be undone.

The server can back itself up on a schedule to a local folder, S3-compatible storage or WebDAV, with retention and optional encryption.

Backup settings: a daily schedule with the last successful run, Back up now and Test destination buttons, a choice of folder, S3-compatible or WebDAV destination, retention, compression and an optional encryption passphrase.

CalDAV gives two-way sync with calendar and reminder apps that support it. There’s a REST API with full or read-only tokens, a command-line client (ot add "Call the plumber" --due tomorrow) and webhooks for automation tools.

Calendar apps settings: the CalDAV server address and user name, setup steps for common calendar and reminder apps, per-device app passwords, and the start of the Webhooks section.

There’s no telemetry and no requests to third parties: the server only connects to things you configure. Under the AGPL, anyone who offers a modified version as a service has to publish their changes.

Running it

OpenTodo is a Go server with SQLite, with the web app built into the binary. The binary is about 17 MB and uses around 20 MB of memory when idle. It doesn’t need a separate database or any configuration, and it runs on a Raspberry Pi or a small VPS.

With Docker:

docker run -d -p 8080:8080 -v opentodo:/data ghcr.io/pixari/opentodo:0.1.0

Then open http://localhost:8080; the first visit creates the owner account. If you use Coolify, there’s a service template where you only assign a domain. There are also plain binaries for Linux, macOS and Windows.

To look around before installing anything, open the demo. Each visitor gets a private copy with sample data, deleted after a few hours.

Current state

OpenTodo 0.1.0 is a pre-release. Everything on the original roadmap is implemented and covered by automated tests, but some integrations have only been tested against simulated clients so far: CalDAV with specific calendar apps, single sign-on with specific identity providers, and passkeys, push notifications and touch drag and drop on real phones.

If you try it, I’d like to know how it went, especially if something breaks. The call for testers issue is the place for that. If you want to contribute code, the good first issues are a good start. Each feature was specified in the repository before it was built, so the specs explain how things are meant to work.

The OpenTodo website hero: the headline "Your tasks. Your server.", a short description, buttons to try the demo, self-host or star on GitHub, and a preview of the app's Today view.