Skip to content

Todos

Everything in this section is what MarkTodo reads and what it writes back. There is no other state.

A todo is any Markdown checkbox, and the glyph is the status. The bullet may be -, * or +, and the indent you typed is kept exactly as it is.

Glyph Status Means
[ ] Backlog Captured, not scheduled
[>] Warming Next up, not started
[-] Paused Deliberately set down
[/] Doing In flight right now
[!] Blocked Waiting on something else
[x] Done Finished

That is the order MarkTodo draws everywhere — board columns, status sections in a note, the app’s tabs — so the table above reads in the same order as the software.

Nothing mirrors the glyph, so nothing can disagree with it. Open the note in any editor on any device and the status is right there in the text.

A glyph MarkTodo does not recognise — [?] written by another plugin — is preserved verbatim and shown as Backlog. Even when MarkTodo rewrites that line for another reason, it writes the glyph back exactly as it found it rather than normalising it to one of the six, so another plugin’s boxes survive a vault MarkTodo indexes.

Checking a box in a plain editor writes [x]. Unchecking one maps back to Backlog, not Paused: unchecking says the work is not finished, which is a different claim from deliberately setting it down.

The six are MarkTodo’s own, and they split in two — three statuses for work you are planning, three for work that is live:

Phase Statuses Means
Plan Backlog, Warming, Paused Nothing is moving yet, by choice
Active Doing, Blocked, Done The work is live, even when it is stuck

That split is why Blocked and Paused are different statuses rather than one “on hold”. Blocked is someone else stopping live work, so it stays in the active phase where you have to look at it. Paused is you setting the work down, which is a planning decision, so it drops back to the planning phase and out of today.

The app’s Kanban board draws its tabs in this order — every Plan status, then every Active one — and its horizontal swipe walks the same path.

These six are the whole set, and their names cannot be changed. A Doing heading means the same thing in every vault, on every device, in the plugin and in the app — which is what makes the vocabulary worth learning, and what lets a note written on one device be read correctly on another.

Indent a line under a todo and it becomes that todo’s note. It is the second line of the row in every list, in both programs.

- [/] Demo old floor @high
Skip booked for Thursday. Keep the trim, it's original.
- [ ] Price new subfloor

There is no marker and no capsule key. The block is the note, recomputed from the bytes every time MarkTodo reads the file — so a note you type by hand in any editor is picked up like any other edit, and there is no flag that can fall out of step with the text.

The rules are short:

  • A note is the deeper-indented lines directly under the todo.
  • A blank line ends it.
  • A nested todo ends it too. Those lines are sub-items, not note.
  • Moving a todo carries its note and its sub-items with it, so changing a status, a section or a project never strands them.

When MarkTodo writes a note back it drops blank lines inside the block, because a blank would end the block: the lines after it would be read as loose text belonging to no todo.

Three optional tokens. No token means no priority.

- [ ] Renew the domain @urgent
- [ ] Demo old floor @high
- [ ] Alphabetise the spice rack @low

Type @pu, @ph or @pl and MarkTodo expands it to the full word.

A token counts only as a whole word — at the start of the text or after a space, and followed by a space or the end of the line. bob@high.com and @high-school are ordinary text, and stay that way.

- [ ] File the permit due @ 2026-07-01
- [x] Measure the subfloor done @ 2026-06-28 14:07

due @ YYYY-MM-DD stays inline, exactly where you typed it. done @ YYYY-MM-DD HH:MM is stamped when you complete a todo and removed if you reopen it. The minute is there so Done can read most-recently-completed first within a single day’s work. done @ is matched as a whole word too, so a line that says undone @ 2026-06-28 is left alone.

A stamp already in your notes that carries only a date is kept exactly as it is and never rewritten — the minute it would gain is the minute you re-saved, not the minute you finished — so it sorts as that day’s start.

Hand-typed dates may skip leading zeros (due @ 2026-9-14); MarkTodo pads them the next time it writes that line.

- [ ] Call the plumber notify @ 2026-07-01 09:30

notify @ YYYY-MM-DD HH:MM — local time, 24-hour — sets a reminder. The Android app raises the notification at that time. In Obsidian, the todo shows up in the Reminders segment of Agenda.

Times pad the way dates do: type 9:05 and MarkTodo writes 09:05 the next time it rewrites the line.

On Android the reminder also needs the system’s Alarms & reminders permission. Without it Android treats the alarm as inexact and may hold the notification back by up to an hour. The app offers the permission the first time you set a reminder without it, and until you grant it there is a button in the app’s Settings — see the Android app.

#tags and [[links]] stay where you put them. MarkTodo scans them so it can index and filter by them, and never moves them out of the line — the same in-place rule the dates and the priority token follow.