Skip to content

The time entry format

A time entry is one Markdown list item under a task: ⏱, the date, and a start and end time. A duration label, a name and a note are optional. Totals always come from the two times, never from the label.

For Mac, iPhone · Last checked

The format

Under a task in any board
- [ ] Homepage hero [est:: 3h] 📅 2026-10-16
  - ⏱ 2026-10-13 09:20-10:55 (1h35m)
  - ⏱ 2026-10-14 14:05-15:20 (1h15m) @Eglė — hero layout
PartWritten asRequired
MarkerWritten as⏱, the single character U+23F1RequiredYes
DateWritten asYYYY-MM-DD, a real calendar dateRequiredYes
TimesWritten asHH:MM-HH:MM, 24-hour, no spaces around the hyphenRequiredYes
LabelWritten as(1h15m), for people reading the file. nokko ignores it.RequiredNo
AuthorWritten as@Name, one word, straight after the labelRequiredNo
NoteWritten asAfter — or - , to the end of the lineRequiredNo

nokko indents a new line two spaces past its task, or to match the task's first subtask if it has one. It adds the line at the end of the task's block. An author is written only when this Mac has been told who you are, with This is me on this Mac in People.

How a line is read

Each row below was run through nokko's parser. A line that fails stays in the file exactly as written, and shows as a note on the task with no time counted.

LineRead as
- ⏱ 2026-07-30 09:15-10:30 (1h15m)75 minutes on 30 July.
- ⏱ 2026-07-30 09:15-10:30 (9h)75 minutes. The wrong label is ignored.
- ⏱ 2026-07-30 09:15-10:3075 minutes. The label is optional.
- ⏱ 2026-07-30 9:15-10:3075 minutes. A one-digit hour is fine.
- ⏱ 2026-07-30 22:30-00:15 (1h45m)105 minutes, all counted on 30 July.
- ⏱ 2026-07-30 09:15-09:15 (0m)0 minutes, not a full day.
- ⏱ 2026-07-30 09:15-10:30 call with Jonas75 minutes, with the note call with Jonas.
- ⏱ 2026-07-30 09:15-10:30 (1h15m) @Eglė — proposalAuthor Eglė, note proposal.
- ⏱ 2026-07-30 09:15-10:30 (1h15m) mail me@x.comThe note is mail me@x.com. There is no author.
- ⏱ 2026-07-30 09:15-10:30 (1h15m) @Jane Doe — hiAuthor Jane, note Doe — hi. An author is one word.
- ⏱ 2026-07-30 09:15 - 10:30Not an entry: spaces around the hyphen.
- ⏱ 2026-7-30 09:15-10:30Not an entry: the month needs two digits.
- ⏱ 2026-02-30 09:15-10:30Not an entry: no such date.
- ⏱ 2026-07-30 24:00-10:30Not an entry: hours run from 00 to 23.
- [ ] ⏱ 2026-07-30 09:15-10:30A task called that, with no time logged.

An end time earlier than the start means the span crossed midnight, so a day is added. One line therefore always covers less than 24 hours.

The line must sit in the task's block: indented deeper than the task, with nothing at the task's own indent in between. Blank lines do not end the block. A ⏱ line anywhere else is not counted.

How totals are computed

  • A line's minutes are the end time minus the start time. Totals are worked out each time they are shown and stored nowhere.
  • A task's total adds every ⏱ line in its block, including lines under its subtasks.
  • Reports and the timesheet walk top-level tasks only, so an hour is never counted twice. Time logged on a subtask appears under the top-level task that holds it.
  • The day of a span is the date on the line, even when it runs past midnight.
  • An invoice line sums its minutes first, then rounds up once to your increment (none, 6, 15 or 30 minutes). Splitting a session into two lines cannot change the bill.
The timesheet: four days of entries with their start and end times, the gaps between them, and two lines naming exactly where one entry overlaps another.
The timesheet: each day's entries with their start and end times, the gaps between them, and two lines naming where one entry overlaps another.

The timer writes nothing for a run under a minute. Time with no task goes to Time/Unassigned.md, one task per day, in the same ⏱ format. See timers and timesheets and from hours to an invoice.

Edit a line by hand

You can change these lines in Obsidian or any text editor. nokko never rewrites a line just because it read it.

  1. Open the board's .md file and find the line under its task.
  2. To change the time, edit the date or the two clock times. Updating the label is optional, but it keeps the file honest for people reading it.
  3. To add an entry, copy an existing ⏱ line, paste it below and change it. Keep it indented under the same task.
  4. To remove an entry, delete the whole line.
  5. Save. nokko picks up the change, and the totals follow.

An invoice is its own file with its own figures. Changing a ⏱ line afterwards does not change an invoice you already made.

How Obsidian shows these lines

Obsidian shows a ⏱ line as an ordinary bullet under the task. It adds no timer and no total. The Tasks plugin leaves it alone, because the line has no checkbox. Dataview indexes it as a list item, which is what makes the queries below possible.

Query them with Dataview

Dataview sees each entry as text. These queries read that text, so you can list and sum entries inside Obsidian. Change Client work to your own folder.

Every entry, newest first
```dataview
TABLE WITHOUT ID L.text AS "Entry", file.link AS "Board"
FROM "Client work"
FLATTEN file.lists AS L
WHERE startswith(L.text, "⏱ ")
SORT L.text DESC
```

To see one month, change the test to startswith(L.text, "⏱ 2026-10"). Sorting works because the date comes first on the line.

Hours per board, from the labels
```dataview
TABLE WITHOUT ID Board, sum(map(rows.L.text, (t) => dur(regexreplace(t, "^[^(]*[(]|[)].*$", "")))) AS "Logged"
FROM "Client work"
FLATTEN file.lists AS L
WHERE regextest("^⏱ [0-9-]+ [0-9:-]+ [(][0-9hm]+[)]", L.text)
GROUP BY file.link AS Board
```

Questions

What happens if the label on a nokko time entry is wrong?
Nothing changes in the numbers, because nokko ignores the bracketed label. Every duration comes from the start and end times, so a wrong label cannot reach a report or an invoice. The label stays as written, because nokko does not rewrite a line it has only read. Correct it if people read the file.
Can Dataview total the hours in nokko's time entries?
Yes, because nokko's ⏱ lines are list items that Dataview can reach through file.lists. It can list them and add up their duration labels. It reads the label, while nokko reads the two clock times. The figures match on lines nokko wrote, and can differ on lines you edited by hand.

Next: Tasks and Dataview