Skip to content

Documents and spreadsheets

Lore documents and spreadsheets are one object with two kinds. The record, the editor, how mentions work, and what a plan gate actually blocks.

All documentation — Modelling the world
On this page

The Documents section, Ctrl+2. Prose that is not on a board: setting notes, character biographies, timelines — and the tables that go with them.

A prose document open in the editor — a title, a Setting Description and a Scene Flow with character cues — with two collaborators' name pills in the text.
A document, open.

One object, two kinds

Documents and spreadsheets are the same object type, in the same collection, distinguished by a docKind field with exactly two values.

docKindsheetModeWhat you getMenu entry
richtext (the default; stored as absent)—A prose editorNew Document
spreadsheettyped (stored as absent)A typed tableNew Table
spreadsheetfreeformAn untyped gridNew Free-form Sheet

The tree’s context menu: New Document · New Table · New Free-form Sheet · New Folder · Import Document… · Rename · Delete. The dialogs read Create Document, Create Table (Enter a name for the new spreadsheet) and Create Free-form Sheet (Enter a name for the new free-form (untyped) sheet).

A document record

FieldTypeRequiredWhat it is
idstringYes
type"document"YesDistinguishes it from a folder in the same tree
titlestringYes
parentIdstring or nullYesIts folder
ordernumberYes
createdAt · updatedAtnumberYesEpoch milliseconds
createdBystringYes
contentRefstringA presence marker: a snapshot of the body exists in object storage
textCachestringA plain-text mirror, up to about 64 KB, used for mention previews and the AI’s context
docKindrichtext · spreadsheetAbsent means richtext
sheetModetyped · freeformSpreadsheets only; absent means typed

The body does not live on the record. Each document has its own collaborative sub-document, so opening one loads only that one, and its undo history is its own.

The editor

The prose editor is ProseMirror, wired directly rather than through a wrapper. The body is a collaborative XML fragment on the document’s own sub-document, which is what makes character-level merging work between two people typing in the same paragraph.

A spreadsheet’s content roots on that same sub-document: its metadata, its row and column order, its column definitions, its row metadata, and its cells — plain and rich.

Which rich-text formatting is available inside node editors is a project setting; see project settings.

Mentions

Typing @ in a document opens the mention picker. @ is the only trigger; a separate / opens slash commands, which are unrelated.

For the @ to fire it must be at the start of a block or preceded by whitespace, the cursor must be collapsed, and you must not be inside a code block. The query may not contain whitespace.

What you can mention in a document: entities, entity definitions, and other documents. The filter cycles through all · entity · definition · document, and results are grouped in that order.

What a mention stores

A mention is an atom — a single indivisible inline node, not a run of text with a link on it. It carries exactly three attributes:

AttributeDefault
idempty
labelempty
mentionTypeentity

It serialises to a span carrying those three as data attributes, and renders as @Label.

Clicking a mention navigates to what it names. Backlinks are emitted by walking the mention nodes.

Entities are also mentionable inside entity rich-text fields and inside the entity grid, through one shared builder that offers the entity’s name with its definition as a sublabel, fuzzy-matched, top ten.

Importing

Import Document… accepts .docx, .txt, .md / .markdown, .html / .htm, and the screenplay formats .fountain, .spmd and .fdx, converting each to prose. It also accepts a .zip of any of those, importing every document inside it at once; when the archive has folders, Preserve folder structure (on by default) recreates them in the tree.

A .fountain, .spmd or .fdx file arrives as one paragraph per screenplay element, in order — a character cue stays alone on its line, above the speech beneath it — so it still reads as a script, and the AI’s document-to-board conversion can still tell who speaks each line.

Limits and plan gates

Nothing caps the number of documents. No guard reads such a number, on any plan.

Two plan gates touch this area, and they are enforced very differently:

GateMinimum planWhat it gatesWhere it is enforced
DocumentsProCreate, update and delete — never readAt the collaboration socket. An unentitled organization is demoted to read-only rather than refused, plus the REST edges. This one is real.
SpreadsheetsProThe entity grid viewIn the browser only. No server endpoint checks it.

Documents are bounded indirectly by storage per project, which counts each document’s collaborative snapshot as well as your media — so a text-only project consumes it. The figure per plan is on the pricing page.

What breaks

SituationWhat happens
Your organization is below ProDocuments are available on the Pro plan and above. Existing documents stay readable; edits are dropped at the socket.
Your organization is below Pro, for spreadsheetsSpreadsheet views are available on the Pro plan and above. Enforced in the browser only.
A mention’s target is deletedThe pill keeps the label it was inserted with; clicking it goes nowhere
An entity is renamedExisting mentions keep the old label
A screenplay is imported here rather than in ScreenplayIt arrives as plain body text, with no scenes and no boards
Written for
Writers · Unity developers · Advanced integrators
Last updated