Your data
Your entire database is one human-readable JSON file:
~/Library/Application Support/studio.obra.todo/todo.jsonNo accounts, no sync service, no lock-in — see the open format for the full schema.
How saving works
Section titled “How saving works”Four layers keep the file safe:
- Autosave — every change is written a few hundred milliseconds after you make it, and immediately when the window loses focus.
- Atomic writes — each save goes to a temp file first, then renames over the real one. A crash mid-write can never corrupt the database, and the backend refuses to persist anything that isn’t valid JSON.
- Close waits for the disk — closing the window holds until the last edit is written. If the file ever fails to load, the app runs in-memory and refuses to save rather than overwrite good data.
- Daily backups — on the first launch of each day, the database is
copied to
backups/todo-YYYY-MM-DD.jsonalongside the original, keeping the newest 30. Even a successful save of bad data — a wrong bulk delete, a misbehaving agent — costs at most a day.
Restoring a backup
Section titled “Restoring a backup”Quit the app, then copy the backup over the live file:
cd ~/Library/"Application Support"/studio.obra.todocp backups/todo-2026-07-24.json todo.jsonRelaunch and you’re back.
Good to know
Section titled “Good to know”- The data lives outside the app bundle: rebuilding, reinstalling or updating Obra Todo never touches your todos.
- Application Support is on your boot volume, so Time Machine (if you use it) already keeps off-machine copies of the database and its backups.
- External edits — by you or an agent — are picked up automatically every time the app window regains focus. Last writer wins; there is no merge.