Skip to content

Completion Guide Format

davidgith1 edited this page Jul 24, 2026 · 1 revision

Completion Guide JSON Format

A completion guide is a plain JSON file describing a VN's routes, the choices along each one, and the endings they lead to — the kind of information a text walkthrough already contains, structured so the app can render it as a checkable tree instead of a wall of text.

Import one from a novel's row menu ("Import guide…") to attach it to that novel, or from the separate Guides page to keep a guide independent of any imported story. Either way, the file itself is never modified — every checkbox you tick is tracked by the app separately, keyed to the novel/entry, and is completely independent of any save slot.

Guide JSON format

The parser is deliberately permissive: only a top-level "routes" array is required, every other field is optional, and unrecognized fields are simply ignored (so a richer, hand-maintained guide degrades gracefully in older app versions, and vice versa). Two shapes of "prerequisiteEndings" are both understood (see the field reference below) since real-world walkthrough data isn't consistent about it.

Full example

{
  "game": "Example Visionary Tale",
  "source": "Written by hand as a schema example for this wiki page",
  "rating": "All ages",
  "generatedNote": "Not scraped from a real walkthrough -- purely illustrative",
  "trueEndNote": "The Grand Ending requires every other ending first",
  "recommendedOrderNote": "Play Aria's route before Bram's -- Bram's route assumes Aria's is done",

  "saveSlots": [
    { "id": "001", "createdIn": "common route", "usedToStart": ["aria", "bram"], "created": false }
  ],

  "routes": [
    {
      "id": "aria",
      "name": "Aria's Route",
      "category": "Main Routes",
      "recommendedOrder": 1,
      "prerequisiteRoutes": [],
      "checkpoints": [
        {
          "afterEvent": "The rooftop conversation",
          "choices": [
            { "num": 1, "text": "Stay and talk with Aria.", "passed": false },
            { "num": 2, "text": "Go back inside.", "passed": false, "saveHereFor": "aria_bad" },
            {
              "num": 3,
              "text": "About the transfer student.",
              "characterSelectChoice": true,
              "branchesTo": "bram",
              "note": "Auto-selected on a first playthrough; picking it manually shifts into Bram's route early.",
              "passed": false
            }
          ]
        },
        {
          "afterEvent": "The festival",
          "choices": [],
          "unenumeratedChoices": 12,
          "note": "A dozen minor flavor choices here, none of which affect the ending."
        }
      ],
      "endings": [
        {
          "id": "aria_good",
          "name": "Aria - Good End",
          "type": "good",
          "obtainedBy": "Reached by choosing option 1 at the rooftop.",
          "completed": false
        },
        {
          "id": "aria_bad",
          "name": "Aria - Bad End",
          "type": "bad",
          "pivotalChoice": {
            "text": "Go back inside.",
            "pick": true,
            "note": "The choice that locks in the bad end."
          },
          "completed": false
        }
      ]
    },
    {
      "id": "bram",
      "name": "Bram's Route",
      "category": "Main Routes",
      "recommendedOrder": 2,
      "prerequisiteRoutes": ["aria"],
      "prerequisiteEndings": { "requireOneOf": ["aria_good", "aria_bad"] },
      "prerequisiteNote": "Unlocks after finishing Aria's route with either ending.",
      "unlocksOnCompletion": ["grand_ending"],
      "checkpoints": [
        {
          "choices": [
            { "text": "Confront Bram directly.", "passed": false },
            { "text": "Wait and see what happens.", "passed": false }
          ]
        }
      ],
      "endings": [
        {
          "id": "bram_good",
          "name": "Bram - Good End",
          "type": "good",
          "pivotalChoiceSequence": [
            { "text": "Confront Bram directly.", "pick": true },
            { "text": "Forgive him.", "pick": true, "note": "The final, deciding line." }
          ],
          "completed": false
        }
      ]
    },
    {
      "id": "grand_ending",
      "name": "Grand Ending",
      "category": "Bonus",
      "recommendedOrder": 3,
      "prerequisiteRoutes": ["aria", "bram"],
      "prerequisiteEndings": ["aria_good", "bram_good"],
      "accessedVia": "Unlocks on the title screen once every other ending is completed.",
      "onlyOneEnding": true,
      "onlyOneEndingNote": "Unlike the other routes, there's just this one ending here.",
      "checkpoints": [],
      "endings": [
        { "id": "grand_end", "name": "Grand Ending", "type": "true", "completed": false }
      ]
    }
  ]
}

