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:
name: The project's titlestartingElement: The ID of the element where your story begins;nullif nonecover: An object containing the project's cover infofile: The cover image's full file name, as originally uploadedtype: Its type (see the Assets section below)
Click to expand example JSON extract
{
"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
childrenarray that references other board IDs. The Root folder is distinguished by aroot: trueproperty. - A board: Contains arrays referencing the IDs of items placed on that board:
notes: Array of note IDselements: Array of element IDsbranches: Array of branch IDsjumpers: Array of jumper IDsconnections: Array of connection IDs
All boards and folders have a name property identifying them.
Click to expand example JSON extract
"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 contentautoHeight: Boolean indicating whether the note automatically adjusts its height to the size of its content
Click to expand example JSON extract
"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:
theme: The element's color theme (e.g., "cyan", "moss")outputs: Array of connection IDs originating from this elementattributes: Array of custom attribute IDs attached to this elementcomponents: Array of component IDs attached to this elementautoHeight: Boolean indicating whether the element automatically adjusts its height to the size of its content
⚠️ An element's content is not listed in the
elementsobject, but as a property of thecontentsobject.
Click to expand example JSON extract
"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
"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 themesourceid: ID of the originating itemtargetid: ID of the destination itemsourceType: 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
"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 themeconditions: An object defining conditional expressions:ifCondition: The ID of the branch'sifconditionelseIfCondition: An array of the branch'selseifcondition IDselseCondition: The ID of the branch'selsecondition
Click to expand example JSON extract
"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 connectionscript: The expression being evaluated to determine if the condition is met (nullforelseconditions)
Click to expand example JSON extract
"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 localename: For component name only, organized by localelabel: 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
"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 treechildren: Array of child component IDs for organizational foldersassets: Object containing asset referencesattributes: Array of custom attribute IDs
Click to expand example JSON extract
"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 namecType: The type of parent (elementsorcomponents)value: An object containing:data: The actual valuetype: Data type (e.g.,string)plain: Boolean indicating if it's plain text
Click to expand example JSON extract
"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 nametype: The asset type; one of the following:image: Image asset uploaded by the useraudio: Audio asset uploaded by the uservideo: Video asset uploaded by the usertemplate-image: Image asset instantiated during project template recreationtemplate-audio: Audio asset instantiated during project template recreationtemplate-video: Video asset instantiated during project template recreation
root: Boolean indicating if this is the root of the assets folder treechildren: Array of asset IDs for organizational purposes
Click to expand example JSON extract
"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 nametype: The variable data type (e.g.,boolean,integer)value: The variable's initial valueroot: Boolean indicating if this is the root of the variables folder treechildren: Array of variable IDs for folders
Click to expand example JSON extract
"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 nameiso: 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
"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
{
"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 > 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"
}
}