Skip to content

Arcweave JSON

JSON structure reference

The Arcweave JSON is shallow and fairly easy to understand.

When you export an Arcweave project as JSON, the resulting file contains a complete representation of your project's structure and content. This section explains how each major part and its properties are organized within the JSON schema.

Project-level

At the root level, the JSON includes several top-level properties:

Click to expand example JSON extract
json
{
  "name": "Game Engine Example",
  "startingElement": null,
  "cover": {
    "file": "game-engine-cover.png",
    "type": "template-image"
  }
}

Boards

The boards object contains references to all boards and board folders of the project by their ID and it includes the following properties:

  • A folder (including the Root): Identified by having a children array that references other board IDs. The Root folder is distinguished by a root: true property.
  • A board: Contains arrays referencing the IDs of items placed on that board:

All boards and folders have a name property identifying them.

Click to expand example JSON extract
json
"boards": {
    "733b1cc4-6d51-4ad6-9fba-444b4f2d98f3": {
      "name": "Dialogues",
      "children": ["ef8116b9-c38d-473d-9c0a-600bc37a010d"]
    },
    "2ad15ff6-f2ba-4f1d-9d9d-68938c683d7e": {
      "name": "Root",
      "root": true,
      "children": ["733b1cc4-6d51-4ad6-9fba-444b4f2d98f3"]
    },
    "ef8116b9-c38d-473d-9c0a-600bc37a010d": {
      "name": "Wanda Dialogue",
      "notes": ["d974242a-a65d-4bd6-8670-24c6b02a487f"],
      "jumpers": ["28e3009a-e164-4679-92c3-977615b1eb4b"],
      "branches": ["0d845415-33d5-4486-9514-32b88e17e6b2"],
      "elements": ["5265ceac-f13f-47fc-a02c-6eda7eea6b90"],
      "connections": [
        "8a89cabd-7542-48db-b501-3c0019145989",
        "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd"
      ]
    }
  },

Notes

The notes object contains references to all notes of the project by their ID and it includes the following properties:

  • theme: The note's color theme (e.g., "cyan", "moss")
  • content: HTML-formatted text content
  • autoHeight: Boolean indicating whether the note automatically adjusts its height to the size of its content
Click to expand example JSON extract
json
"notes": {
    "d974242a-a65d-4bd6-8670-24c6b02a487f": {
      "theme": "cyan",
      "content": "<p>We've given dialogue starting elements a custom element attribute.<\/p>",
      "autoHeight": true
    }
  },

Elements

The elements object stores references to all elements of the project by their ID and it includes the following properties:

⚠️ An element's content is not listed in the elements object, but as a property of the contents object.

Click to expand example JSON extract
json
  "elements": {
    "5265ceac-f13f-47fc-a02c-6eda7eea6b90": {
      "theme": "cyan",
      "outputs": ["8a89cabd-7542-48db-b501-3c0019145989"],
      "attributes": ["11006864-6f66-4c2c-a3b7-d3fae8febc42"],
      "autoHeight": false,
      "components": ["647349ca-9ebb-4d5f-b81e-500761ec1c5a"]
    }
  },

Jumpers

The jumpers object contains references to all jumpers of the project by their ID and it includes the following properties:

  • elementId: The ID of the target element this jumper points to
Click to expand example JSON extract
json
"jumpers": {
    "28e3009a-e164-4679-92c3-977615b1eb4b": {
      "elementId": "5265ceac-f13f-47fc-a02c-6eda7eea6b90"
    }
  },

Connections

The connections object contains references to all connections of the project by their ID and it includes the following properties:

  • type: The visual style of the connection (e.g., "Straight")
  • theme: Color theme
  • sourceid: ID of the originating item
  • targetid: ID of the destination item
  • sourceType: Type of source item (e.g., "elements", "conditions")
  • targetType: Type of target item (e.g., "branches", "jumpers")
  • targetFace: Which side of the target the connection attaches to (e.g., "left")
