Skip to content
OpenTodoAppPublic

About

Your tasks, your server. An open-source, local-first task manager you can host yourself. Everything you expect from a commercial task app, without the subscription or the lock-in.

Topics

Resources

Code of conduct

Contributing

Security policy

Accessibility

Stars

352 stars

Watchers

2 watching

Forks

Latest commit

 

History

3,542 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

OpenTodo logo

OpenTodo

Plan your day without renting your to-do list.

OpenTodo is a free, open-source to-do app you run on your own server or have hosted for you. It works on your phone and your computer, even offline, shares lists with your family or your team, and keeps your data with you.

Try the demo · Install · Docs · Website

License: AGPL-3.0 CI Latest release Sponsor on GitHub Buy me a coffee Discord

Quick add in plain language with date, priority and project chips, a card moved across a project board, then a task added offline that syncs on reconnect

Ways to run it: PikaPods (hosted, no server needed) · Docker · Umbrel (coming soon) · Unraid · Home Assistant · Kubernetes (Helm) · Single binary · Android app (APK from GitHub; Google Play and F-Droid coming soon) · all 20 platforms

How it works

1. Capture

Type a task the way you say it: Call Sarah next Wed 3pm #work p1 sets the date, time, project and priority. Dictate it, send a page from your phone's share menu, or forward an email. Anything without a home lands in the Inbox. Quick add · Voice · Capture

Quick add with a task typed in plain language and chips for its date, project and priority

2. Plan your day

Today shows what is due and what is still open from earlier. Give tasks an estimate and drag them onto the Day or Week calendar to see whether the day fits. Today · Time blocking

The Day calendar with timed tasks as blocks sized by their estimate and the planned total against the day length

3. Focus

Open one task in Focus and start a Pomodoro, Flowtime or countdown timer. The time is logged to the task. Focus

The Focus screen with one task, a large timer and buttons to pause, complete or take a break

4. Share

Share a project with your family or your team as viewer, editor or admin. Assign tasks, comment, and see what changed. Everyone can edit offline. Sharing

The Share dialog for a project with an email field, a role menu and the member list

Highlights

  • Your data stays yours. Everything lives in one folder on your server. Export it at any time, import it anywhere, and schedule backups, encrypted if you like, to disk, S3 or WebDAV. Backups · Import and export
  • Works offline on every device. Each phone and computer keeps a full copy, so the app works with no connection and syncs when it's back. Install the app
  • Bring your tasks. Import from Todoist, TickTick, Things, Super Productivity, Microsoft To Do, Apple Reminders and more, with a preview and undo. Import
  • Private by design. No telemetry, no analytics, no third-party scripts. Turn on end-to-end encryption and the server holds only ciphertext. Privacy · Encryption
  • Bring your own AI, if you want it. Talk to an assistant in the app, or connect the one you already use. Off by default, and every change can be undone. AI

No subscription, no lock-in, no tracking.

Explore all features →

How it compares

OpenTodo Todoist TickTick Things Super Productivity
Open source ✅ ❌ ❌ ❌ ✅
You can host it yourself ✅ ❌ ❌ ❌ ✅
Works offline ✅ ✅ ⚠️ ✅ ✅
Free, with every feature ✅ ❌ ❌ ❌ ✅
No subscription ✅ ❌ ❌ ✅ ✅
Optional end-to-end encryption ✅ ❌ ❌ ❌ ✅
Shared projects ✅ ✅ ✅ ❌ ❌

✅ yes · ❌ no · ⚠️ partly, or not documented. Todoist and TickTick have a free plan with limits; Things is a one-time purchase per device type. Based on each product's public information as of November 2026. If an entry is wrong, open an issue with a source.

Full comparisons →

Install

Try it in 30 seconds

  • No install: open the demo and press Try the demo. You get a private copy with sample data, deleted after a few hours.

  • On your machine or server:

    docker run -d -p 8080:8080 -v opentodo-data:/data ghcr.io/opentodoapp/opentodo:stable

    Open http://localhost:8080. The first visit creates your account. No configuration needed.