Field reference

Top level

Field Type Notes
routes array Required. See Route below.
game string Shown as the guide dialog's title.
saveSlots array See Save slot below. Optional; a Never7-style walkthrough convention (numbered save slots as waypoints between routes), not needed for guides that don't use them.
recommendedOrderNote string Free text shown under the title.
source, rating, generatedNote, trueEndNote string Joined into one "about this guide" line under the title.

Route

Field Type Notes
id string Stable identifier; also the prefix used to key this route's choices/endings for progress-tracking. Defaults to "route" + index if omitted.
name string Display name. Defaults to id.
category string Shown as a subtitle under the route name (e.g. "Near Side of the Moon").
recommendedOrder number Routes are sorted by this ascending; routes without it keep their original array order, sorted after any that do have it.
prerequisiteRoutes array of strings Other routes' ids this one requires; shown as an info line.
prerequisiteEndings array of strings or object Either a flat array of ending ids (treated as "requires all of these"), or { "requireOneOf": [...], "requireAll": [...] } for a mix of the two.
unlocksOnCompletion array of strings Other routes' ids this one unlocks; shown as an info line.
prerequisiteNote string Free text shown as an info line verbatim.
accessedVia string How the route is reached (e.g. a main-menu option); shown as "Access via: …".
onlyOneEnding boolean If true, shows onlyOneEndingNote (or a generic fallback line) noting the route has just one ending.
onlyOneEndingNote string Custom text for the above.
checkpoints array See Checkpoint below.
endings array See Ending below.

Checkpoint (an item inside a route's checkpoints array)

Field Type Notes
afterEvent string Shown as a small sub-heading above this checkpoint's choices. If omitted and the route has more than one checkpoint, a synthesized "Checkpoint N" is used instead.
choices array See Choice below.
unenumeratedChoices number If > 0, shows an inert "+N more choices not itemized" line (for walkthroughs that don't enumerate every minor choice).
note string Free text; appended to the unenumerated-choices line, or shown alone if there isn't one.

Choice (an item inside a checkpoint's choices array)

Field Type Notes
text string The choice's own text, shown as the checkbox row's label.
num number If present, prefixes the label as "N. text" (matches how some walkthroughs number choices).
passed boolean Seeds this choice's checked state the first time the guide is imported for a given novel/entry — never overwrites progress you've already tracked on a re-import.
characterSelectChoice boolean Flags an auto-selected/first-playthrough-only choice; shown as a "Character-select choice" note.
saveHereFor string Notes which ending a save made at this point is for; shown as "Save here for: …".
branchesTo string Notes which other route this choice branches into; shown as "Branches to: …".
note string Free text, appended to the same secondary detail line as the above.

Ending (an item inside a route's endings array)

Field Type Notes
id string Stable identifier, used to key this ending's progress (prefixed with the route's own id). Defaults to routeId + "_ending" + index.
name string Display name. Defaults to id.
type string Shown in parentheses after the name (e.g. "(true)", "(good)", "(bad)").
completed boolean Seeds this ending's checked state on first import, same rule as passed above.
loadSave string A save-slot id (see Save slot) this ending is reached from; shown as "Load save …".
pivotalChoice object A single { text, pick, note } step describing the deciding choice for this ending. Ignored if pivotalChoiceSequence is also present and non-empty.
pivotalChoiceSequence array of the above Multiple deciding steps in order, rendered joined by an arrow.
obtainedBy string Free-text alternative/supplement to the structured fields above.
note string Free text, appended after everything else.

A pivotalChoice/pivotalChoiceSequence step's own fields: text (the choice's wording), pick (boolean, default true — set to false to mean "pick the other option here"), and an optional note.

Save slot (an item inside the top-level saveSlots array — optional, only meaningful for walkthroughs that structure themselves around numbered save points)

Field Type Notes
id string The slot's own label/number. Defaults to its array index.
createdIn string Which route this save was made in; shown in the row label.
usedToStart array of strings Which routes this save is used to start; shown in the row label.
created boolean Seeds this slot's checked state on first import, same rule as passed/completed above.

Clone this wiki locally