Click to expand example JSON extract
json
"connections": {
    "8a89cabd-7542-48db-b501-3c0019145989": {
      "type": "Straight",
      "theme": "moss",
      "sourceid": "5265ceac-f13f-47fc-a02c-6eda7eea6b90",
      "targetid": "0d845415-33d5-4486-9514-32b88e17e6b2",
      "sourceType": "elements",
      "targetFace": "left",
      "targetType": "branches"
    },
    "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd": {
      "targetType": "jumpers",
      "type": "Straight",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "sourceid": "f8e12e95-43b7-4d42-9844-5402665b24ef",
      "theme": "moss",
      "sourceType": "conditions"
    }
  },

Branches

The branches object contains references to all branches of the project by their ID and it includes the following properties:

  • theme: Color theme
  • conditions: An object defining conditional expressions:
    • ifCondition: The ID of the branch's if condition
    • elseIfCondition: An array of the branch's elseif condition IDs
    • elseCondition: The ID of the branch's else condition
Click to expand example JSON extract
json
"branches": {
    "0d845415-33d5-4486-9514-32b88e17e6b2": {
      "theme": "moss",
      "conditions": {
        "ifCondition": "f8e12e95-43b7-4d42-9844-5402665b24ef",
        "elseIfConditions": ["e3234e1e-74f9-45d5-be30-994bf5b3bc7c"],
        "elseCondition": "0d91c8a3-7704-423e-b3f6-046973eb15a7"
      }
    }
  },

Conditions

The conditions object contains references to all branch conditions of the project (see Branches) by their ID and it includes the following properties:

  • output: The ID of the condition's output connection
  • script: The expression being evaluated to determine if the condition is met (null for else conditions)
Click to expand example JSON extract
json
"conditions": {
    "f8e12e95-43b7-4d42-9844-5402665b24ef": {
      "output": "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd",
      "script": "have_potion"
    }
  },

Contents

The contents object is central to Arcweave's localization system. It contains the content of all translatable project items:

  • Elements: Title and content, referenced by the element ID
  • Components: Name, referenced by the component ID
  • Labels: Content (property label), referenced by the label's connection ID.

The contents object includes the following properties:

  • title: For element title only, organized by locale (e.g., en, es)
  • content: For element content only, organized by locale
  • name: For component name only, organized by locale
  • label: For connection label content only, organized by locale
  • _status: Translation status for each locale

Each localized field contains a text property with the actual content.

Click to expand example JSON extract
json
"contents": {
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "name": {
        "en": {
          "text": "Root"
        }
      }
    },
    "5265ceac-f13f-47fc-a02c-6eda7eea6b90": {
      "title": {
        "en": {
          "text": "<p>Starting loop<\/p>"
        }
      },
      "content": {
        "en": {
          "text": "<p style=\"margin-left: 20px\">Help me, Stranger.... I am wounded...<\/p>"
        },
        "es": {
          "text": "<p style=\"margin-left: 20px\">\u00a1Ay\u00fadame, por favor! \u00a1Estoy herido!<\/p>"
        }
      },
      "_status": {
        "es": "review",
        "elf": "untranslated"
      }
    },
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "name": {
        "en": {
          "text": "Characters"
        }
      }
    },
    "647349ca-9ebb-4d5f-b81e-500761ec1c5a": {
      "name": {
        "en": {
          "text": "Wanda Elandor"
        }
      },
      "_status": {
        "es": "review",
        "elf": "untranslated"
      }
    },
    "8a89cabd-7542-48db-b501-3c0019145989": {
      "label": {
        "en": {
          "text": "<p>Give potion<\/p>"
        },
        "es": {
          "text": "<p>Dar poci\u00f3n<\/p>"
        }
      },
      "_status": {
        "es": "final",
        "elf": "untranslated"
      }
    }
  },

Components

The components object contains references to all components of the project by their ID and it includes the following properties:

  • root: Boolean indicating if this is the root of the components folder tree
  • children: Array of child component IDs for organizational folders
  • assets: Object containing asset references
  • attributes: Array of custom attribute IDs
