Local Writing App

A fiction-writing app that runs entirely on your own machine, stores your work as plain files you can read without it, and treats AI as an optional tool you point at your prose — not a service you rent.

No account. No subscription. No sync. Nothing phones home.

Free and open source (MIT) · Windows, macOS, and Linux

The manuscript tree, a scene open in the editor, and the metadata rail
The manuscript tree, a scene in the editor, and its metadata — all of it plain files on your disk.

Why this exists

Your manuscript is not a rental

Writing software has drifted into rented access to your own work — stop paying and you're locked out. This is a program you run. If the project were abandoned tomorrow, the copy on your disk keeps working, and the license lets anyone pick it up.

Fully offline, plain files

Scenes and lore are Markdown with YAML front matter; structure is a handful of YAML files. You can read, grep, diff, and version-control a project without this app. With a local model via Ollama, even the AI runs with the network switched off.

AI as a tool, not a ghostwriter

No "write my novel" button. The model gets context you authored — lore, scenes, outline — through prompts you wrote and can read. You pick the provider and model per task, see the token cost of every call, and the permission model fails closed.

What it does

Manuscript

Acts, chapters, and scenes with drag-reordering. Scenes are Markdown files behind a WYSIWYG editor; identity lives in front matter, so renaming files never breaks anything.

Lore

Characters, places, and anything else — typed entries with fields, tags, references, and backlinks. Mid-scene mutations let a fact change partway through the story, with a timeline showing the effective state at any point.

Plot boards

Plotlines and cards laid out against the manuscript, so structure is something you can see and rearrange, not just imagine.

Views

Every list is backed by a small set-algebra query — union, intersection, relational nesting over lore links — authored in a drag-and-drop designer, with parameters, grouping, and trees.

Layered metadata schema

Model world / series / book levels purely by folder depth: nearer schema layers override farther ones, and node types, fields, and inheritance are authored in-app.

AI, when you want it

Anthropic, OpenAI, OpenRouter, or local models via Ollama. Prompts are Jinja2 templates stored as project files; chats are project nodes; per-call token and cost accounting rolls up to a project total.

A lore entry with typed fields, references, and backlinks
A lore entry: typed fields, references to other entries, and backlinks from the scenes that mention it.
The plot board with cards on plotlines, laid out against acts and chapters
The plot board: cards on plotlines, laid out against the acts and chapters they belong to.

A project is a folder

Everything the app knows about your story lives in files you can open in any editor. Caches are disposable; credentials never enter the project, so a folder is safe to commit or share.

my-novel/
├─ project.yaml               # manifest: title, AI policy, UI preferences
├─ manuscript.structure.yaml  # act / chapter / scene ordering
├─ metadata.schema.yaml       # this layer's schema contributions
├─ todo.yaml
├─ scenes/                    # Markdown + YAML front matter
├─ lore/
├─ prompts/                   # Jinja2 templates, editable in-app
├─ research/  chats/  views/
└─ .cache/                    # disposable, always rebuildable