Self-host

Run OpenTodo on your own server in a few minutes.

It is one container with no database server to set up and nothing to configure. Start it, open the address, create your account, and invite the people who will use it.

Server binary
about 26 MB
Database
one SQLite file
Runs on
amd64 and arm64

Figures for OpenTodo v0.6.0.

Install in minutes

Pick the way you already run things. Every method serves the same app; updates are a new image or binary, and the database migrates itself on start.

  • Sign-up closes after the owner account; invite people with a link
  • Automatic HTTPS when you deploy with Coolify
  • Single sign-on with the OpenID Connect provider you already run
  • A built-in health check for your orchestrator

Single sign-on · Troubleshooting

Docker

docker run -d --name opentodo -p 8080:8080 \
  -v opentodo-data:/data ghcr.io/pixari/opentodo:0.6.0
# then open http://localhost:8080 and create the owner account

Docker guide

Coolify

# Coolify: + New Resource, Public Repository
Repository   https://github.com/pixari/opentodo
Build pack   Docker Compose
# Assign a domain to the opentodo service, deploy,
# open the domain and create the owner account.

Coolify guide

Compose

git clone https://github.com/pixari/opentodo.git
cd opentodo
docker compose up -d
# data lives in the opentodo-data volume

Compose and reverse proxies

Binary

# download opentodo-<os>-<arch> from the release, then:
chmod +x opentodo-linux-amd64 && ./opentodo-linux-amd64
# serves on :8080, data in ./data

Release downloads

Sync that converges

Edit anywhere, offline. Never pick a version again.

Every change is a small operation on one field, stamped with a clock. Devices queue them while offline and exchange them through your server when they reconnect. The same rule runs everywhere, so every device lands on the same state.

How sync works

What happens in a conflict

  1. Your laptop and your phone both lose their connection.
  2. On the phone you complete "Book flights to Lisbon". On the laptop you rename the same task.
  3. Both reconnect. Each device sends its queued changes, one per field, to your server, and receives the other's.
  4. Both devices end up with the renamed, completed task. No "pick a version" dialog.

With JavaScript on, this section is an interactive playground.

Switch Wi-Fi off on a device, change something, then switch it back on.

LaptopSynced
    Your server0 changes
    PhoneSynced

      Click a title to rename it, click the circle to complete it.

      Your data, in one place you control

      One folder

      Everything lives in one data volume around a single database file. Back it up, move it, restore it anywhere.

      Data and volumes

      Scheduled backups

      To a folder, S3-compatible storage or WebDAV, with retention and optional encryption.

      Backups

      Export any time

      Every person can download all their data as one JSON file and import it on any other server.

      Import and export

      Run it tonight.

      Try the demo first if you like; your tasks can follow later with an import.

      OpenTodo is free and open source, with no paid tier. If it helps you, a star on GitHub helps other people find it, and a coffee helps keep it going.

      Buy me a coffee