Jott.it documentation

Bullet parsing rules

A concise reference for how Jott.it identifies bullets, extracts task metadata, preserves unknown markers, and writes content back to Markdown files.

Parsing scope

Only lines inside a ---bullets section are parsed as bullets. Leading and trailing whitespace is removed, and blank lines are ignored.

Text outside the bullet section remains body content and is not passed to the bullet parser.

Canonical bullet markers

File markerBullet typeExample
- [] or - [ ]Task- [] Buy milk
- [x]Completed- [x] Buy milk
-Note- Remember this
- [o]Event- [o] Meeting at 3pm
- [*]Memory- [*] A good day

Inline task metadata

A task or completed task can optionally end with canonical metadata tokens:

- [] Send proposal ((due:2026/07/28)) ((p3)) ((@email)) ((+Atlas))
TokenMeaning
((due:YYYY/MM/DD))Due date
((p1)) through ((p4))Priority
((@email))Context; may be repeated
((+Publishing papers))Project

Whitespace between tokens is optional. Recognised trailing tokens are removed from the task’s displayed text and written back when the file is saved.

Unrecognised tokens and tokens on non-task bullets remain ordinary text so content is not silently discarded.

Quick-entry metadata

When adding or editing a task, the same metadata can be entered without double parentheses:

Send proposal due:2026/07/28 p3 @email +Atlas

@ context and \@ context are also accepted for a context. Bare contexts are single words; use ((@waiting for)) when a context needs spaces.

A bare project consumes the remaining text after +, so it is best placed last. Regardless of input form, serialization always uses canonical ((...)) tokens.

The editable task body excludes metadata tokens. When task details are shown, the interface displays extracted metadata separately with friendly labels.

Notes and backwards compatibility

A Markdown list item without a status marker is a note. The older markers [ ], [x], o, @, *, and ! remain accepted for backwards compatibility.

Any other non-empty input passed directly to parseBullet() defaults to a task. This supports the add-task input.

Markers without a current bullet type—including [/], [-], [?], ["], and [i]—are retained as ordinary note text. This preserves the original marker when a file is saved.

Day-file parsing

parseDayFile() separates YAML front matter, the ---bullets section, and body text. It passes only the bullet section to parseBulletLines().

Each parsed bullet receives a zero-based sourceLine relative to the bullet section.

Serialization

Bullets are written as Markdown list items using the canonical markers above.

  • A non-empty serialized bullet section ends with a final newline.
  • An empty bullet array serializes to an empty string.
  • Recognised metadata is written using canonical double-parenthesis tokens.
  • Unknown content is retained rather than silently removed.