# Creative Writer — Zen Mode, typewriter scrolling and story tools for fiction in Obsidian [![Downloads](https://img.shields.io/badge/dynamic/json?label=downloads&query=%24%5B%22creative-writer%22%5D.downloads&url=https%3A%2F%2Fraw.githubusercontent.com%2Fobsidianmd%2Fobsidian-releases%2Fmaster%2Fcommunity-plugin-stats.json&color=573E7A)](https://obsidian.md/plugins?id=creative-writer) [![Latest release](https://img.shields.io/github/v/release/amancioandre/creative-writer?color=573E7A)](https://github.com/amancioandre/creative-writer/releases/latest) [![Support](https://img.shields.io/badge/%E2%9D%A4-Support%20the%20plugin-ff69b4)](#support) [![Docs](https://img.shields.io/badge/docs-amancioandre.github.io-blue)](https://amancioandre.github.io/creative-writer/) **Write novels, short stories and screenplays in Obsidian with nothing between you and the sentence.** A distraction-free zen mode, typewriter scrolling, focus fade, sentence rhythm, offline prose style checks, daily word-count goals, and a story map of your characters and places — all built from your own notes, all offline. Everything that touches the page lives in the editor. Everything *about* the work — progress, readability, the cast, the shape of the story — lives in panels that Zen Mode hides. ## Who it's for - Novelists and short-fiction writers who want Obsidian to feel like a focused writing app — without moving the manuscript out of the vault. - Anyone tracking a draft against a deadline: a 90,000-word target, a chapter a week, a submission date. - Writers who want a **local**, on-command reader for craft feedback, not a cloud AI rewriting their prose. ## Features ### Zen Mode, typewriter scrolling, focus fade One command hides the ribbon, tabs, sidebars and status bar (optionally fullscreen). Typewriter scrolling keeps the line you're writing centred; focus fade veils the rest of its paragraph slightly and farther paragraphs progressively by distance. A faint band marks the current line. `Toggle Zen Mode` · Settings → Writing → Typewriter scrolling / Focus fade / Current line ### Paragraph rhythm and offline style checks Each sentence of the current paragraph sits on a faint tint, cool → warm by its felt length, so you *see* monotony before you hear it; in Zen Mode the tint leaves the text for a meter in the margin. Style checks tint clichés, passive voice, filter verbs, adverbs, repetition, nominalisations, weak verbs and metaphor candidates; hover for the note. Rules, a part-of-speech tagger and concreteness norms — no network, no model required. Settings → Writing → Paragraph rhythm · Settings → Lenses (the style checks are one lens; every kind is a chip) ### Lenses A lens is a reading pass: it colours every open note one way at a time, so a tint always means one thing. **Style checks** is one lens. **Dialogue** is another: speech and thought tinted, narration dimmed, by the conventions of the project (double or single quotes or dash lines; a sentence or paragraph in italics as a thought), and with a cast each line takes its speaker's colour when a dialogue tag, a name in the paragraph or your own pin says who spoke. A grey line is a guess: hover it and a box offers the cast, and a click pins the speaker as a hidden `%% Name %%` comment. **Accents** is a third: inside each speaker's own lines, the words their character note says they use and never say. **Words** is a fourth: your own overused words from a note of your own (`Creative Writer/Bad words.md`, one heading per category), tinted by category wherever they occur, a project able to keep its own list with `bad-words:` in its project note. Every hover card can act, too: *Not a cliché here*, *Remove "then" from Stage direction*, a word into a character's accent. The status bar shows the lens and opens a menu of the others on a click; every lens is a command under the `Lens:` prefix. Zen Mode shows no lens. Settings → Lenses ### Story map One graph of a project. Characters, places and things are nodes (typed notes — `type: character` in front matter or a `Characters/` folder — plus recurring unnamed names as *candidates* you can turn into notes with one click). Three layers of edges: **links** you wrote, **scenes** shared, and **references** a local model reads between the lines. Pan, zoom, drag, pin, search, tune the forces. Rebuilt from your notes every time; only model readings persist, in a `Story map.md` inside the project so it syncs with the manuscript. `Open story map` or the ribbon icon ### Plot grid Every scene in reading order down the side, your threads across the top, and in each cell what the thread is doing in the scene: the spreadsheet Rowling drew, grown out of the story timeline. Columns are the `## headings` of `Story threads.md`, typed as an arc, a theme or a subplot; a cell's edge says whether its stop is a plan, verified against the prose, or broken. The cast folds into one column of dots and spreads back out on a click. `Open plot grid` ### Story threads The manuscript as one line and everything that ties one part of it to another as an arc over it: the threads you draw by hand in `Story threads.md` (a clue, a motif, a promise with its `plant:` and `payoff:`), the facts a local model read from each scene, and the **echoes** an offline finder hears across the book, a phrase reached for once too often or a sentence rewritten two scenes later. Two scenes that state a different value for the same fact are joined by a red arc; the card says whether it is a slip or a reversal the story means, and keeps the reversal as a thread of yours. `Open story threads` ### Manuscript: the whole story on one page Every prose note of a project stitched into one read-only page in reading order, with the folder tree as its outline: `Part One/03 Chapter Three.md` reads as *Part One › Chapter Three*, sort prefixes stripped, the note's own scene headings nested underneath. Select a paragraph and the editor follows; press Enter or double-click and you are in the editor at that sentence. Arrow keys walk the paragraphs, Alt+arrows the chapters. Characters, places, research and outlines stay off the page; typing in a chapter beside it redraws that chapter alone. A pane beside the page holds the selected paragraph's `%% comments %%`, colour-coded by tag, and one field: type `CHECK: was it a coat?`, press Enter, and the comment lands at the end of that paragraph in the note. Every comment of the draft is listed in reading order; hover a marked paragraph for its comments. The tag word is tinted in the editor too. A ruler at the top shows the shape of the book, a segment per section coloured by readability and underlined when it changed today; switch the story on and each section carries its cast in the map's colours, with the model's contradictions as red marks in the gutter; switch the voices on and each sentence of speech takes its speaker's colour, with the same speaker box as the editor, so a whole book can be proof-read and pinned in one pass. Nothing is stored; **Export** writes the page as one note beside the project when you want a file to send on. `Open manuscript` or the ribbon icon · Settings → Manuscript ### Writer: the level above every story A board of what you are made of. Tag any note `#writer/theme`, `#writer/archetype`, `#writer/poem`, `#writer/premise`… and it becomes a card inside the groups of a framework: Truby's wish list, premises, inspirations, references and voices by default, a Generic set, or your own. Every group is always drawn, with a hint while it is empty, so the structure teaches what to collect. Drag a card into another group and its tag follows. Layout lives in one `Writer.writer` file; the cards are your notes. Nothing on it is ever exported or sent to a model. `Open writer` or the ribbon icon · **Copy writer schema** puts the protocol on the clipboard for a tool migrating a board into your vault ### Writing desk: goals, streaks, readability, scenes Words added *and cut* today against a daily goal, a streak, this week's total and a 12-week heatmap — revision days count as work. Add `writing-target: 50000` (and `writing-deadline: 2026-10-31`) to any note and its folder becomes a project with words-per-day needed vs. your last-7-day pace and a projected finish date. The desk also shows the note's reading ease, grade level, sentence rhythm and dialogue share, and a clickable scene outline. History lives in a vault note so it syncs between machines. `Open writing desk` · click the readability band in the status bar ### Local model assistant — optional, on command, never by default If [Ollama](https://ollama.com) is running on your machine, the plugin can read a paragraph for contextual findings (clichés in context, tired metaphors, passives hiding an agent), a selection for mythic patterns and archetypes, a chapter for relationships, references and the facts it states, the book for the sentences that say the same thing twice, or a plot grid column for what a thread is doing in each scene. Nothing leaves your computer, and nothing runs unless you ask. Every claim must quote the page, or it is dropped. The offline rules beat a local 7B at every mechanical check ([eval results](eval/RESULTS.md)), which is why the model is a second opinion, not the default. Claude can be chosen instead for the paragraph findings and the plot grid, with an API key of your own and a daily spending cap; the story readings stay local. `Analyse paragraph with model` · `Analyse selection for myth and archetype` · `Read this note with model (story map)` ### Where it runs Declared projects are always in. Beyond that, choose: every note, listed folders, notes marked `creative-writer: true`, or nothing. A note's own front matter always wins. Two commands toggle the plugin everywhere or for the current note. ## Install **Community plugins:** Settings → Community plugins → Browse → search **Creative Writer** → Install, Enable. **Beta via [BRAT](https://github.com/TfTHacker/obsidian42-brat):** add `amancioandre/creative-writer`. Desktop only; editing mode (Source and Live Preview). Reading view is untouched. ## Pair it with Harper Install [Harper](https://writewithharper.com) alongside — it is the intended companion. Harper is a free, offline grammar and spelling checker; Creative Writer deliberately leaves spelling, grammar, punctuation and filler words to it. **Harper edits the sentence, Creative Writer edits the prose.** Their marks overlap cleanly: Harper underlines, Creative Writer tints. ## Privacy No network requests. The only exception is the optional model assistant, which talks to the Ollama address you configure (default `localhost`), or to Anthropic's API if you choose Claude and give it a key. Progress, story readings and the plot grid's readings are stored as plain Markdown notes in your vault. After you install the plugin, and once after each minor update, it shows a short note about what changed with a link to a feedback form hosted on [Tally](https://tally.so/r/obJ6AN). The note is built into the plugin: nothing is fetched, nothing is sent unless you open the link, and the link carries nothing about you or your vault. Turn it off under Settings → Where it runs → Release notes; *Show release note* in the command palette brings it back. ## FAQ **How is this different from Longform?** Longform organises scenes into a manuscript and compiles it to a file. Creative Writer works on the prose inside the scenes and on the story as a graph; its manuscript page is for reading the draft whole, and its export is one plain note, not a build pipeline. They coexist happily; Longform projects are read as ordinary folders. **Does it work on mobile?** Not yet — Zen Mode and the editor decorations are desktop-only. **Does it need an AI?** No. Everything except the model assistant is deterministic and offline. ## Support Creative Writer is free and MIT-licensed, built in evenings around a day job. If it has made your writing sessions better, you can keep the coffee coming: [![GitHub Sponsors](https://img.shields.io/badge/GitHub%20Sponsors-EA4AAA?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/amancioandre) Bug reports and ideas: [GitHub issues](https://github.com/amancioandre/creative-writer/issues). Two minutes on how it is going for you: [the feedback form](https://tally.so/r/obJ6AN). News of the Creative Suite, roughly one letter per release: [the newsletter on Substack](https://andramnc.substack.com). Full documentation: [amancioandre.github.io/creative-writer](https://amancioandre.github.io/creative-writer/). ## Contributing Build, test, evaluation corpus and the Clean Architecture layout are in [docs/development](docs/development/architecture.md). Short version: `npm install && npm run build`, `npm test`. Part-of-speech tagging by [compromise](https://github.com/spencermountain/compromise) (MIT). Concreteness norms from Brysbaert, Warriner & Kuperman (2014), CC-BY 4.0.