Arcweave JSON
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.
Two JSON formats
Arcweave JSON comes in two possible versions, depending on whether the export includes multiple languages or not (see Localization). Specifically:
Single-language JSON
The exported JSON file is of the single-language JSON format when either of the following is true:
- The workspace doesn't have Localization features.
- The workspace has Localization features, but Current language or Select language is chosen during JSON export.
In the single-language JSON:
- Element title and element content data are nested in the
elementsobject at the following paths:/elements/{elementId}/title/elements/{elementId}/content
- Label content data are nested in the
connectionsobject at/connections/{connectionId}/label - Component name data are nested in the
componentsobject at/components/{componentId}/name
Click to expand extract of single-language JSON example
{
"elements": {
"188e6385-85e2-496b-82ac-a81696e7bcab": {
"content": "<p>You reach a wooden door. In front of you stands a strange man dressed as a medieval crusader.<\/p>",
"title": "<p>The <span class=\"mention-component mention\" data-id=\"647349ca-9ebb-4d5f-b81e-500761ec1c5a\" data-label=\"Crusader\" data-type=\"component\">Crusader<\/span><\/p>"
}
}
}Multi-language JSON
The exported JSON file is of the multi-language JSON format when both of the following are true:
- The workspace has Localization features.
- All languages is chosen during JSON export.
ℹ️ Selecting All languages during export will produce a multi-language JSON file, even if the project has no more than one language.
In the multi-language JSON, a contents object is included, nesting the contents of all translatable items in all languages. Specifically:
- Element title and element content data are nested in the
contentsobject, at the following paths:/contents/{itemId}/title/{languageIsoCode}/text/contents/{itemId}/content/{languageIsoCode}/text
- Label content data are nested in the
contentsobject at/contents/{itemId}/label/{languageIsoCode}/text - Component name data are nested in the
contentsobject at/contents/{itemId}/name/{languageIsoCode}/text elements,connections, andcomponentsobjects nest the relevant{itemId}and not the content itself.
JSON structure reference
This section explains how each major part and its properties are organized within the JSON file.
All JSON extracts used from here on are of the multi-language format.
✅ You can import the Arcweave JSON into a Pro or Team workspace.
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 extract of JSON example
{
"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 extract of JSON example
"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 contentxandy: The board coordinates of the note (present only when Include coordinates is selected during export)widthandheight: The dimensions of the note (present only when Include coordinates is selected during export)autoHeight: Boolean indicating whether the note automatically adjusts its height to the size of its content (present only when Include coordinates is selected during export)
Click to expand extract of JSON example
"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 elementxandy: The board coordinates of the element (present only when Include coordinates is selected during export)widthandheight: The dimensions of the element (present only when Include coordinates is selected during export)autoHeight: Boolean indicating whether the element automatically adjusts its height to the size of its content (present only when Include coordinates is selected during export)
⚠️ The properties
x,y,width,height, andautoHeightare included in the JSON only if Include coordinates is selected during JSON export.
Regarding element title and element content data, they are stored in the following ways:
- In single-language JSON files, they are nested in the
elementsobject. - In multi-language JSON files, they are nested in the
contentsobject, under the element's ID.
Click to expand extract of multi-language JSON example
"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 toxandy: The board coordinates of the jumper (present only when Include coordinates is selected during export)
Click to expand extract of JSON example
"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")
Regarding label content data, they are stored in the following way:
- In single-language JSON files, they are nested in the
connectionsobject. - In multi-language JSON files, they are nested in the
contentsobject, under the connection's ID.
Click to expand extract of multi-language JSON example
"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
xandy: The board coordinates of the branch (present only when Include coordinates is selected during export)
Click to expand extract of JSON example
"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 extract of JSON example
"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 single-language JSON format does not include the
contentsobject. See Two JSON formats above, for the distinction between single-language and multi-language JSON.
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 extract of JSON example
"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 and component folders 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 (applies to component folders only)assets: Object containing asset referencesattributes: Array of custom attribute IDs
Regarding component name data, they are stored in the following way:
- In single-language JSON files, they are nested in the
componentsobject. - In multi-language JSON files, they are nested in the
contentsobject, under the component's ID.
Click to expand extract of JSON example
"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 extract of JSON example
"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 and asset folders 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 (applies to asset folders only)
Click to expand extract of JSON example
"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 extract of JSON example
"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 extract of JSON example
"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"
}
}