Docker Compose

git clone https://github.com/OpenTodoApp/OpenTodo.git
cd OpenTodo
docker compose up -d

Data is kept in the opentodo-data volume. On a server reachable from the internet, finish setup right after starting it, or set OPENTODO_SETUP_CODE=required (the setup code). Behind a reverse proxy, set OPENTODO_BASE_URL=https://todo.example.com.

The image is published for linux/amd64 and linux/arm64. :stable is the latest release, :1.1 follows the 1.1 releases (fixes only), :1.1.1 pins one version, and :latest follows the main branch. Upgrades from any release since 0.1.0 work directly, and nothing you rely on breaks within 1.x (stability). More in Running with Docker.

Single binary

Download opentodo-<os>-<arch> for Linux, macOS or Windows from the latest release and run it. It serves on port 8080 and keeps its data in ./data. To build from source: make build && ./bin/opentodo (Go 1.26+ and Node 22+).

Configuration

Nothing is required. Every setting is an optional environment variable with a safe default: see the configuration reference. To add people, keep sign-up closed and send invitation links (managing users).

The self-hosting handbook covers every platform, TLS, backups, upgrades and monitoring. The ot command-line client is in the CLI guide.

Privacy

The app talks only to your own server: no analytics, crash reporters, update pings or third-party fonts. Two things are on by default and can be turned off: maps for task locations, fetched through your server with no account data, and web push to the service each phone's browser chose. Everything else the server contacts, such as webhooks, backup destinations, single sign-on, email or an AI provider, is something you set up. The audit log never records task content (what is logged).

Documentation

Read the docs with screenshots and search at open-todo.app/docs, or in the app under Help. The same pages are in docs/.

Under the hood
┌───────────────────────── device ─────────────────────────┐      ┌──────────── server ────────────┐
│ React PWA  ──►  IndexedDB (source of truth)              │      │ Go binary + SQLite             │
│                 │ every edit = field ops {ts, device}    │ sync │  ops log (append-only)         │
│                 └► outbox ──────────────────────────────►├─────►│  fields (last-writer-wins)     │
│                 ◄─ ops from other devices ◄──────────────┤◄─────┤  REST, CalDAV, email, import   │
└──────────────────────────────────────────────────────────┘      │  all write through ops         │
                                                                  └────────────────────────────────┘
  • Every change is a small operation that sets one field of one entity, stamped with a hybrid logical clock and the device id.
  • Devices apply changes locally first, then sync. The same per-field rule runs everywhere, so all devices agree no matter the order. Notes merge character by character.
  • The REST API, CalDAV, email and imports write through the same log, so a task created with curl shows up on your phone right away.
  • One Go binary with the web app inside and a single SQLite file. It idles at about 20 MB of memory and runs on a Raspberry Pi.

More in architecture and the sync protocol.

Help without coding

  1. Star and share. A star on GitHub helps other people find OpenTodo.
  2. Leave feedback in Discussions or on Discord.
  3. Report bugs in issues.
  4. Review a translation. The app speaks seven languages; tell us where a word feels wrong (translating).
  5. Test it on your devices and report back in the call for testers.
  6. Answer questions from other people in Discussions and on Discord.
  7. Sponsor on GitHub Sponsors or buy me a coffee.

To contribute code, read CONTRIBUTING.md: changes that alter behaviour start as an OpenSpec change. Security issues go to the address in SECURITY.md.

Supporters

Thank you to everyone who keeps OpenTodo going. Supporters who want to be listed appear here.

Star History

Star History Chart

License

AGPL-3.0-only. You can run, study, modify and share OpenTodo freely. If you offer a modified version as a network service, you must offer its source under the same license. That is what keeps a self-hosted project from being quietly turned back into a subscription.

About

Your tasks, your server. An open-source, local-first task manager you can host yourself. Everything you expect from a commercial task app, without the subscription or the lock-in.

Topics

Resources

Code of conduct

Contributing

Security policy

Accessibility

Stars

352 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages