Skip to content

The writer protocol

The writer is the plugin's fourth level, above the sentence, the story and the vault: what the author is made of, and which stories they are carrying. Its board is a collage. The vault is the writer's brain; the board shows only the notes the writer placed on it, grouped by a framework, beside every declared story project. The board owns nothing but layout.

This page is the protocol: what a note, a project note and the writer file contain for the board to read them. It is written so that you, or a tool you point at your vault, can prepare a vault or migrate an existing board (a canvas, a spreadsheet, a pile of notes) without an importer. Copy writer schema puts the same text, for your vault's current framework and prefix, on the clipboard.

Arriving in steps

The protocol, the settings and the command ship first, so a vault can be prepared now. The board view, the stories row, promotion and REF counting follow in the next releases. See the design note for the order.

1. Cards: a tag on any note

A note anywhere in the vault becomes a card by carrying a nested tag under the prefix (default writer), inline or in front matter:

yaml
---
tags: [writer/theme, writer/quote]
---
  • A note may carry several groups. A McCarthy line can be a quote and a craft reference.
  • A tag whose suffix matches no group of the active framework goes to Unsorted, so nothing is lost when frameworks change. A bare #writer does too.
  • The tag changes nothing else. It does not opt the note out of the story map or the word count; creative-writer: false still does that, separately. A card inside a project folder is still that project's note.
  • Do not move notes to declare them, and do not create a folder for the board.

Truby, the default framework

TagLayer / GroupWhat belongs there
#writer/genreWish list / GenresThe genres and blends you would love to write in.
#writer/plotWish list / PlotsPlot shapes that keep pulling you: the quest, the confession, the return.
#writer/themeWish list / ThemesWhat you argue about, story after story. One sentence each.
#writer/archetypeWish list / ArchetypesThe people you keep writing: the lone hunter, the mentor at peace.
#writer/worldWish list / WorldsPlaces and milieus you return to.
#writer/dialogueWish list / DialoguesFragments of speech that arrived before any scene.
#writer/premisePremisesOne-line story questions. Promote one when it has a home.
#writer/poemInspirations / PoemsPoems that move you.
#writer/noteInspirations / NotesPersonal notes: a creed, a thing someone said.
#writer/musicInspirations / MusicSongs and their lines.
#writer/videoInspirations / VideosFilms, talks, moments on a screen.
#writer/sentimentInspirations / SentimentsFeelings and concepts you circle: pride, eudaimonia, a motto.
#writer/quoteInspirations / QuotesLines from books, with the page.
#writer/craftReferences / CraftAnalyses of other writers' work: what teaches you.
#writer/researchReferences / ResearchResearch that outlives one story.
#writer/readingReferences / ReadingThe reading list. reading: to-read, reading or read on the note.
#writer/voiceVoicesNarrators you have built and might adopt again.

The frameworks are deliberately macro. Save the Cat and the Hero's Journey structure one story at a time; the writer level sits beneath every story. Story-level structure stays in the project folder, the story map and the threads.

Generic

Themes, Characters (archetype), Worlds, Ideas (premise), Inspirations (inspiration), References (reference), Voices. The same tag suffixes where the meaning overlaps, so switching frameworks keeps most cards in place.

Your own

Write it into the writer file (below). Group ids are lowercase letters, digits and hyphens, and double as tag suffixes.

2. Stories: declared projects

A story is a folder with a project note, as everywhere in the plugin. The board reads these keys on the project note, all optional:

KeyValuesMeaning
writing-stagedevelopment · drafting · revising · finished · shelvedWhere the story is. Without it, drafting is inferred once prose exists and finished once the target is met.
writing-premiseone sentenceThe story question, shown on the story card.
writing-idea"[[Idea note]]"The premise card this story grew from.
writing-voice"[[Voice note]]"The narrator persona the story adopts.

An idea is a card in the premise group with no story yet. When it becomes one, the idea note gains writer-story: "[[Project note]]" and stays where it is, tag and all.

A story uses a card when any note in its folder links to the card. A plain [[wikilink]] counts. So does

markdown
%% REF: [[Invictus]] %%

a comment form that keeps the link off the manuscript page and out of any export, because comments never reach the reader. A card used by two or more stories is recurring. The plugin never writes REF comments by itself.

4. The writer file

One file per vault, Writer.writer, JSON with its own extension so that opening it opens the board, as .canvas does. The plugin finds it by extension, so there is no path setting; the first Open writer creates it in the stories folder (Settings → Writer) or at the vault root. It holds only what the notes cannot. Everything in it is optional; a missing or empty file still gives a full board.

json
{
  "version": 1,
  "framework": "truby",
  "prefix": "writer",
  "colours": { "theme": "#7a9e7e" },
  "groups": { "theme": { "x": -2600, "y": -500, "w": 460, "h": 760 } },
  "cards": { "notes/My 7 words.md": { "x": -2240, "y": -2600 } },
  "edges": [
    { "from": "sources/poems/Invictus.md", "to": "notes/Courage.md", "label": "inspired by", "colour": "#c9a44c" }
  ],
  "view": { "x": 0, "y": 0, "k": 0.35 }
}
FieldMeaning
version1.
framework"truby", "generic", or an inline { "name": "Mine", "layers": [ { "name": "…", "groups": [ { "id": "spark", "name": "Sparks", "colour": "#c9a44c", "hint": "…" } ] } ] }.
prefixThe tag prefix, default writer.
coloursGroup id → hex colour, overriding the framework's.
groupsGroup id → { x, y, w, h }: its size, and its order among the groups of its layer by x. Groups flow left to right inside a layer and never overlap, so x and y are recomputed on every draw; only the order and the size are kept.
cardsNote path → { x, y }: where the card sits, relative to the top-left corner of its group, so it travels with the group. Unplaced cards are laid out in the group's grid automatically.
edgesNamed lines between two cards whose notes link to each other: { from, to, label, colour }. An edge between notes that no longer link is drawn dashed and offered for removal.
view{ x, y, k }: the last pan and zoom.

Unknown or malformed fields are dropped on read; the file is rewritten whole on every save.

Obsidian Sync

Markdown syncs by default; a .writer file travels only when Sync all other types is on in Settings → Sync → Selective sync. Without it the board still works on each machine, because cards, stories and uses all come from the notes; only positions, colours and edge names differ between machines.

5. Privacy

The board is the writer's most private thing. Nothing on it is exported by the manuscript, written by the threads, logged by the desk, or put in a model prompt. It has no effect on the story map, and the story map none on it. It is read only back to the vault owner.

MIT licensed. Concreteness norms CC-BY (Brysbaert et al.).