File format

The .cora package

A Cora project is saved as a .cora file. It is not a binary file — it is a macOS file package (a folder that Finder shows as a single file). You can right-click it in Finder and choose Show Package Contents to see what’s inside.

Everything is either plain text (.txt) or JSON (.json). There are no proprietary formats, no compression, and no encryption.

Package structure

MyNovel.cora/
├── meta.json
├── characters.json
├── places.json
└── parts/
    └── {part-uuid}/
        ├── meta.json
        └── chapters/
            └── {chapter-uuid}/
                ├── meta.json
                ├── scenes/
                │   └── {scene-uuid}.txt
                ├── drafts/
                │   └── {draft-uuid}.txt
                └── notes/
                    └── {note-uuid}.txt

Top-level files

meta.json

Stores the project title, format version, and the ordered list of Part UUIDs:

{
  "version": 1,
  "title": "My Novel",
  "partsOrder": ["uuid-1", "uuid-2"]
}

characters.json

An array of character records used across the project’s scene metadata.

places.json

An array of place records used across the project’s scene metadata.

Part folder

Each Part is a folder named by its UUID under parts/.

Its meta.json stores the part title and the ordered list of Chapter UUIDs.

Chapter folder

Each Chapter is a folder named by its UUID under its Part’s chapters/ directory.

Its meta.json stores the chapter title and arrays for scenes, drafts, and notes — including scene metadata (title, synopsis, character IDs, place IDs):

{
  "title": "Chapter One",
  "scenes": [
    {
      "id": "uuid",
      "title": "The station",
      "desc": "Anna arrives at the station in the rain.",
      "characterIDs": ["char-uuid"],
      "placeIDs": ["place-uuid"]
    }
  ],
  "drafts": [ ... ],
  "notes": [ ... ]
}

Text files

Scene, draft, and note text are each stored in their own .txt file, named by UUID. The body is plain UTF-8 prose.

When a passage uses bold, italic, or underline, Cora appends a small style footer after the body:

She walked into the rain.

<!--cora-styles:{"v":1,"runs":[{"o":4,"l":6,"b":true,"i":false,"u":false}]}-->

Offsets are UTF-16 positions into the plain body. Files with no formatting stay as ordinary plain text — open them in any editor. Search, word counts, and TXT export always use the plain body and ignore the footer.

Why this format

Backups

Because .cora is a regular file package, it works with all standard macOS backup methods: Time Machine, iCloud Drive version history, and any cloud sync service that supports files.

Cora also keeps up to 20 recent, local-only recoverable versions while you work. Choose File → Browse Recoverable Versions… to restore one. These copies are a short-term safety net, not a replacement for Time Machine or another independent backup.