Click to expand example JSON extract
json
"components": {
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "children": [
        "3846c37c-07a1-4c04-98e2-26cd026295d1",
        "647349ca-9ebb-4d5f-b81e-500761ec1c5a"
      ]
    },
    "3846c37c-07a1-4c04-98e2-26cd026295d1": {
      "assets": {
        "cover": {
          "id": "190e9e72-32e9-4c51-adbb-dbad343134fc"
        }
      },
      "attributes": ["22780ff3-64a2-40e8-a2e4-e753809c020a"]
    },
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "root": true,
      "children": ["036db898-0cb9-4a29-b19d-3e8f3288d9a2"]
    },
  },

Attributes

The attributes object contains references to all attributes of the project by their ID and it includes the following properties:

  • cId: The ID of the parent item (component or element)
  • name: The attribute's name
  • cType: The type of parent (elements or components)
  • value: An object containing:
    • data: The actual value
    • type: Data type (e.g., string)
    • plain: Boolean indicating if it's plain text
Click to expand example JSON extract
json
"attributes": {
    "11006864-6f66-4c2c-a3b7-d3fae8febc42": {
      "cId": "5265ceac-f13f-47fc-a02c-6eda7eea6b90",
      "name": "tag",
      "cType": "elements",
      "value": {
        "data": "dialogue_start",
        "type": "string",
        "plain": true
      }
    },
    "22780ff3-64a2-40e8-a2e4-e753809c020a": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "obj_id",
      "cType": "components",
      "value": {
        "data": "DRAKE",
        "type": "string",
        "plain": true
      }
    }
  },

Assets

The assets object contains references to all assets of the project by their ID and it includes the following properties:

  • name: The asset file name
  • type: The asset type; one of the following:
    • image: Image asset uploaded by the user
    • audio: Audio asset uploaded by the user
    • video: Video asset uploaded by the user
    • template-image: Image asset instantiated during project template recreation
    • template-audio: Audio asset instantiated during project template recreation
    • template-video: Video asset instantiated during project template recreation
  • root: Boolean indicating if this is the root of the assets folder tree
  • children: Array of asset IDs for organizational purposes
Click to expand example JSON extract
json
"assets": {
    "190e9e72-32e9-4c51-adbb-dbad343134fc": {
      "name": "player.png",
      "type": "template-image"
    },
    "647d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "4de16200-4175-4aff-b753-3d40ff849289",
        "190e9e72-32e9-4c51-adbb-dbad343134fc",
        "fd70f4a4-578f-442f-9e5c-78872289818f"
      ]
    }
  },

Variables

The variables object contains references to all variables of the project by their ID and it includes the following properties:

  • name: The variable name
  • type: The variable data type (e.g., boolean, integer)
  • value: The variable's initial value
  • root: Boolean indicating if this is the root of the variables folder tree
  • children: Array of variable IDs for folders
Click to expand example JSON extract
json
"variables": {
    "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228": {
      "name": "have_potion",
      "type": "boolean",
      "value": false
    },
    "747d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "990d6321-43cb-430b-84bd-6b48c574c489",
        "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228"
      ]
    },
    "990d6321-43cb-430b-84bd-6b48c574c489": {
      "name": "healer_health",
      "type": "integer",
      "value": 50
    },
  },

Locales

The locales array defines available languages used by Arcweave's localization features. The included properties are:

  • name: The language name
  • iso: The ISO language code (e.g., en, es)
  • base: The language set as the one used to translate from (null for the primary language)

Translation content is distributed throughout the contents object, where each localizable item contains nested objects for each locale, along with a _status object tracking translation progress.

Click to expand example JSON extract
json
"locales": [
    {
      "name": "English",
      "iso": "en",
      "base": null
    },
    {
      "name": "Spanish",
      "iso": "es",
      "base": "en"
    }
  ]

Complete example

To illustrate the structure of Arcweave's JSON format, the following is a complete .json file exported from a simplified version of the Game Engine Example project template.

