Releases: amancioandre/creative-writer
Release list
0.12.0 — Relationships read one way
- Relationships read one way. A relationship on the story map is a sentence from the note holding the line to the note it links: Alice → son → Kevin. Every written or model-read relationship now carries an arrowhead at the end the sentence lands on, the two directions of one pair (Alice's son, Kevin's mother) are drawn as one line with a word at each end, and the node card says → son or ← mother so the side is never in doubt. The wikilink inside a relationship line no longer draws a second grey linked edge over it, and the model's relationships are dotted with a hollow head where yours are solid with a filled one, so the two are told apart at a glance.
0.11.0 — The release note
- The release note. Once after install and once after a minor or major update, a modal with the version's headline, three bullets, and a link to the feedback form (tally.so/r/obJ6AN). It is built into the plugin: nothing is fetched, nothing is sent unless the link is opened, and the seen version is saved before the window opens so it can never recur. Never on a patch release, never while Zen Mode is on. A toggle under Settings → Where it runs, Release notes, turns it off; the Show release note command brings it back. The README's Privacy section discloses it, as the directory's policy on pop-ups asks.
0.10.1 — One tooltip
- One tooltip per control. Obsidian draws a tooltip from a control's
aria-label, and the browser draws its own fromtitle; controls carrying both showed the two on top of each other. Every such control keeps only the label: the manuscript toolbar, reading-time span, ruler segments and gutter marks, the comments pane's resolve button (now "Resolve: a check mark at the end of the comment" / "Reopen: take the check mark out of the comment"), the panel shell's jump, tool, ⋯ and toggle buttons, the plot grid's cast dots and column delete ("Delete column X and every stop under it"), and the status-bar readability item, whose label now carries the band hint.
0.10.0 — The plot grid and the reading lenses
Three revision passes from the way Maxwell Alexander Drake edits, designed on 2026-09-14 as lenses: one reading pass at a time, everywhere, so a tint always means one thing. The settings tab was reworked first to give them a home.
- The settings pass. Eight groups in the order a writer meets them (Where it runs, Writing, Lenses, Manuscript outline / comments / page, Stories and goals, Model assistant); rows that only matter while another is on stay hidden until then; one-line descriptions with the detail in the docs; the two manuscript view switches leave the tab; the style-check kinds become one row of chips.
- Lenses. Style checks and Words are lenses: one on across the vault, kept between sessions, switched from the status-bar item's menu or the
Lens:commands (Lens: style checks,Lens: words,Lens: next,Lens: off). The rhythm tint stays underneath unless told not to; Zen Mode shows no lens. - Dialogue lens. Speech at full tint, thought at half, narration dimmed, so the talk can be read on its own. Speech is double quotes, single quotes, dash lines (the travessão) or none; a thought is italics that make a whole sentence or paragraph by default,
_He is guessing,_ she thought.included (a word or two of italics inside a sentence is emphasis and never counts), any italics, single quotes, or a pattern of your own; a project note overrides both withdialogue:andthoughts:. - Speakers. With a cast (the character notes,
colour:in the note or a palette in cast order,speakers:in the project note to narrow it), the dialogue lens tints each line in its speaker's colour and says on hover how it decided: a dialogue tag, the one name in the paragraph, or turn-taking; grey when nobody can be pinned. - The speaker box. The page colours only what is certain, a tag, a name in the paragraph or your own pin; a turn is a guess and stays grey. Hover a grey line, or rest the cursor in one, and the box offers the cast as chips with the guess first; a click pins the speaker as a hidden
%% Name %%comment right before the sentence, Ctrl+Z takes it back, and Dialogue: tag the speaker opens the box for the keyboard. - Voices on the manuscript page. A toggle tints each sentence of speech in its speaker's colour and dims the narration, as the editor does; the page's hover box offers the same chips on the sentence under the pointer,
vputs the keyboard on them, and a pin lands in the note right before that sentence. - The box as the lens's hands. Style: Not a cliché here writes a hidden
%% not cliche %%into the paragraph and the finding goes, the model's too. Words: Remove "then" from Stage direction edits the list note, and a command adds the word under the cursor under a category picked or typed. Accents: a marked word can be taken out of the character note from the card, and two commands put the word under the cursor into the speaker'saccentoraccent-never. - Accents lens. The dialogue page at a faint tint and, inside each speaker's own lines, the words their character note says they use (
accent:, green) and never say (accent-never:, red); never in narration, never in a line nobody is pinned to. - Words lens. Your own overused words from a note of your own, one heading per category, tinted wherever they occur with the category and the count in the note on hover;
bad-words:in a project note names a list for that project.
The story timeline grows into a plot grid: a scene is a row, a hand-drawn thread from Story threads.md is a column, and the cell is what the thread is doing in the scene. Designed on 2026-09-13 (docs/development/plot-grid.md), built in eight increments.
- Plot grid replaces the story timeline as a panel, under the same view type and command id, so an open timeline comes back as the grid and a bound hotkey still works. Rows are scenes under chapter and act bands, outline headings included; columns are the threads note's headings, grouped by kind; the cast folds into one column of dots and spreads back out on a click. Every cell shows its stop's role as a glyph and its anchor's state as an edge: plan, verified, broken.
- Writing in the grid. Click or arrow to a cell, type into it, and the line lands in
Story threads.md: role and quote kept, an emptied cell removed, every write undoable from the status line. The side column edits the selected stop's role and anchor, lists the columns by kind, adds a column from a heading and deletes one in two clicks, with its stops brought back by Undo. - Long books. Rows are drawn sixty at a time, the next sixty as the last scrolls into view; Export the grid to a note writes
Plot grid.md, refreshed in place. - Propose columns. From the events the map already holds and the cast, the model names the threads worth a column, arcs for the cast first; they wait in the side column with a tick each, and Add writes the ticked ones as empty headings, with Undo. An empty grid is two clicks from a scaffolded one.
- The model reads, you write. Read this column with the model… shows each scene with no stop in the column to the model, with the column's kind and your notes as examples of your voice, and keeps what comes back with a quote on the page as a reading: a sparkle in the empty cell, the note and quote in the side column, the field's placeholder when you edit the cell. You write the cell in your own words or dismiss it; the model never writes a cell, and never a chapter. Check this column against the draft… asks, per plan, whether it is on the page and where, and offers the quote as the anchor. Ollama or Claude, Claude against the daily cap.
Story map.mdis now version 4, with agridlist. - Audit view and snapshots.
vdraws every cell by what its anchor says, ◇ plan · ◆ verified · ◈ broken, with the counts in the headers and the state line;nandpwalk the broken anchors and"opens a picker of the scene's sentences, the near matches of a lost quote first, so a repair is three keys; Snapshot the grid writes the grid as a dated table beside the project, never read back, and says where. - Groups, jobs, keys. The kinds fold from pills over the table; the project note names a thread as the grid's POV, Time or main theme (
plot-pov,plot-time,plot-theme, written by the column's Use as…), and POV tints the scene's name with a chip in the character's colour; a column's menu sets its kind, renames it, hides it or deletes it;?lists the keys; the layout is remembered. - Columns have kinds.
## Arc: [[Anna]],## Theme: …,## Subplot: …on a threads-note heading; a heading with no prefix is a free thread as before. An arc readswant:,lie:,turn:,truth:as roles on its stops and binds to its character on the map; once it holds a verified stop, a scene where the character is on the page and the arc has no stop reads present, unmoved.
0.9.1 — The tint
The UX audit of 2026-09-13, built in fourteen slices: rhythm becomes a faint tint on the text, every panel answers what it did and how to undo it, the panels share one head and one docked side column, the keyboard reaches everything, colours mean one thing each, the desk leads with a verdict, the comments pane is one list with resolve, the board's cards carry their identity, the editor gets its polish and Zen its one indicator, every panel ends in a ⋯ menu that names its commands, and the whole thing stays steady under a real manuscript.
- Paragraph rhythm: each sentence of the cursor paragraph sits on a faint tint instead of a 2 px underline. Underlines are left to spellcheck, Harper and links; style-check tints stack on top of the rhythm wash.
- Zen Mode: rhythm leaves the text for a meter in the margin, one bar per sentence stacked from the top of the paragraph, wide by tier. The page stays plain.
- Writing desk: a project whose deadline has passed and had nothing added this week says so ("Deadline Mon 7 Sept has passed with 2,768 words to go") instead of promising a daily count that "would still make" a date already gone. Dates in the desk read as Mon 7 Sept, never
2026-09-07. - Settings: Folders and Tags are multi-line fields, as their "one per line" descriptions always said. Writing log note, Echoes on the page and Echo sensitivity are on the settings page on Obsidian 1.13 too, not only on older builds. The Enabled description names the command that exists, Toggle everywhere.
- Writer: a card dropped into a group whose note cannot be retagged snaps back and keeps the error on screen, instead of the success line overwriting it a moment later.
- Undo for every edit to your notes from a panel. Taking a card out of a group (Delete, or the group's Remove), moving it to another group, removing a named line, resetting the board's colours, Shake on the story map, removing a relationship, and taking a scene out of a thread and deleting a note from the story map each leave an Undo in the panel's status line for eight seconds; the deleted note is written back whole, front matter and all. The map's Delete also disarms itself after five seconds.
- Failures stay and say what they could not do. "Could not move Courage: note is read-only" stays until the next action instead of vanishing after four seconds; the comments box and the export button on the manuscript page raise a notice with the note's name and a next step; the model assistant's notice points at its settings. Status lines are live regions, so a screen reader hears them.
- Story threads: Add on a scene card writes once, however fast it is clicked; Writer: Create reads "Creating…" while the story is scaffolded.
- One shell for the five panels. The writer board, the story map, the timeline, the threads and the manuscript share a head: which story, a search, one line saying what is shown (14 nodes · 9 shown · 2 filters on, with a Reset), the tools, and jumps to the sibling panels, always in the same order, the current one shown and not linked; the writing desk carries the jumps too. The board, map and threads keep their settings in a side column docked to the right instead of a panel floating over the canvas, folded by the sliders icon in the head; each folded group's header shows its value (Filters · 2 on, Kinds & colours · 4 of 6), and kinds absent from the project fold into one line.
- Empty states name their cause and carry the fix. "Nothing to show: Hide loners is hiding 3 nodes" with a Show loners button, "“zzz” matches nothing" with Clear search, "only contradictions are shown" with Show every thread, and the timeline's "Nobody matches “zzz”" with Clear search, instead of "Nothing matches the current filters."
- Three small things the audit left. A broken link in a hand-drawn thread is marked on the chart where the thread last touched a scene, and the mark, the panel's line and the card's row each carry Fix, which opens Story threads.md at that line. The story map and the timeline carry a key in the corner naming the kinds on them in their colours. The side column's sections in the map, the threads and the board open as you last left them. Opening a folded side column with the head's toggle now draws it at once instead of showing it empty.
- A ⋯ menu on every panel. The story map, the threads, the timeline, the writer board and the manuscript end their heads in a menu that repeats the head's and the side column's actions as rows, each naming the command it also is, so what the menu offers can be bound in Settings → Hotkeys. Commands were added for the actions that had none: the map's add, fit, show all, shake, reading and reset; the threads' zoom, fit, note and reading; the timeline's clear; the board's add and new story; the manuscript's five switches.
- Resolve a comment. Every comment row in the manuscript's pane carries a check mark (or press
ron the row); it writes a✓at the end of the comment inside the note,%% TODO: the lamp ✓ %%, so the tag and its colour survive in the editor and the pane dims the row, the dot on the page fades, and the counts say how many are still open. The same mark reopens it. - Board cards carry their identity. A card on the writer board is its title, its group dots and its excerpt; a story card its name, stage, premise and words against the target. The reading status, how many stories use a card, the cast, the last day worked and the fingerprint wait in the side card, where a story without a premise now says so and names the fix. The stories band has one title instead of a label above and a head inside, and so does a layer that is one group of its own name. Pills are measured by their whole text and cut with an ellipsis instead of running past their edge. Idea pills take the accent, not the red that means a check.
- Editor polish. The current-line band and the focus-fade veil stop at the text column instead of running to the window's edges, in the editor and in Zen Mode. The status bar names its two words, Ease plain · rhythm dynamic. Zen Mode admits one indicator: on mouse move, today's words and Esc leaves Zen Mode fade in inside the page and out two seconds later, never while typing; Escape on the page leaves Zen Mode unless a menu, prompt or suggestion is open. The manuscript's focus ring is one thin line, lighter than the prose it frames.
- Steady under a real manuscript. The story map and the board measure their surface once when a gesture starts and on resize, and their cards once after they are rendered, instead of reading layout on every animation frame; the map's Find box, the threads' and the timeline's filters redraw once typing pauses instead of on every letter, and keep their caret; the map's display sliders redraw once per frame; the threads' card follows a scroll once per frame; showing or hiding the manuscript's comments pane redraws the pane, not the book.
- The comments pane is one list with the paragraph pinned. This paragraph stays put at the top; All comments scrolls beneath it, grouped under sticky chapter headers that carry the count, instead of a faint chapter name at the right of every row. Each row shows its tag as a bar down its edge with a lowercase monospace badge, the comment, and one italic line of the prose it hangs on, so a long list reads without clicking each row. The composer's placeholder says what the field is for; the line under it says where the text goes and how the kind is set.
- The desk leads with a verdict. 120 to go or Goal met is the headline, with a two-word verdict beside it (Not started, Under way, Halfway, Done today, Revision day); the count sits beneath in figures that line up, 380 of 500 · 60 cut; the streak, the best and the week are one line; the heatmap says how many of its days were written. Project rows read as a column: name, tabular count, bar, a verdict with a coloured dot and one clause on the pace, then Projected and Deadline on labelled lines. Readability keeps the note you were in while the desk has the focus, and never loses its row.
- A spine for the timeline and the threads. The timeline fills its pane: cast names read horizontally on the header row that stays put, chapter rows say how many scenes, words and members of the cast they hold, presence is a dot and absence blank, the scene column keeps a real focus ring, and the project note is no longer listed as a scene. The threads axis names its scenes under the bars (every bar wide enough for a title; zoom in for the rest) and each chapter at its first bar.
- One colour dictionary. Three meanings across every panel: the accent is what you made (a thread you drew, a relationship you wrote, a plant and its payoff, the words you touched on the desk), grey is what the model or the code derived (fact arcs, echoes, references, the strips), and warning or red is what needs checking. Orange no longer means both "a thread of yours" and "a warning"; purple no longer means both "revision" and "the model"; green and amber mean only pace. A day that mostly cut is a hollow cell, not a second hue.
- Keys where the encoding is. The heatmap's key is four swatches, an outlined cell and a hollow one instead of a sentence. The desk writes the editor's colours down once, under the readability bands: the rhythm tiers from short to long and the tint of every style check. The thread kinds carry their arc's colour on the toggle; the strips name their unit; the map's Kinds section explains the dashed node; the board's colours section says what a card's dots are; the manuscript's comments pane names the gutter's shapes when Story or Echoes is on.
- Keyboard parity. Every row that looks like a button on a side card now answers Enter and Space (and Space no longer scrolls the pane); the manuscript's gutter marks and cast names, the timeline's ...
0.9.0 — The threads
The story threads view learns three things a reader feels before they can name them: a promise and where it is kept, a phrase reached for once too often, and a contradiction the story means. Everything offline unless you ask the local model.
- Story threads: directed threads. A stop line in
Story threads.mdmay start withplant:,touch:,payoff:orreversal:and carry one"quoted sentence"that anchors the stop to that sentence; every thread written before reads the same. Directed arcs end in an arrow; a plant with no payoff draws a stub and is listed in the panel; a quote that no longer matches is reported like a dead link. Promise and Pays off on an arc's card set the roles. - Story threads: This is a reversal on a contradiction's card. The change the story means becomes a directed thread of yours, plant and reversal anchored to the model's quotes, and the pair leaves the red count without a dismissal. Dismiss is now only for two ways of saying one thing.
- Story threads: the echo finder. A fourth thread kind, off by default, hears what recurs across the whole project, offline: a run of words that comes back in different paragraphs, reported whole, and two sentences that say nearly the same thing in different words. Names and dialogue tags never make one; a repeat inside one paragraph stays the editor's. The card shows both ends, the distance, and whether it is a tic (close) or a habit (spread over the book); near pairs rank first. Keep as a motif writes the echo into
Story threads.mdas a thread of yours and it stops being a finding; so does any phrase you quote in a thread. Follow one echo… in the panel, an Echoes strip, and Settings → Story threads → Echo sensitivity (low, medium, high). - Story threads: Read contradictions for intent. The local model reads each open contradiction — both quotes with their paragraphs, in order — and says whether it is a reversal the story intends, an error, or the same thing said twice, with a reason. The verdict is a line on the card and a proposal only: Accept as a reversal writes the directed thread, nothing is explained or dismissed on the model's say-so. Kept in
Story map.mdby the contradiction's key. - Story threads: Read project for echoes, the echo finder's semantic tier. Every sentence of eight words or more is embedded by the local model (Settings → Model assistant → Ollama embedding model,
nomic-embed-textby default) and the pairs that say the same thing in unrelated words join the echoes. Only the pairs are stored, with each scene's hash; stale pairs are counted and left out until the next read.Story map.mdis version 3. - Writing desk: an Echoes list for the active note's project, habits first, a click opening the first occurrence.
- Manuscript: an Echoes toggle (Settings → Manuscript → Echoes on the page) marks every sentence holding a repeated phrase with a purple dot in the gutter, naming the nearest other place the words occur; a click takes the page there.
- Manuscript: with Story on, an anchored plant is an orange mark in the gutter at its sentence, a payoff or reversal a green one, each naming the other end; a click takes the page there.
- Manuscript: a reading-time estimate next to the word count at the top of the page (4 h 5 min to read) and beside each section's title, at 250 words a minute by default. Settings → Manuscript → Reading speed sets the pace.
0.8.2 — The page
- Zen Mode hides the note's properties block and backlinks footer and fades the note title, so the page is only the title and the text. The hide rule repeats Obsidian's own show-properties selectors, so it wins in Live Preview and Reading view.
0.8.1 — The review
The community directory's automated review of 0.8.0 failed on no-static-styles-assignment and warned on prefer-create-el, a deprecated caret API and two CSS lines. Nothing on the page changes.
- Writer cards and story cards are built with Obsidian's DOM helpers; the new-note form is positioned through
setCssStyles. - The manuscript's double-click uses
caretPositionFromPointonly; the deprecatedcaretRangeFromPointfallback is gone. - A candidate name in the cast panel draws its dashed underline as a border, which every Obsidian build supports.
- Manuscript: a paragraph whose first sentence is commented out (
%%First.%% Second.) stays a paragraph instead of vanishing as a comment block; a whole-line comment inside a paragraph stays with it. npm run lintruns the directory's own rule set (eslint-plugin-obsidianmd, stylelint browser-support check) and gates CI,release:checkand the release workflow.
0.8.0 — The writer
The writer is a fourth level above the sentence, the story and the vault: what the author is made of, and which stories they are carrying. This release ships the board and its protocol. Nothing on the page changes.
The board
- Open writer (command, the dashboard ribbon icon, or opening
Writer.writer) shows every note tagged#writer/<group>as a card inside the groups of a framework, layers stacked down the board: Truby's wish list, premises, inspirations, references and voices by default, or a Generic set, or one written into the writer file. Every group is drawn, with a hint while it is empty. A note in several groups is drawn once, with a chip per group; zoom in and cards show their first lines; lines join cards whose notes link. - Pan, zoom, Fit; drag cards, move groups with their cards, resize groups from the corner. Drop a card into another group and its tag follows, in the front matter or inline, whichever the note uses.
- Click a group and the board zooms to it; click again, click away or press Escape and the board comes back. The keyboard: arrows move between groups and lanes (the stories band is the lane above the first layer), Shift+arrows between the cards of a group, Alt+←/→ carry a card into the neighbouring group with its tag, PgUp/PgDn and 1–9 jump lanes, Enter on a group opens the new-note form (Enter creates and stays, Ctrl+Enter creates and opens), Enter on a card opens the note, Delete takes a card out of its group,
ffits,zfits the selection,/finds,pfolds the panel,?lists them all. Tab is never taken and Ctrl/Cmd stay with Obsidian; the moves are commands too, so they can be rebound. - The panel: framework, search, a group for new cards, Add note… (a picker over the vault), New note… (a tagged note, created where Obsidian puts new notes), colours per group, layers to hide, the tag prefix. A card's side panel opens the note, removes it from a group, adds it to another, and lists the cards it links to.
- Layout, colours and the view go to one
Writer.writerfile, found by extension, created in the stories folder on first save. Obsidian Sync carries it with Sync all other types on; the docs say so first. - The board follows the vault: a tag added by hand appears on the next metadata pass, a renamed note keeps its place.
The stories band
- Every declared project sits above the layers as a story card: name, stage, premise, and one line with words against the target, the cast and the last day the log saw it change. The side card sets the stage (
writing-stage, or inferred from prose and the target), opens the map, timeline, threads, manuscript and desk for that project, and links to the idea it grew from. - Idea pills are premise cards with no story yet; Make this a story… scaffolds a folder (or copies one marked
story-template: true, with{{name}}replaced), writesstory: true, the stage, the premise andwriting-ideainto the project note, andwriter-storyinto the idea, which stays where it is. New story… in the panel starts from nothing. - Unfiled pills are folders under the stories folder with prose and no declaration; Declare a story writes
story: trueinto the folder's namesake or first note.
Uses and lines
- A story uses a card when a note in its folder links to it, by wikilink or by a
%% REF: [[Card]] %%comment. Reference a writer card drops one at the cursor from a picker;REFis now a built-in comment tag. Cards show how many stories use them, a card in two or more is marked recurring, a card's side card lists the stories, a story's lists what it draws on. - Named lines. Click a line between linked cards, or Name… beside a link, and give it a name and a colour; a pair may carry several. Names live in the writer file and go dashed when the notes stop linking.
- A test pins the privacy rule: a REF comment never reaches the prose a model reading is built from.
Voices, fingerprints, reading
- A story adopts a voice (a card in the Voices group) from its side card, written as
writing-voice; the voice's side card lists its adopters. - Every story with prose shows a fingerprint: reading ease, grade, sentence variety and dialogue share over its prose notes. A voice card blends the fingerprints of the stories that adopted it, so the voice on the page can be checked against the voice on the card.
- Reading cards carry
reading: to-read | reading | read, set from the side card, shown as a chip; a linked craft note is offered as the analysis. - The myth report's archetypes gain Add to writer: a REF to an existing archetype card, or a new tagged archetype note with the evidence.
The protocol
- Copy writer schema puts the writer protocol on the clipboard for your vault's framework and tag prefix: which
#writer/<group>tags make a note a card, the project-note keys, the%% REF: [[Card]] %%comment, and theWriter.writerfile format. Paste it to a person or a tool migrating a board into the vault; the plugin ships no importer on purpose. - Two frameworks, both macro rather than per-story: Truby (wish list, premises, inspirations, references, voices) and Generic. Your own can be written into the writer file.
- Settings → Writer → Stories folder: where ideas are scaffolded, new cards go and the writer file is created.
- The domain for the board (frameworks, tags, the writer file, the board, uses) is in place and tested; the view follows in the next phase.
0.7.2
Fixes for the community plugin review of 0.7.1. Nothing changes on the page.
- The manuscript comment field and its popover set their inline sizes through the Obsidian style helper rather than writing styles directly, which the review flags.
- The dashed underline on a candidate name in a cast line uses the long-hand text-decoration properties, which older Obsidian builds render more reliably than the shorthand.
- Redundant type assertions in the threads view and manuscript settings are gone.
- The README no longer carries placeholder media, a placeholder video link or an unset sponsorship badge.