A document can be written two ways, in the same editor, and mixed on one page: as an outline of nested bullets, the way Logseq and Roam work, or as prose with headings and paragraphs, the way Obsidian works. Outlines suit capturing and linking ideas quickly; prose suits writing for a reader. Both are plain markdown, and the structure is read from the text itself: nesting from indentation, sections from heading levels. Nothing is stored beside the markdown.

# Meeting with [[Acme]]

- Agenda
  - Pricing for [[Q4]]
    - [ ] #P1 Send the revised quote
  - Hiring
- Notes
  A second line of the same block.

Blocks

A block is a bullet line, - at any indentation, together with the lines under it that belong to it: its child bullets, and any continuation lines indented to its content column. Only the hyphen makes a bullet. A * item, + item or 1. item line is prose in the editor and keeps its marker.

The editor draws a dot in place of the dash, hides nothing else, and draws a thin guide line from a parent's dot down past its last child. Nesting is two spaces per level in the file, and a child is always exactly one level under its parent: a bullet indented further than that has no parent, and the editor's keys never create one.

A group of bullets runs until a heading, a paragraph or a blank line at the left margin. Every structural key below works within one group and never moves a block out of it.

The keys

On a bullet or task line. A block moves with its children, its continuation lines and any code block inside it.

Key Effect
Enter A new sibling block below, at the same indent. At the end of a block that has children, a new first child instead. On an empty block, another empty block
Shift+Enter A line break inside the block: a continuation line, indented to the block's text
Ctrl+Enter (Cmd+Enter on a Mac) Leave the outline: a prose line at the left margin after the whole tree the block belongs to. Text after the cursor goes with it
Tab Indent the block one level, under the bullet above it. Refused when there is no bullet above to nest under
Shift+Tab Outdent one level. Past the top level the block becomes prose, its marker removed, and its children come up a level
Alt+Up / Alt+Down Move the block over the whole subtree of its neighbour, staying at the same depth. With no neighbour that way, out to the parent's level
Backspace at the start of the text Merge the block into the one above. Refused when a child would be left without a parent
Delete at the end of the text Merge the block below into this one
Ctrl+. Fold or unfold the block's children. A folded block shows in place of them; click it to unfold. Folding is not remembered across a reload
Ctrl+Shift+Enter Cycle the line between bullet, open task and done task (Tasks)

On a continuation line, Enter splits the block at the cursor into two blocks, and Ctrl+Enter takes everything from the cursor on out to prose after the tree.

Tab on a prose line turns it into a bullet at the left margin, which is the keyboard's way into an outline from prose; Shift+Tab past the top level is the way out. Headings, code and the frontmatter refuse Tab.

Select whole blocks

Drag or Shift-arrow across more than one line of an outline and the selection snaps to whole blocks, markers included, so every touched block reads and deletes as a unit. Tab and Shift+Tab then move every selected branch together, or none of them if one cannot move. Deleting a selection heals what is left: children whose parent went are brought up a level, and stray blank lines are removed. A selection inside one line stays character-precise.

Continuation lines

Shift+Enter makes a second line inside the same block, indented to the block's text. A block can hold as many as you like, and a blank continuation line, kept indented, is a paragraph break inside the block. A code block, a table or an image on a continuation line belongs to the bullet and moves, indents and folds with it.

Headings and prose

Headings, # to ######, and paragraphs are ordinary markdown. The # marks are hidden while the cursor is elsewhere, and the heading is drawn larger. Headings nest the blocks beneath them: everything between a heading and the next heading of the same or a higher level belongs to it, which is how backlinks show the heading a link sits under, and how a task under # Work on [[Acme]] answers to Acme in the Tasks view.

A heading is a hard boundary for the outline keys: a bullet after a heading starts a new group, and nothing merges across it. There is no command that makes a heading; type the #.

A quote, lines starting > , is drawn as a shaded panel with a rule down its left side, the markers hidden while the cursor is elsewhere.

Prose has no clamp and no snapping: the cursor can reach the left margin, and a selection is character by character.

Pasting

A multi-line paste is put on the two-space grid and indented to where the cursor is, so a four-space outline copied from another tool nests as it did there, a code block stays a code block, and a pasted bullet can never be left without a parent. Text pasted into a code block is left as it is.

Tidying

When the cursor leaves a block, trailing spaces and empty continuation lines at its end are removed, so the file stays clean without a formatter. Nothing inside a code block or the frontmatter is touched. Two trailing spaces as a markdown line break do not survive this; Shift+Enter is the line break EtherPK writes.

Not yet built

Blocks cannot yet be dragged with the mouse, and fold state is not remembered between visits. Both are on the roadmap (Planned Features).