Click to expand example JSON
json
{
  "startingElement": null,
  "boards": {
    "733b1cc4-6d51-4ad6-9fba-444b4f2d98f3": {
      "name": "Dialogues",
      "children": ["ef8116b9-c38d-473d-9c0a-600bc37a010d"]
    },
    "2ad15ff6-f2ba-4f1d-9d9d-68938c683d7e": {
      "name": "Root",
      "root": true,
      "children": ["733b1cc4-6d51-4ad6-9fba-444b4f2d98f3"]
    },
    "ef8116b9-c38d-473d-9c0a-600bc37a010d": {
      "name": "Wanda Dialogue",
      "notes": ["d974242a-a65d-4bd6-8670-24c6b02a487f"],
      "jumpers": ["28e3009a-e164-4679-92c3-977615b1eb4b"],
      "branches": ["0d845415-33d5-4486-9514-32b88e17e6b2"],
      "elements": ["b4bb21bf-c26a-4b00-b857-8465b5bd2000"],
      "connections": [
        "da3e05d0-2bdb-4c4e-8070-1d2d547b9db1",
        "fa267a31-7f38-470b-bc0d-43fdd22f261c",
        "d9e79c2f-74f8-43c8-8fb3-e8c8e7cd14b1",
        "5ead5198-a6d2-477e-881f-2870b252367e"
      ]
    }
  },
  "notes": {
    "d974242a-a65d-4bd6-8670-24c6b02a487f": {
      "theme": "cyan",
      "content": "<p>We've given dialogue starting elements a custom element attribute.<\/p>",
      "autoHeight": true
    }
  },
  "elements": {
    "b4bb21bf-c26a-4b00-b857-8465b5bd2000": {
      "autoHeight": true,
      "theme": "cyan",
      "components": ["647349ca-9ebb-4d5f-b81e-500761ec1c5a"],
      "outputs": ["5ead5198-a6d2-477e-881f-2870b252367e"],
      "attributes": ["f75d9de7-9a86-421b-a00b-a6e8b5c1b5ac"],
      "content": "<p>\u00a1Ay\u00fadame, por favor...! Estoy herido...<\/p>",
      "title": "<p><span class=\"mention-component mention\" data-id=\"647349ca-9ebb-4d5f-b81e-500761ec1c5a\" data-label=\"Wanda Elandor\" data-type=\"component\">Wanda Elandor<\/span> dialogo empieza<\/p>"
    }
  },
  "jumpers": {
    "28e3009a-e164-4679-92c3-977615b1eb4b": {
      "elementId": "b4bb21bf-c26a-4b00-b857-8465b5bd2000"
    }
  },
  "connections": {
    "da3e05d0-2bdb-4c4e-8070-1d2d547b9db1": {
      "sourceType": "conditions",
      "sourceid": "f8e12e95-43b7-4d42-9844-5402665b24ef",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "targetType": "jumpers",
      "theme": "orange",
      "type": "Straight",
      "label": "<p>Dar poci\u00f3n<\/p>"
    },
    "d9e79c2f-74f8-43c8-8fb3-e8c8e7cd14b1": {
      "targetType": "jumpers",
      "type": "Bezier",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "sourceid": "0d91c8a3-7704-423e-b3f6-046973eb15a7",
      "theme": "orange",
      "sourceType": "conditions",
      "label": "<p>\"\u00a1Volver\u00e9 con ayuda!\"<\/p>"
    },
    "fa267a31-7f38-470b-bc0d-43fdd22f261c": {
      "type": "Bezier",
      "targetType": "jumpers",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "sourceid": "e3234e1e-74f9-45d5-be30-994bf5b3bc7c",
      "theme": "orange",
      "sourceType": "conditions",
      "label": "<p>Dale bayas buenas<\/p>"
    },
    "5ead5198-a6d2-477e-881f-2870b252367e": {
      "targetType": "branches",
      "type": "Bezier",
      "targetid": "0d845415-33d5-4486-9514-32b88e17e6b2",
      "sourceid": "b4bb21bf-c26a-4b00-b857-8465b5bd2000",
      "theme": "default",
      "sourceType": "elements",
      "label": null
    }
  },
  "branches": {
    "0d845415-33d5-4486-9514-32b88e17e6b2": {
      "theme": "moss",
      "conditions": {
        "ifCondition": "f8e12e95-43b7-4d42-9844-5402665b24ef",
        "elseIfConditions": ["e3234e1e-74f9-45d5-be30-994bf5b3bc7c"],
        "elseCondition": "0d91c8a3-7704-423e-b3f6-046973eb15a7"
      }
    }
  },
  "components": {
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "children": [
        "3846c37c-07a1-4c04-98e2-26cd026295d1",
        "647349ca-9ebb-4d5f-b81e-500761ec1c5a"
      ],
      "name": null
    },
    "3846c37c-07a1-4c04-98e2-26cd026295d1": {
      "assets": {
        "cover": {
          "id": "190e9e72-32e9-4c51-adbb-dbad343134fc"
        }
      },
      "attributes": ["22780ff3-64a2-40e8-a2e4-e753809c020a"],
      "name": "Drake Miles"
    },
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "root": true,
      "children": ["036db898-0cb9-4a29-b19d-3e8f3288d9a2"],
      "name": "Root"
    },
    "647349ca-9ebb-4d5f-b81e-500761ec1c5a": {
      "assets": {
        "cover": {
          "id": "fd70f4a4-578f-442f-9e5c-78872289818f"
        }
      },
      "attributes": [],
      "name": null
    }
  },
  "attributes": {
    "f75d9de7-9a86-421b-a00b-a6e8b5c1b5ac": {
      "name": "element_type",
      "cType": "elements",
      "value": {
        "plain": true,
        "type": "string",
        "data": "dialogue_start"
      },
      "cId": "b4bb21bf-c26a-4b00-b857-8465b5bd2000"
    },
    "22780ff3-64a2-40e8-a2e4-e753809c020a": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "obj_id",
      "cType": "components",
      "value": {
        "data": "DRAKE",
        "type": "string",
        "plain": true
      }
    }
  },
  "assets": {
    "190e9e72-32e9-4c51-adbb-dbad343134fc": {
      "name": "player.png",
      "type": "template-image"
    },
    "4de16200-4175-4aff-b753-3d40ff849289": {
      "name": "healer.png",
      "type": "template-image"
    },
    "647d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "4de16200-4175-4aff-b753-3d40ff849289",
        "190e9e72-32e9-4c51-adbb-dbad343134fc",
        "fd70f4a4-578f-442f-9e5c-78872289818f"
      ]
    },
    "fd70f4a4-578f-442f-9e5c-78872289818f": {
      "name": "wanda.png",
      "type": "template-image"
    }
  },
  "variables": {
    "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228": {
      "name": "have_potion",
      "type": "boolean",
      "value": false
    },
    "747d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "990d6321-43cb-430b-84bd-6b48c574c489",
        "ddee7af7-0fc3-474d-ad6a-4938a330506a",
        "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228"
      ]
    },
    "990d6321-43cb-430b-84bd-6b48c574c489": {
      "name": "goodberries",
      "type": "integer",
      "value": 8
    },
    "ddee7af7-0fc3-474d-ad6a-4938a330506a": {
      "name": "wanda_health",
      "type": "integer",
      "value": 20
    }
  },
  "conditions": {
    "f8e12e95-43b7-4d42-9844-5402665b24ef": {
      "output": "da3e05d0-2bdb-4c4e-8070-1d2d547b9db1",
      "script": "have_potion"
    },
    "e3234e1e-74f9-45d5-be30-994bf5b3bc7c": {
      "script": "goodberries &gt; 0",
      "output": "fa267a31-7f38-470b-bc0d-43fdd22f261c"
    },
    "0d91c8a3-7704-423e-b3f6-046973eb15a7": {
      "script": null,
      "output": "d9e79c2f-74f8-43c8-8fb3-e8c8e7cd14b1"
    }
  },
  "name": "Game Engine Example",
  "cover": {
    "file": "game-engine-cover.png",
    "type": "template-image"
  }
}