Restask is a self-hosted system that connects selected .md notes in your vault to your CalDAV server. Checkboxes in your notes are linked to tasks in your Radicale (or similar) collections, so reminders and calendar tasks on your phone, desktop, etc. stay in sync with your Obsidian vault.
nvim_desktop.mp4
obsidian_desktop.mp4
| Obsidian (mobile) | Tasks.org (mobile) | Widget (mobile) |
|---|---|---|
![]() |
![]() |
![]() |
- I built restask to solve a problem of my own, and I'm sharing it in the hope that someone else needs it too.
- The code was written with the help of AI coding tools, so review it with that in mind.
- It rewrites your Markdown notes, and deleting a task line deletes the task on your server (and the other way round). Backup before the install.
- Follow INSTALL.md to set up the daemon, the plugin and (optionally) Neovim.
- Route a note to a list (see Lists & Routing).
- Write checkboxes. Run
restask doctorif something looks off.
- Obsidian: dedicated plugin.
- Neovim: dedicated Lua config.
- Syncthing: file synchronization between devices.
- Radicale: self-hosted CalDAV server holding the task collections.
The symbols are inspired by Tasks. In Obsidian and Neovim, suggestions appear as you type two letters of a keyword (e.g. hi β high priority).
| Symbol | Meaning | Example |
|---|---|---|
| πΊ β« πΌ π½ β¬ | Priority: highest to lowest | - [ ] Renew the certificate β« |
| π | Due date, optional time | π
2026-09-19 17:00 |
| π« | Start date | π« 2026-09-18 |
| β³ | Scheduled date | β³ 2026-09-18 |
| π | Repeat | π every 2 weeks for 5 times |
| π | Calendar of the task (default calendar if omitted) | π work |
| β | Creation date; type a bare β and it is filled in |
β 2026-09-17 |
| β | Completion date, added when you check the task | β
2026-09-19 |
| π | Unique ID, added automatically and hidden by the plugin and Neovim | π a42 |
- The main inbox: tasks you jot down on the fly, plus every prioritized task from the vault.
- Shows the calendars you choose in
restask setup; a task from another calendar carries its name (π work), change it to move the task. - Tasks are grouped by priority (
## No Priorityfor the rest). Moving a task to another section changes its priority, and the other way round. - The file is generated: only the tasks you add or edit there are kept.
- Every checkbox in a routed note is a task; an indented one is a subtask.
- A task with a priority also appears in
TODO.md. It is the same task: check, reword or re-prioritize it in either place. - A task without a priority stays in its note only.
- All of this happens on the device you edit on, offline.
- A checked task moves under
### Donewith its completion date, whichever app you check it in. The list is newest first, so a mistake is easy to undo. - A repeating task leaves the completed occurrence under
### Doneand creates the next one.
A note takes part in syncing only when you route it. Unrouted notes are never read, changed or synced.
- A single note:
restask-list: Universityin its frontmatter. - A whole folder:
restask-list-root: Home Labin a root note routes every note below it. The nearest root wins. - A root note shows its folder: give it a
# TODOheading and that section lists the folder's prioritized tasks, likeTODO.md. TODO.mdgoes to the inbox list (inbox_listinrestask.toml).- A list is a collection on your server, created on first sync.
restask listsshows them all. - Tasks created in Tasks.org or Thunderbird land in the list's root note (or
TODO.mdfor the inbox). - Linking a note (
[[Caddy design]]) gives a link that opens it in Obsidian; the vault needs the same name on every device (obsidian_vaultinrestask.toml).
Run restask doctor to check config, routing, vault and server.
restask is local-first: everything happens on your device's files, and the network is used afterwards, in the background. Details in ARCHITECTURE.md.
| Where you edit | Who does the local work |
|---|---|
| Obsidian (PC, phone) | The plugin, when you leave the line |
| Neovim | restask settle, when you save |
| Any other editor | The daemon, about 10 seconds after you save |
- Syncthing carries the notes between devices.
- The daemon (one, on your always-on server) makes the vault and Radicale agree, checking the server every two seconds.
- Conflicts: a change on one side wins; if both changed the same field, the newer wins. Notes, reminders, tags and recurrence set by other apps are preserved.
- Deletion: deleting a task line deletes the task on the server, and the other way round.
- Compatibility: tasks use standard VTODO (RFC 5545), so any CalDAV app can read them.
- Android: Tasks.org (with DAVx5) for checking tasks, Obsidian for editing notes.
- Desktop: Obsidian for notes and
TODO.md; Neovim (<leader>tttoggles the task under the cursor,<leader>tacaptures one); Thunderbird as a CalDAV task list.
restask is open source under the MIT licence. Contributions are welcome: bug reports, ideas, documentation and pull requests. Read CONTRIBUTING.md first. Security problems: SECURITY.md.


