Prototypes ZibaldoneP23 · Zibaldone writing
Untitled

Editing 100%

Word count

words
A goal for the document, shown in the status line.

Keyboard shortcuts

General

Undo
⌘Z
Redo
⇧⌘Z
Command palette
⌘P
Keyboard shortcuts
⌘/
Find
⌘F
Find and replace
⇧⌘H
Next match
⌘G
Previous match
⇧⌘G
Word count
⇧⌘C
The menu for what is under the caret
⇧F10
Leave full-screen writing
Esc
Next and previous match in Find
↵⇧↵
Close a menu, a popover or Find
Esc

Documents

New document
⌥⌘N
Name this version
⌥⌘S
Print
⌥⌘P

Text

Bold
⌘B
Italic
⌘I
Underline
⌘U
Strikethrough
⇧⌘X
Inline code
⌘E
Link
⌘K
Comment
⌥⌘M
Highlight
⇧⌘M
Clear formatting
⌘\
Paste without formatting
⇧⌘V
Curly quotes, an ellipsis and arrows as you type
"...->
Wrap the selection in brackets or quotes
(["'
Make the selection italic, or code
*`
Select a word, a paragraph
Double-clickTriple-click

Blocks

Text
⌥⌘0
Heading 1
⌥⌘1
Heading 2
⌥⌘2
Heading 3
⌥⌘3
Quote
⌥⇧.
Code block
⇧⌘\
Callout
⌥⌘6
Bulleted list
⇧⌘8
Numbered list
⇧⌘7
Checklist
⇧⌘9
Indent
⌘]
Outdent
⌘[
Align left
⇧⌘L
Align center
⇧⌘E
Align right
⇧⌘R
Justify
⇧⌘J
Move the block up
⇧⌘↑
Move the block down
⇧⌘↓
Duplicate the block
⌘D
Next block color
⌥⇧⌘H
Select the block
Esc
Markdown: a heading, a list, a checklist, a quote
#-[]>
New block, or the next row in a table
↵
New line in the same block
⇧↵
Indent, or the next cell
Tab
Outdent, or the previous cell
⇧Tab
Tick the checklist item
⌘↵
Select several blocks
⇧Click

Insert

Mention a person
@
Footnote
⌥⌘F
Collapsible section
⇧⌘6
Attach a file
⇧⌘U
Link to a document
[[
Insert a block
/
Mention a person or a date
@

View

Show or hide the documents
⌥⌘[
Show or hide the side panel
⌥⌘]
Outline
⌥⌘O
Comments
⌥⌘C
History
⌥⌘H
Proof
⌥P
Full-screen writing
⇧⌘↵
Focus mode
⇧⌘D
Larger text
⇧⌘>
Smaller text
⇧⌘<
Zoom in
⌥⌘=
Zoom out
⌥⌘-

Delete this document for good?

The document leaves this device's list and its key is forgotten here. Anyone who still has the link can open it.

Export

The document is written as a book with chapters from its headings. Images are placed with their captions, footnotes are numbered with a Notes section at the end, mentions are written as their text, and page breaks and suggestions’ records are left out.

The PDF is set in Source Serif 4 with JetBrains Mono for code.

Paper

Name this version

Rename the document

Are you sure?

↑↓Move↵RunEscClose
Documents
How Zibaldone is built
  1. The editor is Zibaldone’s: its ProseMirror schema, its markdown keys, its keyboard, the id it gives every block and its slash menu. P23 extends the schema (underline, text color, highlight, alignment, indent, block colors, images, mentions, page breaks, a table of contents) in one module that the build puts in place of Zibaldone’s, so every Zibaldone module works on the same schema.
  2. Each document is its own Yjs document, encrypted with AES-GCM in the browser with a key that is only in the link after the #. P14’s relay keeps the ciphertext. The documents this device has opened are listed from IndexedDB, with search over titles and text, Recent, Starred and a Trash that deletes only after it asks.
  3. In a workspace (P27) the writing is keyed by the workspace key. A document shared in the workspace’s chat keeps its own key until someone is removed from the workspace; from then on its key is made from the workspace key with HKDF, bound to the document’s first id. When a member is removed, the document gets a signed record in its old version (zib/move.mjs). This device checks the record against the key ring its chat keeps, opens its sealed envelope with the X25519 key its chat keeps, and opens the document on the new key, with its entry in the list and its place. The removed person’s page says who removed them.
  4. A new document comes from a template: Blank, Brief, Meeting notes, Essay, Project plan or Weekly report. A Markdown or text file opens as a new document.
  5. The toolbar and the format bar on a selection set the text style, the marks, the colors, links, lists, indent and alignment; every button says its keys. The block handle moves a block by dragging and opens the block menu. Tables have a menu of rows, columns and the header row. An image is scaled in the browser to 1600 px on its longest side and kept in the document.
  6. A comment is anchored with Yjs relative positions, so its mark moves with its words through both people’s edits, and the thread shows when its words were deleted or changed. Threads have replies, reactions, edits, resolve and reopen. In Suggesting mode an edit of the text is marked with Zibaldone’s suggestion plugin in the author’s color. A change of formatting is shown at once and kept as a suggestion too. On words it is a mark with the marks added and removed. On a block it is a record of the type and attributes the block had, drawn in the margin. Accept keeps the change and removes the record; Reject puts the formatting back. Each decision is one step, so ⌘ Z undoes it.
  7. Find and replace draws its matches as decorations, with match case, whole word and regular expressions. The Outline tab lists the headings and folds a section. The word count counts the document and the selection, and a word goal shows in the status line. The command palette runs every command and goes to any document or heading.
  8. Proof reads the text after a pause with Zibaldone’s craft rules. History keeps a version every 10 minutes and when you leave, the last 30, with names; a version is compared word by word with Zibaldone’s Myers diff, and a restore saves a version first.
  9. Right-click opens the design system’s menu for what is under the pointer: the words, a selection with its count, a link, an image, a table cell, a comment, a suggestion, a heading on the contents rail or in the Outline tab, a document in the list and the empty page. The context-menu key and ⇧ F10 open it at the caret, long lists are submenus, and an item that cannot run shows the reason on hover.
  10. Spelling is checked in a Web Worker with nspell and the Hunspell dictionaries for English and Danish, only on the paragraphs that changed, after a short pause. The language is read from the text with Zibaldone’s language detector, or chosen in the status line. Ignore once, Ignore in this document and Add to my dictionary are in the menu on the word.
  11. The text can be set in Inter, Source Serif 4, Literata, Lora, Newsreader or JetBrains Mono. The choice is kept in the document, so both writers see it, and a device can keep its own. A face is fetched only when it is chosen, and the PDF is set in the chosen serif when there is a file for it.
  12. The page is set for writing: a large title, three heading sizes, about 66 characters to a line and line heights for each face. A paste from Google Docs, Word or a web page keeps its headings, lists, links, bold, italic and tables. Autocorrect, wrapping a selection in brackets or quotes, footnotes, a + beside an empty line and full-screen writing are there, and undo goes back a word at a time.
  13. The / menu is a library of 26 blocks in sections, with their keys, found by other names too (“/todo” is Checklist, “/img” Image, “/hr” Divider), the recently used first. Beside the usual ones it has callouts in five kinds, code in a chosen language, collapsible sections, two or three columns, a table sized on a grid, a file kept in the document up to 1 MB, diagrams in Mermaid and formulas in TeX (both drawn under their code, with Mermaid and KaTeX fetched only when one is on the page), and a link to another document with [[. A bar comes over selected words, as in Linear, with the style, the marks, the colors, lists, Comment and Suggest an edit.
  14. The contents rail is Trail, the component made for RAMTT’s long pages, used as it ships. Collapsed, it draws the document at scale in reading time, with a longer tick where each heading starts and a dot at the section being read; the pointer resting on it opens the titles, each with a bar for its reading time and the time left. While writing it has no reading line. In Viewing mode and in full screen it reads with one across the page, which the reader can change in its settings. A heading written, removed or renamed comes onto the rail a moment later, and a click on a section scrolls to it and puts the caret there. View puts the outline in the side panel instead.
  15. Export writes PDF, EPUB and DOCX with Zibaldone’s manuscript writers, and each image goes in with its caption. The PDF takes a JPEG made on a canvas. Markdown, HTML and plain text are written in the browser. Markdown keeps an image as a data URL up to 200 KB and names a larger one. The suggestions’ records are left out of every export and every copy. Print has its own stylesheet.

Keys: ⌘P the command palette, ⌘/ every shortcut, ⌘F find, ⌥⌘M comment, ⌘K link, ⇧⌘V paste without formatting, ⇧⌘↵ full-screen writing, ⇧F10 the menu at the caret. Type / for a block and @ for a person or a date.